4.2 KiB
4.2 KiB
计薪公式手册
所有公式分母 26.08 = 标准月工作日(含周末折算,全年/12)
基本工资
基本工资 = 基本工资标准 × 出勤天数 / 26.08
- 出勤天数 = 实际上班天数 + 年假天数(年假按工作计薪)
- 不包含 不计薪的休息日、调休抵扣后的额外休息
- 案例:胡舒 4 月,标准 8000,出勤 28 → 8000 × 28/26.08 = 8,588.96
加班工资
加班工资 = (加班小时数 / 9) × 基本工资标准 / 26.08
- 9 = 每日工时
- 等价于:「(加班小时/9) 天的日薪」
- 重要规则:备注里写"存"(如
加班3小时存)的不发钱,加班工资 = 0;写"换钱"或无注的正常发 - 案例:李想 4 月,标准 8000,加班 2h → (2/9) × 8000/26.08 = 68.17
KPI 绩效结果
KPI绩效结果 = KPI绩效标准 × KPI倍数
倍数表(从 王瑛胤 月度评估表):
| KPI 总分 | 倍数 |
|---|---|
| ≥ 4.5 | 1.5× |
| ≥ 4.0 | 1.2× |
| ≥ 3.5 | 1.0× |
| ≥ 3.0 | 0.8× |
| < 3.0 | 0.5× |
默认值:未评估时按 1× 全额发(V2 的 KPI得分 列填 1)
管理绩效奖金
管理绩效奖金 = 管理绩效标准 × 管理倍数
- 倍数表同 KPI
- 默认 1×
- 仅管理标准 > 0 的员工有此项
行为规范结果
行为规范绩效结果 = 行为规范绩效(全额发) // 合格
行为规范绩效结果 = 0 或部分 // 未达标
默认按"合格"发全额。
出品提成
出品提成 = 部门业绩 × 角色费率
费率详见 commission_rates.md。仅西湖店部分员工有,滨江店暂无出品提成。
节假日出勤补贴
节假日出勤补贴 = 基本工资标准 / 26.08 × 法定假期天数 × 2
- × 2 因法定节假日须支付 2 倍工资
- 4 月清明 1 天,5 月劳动节 1 天(5.1 当天),10 月国庆 3 天等
- 案例:胡舒 4 月,标准 8000,法假 1 天 → 8000/26.08 × 1 × 2 = 613.50
工资汇总
工资汇总 = 基本工资
+ KPI绩效结果
+ 管理绩效奖金
+ 行为规范绩效结果
+ 加班工资
+ 出品提成
+ 节假日出勤补贴
+ (其他: 串店补贴 / 特别奖金 / 法定假期换薪 等)
剩余应发(=实发,不计公司承担社保)
剩余应发 = 工资汇总 - 职工社保个人承担(公账代扣)
- 仅 4 人在册社保(每月每人扣 ¥523.53):胡舒、王瑛胤、刘润祥、朱秋风
- 其余员工 剩余应发 = 工资汇总
公司承担社保(员工成本,不计入实发)
社保-公司部分的个人承担 = 1222.25 // 每月每人,仅 4 在册者
职工社保个人承担(公账代扣) = 523.53 // 同上
两项合计 = 1745.78
节假日补贴(法定假期双倍)
节假日出勤补贴 = 基本工资标准 / 26.08 × 法定假期天数 × 2
- ×2 = 法定节假日双倍工资(基础那份已在基本工资里)。
- 5月:法定假期天数=2(五一),全员都给 → 补贴 = 底薪/26.08 × 4。
工资单 HTML 的两条展示规则(slip_template.html 内置)
- 未交社保者:基本工资行下方强调注明 "你的基本工资中已包含公司应承担的社保金额和个人社保金额,总计 ¥1,745.78" (金额=在册者两项加总 1222.25+523.53;按 col39/col40 是否有值自动判断)。
- 出品提成行:仅当该员工实际有提成金额时才显示,否则整行隐藏(不发提成的人不展示这行)。
串店交通补贴 / 特别奖金 / 法定假期换薪
- 串店交通补贴:当员工去另一家店帮忙(备注里"滨江店X天"等)时手动给
- 特别奖金:偶发,手动填
- 法定假期换薪:与节假日出勤补贴重复,目前并入节假日出勤补贴,此列保留为 0
反向校验
写完一行后用 Python 校验:
basic = base * att / 26.08
ot_pay = 0 if banked else (oth / 9) * base / 26.08
kpi_res = kpi_std * kpi_mult
mgmt_res = mgmt_std * mgmt_mult if mgmt_std > 0 else 0
holiday = base / 26.08 * lh_days * 2
total = basic + ot_pay + kpi_res + mgmt_res + conduct_std + commission + holiday
remaining = total - (523.53 if has_insurance else 0)