初始发布: 21 个 skills (Claude Code / Codex / DSH)

This commit is contained in:
2026-08-14 01:51:44 +08:00
commit ea0857bedb
129 changed files with 35566 additions and 0 deletions
@@ -0,0 +1,69 @@
# 营收 / 出品分析打法(5月固化)
## 三类分析 + 对应脚本
| 用户诉求 | 脚本 | 产出 |
|---|---|---|
| N月营收分析(无预制表时) | `build_analysis.py <目录> <YYYY-MM>` | 营收分析xlsx(13 sheets) + `_analysis_summary.json` |
| 各部门收入起伏根因(MoM | `dept_deepdive.py <本月目录> <上月目录>` | `_deepdive_<部门>.json`(总览/二级分类/班次/SKU涨跌含分类验真)|
| 菜单/出品 卖最差 | `menu_onsale_ranking.py <月度目录>` | 各部门在架SKU升序榜 |
`_analysis_summary.json``employees` 字段 = 12(13)人 (部门业绩/班次业绩/部门×班次业绩) 三元组,直接写 V2 cols 19/20/21。
## 🔴 必守口径(5月踩坑总结)
1. **统一分类器重算两月**:做 MoM 对比时,4月也要用同一分类器重算,**不要拿4月预制xlsx对比5月自算**(分类器漂移会造出假象,如"西湖咖啡-21%"实为持平)。`dept_deepdive.py` 已对两月用同一分类器。
2. **幽灵汇总行**POS「订单明细」末尾有一行 `订单来源/订单号/营业日期 全='--'` 的汇总行,金额=所有真实行之和,会让订单级字段翻倍2x。必须 `if str(订单号).strip()=='--': continue`build_analysis 已修)。
3. **dish级 vs 订单级**:部门收入用「菜品明细」逐菜累加 `菜品收入(元)`(dish级);订单级列受联台重复污染,勿用。
4. **酒头/畅饮票=精酿**`1-10酒头3小时畅饮票` 等"酒头/畅饮"SKU 是扎啤生啤,归精酿(非调酒)。
5. **部门×班次交叉**:营收xlsx不自带,需 build_analysis 用菜品名匹配(≈95%)+ 按部门合计比例校正。滨江厨房团队(刘/叶/尹)班次=0、中班=0、前厅部门=0。
6. **菜单"在架"口径**:菜品库导出**无「售卖状态」字段**(在售/下架混在一起)。用"当月有售(≥1件)"作在架代理 → 下架季节菜自动排除。代价:漏掉"在架但真没人点"的极少数款。要100%精确需用户重导菜品库勾「售卖状态=售卖中」。
- 5月实测:西湖菜品库100款厨房菜→仅45在售;滨江138→45。**菜单严重冗余,大量下架菜没从系统清理**。
## 🟢 质量要求:跑完必做对抗式复核
每次营收分析跑完,**用 Workflow 起多个 agent 独立重算 + 对抗验证**(部门POS/班次/团购/交叉/环比 各一路)。5月正是靠这个抓出 2 个真bug(幽灵行翻倍、酒头误归)。验真手法:每个涨跌SKU比对 `cat_apr` vs `cat_may`,一致=真实业务变化,不一致=重归类伪变动需剔除(`cat='-'` 表示该月无此SKU=新上/下架,属真实,非伪变动)。
## 输出去向
- 营收分析 13 sheets:总览/部门收入/团购→部门归口/班次营收/部门x班次/品类(一级,二级)/每日营收×2/支付方式/12员工业绩/深度分析/改进建议/部门起伏根因
- 出品分析:可加 sheet「西湖/滨江 餐食卖最差(在架)」「出品优化建议(该砍清单)」
- 报告 md`大梦N月各部门营收起伏深度报告.md``大梦N月_菜单精简与出品优化建议.md`
## 已知业务结论(5月,供下月对比基线)
- 双店本质夜间酒馆:晚班占 81-85%,20-23点占 57-61% 营收。
- 西湖=精酿+调酒双驱动酒吧店;滨江=精酿单极社区店。
- 白班餐食弱:西湖周末/节假日强(3.3x工作日)、滨江平(1.9x)、工作日白天日均仅¥160-190。
- 会员质量:西湖健康(会员客单>非会员);滨江会员"次卡化"(纯咖啡会员单17%→33%,客单跌破非会员)。
- 断货可恢复≈¥13.9k/月(健力士黑啤两店同步断供最易救)。
---
## 🆕 伪菜品库法(6月起·解决新品归类)
**问题**:菜品库是某个月导出的静态快照,次月新上的 SKU(尤其精酿新酒款)不在库中 → 落到 `dept_by_name` 关键词兜底 → 归类不可靠。手敲关键词还有宽词误伤风险("菜"/"面"/"饭")。
**解法**:用当月「菜品销售明细」导出反推菜品库。该文件 sheet「已销售」**表头在第 3 行**,含字段:
`出品部门 | 营业日期 | 菜品名称 | 菜品大类 | 菜品小类 | 订单编号 | 销售数量 | 销售额 | 菜品优惠 | 菜品收入 | ...`
`菜品名称 → 菜品大类/菜品小类`,同名多类时取出现次数最多的那组,输出成 `菜品编码(SPUID) | 菜品名称 | 基础分类` 三列即可被 `load_menu()` 读取。
**注意**
- 同名多类是正常现象(如"深烘拿铁"既有 `咖啡/经典` 也有 `经典咖啡`),取众数即可,6月滨江有 11 个这类 SKU。
- 大类值会随店而异:滨江有 `肉肉肉/无咖无醇/瓶罐精酿`,西湖有 `软饮/brunch轻食简餐/纯饮``dept_of_category()` 里两店分支已覆盖。
- `美团团购套餐` 类 SKU 在 POS 侧**菜品收入为 0**(核销记 0、钱在平台侧归口),`is_teamgou_shell()` 会跳过,不会重复。
## 🔍 团购/收银重复性审查(每月建议做一次)
老板会问"班次业绩是不是把团购和收银的重复算了"。审查三步:
1. **支付方式汇总**(店内订单明细→支付明细 sheet):确认支付方式列表里**没有**"美团团购券"之类的平台支付方式。6月滨江只有 微信/支付宝/会员卡/代金券/现金。
2. **壳单实付**:含 `美团团购套餐` 大类 SKU 的订单,其全渠道「顾客实付」应为 **0**(6月实测 3 笔全 0)→ 只算了平台一边 ✓
3. **代金券**POS 侧计入顾客实付,平台归口时 `teamgou_dept_split()` 返回 None 明确跳过 → 只算了收银一边 ✓
**易误判**:会有一批订单「菜品收入=0 但有实付」(6月滨江 86 笔 5,455.60)——那是 **「会员卡-卡余额消费」**(储值卡买单,POS 记全额优惠、钱走卡余额),**与团购无关**。5月同样机制(21,667/207笔),环比可比,不要当成 bug。
@@ -0,0 +1,73 @@
# 考勤规则
## 资料来源
每月 `~/Downloads/大梦N月账务处理/考勤表/` 下会有:
| 文件 | 覆盖人员 | 形式 |
|---|---|---|
| `厨师考勤.jpg` | 西湖店厨房(秦天/何简)+ 滨江店全员(除王瑛胤)| 手写图片 |
| `06f16921...jpg` 等 | 西湖店白班(小宋=宋群喜、小儒=郭思儒、保洁阿姨)| 手写图片 |
| `李想N月考勤.xlsx` | 李想 | 月度档案 xlsx |
| `秋风N月考勤(N).xlsx` | 朱秋风("秋风"| 月度档案 xlsx |
| `评估N月-白班店长-王瑛胤 月度评估.xls` | 王瑛胤 | xls(旧版,要 xlrd 读取)|
| 腾讯文档「大梦西湖店夜班员工考勤」 `file_id=IEqftKNqdqKa` | 西湖店夜班(胡舒=小胡、蔡逸丰=丰丰、小亮、凯南等)| 在线表格 |
## 昵称映射
| 称呼 | V2 姓名 |
|---|---|
| 小胡 | 胡舒 |
| 丰丰 | 蔡逸丰 |
| 小宋 | 宋群喜 |
| 小儒 | 郭思儒 |
| 秋风 | 朱秋风 |
| 保洁曾阿姨 | (**兼职,不写入 V2**)|
## 出勤天数定义(5月已确认口径)
```
出勤天数 = 当月天数 − 正常休息天数 (年假天数 计入出勤/带薪,不扣)
```
- **年假 = 带薪出勤**:休年假的那天算出勤、照发工资。
- 例:何简 5月 休 11,12,13,14,19,25(其中 14/19/25 是年假)→ 正常休 3 天 → **出勤 = 31 3 = 28**(3 个年假日计入出勤)。用户已确认"何简就算出勤28天"。
- 例:郭思儒 5月 休 3,14,20,274正常)+ 28年假 → 出勤 = 31 − 4 = **27**
> ⚠️ 4月时曾用"年假不计入出勤"(宋群喜26),**5月起统一改为年假计入出勤**。各手写考勤表通常会**直接写明出勤数**——以写明的为准;未写明的按上式算。
> **以本月各考勤表写明的出勤数为最高优先**,公式仅用于未写明者。
## 加班小时数
- 备注里写「**加班X小时存**」→ 暂存(不发钱),加班工资 = 0
- V2 仍把 X 写入 `加班小时数`col 24),方便后续核算
- HTML 工资单会自动隐藏这种情况的加班小时显示
- 备注里写「**加班X小时换钱**」→ 当月发,加班工资 = (X/9) × 底薪/26.08
- 没写明 → 默认发钱
## 法定假期天数(4 月示例)
| 月 | 节日 | 天数 |
|---|---|---|
| 1 | 元旦 | 1 |
| 2 | 春节 | 3(实际放 7 但只算 3)|
| 4 | 清明 | 1 |
| 5 | 劳动节 | **2**(5月按 2 天法定假,5月用户确认)|
| 6 | 端午 | 1 |
| 9-10 | 中秋+国庆 | 3-4 |
> **5月口径(用户确认)**:五一 2 天法定假期,**全员**法定假期天数 = 2、全员给 2 天双倍工资(不论是否实际在岗)。即 `法定假期天数` 列对所有人填 2。
> 一般原则:以用户每月的明确指示为准;若用户说"全员给N天双倍",则全员 `法定假期天数=N`。
## 各类休假在备注里的标记
```
休1,10,15,23 ← 正常休息日期
29号年假1天 ← 用了 1 天年假
剩余年假5天 ← HR 库存
请假合计3天 ← xls 文件汇总
调休4天 ← 王瑛胤 月度评估口径
加班3小时存 ← 存调休时间
加班2小时换钱 ← 当月发钱
滨江店X天 ← 串店帮忙(可能涉及交通补贴)
```
+62
View File
@@ -0,0 +1,62 @@
# V2 工资表「员工档案」工作表 列定义
`file_id=VLSAvSvqvYzU`, `sheet_id=BB08J2`(注意 V2 第二个 sheet 是空的)
总 43 列(0-indexed),第 25 列空。
| Col | 字段 | 类型 | 来源 | 说明 |
|---:|---|---|---|---|
| 0 | 月份 | STRING | 固定 | `YYYYMM` 格式,如 `202604` |
| 1 | 姓名 | STRING | 固定 | 见员工列表 |
| 2 | **工资汇总** | NUMBER | 公式 | sum of all earnings |
| 3 | **剩余应发** | NUMBER | 公式 | 工资汇总 - 个人代扣社保 |
| 4 | 身份证号 | STRING | 固定 | 通常空,仅 蔡逸丰有 |
| 5 | 生日 | — | — | 通常空 |
| 6 | 年龄 | — | — | 通常空 |
| 7 | 性别 | — | — | 通常空 |
| 8 | 归属 | STRING | 固定 | `西湖店` / `滨江店` |
| 9 | 部门 | STRING | 固定 | `精酿`/`厨房`/`咖啡`/`调酒`/`前厅` |
| 10 | 班次 | STRING | 固定 | `早班`/`白班`/`中班`/`晚班` |
| 11 | 岗位 | STRING | 固定 | 主岗 |
| 12 | 兼任岗位 | STRING | 固定 | 副岗(店长/总厨等) |
| 13 | 当前状态 | STRING | 固定 | `在职`/`离职` |
| 14 | 岗位级别 | — | — | 通常空 |
| 15 | **基本工资标准** | NUMBER | 固定 | 底薪 |
| 16 | KPI绩效标准 | NUMBER | 固定 | KPI 奖金基数 |
| 17 | 管理绩效标准 | NUMBER | 固定 | 管理奖金基数(仅店长/总厨>0)|
| 18 | 行为规范绩效 | NUMBER | 固定 | 行为奖金基数 |
| 19 | **部门业绩** | NUMBER | 营收分析 | 部门收入 sheet 含团购套餐合计 |
| 20 | **班次业绩** | NUMBER | 营收分析 | 班次营收 sheet 顾客实付 |
| 21 | **部门x班次业绩** | NUMBER | 计算 | `compute_cross.py` 输出 |
| 22 | **出勤天数** | NUMBER | 考勤 | 含年假 |
| 23 | **法定假期天数** | NUMBER | 月历 | 清明/五一/国庆等 |
| 24 | **加班小时数** | NUMBER | 考勤 | 原始小时数("存"也填)|
| 25 | (空列) | — | — | 分隔 |
| 26 | **基本工资** | NUMBER | 公式 | 底薪 × 出勤/26.08 |
| 27 | KPI得分 | NUMBER | 评估 | 默认 1=1档全额) |
| 28 | **KPI绩效结果** | NUMBER | 公式 | KPI标准 × 倍数 |
| 29 | 管理绩效得分 | NUMBER | 评估 | 默认 1(仅管理标准>0者)|
| 30 | **行为规范绩效结果** | NUMBER | 公式 | 行为标准 × 合格判定 |
| 31 | **加班工资** | NUMBER | 公式 | (加班/9) × 底薪/26.08"存"则 0 |
| 32 | 出品提成 | NUMBER | 公式 | 部门业绩 × 角色费率 |
| 33 | **管理绩效奖金** | NUMBER | 公式 | 管理标准 × 倍数 |
| 34 | 法定假期换薪 | NUMBER | — | 与节假日补贴重复,置 0 |
| 35 | 串店交通补贴 | NUMBER | 手动 | 跨店帮忙补贴 |
| 36 | **节假日出勤补贴** | NUMBER | 公式 | 底薪/26.08 × 法假天 × 2 |
| 37 | 特别奖金 | NUMBER | 手动 | 偶发 |
| 38 | 社保-公司承担 | NUMBER | 固定 | 通常空,仅在册者填 |
| 39 | 社保-公司部分的个人承担 | NUMBER | 固定 | 1222.254 人)|
| 40 | 职工社保个人承担部分(公账代扣) | NUMBER | 固定 | 523.534 人)|
| 41 | 员工餐分担金额 | NUMBER | 手动 | 通常空 |
| 42 | 备注 | STRING | 手动 | 休息日期/年假/加班"存vs换钱"等 |
## 月度行号(每月 12 行连续)
- 月份起始行 = 当月在 V2 的第一行(紧跟上月最后一行 + 1 空行分隔)
- 例:2026/4 在 rows 14-25, 2026/5 在 rows 27-38(行 26 空)
## 写入注意
- `set_range_value` 偶发 **+1 行偏移**,写完务必读回校验
- 修改任何月份**只动当月行**,绝不动历史
- 写入完整 12 行后,记得用 `set_cell_style` 应用两店底色(FFE2EFDA / FFDDEBF7
@@ -0,0 +1,56 @@
# 出品提成费率参考
## 公式
```
出品提成 = 部门业绩 × 角色费率
```
`部门业绩` 来自 V2 col 19(含团购套餐合计)。
## 已知费率(基于 3 月数据反推)
| 姓名 | 归属 | 部门 | 班次 | 岗位 | 费率 |
|---|---|---|---|---|---:|
| 宋群喜 | 西湖 | 咖啡 | 白班 | 咖啡师 | **3.0%** |
| 胡舒 | 西湖 | 调酒 | 晚班 | 调酒师/晚班店长 | **2.0%** |
| 郭思儒 | 西湖 | 咖啡 | 白班 | 咖啡师/白班店长 | **3.5%** |
| 秦天 | 西湖 | 厨房 | 晚班 | 主厨/总厨 | **3.0%** |
## 暂无费率(待确认)
| 姓名 | 备注 |
|---|---|
| 蔡逸丰(精酿侍酒师 西湖晚班)| 无提成(4/5月均未配) |
| 何简(出品厨师 西湖白班)| 无提成(出品厨师通常无提成)|
| 朱秋风(精酿 滨江晚班)| 部门切换后未配置 |
| **舒尧轩(调酒师 西湖晚班,5月新增)** | **5月暂无提成**(与蔡逸丰一致);他是调酒师非店长,胡舒的2%是店长身份。如要配比例需用户确认 |
| 滨江店其他人 | 全员无提成(启动期)|
## 规则推断
观察 3 月数据可归纳:
- **「店长」角色**(白/晚班店长)有提成(咖啡白班店长 3.5%、调酒晚班店长 2%)
- **「师」角色**(咖啡师、调酒师、主厨)有提成(多为 3%)
- **「出品厨师」/「前厅运营」** 无提成
- **滨江店**:早期为启动期,所有人无提成;后续按西湖费率推开
## 算法
```python
COMMISSION_RATE = {
"宋群喜": 0.030,
"胡舒": 0.020,
"郭思儒": 0.035,
"秦天": 0.030,
# TODO: 5 月起新加员工费率
}
commission = dept_revenue * COMMISSION_RATE.get(name, 0)
```
## 注意
- **费率随员工角色调整而变**:若某员工岗位变动(如朱秋风改部门),需重新与用户确认费率
- 滨江店何时开始有提成,由用户决定
- 写入 V2 col 32(出品提成),同时计入 工资汇总
+146
View File
@@ -0,0 +1,146 @@
# 计薪公式手册
> 所有公式分母 26.08 = 标准月工作日(含周末折算,全年/12)
## 基本工资
```
基本工资 = 基本工资标准 × 出勤天数 / 26.08
```
- **出勤天数** = 实际上班天数 + 年假天数(年假按工作计薪)
- **不包含** 不计薪的休息日、调休抵扣后的额外休息
- 案例:胡舒 4 月,标准 8000,出勤 28 → 8000 × 28/26.08 = **8,588.96**
## 加班工资
```
加班工资 = (加班小时数 / 9) × 基本工资标准 / 26.08
```
- 9 = 每日工时
- 等价于:「(加班小时/9) 天的日薪」
- **重要规则**:备注里写"存"(如 `加班3小时存`)的不发钱,加班工资 = 0;写"换钱"或无注的正常发
- 案例:李想 4 月,标准 8000,加班 2h → (2/9) × 8000/26.08 = **68.17**
## KPI 绩效结果
```
KPI绩效结果 = KPI绩效标准 × KPI倍数
```
倍数表(从 王瑛胤 月度评估表):
| KPI 总分 | 倍数 |
|---|---|
| ≥ 4.5 | 1.5× |
| ≥ 4.0 | 1.2× |
| ≥ 3.5 | 1.0× |
| ≥ 3.0 | 0.8× |
| < 3.0 | 0.5× |
**默认值**:未评估时按 1× 全额发(V2 的 `KPI得分` 列填 `1`
## 管理绩效奖金
```
管理绩效奖金 = 管理绩效标准 × 管理倍数
```
- 倍数表同 KPI
- 默认 1×
- **仅管理标准 > 0 的员工有此项**
## 行为规范结果
```
行为规范绩效结果 = 行为规范绩效(全额发) // 合格
行为规范绩效结果 = 0 或部分 // 未达标
```
默认按"合格"发全额。
## 出品提成
```
出品提成 = 部门业绩 × 角色费率
```
费率详见 `commission_rates.md`。仅西湖店部分员工有,滨江店暂无出品提成。
## 节假日出勤补贴
```
节假日出勤补贴 = 基本工资标准 / 26.08 × 法定假期天数 × 2
```
- × 2 因法定节假日须支付 2 倍工资
- 4 月清明 1 天,5 月劳动节 1 天(5.1 当天),10 月国庆 3 天等
- 案例:胡舒 4 月,标准 8000,法假 1 天 → 8000/26.08 × 1 × 2 = **613.50**
## 工资汇总
```
工资汇总 = 基本工资
+ KPI绩效结果
+ 管理绩效奖金
+ 行为规范绩效结果
+ 加班工资
+ 出品提成
+ 节假日出勤补贴
+ (其他: 串店补贴 / 特别奖金 / 法定假期换薪 等)
```
## 剩余应发(=实发,不计公司承担社保)
```
剩余应发 = 工资汇总 - 职工社保个人承担(公账代扣)
```
- 仅 4 人在册社保(每月每人扣 ¥523.53):胡舒、王瑛胤、刘润祥、朱秋风
- 其余员工 剩余应发 = 工资汇总
## 公司承担社保(员工成本,不计入实发)
```
社保-公司部分的个人承担 = 1222.25 // 每月每人,仅 4 在册者
职工社保个人承担(公账代扣) = 523.53 // 同上
两项合计 = 1745.78
```
## 节假日补贴(法定假期双倍)
```
节假日出勤补贴 = 基本工资标准 / 26.08 × 法定假期天数 × 2
```
- ×2 = 法定节假日双倍工资(基础那份已在基本工资里)。
- 5月:法定假期天数=2(五一),全员都给 → 补贴 = 底薪/26.08 × 4。
## 工资单 HTML 的两条展示规则(slip_template.html 内置)
1. **未交社保者**:基本工资行下方强调注明
*"你的基本工资中已包含公司应承担的社保金额和个人社保金额,总计 ¥1,745.78"*
(金额=在册者两项加总 1222.25+523.53;按 col39/col40 是否有值自动判断)。
2. **出品提成行**:仅当该员工**实际有提成金额**时才显示,否则整行隐藏(不发提成的人不展示这行)。
## 串店交通补贴 / 特别奖金 / 法定假期换薪
- **串店交通补贴**:当员工去另一家店帮忙(备注里"滨江店X天"等)时手动给
- **特别奖金**:偶发,手动填
- **法定假期换薪**:与节假日出勤补贴重复,目前并入节假日出勤补贴,此列保留为 0
---
## 反向校验
写完一行后用 Python 校验:
```python
basic = base * att / 26.08
ot_pay = 0 if banked else (oth / 9) * base / 26.08
kpi_res = kpi_std * kpi_mult
mgmt_res = mgmt_std * mgmt_mult if mgmt_std > 0 else 0
holiday = base / 26.08 * lh_days * 2
total = basic + ot_pay + kpi_res + mgmt_res + conduct_std + commission + holiday
remaining = total - (523.53 if has_insurance else 0)
```
@@ -0,0 +1,76 @@
# 营收归口规则
## 数据来源
每月营收分析 xlsx`大梦可能实验室_N月营收分析_西湖店vs滨江店.xlsx`
关键 sheet
- **总览**:当月概况
- **部门收入**:部门 × (POS + 团购套餐) 分布 → 取「含团购套餐合计」 → `部门业绩`
- **班次营收**:白班/晚班分布 → 取「顾客实付」列 → `班次业绩`
- 订单/菜品/团购明细 sheets:原始数据
> 此 xlsx 通常已由用户预先生成,本 SKILL 直接读取既有数据。
## 部门归口(来自 分析方法.md)
### 西湖店
| 部门 | 一级分类 |
|---|---|
| 厨房 | 小吃 / 主食 / brunch / 零食 |
| 咖啡 | 咖啡 / 甜品 / 茶饮Tea / 软饮(可尔必思+海盐荔枝)|
| 精酿 | 精酿 / 精酿 老菜单 |
| 调酒 | 鸡尾酒 / 纯饮 / 软饮分类的其他 |
### 滨江店
| 部门 | 一级分类 |
|---|---|
| 厨房 | 肉肉肉 / 小吃 / 主食 / brunch |
| 咖啡 | 咖啡 / 甜品点心 / 茶饮tea / 无咖无醇(排除无醇鸡尾酒)|
| 精酿 | 精酿 / 瓶罐精酿 / 精酿 老菜单(已废弃)|
| 调酒 | 鸡尾酒 / 纯饮酒 / 无醇鸡尾酒 |
> 实际菜品库的一级分类名带空格/版本号等小差异,`compute_cross.py` 已做容错。
## 部门×班次业绩(交叉项)
营收分析 xlsx 默认**不计算**店×部门×班次三维交叉。要算这个值:
1.`店内订单明细` xlsx 的菜品明细 sheet 取每菜每单的 `菜品收入`
2.`全渠道订单明细` xlsx 取每单的 `餐段`(白/晚班)
3.`菜品库` xlsx 取每菜的 `基础分类`(一级/二级)
4. join → 按 (店, 餐段, 部门) 聚合
5. 因为菜品名匹配率 ≈ 95%(前缀编号差异),用**比例校正**:
```
scale_factor = 权威部门业绩(含团购) / raw部门小计
```
由 `compute_cross.py` 自动完成。
## 4 月数据(仅供回溯校验)
| 部门 | 滨江总(含团购)| 西湖总(含团购)|
|---|---:|---:|
| 厨房 | 37,182.12 | 51,738.90 |
| 咖啡 | 16,537.69 | 31,407.47 |
| 精酿 | 56,939.31 | 83,995.44 |
| 调酒 | 41,618.84 | 58,680.70 |
| 班次 | 滨江 | 西湖 |
|---|---:|---:|
| 白班 | 23,485.29 | 51,017.66 |
| 晚班 | 130,345.80 | 173,628.80 |
## 部门业绩特殊规则
- **前厅运营** 不产生菜品收入 → 部门业绩 = 0
- 例外:朱秋风 2026/4 改归"精酿"部门后,部门业绩 = 滨江精酿值
- **保洁** 不产生菜品收入 → 不写入 V2
## 班次业绩特殊规则
> 团队主要在厨房后场工作,与营收班次解耦
- **滨江厨房团队(刘润祥/叶磊/尹志艳)**:班次业绩 = 0,部门×班次 = 0
- **中班**(尹志艳):班次业绩 = 0,部门×班次 = 0
- **早班**(如有):参考晚班/白班归口
+208
View File
@@ -0,0 +1,208 @@
# 月度结薪完整流程(含坑点回顾)
> 5 月跑通后请回流到本文档,把新经验记录下来。
## 完整步骤
### 0. 前置检查
```bash
# 确认本月账务目录存在
ls ~/Downloads/大梦N月账务处理/
# 必须有:
# 考勤表/ ← 各种考勤资料
# 大梦可能实验室_N月营收分析_*.xlsx ← 营收分析(用户预先生成)
# 大梦_可能实验室_西湖店__店内订单明细*.xlsx
# 大梦_可能实验室_滨江店__店内订单明细*.xlsx
# 大梦可能实验室(西湖店)_全渠道订单明细_*.xlsx
# 大梦可能实验室(滨江店)_全渠道订单明细_*.xlsx
# 大梦_可能实验室_西湖店_菜品库_*.xlsx
# 大梦_可能实验室_滨江店_菜品库_*.xlsx
```
### 1. 在 V2 表追加 N 月空行 + 应用店色
确定 N 月起始行号(紧跟 N-1 月最后一行 + 1 空行分隔)。
```bash
# 例: 5 月起始 row 274 月结束 row 25, row 26 留空)
# 西湖 6 人 (rows 27-32) 浅绿
mcporter call tencent-docs sheet.set_cell_style --args \
'{"file_id":"VLSAvSvqvYzU","sheet_id":"BB08J2","start_row":27,"end_row":32,"start_col":0,"end_col":42,"bg_color":"FFE2EFDA"}'
# 滨江 6 人 (rows 33-38) 浅蓝
mcporter call tencent-docs sheet.set_cell_style --args \
'{"file_id":"VLSAvSvqvYzU","sheet_id":"BB08J2","start_row":33,"end_row":38,"start_col":0,"end_col":42,"bg_color":"FFDDEBF7"}'
```
### 2. 写入固定字段(每月不变)
为 12 名员工写入:月份、姓名、归属、部门、班次、岗位、兼任、状态、4 个标准(基本/KPI/管理/行为)。
可批量 set_range_value 一次发完。
### 3. 处理考勤资料
详见 `attendance_rules.md`
针对 N 月:
- 读取所有图片用 Read tool 看清字
- 读取 xlsx 用 openpyxl
- 读取 xls 用 xlrd(首次需 `python3 -m pip install xlrd`
- 读取腾讯文档夜班考勤(`file_id=IEqftKNqdqKa`)用 `get_content`
整理出每人的:出勤天数、加班小时数、备注(休息日期 + 年假说明 + 加班存/换钱)。
### 4. 写入考勤到 V2
set_range_value 写 cols 22 (出勤)、23 (法假)、24 (加班)、42 (备注)。
### 5. 写入营收数据
```bash
python3 ~/.claude/skills/dameng-salary/compute_cross.py "~/Downloads/大梦N月账务处理"
```
把脚本输出的 12 人 (部门业绩, 班次业绩, 部门×班次业绩) 写入 V2 cols 19/20/21。
记得应用特殊规则:
- 滨江厨房团队(刘/叶/尹):班次 = 0,部门×班次 = 0
- 中班(尹志艳):班次 = 0,部门×班次 = 0
### 6. 套用计薪公式
详见 `formulas.md`。对每个员工:
```python
basic = base * att / 26.08
ot_pay = 0 if banked else (oth / 9) * base / 26.08
kpi_res = kpi_std * 1.0 # 默认 1×
mgmt_res = mgmt_std * 1.0 if mgmt_std > 0 else 0
conduct_res = conduct_std # 全额合格
commission = dept_rev * COMMISSION_RATE.get(name, 0)
holiday = base / 26.08 * lh_days * 2
total = basic + ot_pay + kpi_res + mgmt_res + conduct_res + commission + holiday
remaining = total - (523.53 if name in ENROLLED else 0)
```
写入 V2 cols 2 (汇总)、3 (剩余)、26-37 (各计算项)、39/40 (社保,仅 4 人)。
### 7. 生成工资单 HTML
```bash
# 首次本月运行:建立生成器目录
mkdir -p "~/Downloads/大梦N月账务处理/工资单生成器"
cp ~/.claude/skills/dameng-salary/fetch_salary.py "~/Downloads/大梦N月账务处理/工资单生成器/fetch_data.py"
cp ~/.claude/skills/dameng-salary/slip_template.html "~/Downloads/大梦N月账务处理/工资单生成器/salary_slips.html"
# 拉数据
cd "~/Downloads/大梦N月账务处理/工资单生成器" && python3 fetch_data.py 2026NN
# 打开
open "~/Downloads/大梦N月账务处理/工资单生成器/salary_slips.html"
```
### 8. 按需迭代
用户可能要求:
- 改某人考勤(重算工资)
- 调员工部门
- 改 KPI 倍数
- 改提成费率
- 加新员工
每次修改后重新跑公式 → 重新 fetch_data → 用户刷新页面。
### 9. 用户验收 + 导出 PNG
用户在页面右上角点 `EXPORT ALL` 批量导出,或单卡片 `DOWNLOAD PNG`
---
## 已知坑点
### 行号偏移
腾讯文档 `set_range_value` 偶发 +1 行偏移。**写完务必读回校验**。
之前发生过:4 月写入时尹志艳被宋群喜覆盖。修复办法:append 到末尾再重排顺序。
### 出勤口径
"出勤天数"的口径:
- xlsx 文件用「实际出勤天数」= 当月到岗天数(不含调休/年假)
- 夜班手写考勤的「出勤」列:含年假,约等于 30 - 真休
- 用户最终口径(5 月起请遵循):**出勤 = 实际工作天数 + 年假天数(按工作日计薪)**
- **若不确定,问用户**
### 加班 "存 vs 换钱"
- 备注里看清楚
- "存"则 加班工资 = 0
- "换钱"或无注则正常发
### 朱秋风部门变动
4 月起 朱秋风 从「前厅」改到「精酿」部门,但岗位仍是「前厅运营」。新月份继承。
### 节假日补贴 vs 法定假期换薪
- V2 有两列:法定假期换薪 (col 34) 和 节假日出勤补贴 (col 36)
- **只用 col 36**col 34 保持 0
- 工资单 HTML 现在只读 col 36
### 滨江店是否有提成
3 月全员 0,4 月仍 0。**何时开始有,由用户决定**。
### "保洁阿姨" 不写入 V2
她是兼职,5 月起若仍出现在考勤图片,只采集数据不写表。
---
## 营收分析引擎(5月新增 build_analysis.py
当月若**没有**预生成的「N月营收分析xlsx」,用 skill 自带引擎从原始订单直接生成:
```bash
python3 ~/.claude/skills/dameng-salary/build_analysis.py "~/Downloads/大梦N月账务处理" 2026-NN
```
产出:`大梦可能实验室_N月营收分析_西湖店vs滨江店.xlsx`(13 sheets) + `_analysis_summary.json`(供工资写表)。
summary.json 里 `employees` 即 12 人 (部门业绩/班次业绩/部门×班次业绩) 三元组,直接写 V2 cols 19/20/21。
引擎已内置:菜品归口、团购→部门拆分、代金券剔除、部门×班次比例校正、滨江厨房/中班置0。
**强烈建议**:跑完用 workflow 做 5 路独立复核(部门POS/班次/团购/交叉/环比)——5 月就靠它抓出 2 个真 bug。
数据治理坑点(引擎已修,每月仍需注意):
- 🔴 **幽灵汇总行**POS「订单明细」末尾 `订单来源/订单号/营业日期 全='--'` 行,金额=全部真实行之和→订单级字段翻倍2x。必须 `if str(订单号).strip()=='--': continue`
- 🔴 **dish级 vs 订单级**:部门收入用「菜品明细」逐菜累加;订单级列被联台重复,勿用。
- 🟡 **酒头/畅饮票=精酿**(非调酒)。
- **分类名会变**:西湖 4月`brunch`→5月`brunch轻食简餐`,用 `startswith` 容错。
- **新团购套餐每月扫一遍**(5月新增「咖啡任选7次卡」→咖啡)。
- **约6%营收是"无菜品库"SKU** 靠关键词兜底,错归风险源。
详见 `analysis_playbook.md`
---
## 5 月跑通经验(已回填 · v1.1,覆盖更早的草稿口径)
**行号**5月 = rows 27-3913人,西湖27-33/滨江34-39),row 26 空行分隔。6月起始 = row 41。
**人员变动**
- 新增 **舒尧轩(昵称小胖)**,西湖调酒晚班/调酒师,底薪5600/KPI1000/行为500/管理0;无社保、暂无提成。
-**13 人**(西湖7+滨江6)。重排规则:西湖在前、滨江在后;舒尧轩紧跟胡舒(同调酒晚班)。
**出勤口径(用户确认,覆盖4月)**
- **年假计入出勤**(带薪)。出勤 = 当月天数 − 正常休息(不含年假)。各考勤表写明的出勤数为准。
- 何简28(3天年假计入)、郭思儒27、秦天29、胡舒27、舒尧轩27 等。
**法定假期(用户确认)**:五一 **2 天**,**全员**法定假期天数=2、全给双倍 → 节假补贴 = 底薪/26.08 × 4。
**加班**:胡舒4h存、舒尧轩1.5h存 → 不发;其余"换钱"或未注明照发。蔡逸丰"3+9换钱(五一白班)"=12h换钱。
**工资单两条新展示规则**slip_template.html 已内置,自动生效):
- 未交社保者基本工资下注明"已含社保 ¥1,745.78"。
- 出品提成行仅对有提成者显示,其余隐藏。
**考勤来源(5月实例)**:厨师考勤表.jpg(秦天/刘润祥/叶磊/尹志艳/何简)、小王考勤表.jpg(王瑛胤)、西湖店白班考勤表.jpg(宋群喜/郭思儒/保洁)、李想5月.xlsx、秋风5月.xlsx、腾讯夜班文档(胡舒/蔡逸丰/小胖=舒尧轩)。
**5月节假日**:五一2天(不是1天)。
**营收/出品分析**:本月新增完整分析能力,详见 `analysis_playbook.md`。5月双店POS四部门合计 西湖229,059/滨江156,326(+6.6%/+8.0%)。