主任工资计算逻辑完整梳理.md
11.6 KB
主任工资计算逻辑完整梳理
📋 概述
主任工资由以下几个部分组成:
- 底薪:固定3500元,根据考核指标扣款
- 提成:基于毛利计算,使用阶梯提成模式
重要说明:
- 业绩(StoreTotalPerformance)就是毛利
- 提成计算基于毛利,而不是销售业绩(开单-退卡)
💰 核心计算公式
1. 销售业绩
销售业绩 = 开单业绩 - 退款业绩
2. 毛利(核心指标)
毛利 = 销售业绩 - - 合作项目成本 - 店内支出 - 洗毛巾费用
3. 业绩(用于提成计算)
业绩(StoreTotalPerformance)= 毛利(GrossProfit)
关键点:StoreTotalPerformance 字段存储的是毛利,用于提成计算。
📊 数据来源详解
1. 开单业绩
数据来源:
- 表:
lq_kd_kdjlb(开单记录表) - 字段:
sfyj(实付业绩) - 条件:
F_IsEffective = 1(有效记录)Djmd = @StoreId(门店ID)Kdrq >= @StartDate AND Kdrq <= @EndDate(时间范围)
代码位置:第185-192行
2. 退款业绩
数据来源:
- 表:
lq_hytk_hytk(退卡记录表) - 字段:
F_ActualRefundAmount(实际退款金额,如果没有则使用tkje) - 条件:
F_IsEffective = 1(有效记录)md = @StoreId(门店ID)Tksj >= @StartDate AND Tksj <= @EndDate(时间范围)
代码位置:第194-202行
3. 产品物料
数据来源:
- 表:
lq_inventory_usage(库存使用记录表) - 字段:
F_TotalAmount(合计金额) - 条件:
F_IsEffective = 1(有效记录)F_StoreId = @StoreId(门店ID)- 特殊规则:11月工资算10月数据
- 如果计算月份是11月,则查询10月的数据
- 其他月份正常查询当月数据
代码位置:第252-271行
4. 合作项目成本
数据来源:
- 表:
lq_cooperation_cost(合作成本表) - 字段:
F_TotalAmount(合计金额) - 条件:
F_Year = @Year(年份)F_Month = @MonthStr(月份,YYYYMM格式)F_StoreId = @StoreId(门店ID)F_IsEffective = 1(有效记录)
代码位置:第273-281行
5. 店内支出
数据来源:
- 表:
lq_store_expense(店内支出表) - 字段:
F_Amount(金额) - 条件:
F_IsEffective = 1(有效记录)F_StoreId = @StoreId(门店ID)DATE_FORMAT(F_ExpenseDate, '%Y%m') = @MonthStr(月份,YYYYMM格式)
代码位置:第283-296行
6. 洗毛巾费用
数据来源:
- 表:
lq_laundry_flow(清洗流水表) - 字段:
F_TotalPrice(总费用) - 条件:
F_IsEffective = 1(有效记录)F_FlowType = 0(只统计送出的记录)F_StoreId = @StoreId(门店ID)- 优先使用
F_SendTime,如果为空则使用F_CreateTime DATE_FORMAT(COALESCE(F_SendTime, F_CreateTime), '%Y%m') = @MonthStr(月份,YYYYMM格式)
代码位置:第298-313行
🔄 计算流程
步骤1:计算销售业绩
// 2.4 计算销售业绩(开单业绩-退款业绩)
decimal billing = storeBillingDict.ContainsKey(storeId) ? storeBillingDict[storeId] : 0;
decimal refund = storeRefundDict.ContainsKey(storeId) ? storeRefundDict[storeId] : 0;
salary.StoreBillingPerformance = billing;
salary.StoreRefundPerformance = refund;
salary.SalesPerformance = billing - refund;
代码位置:第402-407行
步骤2:统计各项成本
// 2.5 统计各项成本
salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0;
salary.CooperationCost = cooperationCostDict.ContainsKey(storeId) ? cooperationCostDict[storeId] : 0;
salary.StoreExpense = storeExpenseDict.ContainsKey(storeId) ? storeExpenseDict[storeId] : 0;
salary.LaundryCost = laundryCostDict.ContainsKey(storeId) ? laundryCostDict[storeId] : 0;
代码位置:第409-420行
步骤3:计算毛利
// 2.6 计算毛利
// 毛利 = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
salary.GrossProfit = salary.SalesPerformance - salary.ProductMaterial - salary.CooperationCost - salary.StoreExpense - salary.LaundryCost;
代码位置:第422-424行
步骤4:将毛利赋值给StoreTotalPerformance(用于提成计算)
// 2.7 将毛利赋值给StoreTotalPerformance(用于提成计算)
salary.StoreTotalPerformance = salary.GrossProfit;
代码位置:第426-427行
关键点:StoreTotalPerformance 存储的是毛利,不是销售业绩。
步骤5:计算业绩完成率(基于毛利)
// 2.8 计算业绩完成率(基于毛利与生命线比较)
if (salary.StoreLifeline > 0)
{
salary.PerformanceCompletionRate = salary.GrossProfit / salary.StoreLifeline;
}
代码位置:第429-437行
步骤6:判断业绩是否达标(基于毛利)
// 2.11 计算考核指标(业绩、人头、消耗是否达标)
// 业绩达标判断基于毛利
bool performanceReached = salary.GrossProfit >= salary.StoreLifeline;
代码位置:第445-447行
步骤7:计算提成(基于毛利)
// 2.14 计算阶梯提成(先计算门店总提成,基于毛利)
CalculateCommission(salary, isNewStore);
代码位置:第495-496行
提成计算方法:
// 提成计算基于毛利(StoreTotalPerformance存储的是毛利)
decimal performance = salary.StoreTotalPerformance; // 这里已经是毛利了
decimal lifeline = salary.StoreLifeline;
// 计算阶梯提成
if (performance <= lifeline)
{
// 业绩 ≤ 生命线:只计算≤生命线部分的提成
salary.CommissionAmountBelowLifeline = performance * rateBelowLifeline;
salary.CommissionAmountAboveLifeline = 0;
}
else
{
// 业绩 > 生命线:分别计算≤生命线部分和>生命线部分的提成
salary.CommissionAmountBelowLifeline = lifeline * rateBelowLifeline;
salary.CommissionAmountAboveLifeline = (performance - lifeline) * rateAboveLifeline;
}
代码位置:第567-640行
💰 提成规则详解
提成计算方式
重要说明:
- 提成基数:使用毛利(GrossProfit),不是销售业绩(开单-退卡)
- 分段计算:根据毛利与生命线的比较,分段计算提成
- 阶梯提成模式:根据毛利是否超过生命线,使用不同的提成比例
老店主任提成规则
根据门店分类(A、B、C类)和毛利是否超过生命线,使用不同的阶梯提成比例:
| 门店分类 | 毛利 ≤ 生命线部分 | 毛利 > 生命线部分 |
|---|---|---|
| A类门店 | 2% | 2.5% |
| B类门店 | 2.5% | 3% |
| C类门店 | 3% | 3.5% |
计算公式(基于毛利分段计算):
如果 毛利 ≤ 生命线:
提成 = 毛利 × 对应提成比例(≤生命线部分)
如果 毛利 > 生命线:
提成 = 生命线 × 对应提成比例(≤生命线部分) + (毛利 - 生命线) × 对应提成比例(>生命线部分)
计算示例:
- 假设:门店生命线 = 100,000元,毛利 = 120,000元,门店分类 = B类(2.5% / 3%)
- 计算:
- ≤生命线部分:100,000元 × 2.5% = 2,500元
- >生命线部分:(120,000 - 100,000)元 × 3% = 600元
- 总提成:2,500元 + 600元 = 3,100元
新店主任提成规则
统一标准,不区分门店分类:
| 毛利范围 | 提成比例 |
|---|---|
| 毛利 ≤ 生命线部分 | 2% |
| 毛利 > 生命线部分 | 2.5% |
计算公式(基于毛利分段计算):
如果 毛利 ≤ 生命线:
提成 = 毛利 × 2%
如果 毛利 > 生命线:
提成 = 生命线 × 2% + (毛利 - 生命线) × 2.5%
计算示例:
- 假设:门店生命线 = 100,000元,毛利 = 120,000元(新店)
- 计算:
- ≤生命线部分:100,000元 × 2% = 2,000元
- >生命线部分:(120,000 - 100,000)元 × 2.5% = 500元
- 总提成:2,000元 + 500元 = 2,500元
提成按在店天数比例计算
// 2.15 按在店天数比例计算提成金额
if (daysInMonth > 0 && workingDays > 0)
{
// 提成金额按在店天数比例计算
salary.CommissionAmountBelowLifeline = salary.CommissionAmountBelowLifeline / daysInMonth * workingDays;
salary.CommissionAmountAboveLifeline = salary.CommissionAmountAboveLifeline / daysInMonth * workingDays;
salary.TotalCommissionAmount = salary.CommissionAmountBelowLifeline + salary.CommissionAmountAboveLifeline;
}
代码位置:第498-512行
📝 关键字段说明
StoreTotalPerformance(门店总业绩)
字段含义:毛利
计算公式:
StoreTotalPerformance = GrossProfit = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用
用途:
- 用于提成计算
- 用于业绩完成率计算
- 用于业绩达标判断
重要说明:此字段存储的是毛利,不是销售业绩(开单-退卡)。
GrossProfit(毛利)
字段含义:毛利
计算公式:
GrossProfit = SalesPerformance - ProductMaterial - CooperationCost - StoreExpense - LaundryCost
SalesPerformance(销售业绩)
字段含义:销售业绩(开单-退卡)
计算公式:
SalesPerformance = StoreBillingPerformance - StoreRefundPerformance
✅ 验证要点
1. 业绩就是毛利
- ✅
StoreTotalPerformance = GrossProfit(第427行) - ✅ 提成计算使用
StoreTotalPerformance(第581行) - ✅ 业绩完成率使用
GrossProfit(第432行) - ✅ 业绩达标判断使用
GrossProfit(第447行)
2. 提成计算基于毛利
- ✅
CalculateCommission方法注释明确说明"基于毛利"(第563行) - ✅ 方法内部使用
StoreTotalPerformance(即毛利)进行计算(第581行) - ✅ 所有提成计算都基于
performance(即毛利)
📋 总结
核心结论
业绩(StoreTotalPerformance)就是毛利
StoreTotalPerformance = GrossProfit- 不是销售业绩(开单-退卡)
提成计算基于毛利
- 提成计算使用
StoreTotalPerformance(即毛利) - 不是基于销售业绩
- 提成计算使用
毛利计算公式
毛利 = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用所有业绩相关的判断都基于毛利
- 业绩完成率 = 毛利 / 生命线
- 业绩达标判断 = 毛利 >= 生命线
- 提成计算 = 基于毛利使用阶梯提成
数据流向
开单业绩 - 退款业绩
↓
销售业绩(SalesPerformance)
↓
销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用
↓
毛利(GrossProfit)
↓
StoreTotalPerformance(用于提成计算)
↓
阶梯提成计算
🔍 代码关键位置
| 功能 | 代码位置 | 说明 |
|---|---|---|
| 计算销售业绩 | 第402-407行 | 开单-退卡 |
| 统计各项成本 | 第409-420行 | 产品物料、合作成本、店内支出、洗毛巾 |
| 计算毛利 | 第422-424行 | 销售业绩 - 各项成本 |
| 将毛利赋值给StoreTotalPerformance | 第426-427行 | 关键:业绩就是毛利 |
| 计算业绩完成率 | 第429-437行 | 基于毛利 |
| 判断业绩达标 | 第445-447行 | 基于毛利 |
| 计算提成 | 第495-496行 | 调用CalculateCommission,基于毛利 |
| 提成计算方法 | 第567-640行 | 使用StoreTotalPerformance(即毛利)计算 |
文档版本:2025-01-20 最后更新:确认业绩就是毛利,提成计算基于毛利