calven-qi

weekly-flow-collection

药品销售流向每周/每月清洗与代表业绩汇总系统(配置驱动通用版,跨平台Windows/macOS,可多地区多同事复用)。读取当周6大商业渠道(人福/华润/九州通/国控/南药/上药)导出的原始流向,自动统一日期、按对照字典把商品名归一到品种组、把医院/药店归属到分管代表、九州通调拨腿去重、批发企业不计、G1/X认账判定,生成本周流向总表(明细+代表×品种汇总+未匹配待确认)。适用于:地区经理每周流向收集、代表任务完成度跟踪、月度业绩汇总。触发词:做本周流向/洗流向/流向清洗/流向整理/本周流向表/汇总代表业绩/填任务完成表/填月流向表/初始化流向工具。

calven-qi 0 Updated 1w ago

Resources

7
GitHub

Install

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)。

每周标准流程

  1. 确认周文件夹:用户把当周各渠道导出文件放进一个文件夹(如 7月第二周/),文件名保持渠道默认命名。
  2. 写周配置:更新 scripts/week_config.json(用文件写入工具,UTF-8;中文路径绝不走命令行参数,Windows/中文环境会乱码):
    {"周文件夹":"<当周文件夹绝对路径>","起":"2026-07-08","止":"2026-07-14","月":7,"周序":2}
    起止按自然周(周一~周日),左闭右闭。
  3. 跑引擎cd scripts && node clean_week.js
  4. 逐条给用户看控制台复核:各源条数、代表×品种认可汇总+合计盒数、市容错救回X状态留痕未匹配-疑似分管(字典缺)
  5. 产出{输出目录}/{月}月W{周序}流向总表_{今天}.xlsx,3 个 sheet:分管流向总表(逐条明细)|代表品种汇总(代表×品种盒数/金额/来源)|未匹配待确认
  6. 确认后再谈下游(填月流向表 / 填任务完成表 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/YYnorm 已统一。
  • 字典缺的疑似分管:控制台列"疑似分管(字典缺)",问用户是否补进对照字典后重跑,别擅自认账。
  • 不改原表:引擎只产出本周总表;填月表/任务表先做副本。

推广到新地区/新同事

一次性初始化三步:① 装 Node + 在 scripts/npm install(装 xlsx);② 照 templates/对照字典_模板.xlsx自己地区的对照字典(医院→代表、商品名→品种组、G1/X 认账,这是清洗准不准的根本,必须本人填);③ 改 region_config.json(地区名/项目根/单价表/地区关键词)。之后每周只改 week_config.json 跑引擎。完整分平台步骤见 references/初始化说明.md