科技部老师工资计算规则.md 9.56 KB

科技部老师工资计算规则

📋 目录


💰 计算规则

1. 底薪规则(分三档)

底薪根据项目数总业绩两个条件同时满足来确定档位:

档位 项目数要求 总业绩要求 底薪金额
第一档 ≥ 80个 ≥ 40,000元 2,500元
第二档 ≥ 95个 ≥ 80,000元 3,000元
第三档 ≥ 110个 ≥ 100,000元 3,500元
最低档 不满足第一档条件 - 2,500元(默认第一档)

计算逻辑

  • 从高到低判断,同时满足项目数和总业绩两个条件才能获得对应档位底薪
  • 如果都不满足,默认使用第一档(2,500元)

2. 业绩提成规则

业绩提成基于总业绩计算,采用分段累进方式:

总业绩范围 提成比例
0% (无提成)
10,000元 - 70,000元 2%
70,000元 - 150,000元 2.5%
> 150,000元 3%

计算说明

  • 提成金额 = 总业绩 × 对应提成比例
  • 采用分段计算,不同区间按不同比例计算

3. 消耗提成规则

消耗提成基于消耗业绩计算,包含扣除机制:

消耗业绩范围 提成规则
扣除300元(负提成)
80,000元 - 100,000元 0.5% 提成
100,000元 - 200,000元 0.5% 提成
> 200,000元 1% 提成

重要说明

  • 当消耗业绩 直接扣除300元工资
  • 消耗提成金额可能为负数(扣除情况)

📊 数据来源

总业绩(TotalPerformance)

定义:开单业绩 + 消耗业绩 + 退卡业绩

数据来源表及字段

业绩类型 数据表 字段 说明
开单业绩 lq_kd_kjbsyj kjblsyj 科技部老师开单业绩
消耗业绩 lq_xh_kjbsyj kjblsyj 科技部老师消耗业绩
退卡业绩 lq_hytk_kjbsyj kjblsyj 科技部老师退卡业绩

计算方式

总业绩 = SUM(开单业绩) + SUM(消耗业绩) + SUM(退卡业绩)

过滤条件

  • 所有表记录必须满足:F_IsEffective = 1(有效记录)
  • 按统计月份(YYYYMM格式)过滤时间范围
  • 按科技老师ID(kjblszhkjbls)关联

消耗(ConsumeAchievement)

定义:科技部老师在耗卡记录中的业绩总和

数据来源

  • 表名lq_xh_kjbsyj(耗卡科技部老师业绩表)
  • 字段kjblsyj(科技部老师业绩)
  • 关联表lq_xh_hyhk(耗卡主表,用于时间过滤)

计算方式

消耗 = SUM(lq_xh_kjbsyj.kjblsyj)
WHERE lq_xh_kjbsyj.F_IsEffective = 1
  AND lq_xh_hyhk.F_IsEffective = 1
  AND DATE_FORMAT(lq_xh_hyhk.hksj, '%Y%m') = @统计月份
  AND lq_xh_kjbsyj.kjblszh = @科技老师账号

对应实体字段

  • LqTechTeacherSalaryStatisticsEntity.F_ConsumeAchievement

项目数(ProjectCount)

定义:科技部老师在耗卡记录中的项目次数总和

数据来源

  • 表名lq_xh_kjbsyj(耗卡科技部老师业绩表)
  • 字段F_hdpxNumber(耗卡品项次数)
  • 关联表lq_xh_hyhk(耗卡主表,用于时间过滤)

计算方式

项目数 = SUM(lq_xh_kjbsyj.F_hdpxNumber)
WHERE lq_xh_kjbsyj.F_IsEffective = 1
  AND lq_xh_hyhk.F_IsEffective = 1
  AND DATE_FORMAT(lq_xh_hyhk.hksj, '%Y%m') = @统计月份
  AND lq_xh_kjbsyj.kjblszh = @科技老师账号

对应实体字段

  • LqTechTeacherSalaryStatisticsEntity.F_ProjectCount

⚠️ 特殊规则

离职员工规则

适用条件

  • 员工状态:BASE_USER.F_IsOnJob = 0(离职)

计算规则

  • 如果离职员工当月总业绩 > 30,000元
    • 提成:总业绩 × 2%
    • 无底薪:不计算底薪
    • 无奖励:不计算任何奖励
    • 无消耗提成:不计算消耗提成
  • 如果离职员工当月总业绩 ≤ 30,000元:
    • 无任何工资

记录标识

  • LqTechTeacherSalaryStatisticsEntity.F_IsTerminated 字段中记录:
    • 0 = 在职
    • 1 = 离职

重要说明

  • 离职员工规则优先级最高,一旦判定为离职且业绩>3万,只按2%提成计算,其他规则不适用

🔄 计算流程

步骤1:识别科技部老师

  • BASE_USER 表中筛选:Gw == "科技老师"DeleteMark == nullEnabledMark == 1

步骤2:判断是否离职

  • 检查 BASE_USER.F_IsOnJob
    • F_IsOnJob == 0 → 离职员工
    • F_IsOnJob == 1 → 在职员工

步骤3:数据汇总(在职员工)

  • 查询开单业绩:从 lq_kd_kjbsyj 表汇总 kjblsyj
  • 查询消耗业绩:从 lq_xh_kjbsyj 表汇总 kjblsyj
  • 查询退卡业绩:从 lq_hytk_kjbsyj 表汇总 kjblsyj
  • 查询项目数:从 lq_xh_kjbsyj 表汇总 F_hdpxNumber
  • 计算总业绩:开单业绩 + 消耗业绩 + 退卡业绩

步骤4:工资计算(在职员工)

4.1 计算底薪

  • 根据项目数和总业绩,从高到低判断档位:
    • 同时满足第三档条件 → 底薪 3,500元
    • 同时满足第二档条件 → 底薪 3,000元
    • 同时满足第一档条件 → 底薪 2,500元
    • 都不满足 → 默认第一档 2,500元

4.2 计算业绩提成

  • 根据总业绩范围确定提成比例:
    • 10,000-70,000元 → 2%
    • 70,000-150,000元 → 2.5%
    • > 150,000元 → 3%
  • 业绩提成金额 = 总业绩 × 提成比例

4.3 计算消耗提成

  • 根据消耗业绩范围确定提成规则:
    • 80,000-100,000元 → 0.5%
    • 100,000-200,000元 → 0.5%
    • > 200,000元 → 1%
  • 消耗提成金额 = 消耗业绩 × 提成比例(或直接扣除300元)

步骤5:工资计算(离职员工)

  • 如果总业绩 > 30,000元:
    • 底薪 = 0
    • 业绩提成 = 总业绩 × 2%
    • 消耗提成 = 0
    • 奖励 = 0
  • 如果总业绩 ≤ 30,000元:
    • 所有工资项 = 0

步骤6:保存结果

  • 将计算结果保存到 lq_tech_teacher_salary_statistics
  • 记录 F_IsTerminated 字段标识是否离职

📝 数据表结构

主表:lq_tech_teacher_salary_statistics

关键字段说明

字段名 说明 数据来源
F_StatisticsMonth 统计月份(YYYYMM) 计算参数
F_EmployeeId 员工ID BASE_USER.F_Id
F_EmployeeAccount 员工账号 BASE_USER.F_Account
F_EmployeeName 员工姓名 BASE_USER.F_RealName
F_StoreId 门店ID lq_mdxx.F_Id
F_StoreName 门店名称 lq_mdxx.dm
F_TotalPerformance 总业绩 计算得出
F_ConsumeAchievement 消耗业绩 lq_xh_kjbsyj.kjblsyj
F_ProjectCount 项目数 lq_xh_kjbsyj.F_hdpxNumber
F_BaseSalary 底薪 根据规则计算
F_PerformanceCommissionAmount 业绩提成金额 根据规则计算
F_ConsumeCommissionAmount 消耗提成金额 根据规则计算(可能为负数)
F_IsTerminated 是否离职(0=在职,1=离职) BASE_USER.F_IsOnJob

🔍 查询示例

查询科技部老师消耗数据(参考 LqStatisticsService.GetTechTeacherStatistics

-- 消耗业绩和项目数查询
SELECT 
    kjbsyj.kjblszh as F_UserId,
    kjbsyj.kjblsxm as F_UserName,
    hyhk.md as F_StoreId,
    md.dm as F_StoreName,
    @statisticsMonth as F_StatisticsMonth,
    COALESCE(SUM(kjbsyj.kjblsyj), 0) as F_ConsumePerformance,  -- 消耗业绩
    COALESCE(SUM(kjbsyj.F_hdpxNumber), 0) as F_ConsumeQuantity, -- 项目数
    COALESCE(SUM(kjbsyj.F_LaborCost), 0) as F_ManualFee
FROM lq_xh_kjbsyj kjbsyj
INNER JOIN lq_xh_hyhk hyhk ON kjbsyj.glkdbh = hyhk.F_Id AND hyhk.F_IsEffective = 1
LEFT JOIN lq_mdxx md ON hyhk.md = md.F_Id
WHERE kjbsyj.F_IsEffective = 1
    AND DATE_FORMAT(hyhk.hksj, '%Y%m') = @statisticsMonth
GROUP BY kjbsyj.kjblszh, kjbsyj.kjblsxm, hyhk.md, md.mdbm, md.dm

✅ 验证要点

  1. 数据准确性

    • 确保所有业绩数据来自有效记录(F_IsEffective = 1
    • 确保时间范围正确(按月份YYYYMM格式)
  2. 计算逻辑

    • 底薪档位判断必须同时满足项目数和总业绩两个条件
    • 消耗提成
    • 离职员工规则优先级最高
  3. 数据一致性

    • 总业绩 = 开单业绩 + 消耗业绩 + 退卡业绩
    • 消耗和项目数必须来自同一数据源(lq_xh_kjbsyj

📌 注意事项

  1. 离职员工处理

    • 必须先判断 F_IsOnJob,离职员工走特殊逻辑
    • 离职员工不计算底薪和消耗提成
  2. 消耗提成扣除

    • 消耗 F_ConsumeCommissionAmount 字段值为 -300(负数)
  3. 数据汇总

    • 同一科技部老师可能在不同门店有数据,需要按门店分别计算
    • 或者按科技部老师汇总所有门店数据(根据业务需求)
  4. 月份格式

    • 统计月份统一使用 YYYYMM 格式(如:202501)

🔗 相关文件

  • 实体类LqTechTeacherSalaryStatisticsEntity.cs
  • 薪酬规则文档项目信息-薪酬规则与名词解释.md
  • 参考服务LqSalaryService.cs(健康师工资计算)、LqAssistantSalaryService.cs(店助工资计算)
  • 统计数据服务LqStatisticsService.GetTechTeacherStatistics(科技部老师业绩统计)