Commit 61ae65fcb39e8daedad687ad84dcaf6b34c8455c

Authored by “wangming”
1 parent 166f3801

feat: 增强分润统计功能

- 新增多个消耗业绩字段,包括生美、科美、医美、合作、产品及其他消耗业绩。
- 修改主营收入计算逻辑,改为不扣减退款。
- 更新其他收入和成本计算逻辑,确保准确反映退款差额。
- 优化库存使用申请相关的成本计算,确保数据准确性。
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqShareStatisticsStore/ShareStatisticsStoreOutput.cs
@@ -29,11 +29,41 @@ namespace NCC.Extend.Entitys.Dto.LqShareStatisticsStore @@ -29,11 +29,41 @@ namespace NCC.Extend.Entitys.Dto.LqShareStatisticsStore
29 29
30 // 收入部分 30 // 收入部分
31 /// <summary> 31 /// <summary>
32 - /// 主营收入(消耗业绩-对应退款) 32 + /// 主营收入(消耗总业绩, 不扣减退款)
33 /// </summary> 33 /// </summary>
34 public decimal MainIncome { get; set; } 34 public decimal MainIncome { get; set; }
35 35
36 /// <summary> 36 /// <summary>
  37 + /// 生美消耗业绩
  38 + /// </summary>
  39 + public decimal ConsumeLifeBeauty { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 科美消耗业绩
  43 + /// </summary>
  44 + public decimal ConsumeTechBeauty { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 医美消耗业绩
  48 + /// </summary>
  49 + public decimal ConsumeMedicalBeauty { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 合作消费业绩
  53 + /// </summary>
  54 + public decimal ConsumeCooperation { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 产品消耗业绩
  58 + /// </summary>
  59 + public decimal ConsumeProduct { get; set; }
  60 +
  61 + /// <summary>
  62 + /// 其他消耗业绩
  63 + /// </summary>
  64 + public decimal ConsumeOther { get; set; }
  65 +
  66 + /// <summary>
37 /// 其他收入(退款差额>0) 67 /// 其他收入(退款差额>0)
38 /// </summary> 68 /// </summary>
39 public decimal OtherIncome { get; set; } 69 public decimal OtherIncome { get; set; }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_share_statistics_store/LqShareStatisticsStoreEntity.cs
@@ -37,12 +37,48 @@ namespace NCC.Extend.Entitys.lq_share_statistics_store @@ -37,12 +37,48 @@ namespace NCC.Extend.Entitys.lq_share_statistics_store
37 37
38 // 收入部分 38 // 收入部分
39 /// <summary> 39 /// <summary>
40 - /// 主营收入(消耗业绩-对应退款) 40 + /// 主营收入(消耗总业绩, 不扣减退款)
41 /// </summary> 41 /// </summary>
42 [SugarColumn(ColumnName = "F_MainIncome")] 42 [SugarColumn(ColumnName = "F_MainIncome")]
43 public decimal MainIncome { get; set; } 43 public decimal MainIncome { get; set; }
44 44
45 /// <summary> 45 /// <summary>
  46 + /// 生美消耗业绩
  47 + /// </summary>
  48 + [SugarColumn(ColumnName = "F_ConsumeLifeBeauty")]
  49 + public decimal ConsumeLifeBeauty { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 科美消耗业绩
  53 + /// </summary>
  54 + [SugarColumn(ColumnName = "F_ConsumeTechBeauty")]
  55 + public decimal ConsumeTechBeauty { get; set; }
  56 +
  57 + /// <summary>
  58 + /// 医美消耗业绩
  59 + /// </summary>
  60 + [SugarColumn(ColumnName = "F_ConsumeMedicalBeauty")]
  61 + public decimal ConsumeMedicalBeauty { get; set; }
  62 +
  63 + /// <summary>
  64 + /// 合作消费业绩
  65 + /// </summary>
  66 + [SugarColumn(ColumnName = "F_ConsumeCooperation")]
  67 + public decimal ConsumeCooperation { get; set; }
  68 +
  69 + /// <summary>
  70 + /// 产品消耗业绩
  71 + /// </summary>
  72 + [SugarColumn(ColumnName = "F_ConsumeProduct")]
  73 + public decimal ConsumeProduct { get; set; }
  74 +
  75 + /// <summary>
  76 + /// 其他消耗业绩
  77 + /// </summary>
  78 + [SugarColumn(ColumnName = "F_ConsumeOther")]
  79 + public decimal ConsumeOther { get; set; }
  80 +
  81 + /// <summary>
46 /// 其他收入(退款差额>0) 82 /// 其他收入(退款差额>0)
47 /// </summary> 83 /// </summary>
48 [SugarColumn(ColumnName = "F_OtherIncome")] 84 [SugarColumn(ColumnName = "F_OtherIncome")]
netcore/src/Modularity/Extend/NCC.Extend/LqShareStatisticsStoreService.cs
@@ -18,6 +18,9 @@ using NCC.Extend.Entitys.lq_business_unit_manager_salary_statistics; @@ -18,6 +18,9 @@ using NCC.Extend.Entitys.lq_business_unit_manager_salary_statistics;
18 using NCC.Extend.Entitys.lq_contract_rent_detail; 18 using NCC.Extend.Entitys.lq_contract_rent_detail;
19 using NCC.Extend.Entitys.lq_mdxx; 19 using NCC.Extend.Entitys.lq_mdxx;
20 using NCC.Extend.Entitys.lq_kd_pxmx; 20 using NCC.Extend.Entitys.lq_kd_pxmx;
  21 +using NCC.Extend.Entitys.lq_product;
  22 +using NCC.Extend.Entitys.lq_inventory_usage_application;
  23 +using NCC.Extend.Entitys;
21 using SqlSugar; 24 using SqlSugar;
22 using System; 25 using System;
23 using System.Collections.Generic; 26 using System.Collections.Generic;
@@ -169,6 +172,12 @@ namespace NCC.Extend @@ -169,6 +172,12 @@ namespace NCC.Extend
169 StoreName = x.StoreName, 172 StoreName = x.StoreName,
170 StatisticsMonth = x.StatisticsMonth, 173 StatisticsMonth = x.StatisticsMonth,
171 MainIncome = x.MainIncome, 174 MainIncome = x.MainIncome,
  175 + ConsumeLifeBeauty = x.ConsumeLifeBeauty,
  176 + ConsumeTechBeauty = x.ConsumeTechBeauty,
  177 + ConsumeMedicalBeauty = x.ConsumeMedicalBeauty,
  178 + ConsumeCooperation = x.ConsumeCooperation,
  179 + ConsumeProduct = x.ConsumeProduct,
  180 + ConsumeOther = x.ConsumeOther,
172 OtherIncome = x.OtherIncome, 181 OtherIncome = x.OtherIncome,
173 AdvanceReceipt = x.AdvanceReceipt, 182 AdvanceReceipt = x.AdvanceReceipt,
174 Refund = x.Refund, 183 Refund = x.Refund,
@@ -227,16 +236,50 @@ namespace NCC.Extend @@ -227,16 +236,50 @@ namespace NCC.Extend
227 /// </summary> 236 /// </summary>
228 private async Task CalculateIncome(LqShareStatisticsStoreEntity entity, DateTime startDate, DateTime endDate) 237 private async Task CalculateIncome(LqShareStatisticsStoreEntity entity, DateTime startDate, DateTime endDate)
229 { 238 {
230 - // 1. 主营收入 = 消耗业绩 - 消耗退款 239 + // 1. 主营收入 = 消耗总业绩(不扣减退款),并按分类拆分
231 var consumePerformance = await _db.Queryable<LqXhJksyjEntity>() 240 var consumePerformance = await _db.Queryable<LqXhJksyjEntity>()
232 .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1) 241 .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
233 .SumAsync(x => x.Jksyj); 242 .SumAsync(x => x.Jksyj);
234 243
235 - var consumeRefund = await _db.Queryable<LqHytkJksyjEntity>()  
236 - .Where(x => x.StoreId == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1) 244 + entity.MainIncome = consumePerformance ?? 0;
  245 +
  246 + // 分项消耗业绩
  247 + var consumeLifeBeauty = await _db.Queryable<LqXhJksyjEntity>()
  248 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  249 + .Where(x => x.ItemCategory == "生美")
  250 + .SumAsync(x => x.Jksyj);
  251 +
  252 + var consumeTechBeauty = await _db.Queryable<LqXhJksyjEntity>()
  253 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  254 + .Where(x => x.ItemCategory == "科美")
237 .SumAsync(x => x.Jksyj); 255 .SumAsync(x => x.Jksyj);
238 256
239 - entity.MainIncome = (consumePerformance ?? 0) - (consumeRefund ?? 0); 257 + var consumeMedicalBeauty = await _db.Queryable<LqXhJksyjEntity>()
  258 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  259 + .Where(x => x.ItemCategory == "医美")
  260 + .SumAsync(x => x.Jksyj);
  261 +
  262 + var consumeCooperation = await _db.Queryable<LqXhJksyjEntity>()
  263 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  264 + .Where(x => x.ItemCategory == "合作")
  265 + .SumAsync(x => x.Jksyj);
  266 +
  267 + var consumeProduct = await _db.Queryable<LqXhJksyjEntity>()
  268 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  269 + .Where(x => x.ItemCategory == "产品")
  270 + .SumAsync(x => x.Jksyj);
  271 +
  272 + var consumeOther = await _db.Queryable<LqXhJksyjEntity>()
  273 + .Where(x => x.StoreId == entity.StoreId && x.Yjsj >= startDate && x.Yjsj <= endDate && x.IsEffective == 1)
  274 + .Where(x => x.ItemCategory == "其他" || x.ItemCategory == null || x.ItemCategory == "")
  275 + .SumAsync(x => x.Jksyj);
  276 +
  277 + entity.ConsumeLifeBeauty = consumeLifeBeauty ?? 0;
  278 + entity.ConsumeTechBeauty = consumeTechBeauty ?? 0;
  279 + entity.ConsumeMedicalBeauty = consumeMedicalBeauty ?? 0;
  280 + entity.ConsumeCooperation = consumeCooperation ?? 0;
  281 + entity.ConsumeProduct = consumeProduct ?? 0;
  282 + entity.ConsumeOther = consumeOther ?? 0;
240 283
241 // 2. 预收款 = 开单实付 284 // 2. 预收款 = 开单实付
242 entity.AdvanceReceipt = await _db.Queryable<LqKdKdjlbEntity>() 285 entity.AdvanceReceipt = await _db.Queryable<LqKdKdjlbEntity>()
@@ -246,7 +289,7 @@ namespace NCC.Extend @@ -246,7 +289,7 @@ namespace NCC.Extend
246 // 3. 实际退款 = 退卡实退金额 289 // 3. 实际退款 = 退卡实退金额
247 entity.Refund = await _db.Queryable<LqHytkHytkEntity>() 290 entity.Refund = await _db.Queryable<LqHytkHytkEntity>()
248 .Where(x => x.Md == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1) 291 .Where(x => x.Md == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1)
249 - .SumAsync(x => x.Tkje ?? 0); 292 + .SumAsync(x => x.ActualRefundAmount ?? 0);
250 293
251 // 4. 应收 = 合作医院开单金额 294 // 4. 应收 = 合作医院开单金额
252 entity.Receivables = await _db.Queryable<LqKdKdjlbEntity>() 295 entity.Receivables = await _db.Queryable<LqKdKdjlbEntity>()
@@ -257,9 +300,15 @@ namespace NCC.Extend @@ -257,9 +300,15 @@ namespace NCC.Extend
257 // 5. 银行存款 = 开单实付 - 应收 300 // 5. 银行存款 = 开单实付 - 应收
258 entity.BankDeposit = entity.AdvanceReceipt - entity.Receivables; 301 entity.BankDeposit = entity.AdvanceReceipt - entity.Receivables;
259 302
260 - // 6. 其他收入 = 退款差额 > 0 的部分  
261 - var refundDiff = entity.Refund - (consumeRefund ?? 0);  
262 - entity.OtherIncome = refundDiff > 0 ? refundDiff : 0; 303 + // 6. 其他收入 = 退款差额 > 0 的部分(按照退款单应退金额-实退金额)
  304 + // 退款差额 = tkje - ActualRefundAmount
  305 + var positiveRefundDiff = await _db.Queryable<LqHytkHytkEntity>()
  306 + .Where(x => x.Md == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1)
  307 + .SumAsync(x => SqlFunc.IIF((x.Tkje - (x.ActualRefundAmount ?? 0)) > 0,
  308 + x.Tkje - (x.ActualRefundAmount ?? 0),
  309 + 0));
  310 +
  311 + entity.OtherIncome = positiveRefundDiff ?? 0;
263 } 312 }
264 313
265 /// <summary> 314 /// <summary>
@@ -272,9 +321,23 @@ namespace NCC.Extend @@ -272,9 +321,23 @@ namespace NCC.Extend
272 .Where(x => x.StoreId == entity.StoreId && x.UsageTime >= startDate && x.UsageTime <= endDate && x.IsEffective == 1) 321 .Where(x => x.StoreId == entity.StoreId && x.UsageTime >= startDate && x.UsageTime <= endDate && x.IsEffective == 1)
273 .SumAsync(x => x.TotalAmount); 322 .SumAsync(x => x.TotalAmount);
274 323
275 - // 2. 福田成本 = 福田仓库领用 (需要确认福田仓库ID)  
276 - // TODO: 需要确认福田仓库的识别方式  
277 - entity.CostFutian = 0; 324 + // 2. 福田成本 = 福田仓库领用(上一个月的成本)
  325 + // 读取产品归属仓库为“福田仓库”的库存领用记录,
  326 + // 并且仅统计已审批通过且已领取的使用申请(领用完成后才纳入统计)
  327 + var prevMonthStart = startDate.AddMonths(-1);
  328 + var prevMonthEnd = startDate.AddDays(-1);
  329 +
  330 + entity.CostFutian = await _db.Queryable<LqInventoryUsageEntity, LqProductEntity, LqInventoryUsageApplicationEntity>((u, p, a) => new JoinQueryInfos(
  331 + JoinType.Inner, u.ProductId == p.Id,
  332 + JoinType.Inner, u.UsageBatchId == a.UsageBatchId))
  333 + .Where((u, p, a) => p.Warehouse == "福田仓库"
  334 + && u.StoreId == entity.StoreId
  335 + && u.UsageTime >= prevMonthStart && u.UsageTime <= prevMonthEnd
  336 + && u.IsEffective == 1
  337 + && a.IsEffective == 1
  338 + && a.ApprovalStatus == "已通过"
  339 + && a.IsReceived == 1)
  340 + .SumAsync((u, p, a) => u.TotalAmount);
278 341
279 // 3. 毛巾成本 = 洗毛巾费用 342 // 3. 毛巾成本 = 洗毛巾费用
280 entity.CostTowel = await _db.Queryable<LqLaundryFlowEntity>() 343 entity.CostTowel = await _db.Queryable<LqLaundryFlowEntity>()
@@ -298,13 +361,14 @@ namespace NCC.Extend @@ -298,13 +361,14 @@ namespace NCC.Extend
298 361
299 entity.CostManagementFee = totalPerformance * 0.09m; 362 entity.CostManagementFee = totalPerformance * 0.09m;
300 363
301 - // 6. 其他成本 = 退款差额 < 0 的部分  
302 - var consumeRefund = await _db.Queryable<LqHytkJksyjEntity>()  
303 - .Where(x => x.StoreId == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1)  
304 - .SumAsync(x => x.Jksyj ?? 0); 364 + // 6. 其他成本 = 退款差额 < 0 的部分(按照退款单应退金额-实退金额)
  365 + var negativeRefundDiffAbs = await _db.Queryable<LqHytkHytkEntity>()
  366 + .Where(x => x.Md == entity.StoreId && x.Tksj >= startDate && x.Tksj <= endDate && x.IsEffective == 1)
  367 + .SumAsync(x => SqlFunc.IIF((x.Tkje - (x.ActualRefundAmount ?? 0)) < 0,
  368 + (x.ActualRefundAmount ?? 0) - x.Tkje,
  369 + 0));
305 370
306 - var refundDiff = entity.Refund - consumeRefund;  
307 - entity.CostOther = refundDiff < 0 ? Math.Abs(refundDiff) : 0; 371 + entity.CostOther = negativeRefundDiffAbs ?? 0;
308 372
309 // 保留字段暂时为0 373 // 保留字段暂时为0
310 entity.CostCooperation = 0; 374 entity.CostCooperation = 0;
@@ -442,9 +506,18 @@ namespace NCC.Extend @@ -442,9 +506,18 @@ namespace NCC.Extend
442 506
443 entity.StoreRent = rentDetail.Sum(); 507 entity.StoreRent = rentDetail.Sum();
444 508
445 - // 2. 当期费用 = 报销  
446 - // TODO: 需要根据报销分类来筛选门店相关费用  
447 - entity.CurrentPeriodExpense = 0; 509 + // 2. 当期费用 = 报销费用中一级分类为“当期费用”的已审核通过记录
  510 + // 只统计:报销申请审批通过 + 申请门店=当前门店 + 申请时间在当月
  511 + var currentPeriodExpense = await _db.Queryable<LqReimbursementApplicationEntity, LqPurchaseRecordsEntity, LqReimbursementCategoryEntity>((app, pr, cat) => new JoinQueryInfos(
  512 + JoinType.Inner, pr.ApplicationId == app.Id,
  513 + JoinType.Inner, pr.ReimbursementCategoryId == cat.Id))
  514 + .Where((app, pr, cat) => app.ApplicationStoreId == entity.StoreId
  515 + && app.ApplicationTime >= startDate && app.ApplicationTime <= endDate
  516 + && (app.ApprovalStatus ?? app.ApproveStatus) == "已通过"
  517 + && cat.Level1Name == "当期费用")
  518 + .SumAsync((app, pr, cat) => pr.Amount);
  519 +
  520 + entity.CurrentPeriodExpense = currentPeriodExpense;
448 521
449 // 保留字段 522 // 保留字段
450 entity.SocialSecurity = 0; 523 entity.SocialSecurity = 0;
总部股份统计说明.md 0 → 100644
  1 +# 总部股份统计说明 (Headquarters Share Statistics)
  2 +
  3 +## 1. 概述
  4 +本以文档详细说明总部股份统计的逻辑。
  5 +
  6 +---
  7 +
  8 +## 2. 收入 (Income)
  9 +
  10 +### 2.1 收入 (General Income)
  11 +* **说明**: 全部开单业绩的 9%(需减去退款)。
  12 +* **计算逻辑**: (所有门店的总开单实付业绩 - 所有门店的总实退金额) * 9%。
  13 +* **数据来源**: `lq_kd_kdjlb`, `lq_hytk_hytk`。
  14 +
  15 +### 2.2 收入-科技部 (Tech Dept Income)
  16 +* **说明**: 科美开单的 30% 里面的 9%。
  17 +* **计算逻辑**: (所有门店的科美开单业绩 * 30%) * 9%。
  18 + * 即: `(总科美业绩 - 总科美退款) * 0.3 * 0.09`。
  19 +* **数据来源**: `lq_kd_pxmx` (筛选科美) 关联开单和退款。
  20 +
  21 +---
  22 +
  23 +## 3. 成本 (Cost)
  24 +
  25 +### 3.1 成本-报销 (Headquarters Expenses)
  26 +* **说明**: 报销里面的总部的费用。
  27 +* **计算逻辑**: 筛选报销申请中,归属于“总部”的报销。
  28 +* **数据来源**:
  29 + * 表: `lq_reimbursement_application`。
  30 + * **判定方式**: 根据 `F_ApplicationStoreId` 是否为总部机构,或 报销分类是否标记为总部费用。
  31 +
  32 +### 3.2 成本-人工 (Labor)
  33 +* **说明**: 不处理(保留字段)。
  34 +
  35 +### 3.3 成本-教育部房租 (Education Dept Rent)
  36 +* **说明**: 合同里面获取。
  37 +* **数据来源**:
  38 + * 表: `lq_contract_rent_detail`。
  39 + * **判定**: 关联 `lq_contract`,筛选 合同类型/归属 为“教育部” 的合同。
  40 +
  41 +### 3.4 成本-仓库房租 (Warehouse Rent)
  42 +* **说明**: 合同里面获取。
  43 +* **数据来源**:
  44 + * 表: `lq_contract_rent_detail`。
  45 + * **判定**: 关联 `lq_contract`,筛选 合同类型/归属 为“仓库” 的合同。
  46 +
  47 +### 3.5 成本-总部房租 (HQ Rent)
  48 +* **说明**: 合同里面获取。
  49 +* **数据来源**:
  50 + * 表: `lq_contract_rent_detail`。
  51 + * **判定**: 关联 `lq_contract`,筛选 合同类型/归属 为“总部” 的合同。
  52 +
  53 +---
  54 +
  55 +## 4. 利润计算 (Profit Calculation)
  56 +
  57 +### 4.1 总部运营利润
  58 +```
  59 +总部运营利润 = 收入(门店9%)
  60 + + 收入(科技部9%)
  61 + - 成本(报销)
  62 + - 成本(人工)
  63 + - 成本(总部房租 + 教育部房租 + 仓库房租)
  64 +```
科技部股份统计说明.md 0 → 100644
  1 +# 科技部股份统计说明 (Tech Department Share Statistics)
  2 +
  3 +## 1. 概述
  4 +本以文档详细说明科技部股份统计的逻辑。科技部需区分 **科技一部** 和 **科技二部**,根据管理的门店归属进行区分。
  5 +
  6 +---
  7 +
  8 +## 2. 收入 (Income)
  9 +
  10 +### 2.1 收入
  11 +* **说明**: 各个门店科美开单的 30%(需减去退款)。
  12 +* **计算逻辑**:
  13 + 1. 找到该科技部(一部或二部)管辖的所有门店。
  14 + 2. 统计这些门店的 **科美项目** 开单实付业绩。
  15 + 3. 减去 对应的科美项目实退金额。
  16 + 4. 结果 * 30%。
  17 +* **数据来源**:
  18 + * 门店归属: `lq_mdxx` (门店信息表) 中的 `kjb` (科技部) 字段或其他归属字段。
  19 + * 开单: `lq_kd_pxmx` (`F_BeautyType` = 科美) 关联 `lq_kd_kdjlb`.
  20 + * 退款: `lq_hytk_jksyj` (包含退款品项信息) 或 `lq_hytk_hytk`。
  21 +
  22 +---
  23 +
  24 +## 3. 成本 (Cost)
  25 +
  26 +### 3.1 成本-报销 (Reimbursement)
  27 +* **说明**: 报销费用里面的“科技部报销”。
  28 +* **计算逻辑**:
  29 + * 筛选一级分类为“科技部报销”的申请。
  30 + * 区分一部/二部:根据报销单的 `F_ApplicationStoreId` (申请门店) 的归属。
  31 +* **数据来源**:
  32 + * 表: `lq_reimbursement_application`, `lq_reimbursement_category`。
  33 +
  34 +### 3.2 成本-人工-科技部老师 (Teacher Base Salary)
  35 +* **说明**: 科技部老师底薪。
  36 +* **数据来源**:
  37 + * 表: `lq_tech_teacher_salary_statistics` (科技部老师工资统计表 - 需确认表名)。
  38 + * 字段: `F_ActualBaseSalary`。
  39 +
  40 +### 3.3 成本-人工-科技部手工费 (Teacher Manual Fee)
  41 +* **说明**: 来源于消耗里面科技部老师业绩的手工费。
  42 +* **数据来源**:
  43 + * 表: `lq_xh_jksyj` (消耗表)。
  44 + * 条件: `Jks` (健康师) 为科技部老师 且 `F_BeautyType` = 科美。
  45 + * 字段: `F_LaborCost`。
  46 +
  47 +### 3.4 成本-人工-科技部开单提成 (Teacher Billing Commission)
  48 +* **说明**: 科技部老师的卡单提成。
  49 +* **数据来源**:
  50 + * 表: `lq_tech_teacher_salary_statistics`。
  51 + * 字段: `F_BillingCommission` (开单提成 - 需确认具体字段名)。
  52 +
  53 +### 3.5 成本-人工-科技部消耗提成 (Teacher Consumption Commission)
  54 +* **说明**: 科技部老师的消耗提成。
  55 +* **数据来源**:
  56 + * 表: `lq_tech_teacher_salary_statistics`。
  57 + * 字段: `F_ConsumptionCommission` (消耗提成 - 需确认具体字段名)。
  58 +
  59 +### 3.6 成本-人工-科技部总经理 (General Manager Base Salary)
  60 +* **说明**: 科技部总经理底薪。
  61 +* **数据来源**:
  62 + * 表: `lq_tech_general_manager_salary_statistics` (科技部总经理工资表)。
  63 + * 字段: `F_ActualBaseSalary`。
  64 +
  65 +### 3.7 成本-人工-科技部提成 (General Manager Commission)
  66 +* **说明**: 科技部总经理提成。
  67 +* **数据来源**:
  68 + * 表: `lq_tech_general_manager_salary_statistics`。
  69 + * 字段: `F_TotalCommissionAmount`。
  70 +
  71 +### 3.8 保留/不处理字段
  72 +* 成本-人工-科技部专家提成
  73 +* 成本-人工-科技部加班
  74 +* 奖励-科技部
  75 +* 成本-其他1, 其他2
  76 +
  77 +---
  78 +
  79 +## 4. 利润计算 (Profit Calculation)
  80 +
  81 +### 4.1 科技部利润
  82 +```
  83 +科技部利润 = 收入
  84 + - 成本报销
  85 + - 成本人工(底薪 + 手工 + 开单提成 + 消耗提成 + 专家提成 + 加班 + 总经理底薪 + 总经理提成)
  86 + - 其他
  87 +```
股份统计表结构.sql 0 → 100644
  1 +/*
  2 + 股份统计相关表结构设计
  3 + Created Date: 2025-12-16
  4 + Description: 用于存储门店、科技部、总部的股份统计数据
  5 +*/
  6 +
  7 +-- ----------------------------
  8 +-- 1. 门店股份统计表 (lq_share_statistics_store)
  9 +-- ----------------------------
  10 +DROP TABLE IF EXISTS `lq_share_statistics_store`;
  11 +CREATE TABLE `lq_share_statistics_store` (
  12 + `F_Id` varchar(50) NOT NULL COMMENT '主键ID',
  13 + `F_StoreId` varchar(50) NOT NULL COMMENT '门店ID',
  14 + `F_StoreName` varchar(100) DEFAULT NULL COMMENT '门店名称',
  15 + `F_StatisticsMonth` varchar(50) NOT NULL COMMENT '统计月份(YYYYMM)',
  16 +
  17 + -- 收入部分
  18 + `F_MainIncome` decimal(18,2) DEFAULT '0.00' COMMENT '主营收入(消耗总业绩, 不扣减退款)',
  19 + `F_ConsumeLifeBeauty` decimal(18,2) DEFAULT '0.00' COMMENT '生美消耗业绩',
  20 + `F_ConsumeTechBeauty` decimal(18,2) DEFAULT '0.00' COMMENT '科美消耗业绩',
  21 + `F_ConsumeMedicalBeauty` decimal(18,2) DEFAULT '0.00' COMMENT '医美消耗业绩',
  22 + `F_ConsumeCooperation` decimal(18,2) DEFAULT '0.00' COMMENT '合作消费业绩',
  23 + `F_ConsumeProduct` decimal(18,2) DEFAULT '0.00' COMMENT '产品消耗业绩',
  24 + `F_ConsumeOther` decimal(18,2) DEFAULT '0.00' COMMENT '其他消耗业绩',
  25 + `F_OtherIncome` decimal(18,2) DEFAULT '0.00' COMMENT '其他收入(退款差额>0)',
  26 + `F_AdvanceReceipt` decimal(18,2) DEFAULT '0.00' COMMENT '预收款(开单实付)',
  27 + `F_Refund` decimal(18,2) DEFAULT '0.00' COMMENT '实际退款(实退业绩)',
  28 + `F_Receivables` decimal(18,2) DEFAULT '0.00' COMMENT '应收(合作医院)',
  29 + `F_BankDeposit` decimal(18,2) DEFAULT '0.00' COMMENT '银行存款(开单实付-应收)',
  30 +
  31 + -- 成本部分
  32 + `F_CostProduct` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-产品(仓库领取)',
  33 + `F_CostFutian` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-福田(福田仓库领取)',
  34 + `F_CostTowel` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-毛巾(清洗送出)',
  35 + `F_CostTechDept` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-科技部(科美业绩30%)',
  36 + `F_CostManagementFee` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-管理费(总业绩9%)',
  37 + `F_CostCooperation` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-合作(保留)',
  38 + `F_CostMajorProject` decimal(18,2) DEFAULT '0.00' COMMENT '主营成本-大项目(保留)',
  39 + `F_CostOther` decimal(18,2) DEFAULT '0.00' COMMENT '其他成本(退款差额<0)',
  40 +
  41 + -- 人工工资部分
  42 + `F_SalaryBaseHealthCoach` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-健康师底薪',
  43 + `F_SalaryBaseAssistant` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店助底薪',
  44 + `F_SalaryBaseDirector` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店助主任底薪',
  45 + `F_SalaryBaseStoreManager` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店长底薪',
  46 + `F_SalaryBaseGeneralManager` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-总经理/经理底薪',
  47 +
  48 + `F_SalaryCommissionHealthCoach` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-健康师提成',
  49 + `F_SalaryCommissionAssistant` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店助提成',
  50 + `F_SalaryCommissionDirector` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店助主任提成',
  51 + `F_SalaryCommissionStoreManager` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-店长提成',
  52 + `F_SalaryCommissionGeneralManager` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-总经理/经理提成',
  53 + `F_SalaryManual` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-手工',
  54 + `F_SalaryAttendance` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-出勤(保留)',
  55 + `F_SalaryPhoneCustody` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-岗位-手机保管费',
  56 + `F_SalaryHeadcountReward` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-岗位-人头',
  57 + `F_SalaryTZone` decimal(18,2) DEFAULT '0.00' COMMENT '人工工资-门店T区',
  58 +
  59 + -- 费用与其他
  60 + `F_SocialSecurity` decimal(18,2) DEFAULT '0.00' COMMENT '社保(保留)',
  61 + `F_StoreRent` decimal(18,2) DEFAULT '0.00' COMMENT '门店房租',
  62 + `F_DormRent` decimal(18,2) DEFAULT '0.00' COMMENT '宿舍房租(保留)',
  63 + `F_CurrentPeriodExpense` decimal(18,2) DEFAULT '0.00' COMMENT '当期费用(报销)',
  64 + `F_CurrentPeriodExpenseQin` decimal(18,2) DEFAULT '0.00' COMMENT '当前费用-秦董(保留)',
  65 + `F_FinancialFee` decimal(18,2) DEFAULT '0.00' COMMENT '财务费用(保留)',
  66 +
  67 + -- 奖励
  68 + `F_RewardMedicalBeauty` decimal(18,2) DEFAULT '0.00' COMMENT '奖励-医美(保留)',
  69 + `F_RewardOther` decimal(18,2) DEFAULT '0.00' COMMENT '奖励-其他(保留)',
  70 + `F_RewardLargeOrder` decimal(18,2) DEFAULT '0.00' COMMENT '奖励-大单奖(保留)',
  71 + `F_RewardFirstOrder` decimal(18,2) DEFAULT '0.00' COMMENT '奖励-首单奖(保留)',
  72 + `F_RewardGeneral` decimal(18,2) DEFAULT '0.00' COMMENT '奖励(保留)',
  73 +
  74 + -- 其他保留字段
  75 + `F_Other1` decimal(18,2) DEFAULT '0.00' COMMENT '其他1(保留)',
  76 + `F_Other2` decimal(18,2) DEFAULT '0.00' COMMENT '其他2(保留)',
  77 +
  78 + -- 利润结果
  79 + `F_Profit` decimal(18,2) DEFAULT '0.00' COMMENT '利润(预收-实退-主营成本-人工工资[分项汇总]-房租-费用-奖励-其他)',
  80 + `F_FinancialProfit` decimal(18,2) DEFAULT '0.00' COMMENT '财务利润(主营-其他收入-主营成本-人工工资[分项汇总]-房租-费用-奖励-其他)',
  81 +
  82 + -- 基础字段
  83 + `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间',
  84 + `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  85 + `F_CreateUser` varchar(50) DEFAULT NULL COMMENT '创建人',
  86 + `F_UpdateUser` varchar(50) DEFAULT NULL COMMENT '更新人',
  87 + `F_IsEffective` int(1) DEFAULT '1' COMMENT '是否有效(1:有效 0:无效)',
  88 +
  89 + PRIMARY KEY (`F_Id`),
  90 + KEY `Idx_StoreId` (`F_StoreId`),
  91 + KEY `Idx_Month` (`F_StatisticsMonth`)
  92 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='门店股份统计表';
  93 +
  94 +
  95 +-- ----------------------------
  96 +-- 2. 科技部股份统计表 (lq_share_statistics_tech_dept)
  97 +-- ----------------------------
  98 +DROP TABLE IF EXISTS `lq_share_statistics_tech_dept`;
  99 +CREATE TABLE `lq_share_statistics_tech_dept` (
  100 + `F_Id` varchar(50) NOT NULL COMMENT '主键ID',
  101 + `F_DepartmentName` varchar(100) DEFAULT NULL COMMENT '部门名称(科技一部/二部)',
  102 + `F_StatisticsMonth` varchar(50) NOT NULL COMMENT '统计月份(YYYYMM)',
  103 +
  104 + -- 收入
  105 + `F_Income` decimal(18,2) DEFAULT '0.00' COMMENT '收入(门店科美开单30%)',
  106 +
  107 + -- 成本
  108 + `F_CostReimbursement` decimal(18,2) DEFAULT '0.00' COMMENT '成本-报销',
  109 + `F_CostTeacherBase` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部老师底薪',
  110 + `F_CostTeacherManual` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部手工费',
  111 + `F_CostTeacherBillingComm` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部开单提成',
  112 + `F_CostTeacherConsumeComm` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部消耗提成',
  113 + `F_CostTeacherExpertComm` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部专家提成(保留)',
  114 + `F_CostTeacherOvertime` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部加班(保留)',
  115 + `F_CostGMBase` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部总经理底薪',
  116 + `F_CostGMComm` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工-科技部总经理提成',
  117 + `F_RewardTechDept` decimal(18,2) DEFAULT '0.00' COMMENT '奖励-科技部(保留)',
  118 +
  119 + -- 其他
  120 + `F_CostOther1` decimal(18,2) DEFAULT '0.00' COMMENT '成本-其他1(保留)',
  121 + `F_CostOther2` decimal(18,2) DEFAULT '0.00' COMMENT '成本-其他2(保留)',
  122 +
  123 + -- 利润结果
  124 + `F_Profit` decimal(18,2) DEFAULT '0.00' COMMENT '科技部利润',
  125 +
  126 + -- 基础字段
  127 + `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间',
  128 + `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  129 + `F_CreateUser` varchar(50) DEFAULT NULL COMMENT '创建人',
  130 + `F_UpdateUser` varchar(50) DEFAULT NULL COMMENT '更新人',
  131 + `F_IsEffective` int(1) DEFAULT '1' COMMENT '是否有效(1:有效 0:无效)',
  132 +
  133 + PRIMARY KEY (`F_Id`),
  134 + KEY `Idx_Month` (`F_StatisticsMonth`)
  135 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='科技部股份统计表';
  136 +
  137 +
  138 +-- ----------------------------
  139 +-- 3. 总部股份统计表 (lq_share_statistics_hq)
  140 +-- ----------------------------
  141 +DROP TABLE IF EXISTS `lq_share_statistics_hq`;
  142 +CREATE TABLE `lq_share_statistics_hq` (
  143 + `F_Id` varchar(50) NOT NULL COMMENT '主键ID',
  144 + `F_StatisticsMonth` varchar(50) NOT NULL COMMENT '统计月份(YYYYMM)',
  145 +
  146 + -- 收入
  147 + `F_IncomeGeneral` decimal(18,2) DEFAULT '0.00' COMMENT '收入-全部(开单业绩9%)',
  148 + `F_IncomeTechDept` decimal(18,2) DEFAULT '0.00' COMMENT '收入-科技部(科美30%的9%)',
  149 +
  150 + -- 成本
  151 + `F_CostReimbursement` decimal(18,2) DEFAULT '0.00' COMMENT '成本-报销(总部费用)',
  152 + `F_CostLabor` decimal(18,2) DEFAULT '0.00' COMMENT '成本-人工(保留)',
  153 + `F_CostEducationRent` decimal(18,2) DEFAULT '0.00' COMMENT '成本-教育部房租',
  154 + `F_CostWarehouseRent` decimal(18,2) DEFAULT '0.00' COMMENT '成本-仓库房租',
  155 + `F_CostHQRent` decimal(18,2) DEFAULT '0.00' COMMENT '成本-总部房租',
  156 +
  157 + -- 利润结果
  158 + `F_OperationalProfit` decimal(18,2) DEFAULT '0.00' COMMENT '总部运营利润',
  159 +
  160 + -- 基础字段
  161 + `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间',
  162 + `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  163 + `F_CreateUser` varchar(50) DEFAULT NULL COMMENT '创建人',
  164 + `F_UpdateUser` varchar(50) DEFAULT NULL COMMENT '更新人',
  165 + `F_IsEffective` int(1) DEFAULT '1' COMMENT '是否有效(1:有效 0:无效)',
  166 +
  167 + PRIMARY KEY (`F_Id`),
  168 + KEY `Idx_Month` (`F_StatisticsMonth`)
  169 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='总部股份统计表';
门店股份统计说明.md 0 → 100644
  1 +# 门店股份统计说明 (Store Share Statistics)
  2 +
  3 +## 1. 概述
  4 +本以文档详细说明门店股份统计的各个组成部分,包括主营收入、其他收入、各项成本、人工工资及费用的计算逻辑和数据来源。
  5 +
  6 +---
  7 +
  8 +## 2. 收入 (Income)
  9 +
  10 +### 2.1 主营收入 (Main Income)
  11 +* **说明**: 按照消耗业绩统计(需区分生美、科美、医美、产品等)。
  12 +* **计算逻辑**: 统计当月 `lq_xh_jksyj` (耗卡健康师业绩表) 中的 `jksyj` (健康师业绩)。
  13 +* **数据来源**:
  14 + * 表: `lq_xh_jksyj`
  15 + * 字段: `jksyj` (业绩金额), `F_ItemCategory` (品项分类 - 生美/科美/医美/产品)
  16 + * **注意**: 需关联 `lq_kd_pxmx` (开单品项明细) 或通过 `F_ItemId` 获取更详细属性。
  17 + * **退款扣除**: 主营收入计算时,应为 **总消耗业绩 - 对应品项的消耗退款**。即 `(开单消耗业绩 - 退款消耗业绩)`。需确保“主营收入”是净收入。
  18 +
  19 +### 2.2 其他收入 (Other Income)
  20 +* **说明**: 退款差额 > 0 的部分。
  21 +* **计算逻辑**:
  22 + 1. 计算单笔退款的差额 = `应退金额` - `实退金额`。
  23 + 2. 若差额 > 0,计入其他收入。
  24 +* **数据来源**:
  25 + * 表: `lq_hytk_hytk` (会员退款表)
  26 + * 字段: `tkje` (应退金额/退卡金额), `F_ActualRefundAmount` (实退金额)
  27 + * 计算: `SUM(CASE WHEN (tkje - F_ActualRefundAmount) > 0 THEN (tkje - F_ActualRefundAmount) ELSE 0 END)`
  28 +
  29 +### 2.3 预收款 (Advance Receipt)
  30 +* **说明**: 来源于开单的实收业绩。
  31 +* **数据来源**:
  32 + * 表: `lq_kd_kdjlb` (开单记录表)
  33 + * 字段: `sfyj` (实付业绩)
  34 +
  35 +### 2.4 退款 (Refund)
  36 +* **说明**: 按照退款单里面的实退业绩来计算。
  37 +* **数据来源**:
  38 + * 表: `lq_hytk_hytk`
  39 + * 字段: `F_ActualRefundAmount` (实退金额)
  40 +
  41 +### 2.5 退款差额 (Refund Difference)
  42 +* **说明**: `应退金额` - `实退金额`。
  43 + * `> 0`: 归纳到 **其他收入**
  44 + * `< 0`: 归纳到 **其他成本**
  45 +* **数据来源**: 同 2.2。
  46 +
  47 +### 2.6 应收 (Receivables)
  48 +* **说明**: 开单时选择了合作医院的款项。
  49 +* **计算逻辑**: 统计支付方式或关联机构为“合作医院”的开单金额。
  50 +* **数据来源**:
  51 + * 表: `lq_kd_kdjlb`
  52 + * 字段: `Hgjg` (合作机构) 或 支付方式字段。
  53 + * **判定**: `Hgjg` 不为空 且 属于医院类型。
  54 +
  55 +### 2.7 银行存款 (Bank Deposit)
  56 +* **说明**: 开单时,**除了**选择了合作医院以外的所有款项。
  57 +* **计算逻辑**: 总实付业绩 - 应收。
  58 +
  59 +---
  60 +
  61 +## 3. 成本 (Cost)
  62 +
  63 +### 3.1 主营成本-产品 (product)
  64 +* **说明**: 仓库领取数据,算上个月成本。
  65 +* **数据来源**:
  66 + * 表: `lq_inventory_usage` (库存使用记录)
  67 + * 字段: `F_TotalAmount` (合计金额)
  68 + * **条件**: `F_UsageTime` 在上个月范围内。
  69 +
  70 +### 3.2 主营成本-福田 (futian)
  71 +* **说明**: 仓库地址是“福田”的领取数据,算上个月成本。
  72 +* **数据来源**:
  73 + * 表: `lq_inventory_usage`
  74 + * **待确认**: 需确认“福田”仓库的 `StoreId` 或如何标识。暂时需通过 `StoreId` 或 `ProductId` 对应的仓库属性识别。
  75 +
  76 +### 3.3 主营成本-毛巾 (towel)
  77 +* **说明**: 清洗记录里面的送出。
  78 +* **数据来源**:
  79 + * 表: `lq_laundry_flow` (清洗流水表)
  80 + * 字段: `F_TotalPrice`
  81 + * **条件**: `F_FlowType` = 0 (送出)。
  82 +
  83 +### 3.4 主营成本-科技部 (tech_dept)
  84 +* **说明**: 门店开单中属于科美的(总业绩 - 退款业绩) * 30%。
  85 +* **计算逻辑**:
  86 + 1. 筛选科美项目 (`lq_kd_pxmx.F_BeautyType` 为科美 或 `ItemCategory` 为科美)。
  87 + 2. 计算科美项目的实付业绩总和 - 对应退款。
  88 + 3. 乘以 30%。
  89 +
  90 +### 3.5 主营成本-管理费 (management_fee)
  91 +* **说明**: 门店所有开单(总业绩 - 退款业绩) * 9%。
  92 +* **计算逻辑**: (`lq_kd_kdjlb.sfyj` 总和 - `lq_hytk_hytk.F_ActualRefundAmount` 总和) * 9%。
  93 +
  94 +### 3.6 主营成本-合作 (cooperation)
  95 +* **说明**: 不处理(保留字段)。
  96 +
  97 +### 3.7 主营成本-大项目 (major_project)
  98 +* **说明**: 不处理(保留字段)。
  99 +
  100 +---
  101 +
  102 +## 4. 人工工资 (Labor Cost)
  103 +
  104 +### 4.1 人工工资-底薪 (base_salary)
  105 +* **人工工资-健康师底薪**: 来源于 `lq_salary_statistics.F_ActualBaseSalary`。
  106 +* **人工工资-店助底薪**: 来源于 `lq_assistant_salary_statistics.F_ActualBaseSalary` (岗位为“店助”)。
  107 +* **人工工资-店助主任底薪**: 来源于 `lq_director_salary_statistics.F_ActualBaseSalary` (岗位为“主任”)。
  108 +* **人工工资-店长底薪**: 来源于 `lq_store_manager_salary_statistics.F_ActualBaseSalary`。
  109 +* **人工工资-总经理/经理底薪**: 来源于事业部总经理/经理工资表 `F_ActualBaseSalary` (按门店平均分摊 - 底薪固定4000,按管理门店数平均)。
  110 +
  111 +### 4.2 人工工资-提成 (commission)
  112 +* **人工工资-健康师提成**: 来源于 `lq_salary_statistics.F_TotalCommissionAmount`。
  113 +* **人工工资-店助提成**: 来源于 `lq_assistant_salary_statistics.F_TotalCommissionAmount`。
  114 +* **人工工资-店助主任提成**: 来源于 `lq_director_salary_statistics.F_TotalCommissionAmount`。
  115 +* **人工工资-店长提成**: 来源于 `lq_store_manager_salary_statistics.F_TotalCommissionAmount`。
  116 +* **人工工资-总经理/经理提成**: 来源于事业部总经理/经理工资表中该门店对应的提成金额。
  117 + * **注意**: 总经理提成是按门店单独计算汇总的,工资表中需记录分店提成明细或能反查单店提成。
  118 + * 根据规则:`总提成 = SUM(各门店提成金额)`。统计时需提取该门店贡献的部分。
  119 +
  120 +### 4.3 人工工资-手工 (manual_fee)
  121 +* **说明**: 健康师手工费(消耗表)。
  122 +* **数据来源**:
  123 + * 表: `lq_xh_jksyj`
  124 + * 字段: `F_LaborCost` (手工费)
  125 + * **或者**: 直接取工资表中的 `F_HandworkFee` (如果有统计)。推荐使用消耗表累加更精准。
  126 +
  127 +### 4.4 人工工资-岗位-手机保管费 (phone_custody)
  128 +* **说明**: 店助的手机保管费。
  129 +* **数据来源**:
  130 + * 表: `lq_assistant_salary_statistics`
  131 + * 字段: `F_PhoneManagementFee` (手机保管费,已确认字段存在)。
  132 +
  133 +### 4.5 人工工资-岗位-人头 (headcount_reward)
  134 +* **说明**: 店助的人头阶段奖励。
  135 +* **数据来源**:
  136 + * 表: `lq_assistant_salary_statistics`
  137 + * 字段: 需确认具体的奖励字段,可能是 `F_HeadcountAward` 或包含在奖金中。
  138 +
  139 +### 4.6 人工工资-门店T区 (t_zone)
  140 +* **说明**: 健康师工资表里面T区的工资金额。
  141 +* **数据来源**:
  142 + * 表: `lq_salary_statistics`
  143 + * 字段: 筛选 T区员工的 `F_ActualSalary` 或 特定 T区 补贴字段。
  144 +
  145 +---
  146 +
  147 +## 5. 费用与其他 (Expenses & Others)
  148 +
  149 +### 5.1 门店房租 (store_rent)
  150 +* **说明**: 来源于合同对应的每月房租明细。
  151 +* **数据来源**:
  152 + * 表: `lq_contract_rent_detail` (月租明细表)
  153 + * 字段: `F_DueAmount` (应缴金额)
  154 + * 条件: `F_PaymentMonth` 匹配当月。
  155 +
  156 +### 5.2 当期费用 (current_period_expense)
  157 +* **说明**: 报销费用 -> 费用分类 = "当期费用"。
  158 +* **数据来源**:
  159 + * 表: `lq_reimbursement_application` (报销申请) 关联 `lq_reimbursement_category` (报销分类)。
  160 + * 条件: 通过分类表筛选出一级分类或二级分类为“当期费用”的记录。
  161 +
  162 +### 5.3 其他成本 (other_cost)
  163 +* **说明**: 退款差额 < 0 的部分 (即 `(应退 - 实退) < 0`,多退了)。
  164 +* **计算逻辑**: 绝对值(`应退` - `实退`)。
  165 +
  166 +### 5.4 保留/不处理字段
  167 +* 人工工资-出勤
  168 +* 社保
  169 +* 宿舍房租
  170 +* 当前费用-秦董
  171 +* 财务费用
  172 +* 各项奖励 (医美/其他/大单/首单)
  173 +* 其他1, 其他2
  174 +
  175 +---
  176 +
  177 +## 6. 利润计算 (Profit Calculation)
  178 +
  179 +### 6.1 利润 (Profit)
  180 +```
  181 +利润 = 预收款
  182 + - 实际退款
  183 + - 主营成本(产品 + 福田 + 毛巾 + 合作 + 大项目 + 科技部 + 管理费)
  184 + - 人工工资(底薪 + 提成 + 手工 + 出勤 + 岗位 + T区)
  185 + - 社保(公司部分)
  186 + - 门店房租
  187 + - 宿舍房租
  188 + - 当前费用
  189 + - 当前费用(秦董)
  190 + - 财务费用
  191 + - 奖励(各项)
  192 + - 其他1 - 其他2
  193 +```
  194 +
  195 +### 6.2 财务利润 (Financial Profit)
  196 +```
  197 +财务利润 = 主营收入
  198 + - 其他收入
  199 + - 主营成本(...)
  200 + - 人工工资(...)
  201 + - 社保(...)
  202 + - 门店房租
  203 + - ... (同上扣除项)
  204 +```