科技部老师工资计算规则.md
10.8 KB
科技部老师工资计算规则
📋 目录
💰 计算规则
1. 底薪规则(分三档)
底薪根据项目数和总业绩两个条件同时满足来确定档位:
| 档位 | 项目数要求 | 总业绩要求 | 底薪金额 |
|---|---|---|---|
| 第一档 | ≥ 80个 | ≥ 40,000元 | 2,500元 |
| 第二档 | ≥ 95个 | ≥ 80,000元 | 3,000元 |
| 第三档 | ≥ 110个 | ≥ 100,000元 | 3,500元 |
| 最低档 | 不满足第一档条件 | - | 2,500元(默认第一档) |
计算逻辑:
- 从高到低判断,同时满足项目数和总业绩两个条件才能获得对应档位底薪
- 如果都不满足,默认使用第一档(2,500元)
2. 业绩提成规则
业绩提成基于总业绩计算,采用分段累进式方式:
提成前提:业绩必须大于1万才能进行提成
| 业绩区间 | 提成比例 | 说明 |
|---|---|---|
| ≤ 10,000元 | 0% | 无提成资格 |
| > 10,000元 | 分段计算 | 有提成资格后,0-7万部分按2%,7万-15万部分按2.5%,15万以上部分按3% |
计算说明:
- 采用分段累进式计算,不同区间按不同比例分别计算后累加
- 必须大于1万才有提成资格
- 如果有提成资格后:
- 0-7万部分:2%(整个0-7万部分都按2%计算)
- 7万-15万部分:2.5%
- 15万以上部分:3%
计算公式(分段累进):
如果 业绩 ≤ 1万:提成 = 0(无提成资格)
如果 1万 < 业绩 ≤ 7万:提成 = 业绩 × 2%
如果 7万 < 业绩 ≤ 15万:提成 = 7万 × 2% + (业绩 - 7万) × 2.5%
如果 业绩 > 15万:提成 = 7万 × 2% + (15万 - 7万) × 2.5% + (业绩 - 15万) × 3%
示例:
- 总业绩 = 5,000元 → 提成 = 0(无提成资格,未达到1万门槛)
- 总业绩 = 50,000元 → 提成 = 50,000 × 2% = 1,000元
- 总业绩 = 100,000元 → 提成 = 70,000 × 2% + (100,000 - 70,000) × 2.5% = 1,400 + 750 = 2,150元
- 总业绩 = 200,000元 → 提成 = 70,000 × 2% + (150,000 - 70,000) × 2.5% + (200,000 - 150,000) × 3% = 1,400 + 2,000 + 1,500 = 4,900元
3. 消耗提成规则
消耗提成基于消耗业绩计算,包含扣除机制:
| 消耗业绩范围 | 提成规则 |
|---|---|
| 扣除300元(负提成) | |
| 80,000元 - 100,000元 | 0.5% 提成 |
| 100,000元 - 200,000元 | 0.5% 提成 |
| > 200,000元 | 1% 提成 |
重要说明:
- 当消耗业绩 直接扣除300元工资
- 消耗提成金额可能为负数(扣除情况)
📊 数据来源
总业绩(TotalPerformance)
定义:开单业绩 - 退卡业绩(退卡是扣除)
数据来源表及字段:
| 业绩类型 | 数据表 | 字段 | 说明 |
|---|---|---|---|
| 开单业绩 | lq_kd_kjbsyj |
kjblsyj |
科技部老师开单业绩 |
| 退卡业绩 | lq_hytk_kjbsyj |
kjblsyj |
科技部老师退卡业绩(扣除项) |
计算方式:
总业绩 = SUM(开单业绩) - SUM(退卡业绩)
注意:
- 消耗业绩不包含在总业绩中
- 退卡业绩是扣除项,所以用减法
过滤条件:
- 所有表记录必须满足:
F_IsEffective = 1(有效记录) - 按统计月份(YYYYMM格式)过滤时间范围
- 按科技老师ID(
kjblszh或kjbls)关联
消耗(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 == null且EnabledMark == 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 计算业绩提成
- 前提条件:业绩必须大于1万才有提成资格
- 如果有提成资格后,分段计算:
- 0-7万部分:2%(整个0-7万部分都按2%计算)
- 7万-15万部分:2.5%
- 15万以上部分: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
✅ 验证要点
数据准确性:
- 确保所有业绩数据来自有效记录(
F_IsEffective = 1) - 确保时间范围正确(按月份YYYYMM格式)
- 确保所有业绩数据来自有效记录(
计算逻辑:
- 底薪档位判断必须同时满足项目数和总业绩两个条件
- 消耗提成
- 离职员工规则优先级最高
数据一致性:
- 总业绩 = 开单业绩 - 退卡业绩(退卡是扣除)
- 消耗业绩不包含在总业绩中,仅用于消耗提成计算
- 消耗和项目数必须来自同一数据源(
lq_xh_kjbsyj)
📌 注意事项
离职员工处理:
- 必须先判断
F_IsOnJob,离职员工走特殊逻辑 - 离职员工不计算底薪和消耗提成
- 必须先判断
消耗提成扣除:
- 消耗 F_ConsumeCommissionAmount 字段值为
-300(负数)
- 消耗 F_ConsumeCommissionAmount 字段值为
数据汇总:
- 同一科技部老师可能在不同门店有数据,需要按门店分别计算
- 或者按科技部老师汇总所有门店数据(根据业务需求)
月份格式:
- 统计月份统一使用
YYYYMM格式(如:202501)
- 统计月份统一使用
🔗 相关文件
- 实体类:
LqTechTeacherSalaryStatisticsEntity.cs - 薪酬规则文档:
项目信息-薪酬规则与名词解释.md - 参考服务:
LqSalaryService.cs(健康师工资计算)、LqAssistantSalaryService.cs(店助工资计算) - 统计数据服务:
LqStatisticsService.GetTechTeacherStatistics(科技部老师业绩统计)