feat: 在历史记录中添加工资合计字段并优化计算逻辑

- 在变动前后工资字段中添加"工资合计"字段
- 优化晋档和晋级记录的计算逻辑,同时更新五年1级和两年1档年份
- 添加工龄计算功能
This commit is contained in:
Miu Li 2025-06-14 03:43:17 +08:00
parent 2b7d8ebb4e
commit d5ef9972a1

20
main.py
View File

@ -348,8 +348,8 @@ def main():
"身份证号码", "姓名", # 统一填入 "身份证号码", "姓名", # 统一填入
"变动后时间", "变动后职务", "变动原因", "晋升备注", # 直接填入 "变动后时间", "变动后职务", "变动原因", "晋升备注", # 直接填入
"工龄", "五年1级年份", "两年1档年份", # 简单计算更新 "工龄", "五年1级年份", "两年1档年份", # 简单计算更新
"变动后级别档次", "变动后职务工资", "变动后级别工资", "变动后津贴工资", # 复杂计算更新 "变动后级别档次", "变动后职务工资", "变动后级别工资", "变动后津贴工资", "变动后工资合计", # 复杂计算更新
"变动前时间", "变动前职务", "变动前级别档次", "变动前职务工资", "变动前级别工资", "变动前津贴工资"]) # 排序后(最后)更新 "变动前时间", "变动前职务", "变动前级别档次", "变动前职务工资", "变动前级别工资", "变动前津贴工资", "变动前工资合计",]) # 排序后(最后)更新
# 添加入职记录 # 添加入职记录
History_pd.loc[len(History_pd), ["变动后时间","变动后职务","变动原因","变动后级别档次"]] = [ History_pd.loc[len(History_pd), ["变动后时间","变动后职务","变动原因","变动后级别档次"]] = [
row["入职时间"],row["初始职务"],"套改/定级",row["入职时的初始级别"]] row["入职时间"],row["初始职务"],"套改/定级",row["入职时的初始级别"]]
@ -358,23 +358,29 @@ def main():
prow["工资执行时间"]+relativedelta(hours=prow["任职时间"].month,minutes=prow["任职时间"].day), prow["工资执行时间"]+relativedelta(hours=prow["任职时间"].month,minutes=prow["任职时间"].day),
prow["新职务"],"晋升",f"{prow['新职务']} {prow['变动批注'] if pd.notna(prow['变动批注']) else ''}"] prow["新职务"],"晋升",f"{prow['新职务']} {prow['变动批注'] if pd.notna(prow['变动批注']) else ''}"]
try: try:
# 添加晋档记录
calctime=row["晋档起始"] + relativedelta(minute=1) calctime=row["晋档起始"] + relativedelta(minute=1)
while True: # 添加晋档记录 while True:
calctime += relativedelta(years=row["晋档间隔"]) calctime += relativedelta(years=row["晋档间隔"])
if calctime > NOWTIME: if calctime > NOWTIME:
break break
History_pd.loc[len(History_pd),["变动后时间","变动原因"]] = [calctime,"两年晋档"] History_pd.loc[len(History_pd),["变动后时间","变动原因","五年1级年份","两年1档年份"]] = [
calctime,"两年晋档",calctime.year-row["晋级起始"].year,calctime.year-row["晋档起始"].year]
calctime=row["晋级起始"] calctime=row["晋级起始"]
while True: # 添加晋级记录 # 添加晋级记录
while True:
calctime += relativedelta(years=row["晋级间隔"]) calctime += relativedelta(years=row["晋级间隔"])
if calctime > NOWTIME: if calctime > NOWTIME:
break break
History_pd.loc[len(History_pd),["变动后时间","变动原因"]] = [calctime,"五年晋级"] History_pd.loc[len(History_pd),["变动后时间","变动原因","五年1级年份","两年1档年份"]] = [
calctime,"五年晋级",calctime.year-row["晋级起始"].year,calctime.year-row["晋档起始"].year]
except: except:
raise Exception(f"晋级、档起始或间隔时间格式错误:{row['晋级起始']}-{row['晋档起始']}-{row['晋级间隔']}-{row['晋档间隔']}") raise Exception(f"晋级、档起始或间隔时间格式错误:{row['晋级起始']}-{row['晋档起始']}-{row['晋级间隔']}-{row['晋档间隔']}")
for rule in Rule_Level: # 工资调标 # 工资调标
for rule in Rule_Level:
if row["入职时间"] < rule["start"]: if row["入职时间"] < rule["start"]:
History_pd.loc[len(History_pd),["变动后时间","变动原因"]] = [rule["start"], "工资调标"] History_pd.loc[len(History_pd),["变动后时间","变动原因"]] = [rule["start"], "工资调标"]
History_pd["工龄"] = History_pd.apply(lambda x: calculate_seniority(row, x["变动后时间"]), axis=1)
History_pd = History_pd.sort_values(by="时间").reset_index(drop=True) History_pd = History_pd.sort_values(by="时间").reset_index(drop=True)
if History_pd.at[0,"时间"] != row["入职时间"]: if History_pd.at[0,"时间"] != row["入职时间"]: