Commit 61ae65fcb39e8daedad687ad84dcaf6b34c8455c
1 parent
166f3801
feat: 增强分润统计功能
- 新增多个消耗业绩字段,包括生美、科美、医美、合作、产品及其他消耗业绩。 - 修改主营收入计算逻辑,改为不扣减退款。 - 更新其他收入和成本计算逻辑,确保准确反映退款差额。 - 优化库存使用申请相关的成本计算,确保数据准确性。
Showing
7 changed files
with
685 additions
and
22 deletions
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 | +``` |