药品销售流向每周/每月清洗与代表业绩汇总系统(配置驱动通用版,跨平台Windows/macOS,可多地区多同事复用)。读取当周6大商业渠道(人福/华润/九州通/国控/南药/上药)导出的原始流向,自动统一日期、按对照字典把商品名归一到品种组、把医院/药店归属到分管代表、九州通调拨腿去重、批发企业不计、G1/X认账判定,生成本周流向总表(明细+代表×品种汇总+未匹配待确认)。适用于:地区经理每周流向收集、代表任务完成度跟踪、月度业绩汇总。触发词:做本周流向/洗流向/流向清洗/流向整理/本周流向表/汇总代表业绩/填任务完成表/填月流向表/初始化流向工具。
Resources
7Install
npx skillscat add calven-qi/weekly-flow-collection Install via the SkillsCat registry.
SKILL.md
每周流向清洗 Skill (配置驱动 · 跨平台)
核心能力
- 6 渠道自动解析:人福/华润/九州通/国控/南药/上药,按文件名自动探测,缺哪个跳哪个
- 品种组归一:原始商品名/通用名 → 标准品种组(对照字典驱动,莎尔福按剂型分片/栓剂/灌肠液)
- 医院归属到代表:医院/药店 → 关联医院 → 分管代表(含同院不同品种拆分规则)
- 去重与合规口径:九州通调拨腿去重、批发企业不计、市字容错(少市/加市都匹配)
- G1/X 认账:G1/待开发/新开发=认可计业绩;X=不认可,流向留痕但不计业绩
- 跨平台:纯 Node.js(含内置 zlib 解压华润),Windows 与 macOS 均可运行,零 PowerShell 依赖
引擎与配置
引擎 scripts/clean_week.js 读同目录两个配置(均 UTF-8):
region_config.json(一次性/每地区一份):地区名 / 项目根 / 对照字典路径 / 输出目录 / 单价表(可选) / 地区关键词。见scripts/region_config.示例.json。week_config.json(每周变):周文件夹 / 起 / 止 / 月 / 周序。见scripts/week_config.示例.json。
规则全部数据驱动来自对照字典.xlsx(每地区自己维护,模板见 templates/对照字典_模板.xlsx)。
每周标准流程
- 确认周文件夹:用户把当周各渠道导出文件放进一个文件夹(如
7月第二周/),文件名保持渠道默认命名。 - 写周配置:更新
scripts/week_config.json(用文件写入工具,UTF-8;中文路径绝不走命令行参数,Windows/中文环境会乱码):
起止按自然周(周一~周日),左闭右闭。{"周文件夹":"<当周文件夹绝对路径>","起":"2026-07-08","止":"2026-07-14","月":7,"周序":2} - 跑引擎:
cd scripts && node clean_week.js - 逐条给用户看控制台复核:各源条数、代表×品种认可汇总+合计盒数、市容错救回、X状态留痕、未匹配-疑似分管(字典缺)。
- 产出:
{输出目录}/{月}月W{周序}流向总表_{今天}.xlsx,3 个 sheet:分管流向总表(逐条明细)|代表品种汇总(代表×品种盒数/金额/来源)|未匹配待确认。 - 确认后再谈下游(填月流向表 / 填任务完成表 M{月}W{周} 列)——独立步骤,引擎不碰月表/任务表,改原表一律先做副本。
源文件 → 渠道映射(按文件名探测)
| 渠道 | 文件名特征 | 读法 | 关键列 |
|---|---|---|---|
| 人福 | 含人福 .xlsx |
Sheet0 | 销售商/商品名称/销售日期/数量/含税价 |
| 华润 | SaleList*.xlsx |
内置zlib解压取XML(直接读会内存溢出) | 客户名称/商品名称/出库日期/数量/价格 |
| 九州通 | 流向查询导出数据.xlsx |
Sheet0 | 销往单位/二级单位名称/药品名称/日期/客户类型 |
| 国控 | 药品销售订单*.xlsx |
sheet销售订单 |
客户名称/品名/制单时间/订单数量/含税价格 |
| 南药 | 流向查询销售查询*.xls |
GBK 伪HTML表 | 客户/商品名称/发票日期/开票数量/单价 |
| 上药 | 含上药 .xls |
sheet销售明细 |
客户名称/商品名+通用名/销售时间/销售数量/含税单价 |
清洗规则速查(数据驱动于对照字典.xlsx 五张表)
- 商品名映射:关键词→品种组+剂型;莎尔福按栓/灌肠/片细分。匹配不到→"未匹配待确认"。
- 销售商映射:原始名/别名→关联医院+默认分管人;市字容错(
某某市中医院↔某某中医院,少市/加市都匹配)。 - 拆分规则:按医院×品种覆盖归属(如某医院的某品种归另一位代表)。
- 院内品种标记:当前标记=X→"X状态",体现+留痕+不计业绩;其余"认可"。
- 九州通去重:销往单位=九州通/药九九 且该终端×品种已有直营终端记录的调拨腿剔除;客户类型=批发企业不计。
- 红冲:负数自然抵消,某品种可能=0 盒,保留显示。
关键坑
- 中文命令行参数会乱码:所有中文路径/数据走
week_config.json(UTF-8) 或写入工具,绝不塞进 shell 参数。 - 华润必须解压读:
SaleList*.xlsx直接XLSX.readFile会 "Failed to allocate memory",引擎已用内置 zlib 提取xl/sharedStrings.xml+xl/worksheets/sheet1.xml解析(跨平台,无外部解压命令)。 - 日期格式各源不同:南药
YYYY/M/D,别的有 ISO/yyyymmdd/M/D/YY,norm已统一。 - 字典缺的疑似分管:控制台列"疑似分管(字典缺)",问用户是否补进对照字典后重跑,别擅自认账。
- 不改原表:引擎只产出本周总表;填月表/任务表先做副本。
推广到新地区/新同事
一次性初始化三步:① 装 Node + 在 scripts/ 里 npm install(装 xlsx);② 照 templates/对照字典_模板.xlsx 填自己地区的对照字典(医院→代表、商品名→品种组、G1/X 认账,这是清洗准不准的根本,必须本人填);③ 改 region_config.json(地区名/项目根/单价表/地区关键词)。之后每周只改 week_config.json 跑引擎。完整分平台步骤见 references/初始化说明.md。