批发欠款管家
定位
商家从批发系统导出订单主表 Excel → skill 自动识别字段 → 3 秒输出"谁欠钱、欠多久、该催谁"。
隐私卖点:数据只在本地分析,不上传任何服务器。
核心能力
- 欠款总览:总欠款、欠款客户数、未结订单数、回款率、逾期率
- 客户风险分级:D/C/B/A 四级 + TOP10 优先催收清单
- 业务员回款排行:每人负责的欠款总额、回款率对比
- 客户预存余额:超收部分自动计算预存(已收款 > 订单金额)
- 催款话术生成:微信/短信/电话三渠道 × A-D 四级语气,选中客户一键生成(D 强硬催收 → A 客气提醒)
- 自然语言问数:直接提问"谁欠最多""通源商贸欠多少""哪个业务员欠最多"等,返回一句话答案
工作流
步骤 1:识别文件并运行分析
用户上传订单 Excel 后,执行分析引擎:
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>"
<PYTHON_PATH>:隔离环境 Python(见下方环境配置)<SKILL_DIR>:本 skill 所在目录<FILE_PATH>:用户上传的 Excel 文件路径
分析引擎会输出完整报告(欠款总览 + 风险分级清单 + 业务员排行 + 预存余额),并在报告末尾附上更新提醒(见下方"更新提醒机制")。
步骤 2:呈现报告
将 analyze.py 的输出原样呈现给用户,用 Markdown 表格美化。报告已包含分级清单和建议动作,无需额外加工。特别注意报告末尾的更新提醒部分——这是 skill 持续粘性的核心,要原样展示(回款追踪、数据过期提醒都是用户关心的)。
步骤 3:处理用户追问
用户想看某客户的催款话术:
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --customer "客户名称"
输出针对该客户的催款文案(含金额、账龄、订单号、建议沟通方式)。默认微信渠道,可指定渠道:
# 短信话术(精简直接)
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --customer "客户名称" --channel sms
# 电话话术(口语化脚本,含开场/要点/施压/收尾)
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --customer "客户名称" --channel phone
用户直接问数(自然语言查询):
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --ask "谁欠最多"
内置可回答问题:谁欠最多 / 总共欠多少 / 逾期情况 / 有几家客户欠款 / XX客户欠多少 / 哪个业务员欠最多 / 预存了多少 / 高风险客户有哪些 / 回款率多少 / 风险分布。未识别的问题会列出可问示例。
用户想调整阈值:
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --aging 45 75 105
账龄阈值改为 45/75/105 天。金额倍数也可调:
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --multiplier 3 8
金额阈值改为订单均值×8(严重)/×3(高)。
用户想导出报告:
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --export "<OUTPUT_PATH>"
导出为文本文件。
用户想禁用更新提醒(如调试):
"<PYTHON_PATH>" "<SKILL_DIR>/analyze.py" "<FILE_PATH>" --nostate
不读取/不写入状态文件,不显示更新提醒。
更新提醒机制
skill 每次分析自动保存状态快照到 state.json(时间戳 + 欠款总额 + 客户数 + 风险分布 + TOP5 欠款客户),下次分析自动对比并输出提醒:
| 场景 | 输出 |
|---|---|
| 首次分析 | "已保存本次结果作为基准,建议每周更新一次订单导出" |
| 数据变化 | 总欠款 ¥A → ¥B(±¥X)、欠款客户 N 家→M 家、未结订单变化 |
| 回款追踪 | 上次 TOP5 客户的回款情况:⬇️ 回款 ¥X / ✅ 已结清 / ⬆️ 欠款增加需关注 / ➡️ 无变化 |
| 数据过期 | 距上次分析 > 7 天 → "⚠️ 数据已超过 7 天未更新,建议重新导出订单数据再分析一次" |
| 无变化 | "数据与上次一致(可能是同一份文件或数据未变化)" |
对话指引:当用户问"和上次比有什么变化""谁回款了"时,直接引导用户重新上传最新导出文件跑一次分析,对比逻辑自动输出。
skill 版本更新提醒
skill 目录下 VERSION.txt(当前版本号)+ CHANGELOG.md(更新日志)。每次运行对比 VERSION.txt 与 state.json 中的 last_seen_version,版本变化时自动提示:
> 🆕 skill 已更新到 v1.2.0
> 上次记录版本: v1.1.0 → 当前: v1.2.0
> 本次更新:
> - 新增:xxx
> - 修复:xxx
维护规范(升级 skill 时必须遵守):
- 修改功能后,更新
VERSION.txt文件(语义化版本:修复补丁 +0.0.1,新功能 +0.1,破坏性变更 +1) - 在
CHANGELOG.md顶部新增## vX.Y.Z (日期)段落,逐条列出本次变更(用户运行时会看到这段内容) - 无需任何其他操作——下次用户运行 skill 自动提示新版本
步骤 4:记忆用户偏好
如果用户调整过阈值,记住"该用户的账期/金额偏好",下次分析自动应用。通过对话确认后写入用户记忆。
字段识别规则
批发订货系统导出支持拖拽排序列,所以必须按列名匹配,不能按列顺序。
| 业务字段 | 正则匹配规则 |
|---|---|
| 订单号 | /订单号\|单号\|编号/ |
| 下单时间 | /下单时间\|创建时间\|订单时间\|下单日期\|日期/ |
| 客户名称 | /客户名称\|客户简称\|客户名\|客户/ |
| 客户简称 | /客户简称\|简称/ |
| 业务员 | /业务员\|销售员\|销售\|业务/ |
| 订单金额 | /订单金额\|订单总金额\|总金额\|金额/ |
| 已收款金额 | /已收款\|实收金额\|实收\|已收/ |
| 收款状态 | /收款状态\|付款状态/ |
| 订单状态 | /订单状态\|状态/ |
| 商品数量 | /商品数量\|数量/ |
| 出库数量 | /出库数量\|已出库\|出库/ |
| 待出库数量 | /待出库\|未出库/ |
| 备注 | /备注\|说明/ |
识别失败兜底:如果"下单时间""订单金额"等必需字段识别不到,提示用户手动指定列名。
业务规则
| 规则 | 说明 |
|---|---|
| 欠款计算 | 欠款 = max(0, 订单金额 - 已收款金额),不依赖导出表是否有"欠款金额"列 |
| 超收处理 | 预存 = max(0, 已收款 - 订单金额),多收的钱计入客户预存余额 |
| 排除订单 | 订单状态 ∈ {已作废, 已退款, 关闭, 取消} 的订单不纳入分析 |
| 账龄计算 | 账龄天数 = 今天 - 下单时间,以下单时间为准(用户可指定其他日期列) |
| 收款状态枚举 | 待收款 / 部分收款 / 全部收款 / 超收 |
风险分级逻辑
默认阈值(自适应 + 可微调):
金额维度(相对值,适应不同规模商家):
订单均值 = mean(有效订单金额)
严重阈值 = 订单均值 × 10
高风险阈值 = 订单均值 × 5
账龄维度(绝对值,批发行业常见账期):
30 天 / 60 天 / 90 天
分级规则(满足任一条件取高级别):
D 严重:账龄 > 90 天 OR 欠款 > 订单均值×10 → 停货 + 电话催收
C 高 :账龄 60-90 天 OR 欠款 > 订单均值×5 → 本周内催收
B 中 :账龄 30-60 天 → 两周内跟进
A 低 :账龄 < 30 天 → 正常账期观察
环境配置
# Python 路径(隔离环境,已安装 openpyxl)
PYTHON_PATH="C:/Users/15290/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
# Skill 目录
SKILL_DIR="C:/Users/15290/.workbuddy/skills/wholesale-debt-manager"
输出格式示例
═══════════════════════════════════════
批发欠款管家 · 分析报告
分析时间:2026-08-24
数据来源:订单主表_模拟样本.xlsx
═══════════════════════════════════════
【欠款总览】
有效订单:43 笔(排除作废/退款 10 笔)
总订单金额:¥1,167,427.66
总欠款金额:¥537,894.99
欠款客户数:15 家
未结订单数:21 笔
回款率:54.0%
逾期率(>30天):62.3%
客户预存余额:¥22,973.54
【风险分级清单 · TOP10 优先催收】
排名 | 客户 | 业务员 | 欠款金额 | 账龄 | 风险 | 建议动作
1 | 城南批发部 | 张伟 | ¥52,000 | 96天 | D严重 | 停货+电话催收
2 | 永辉便利店 | 张伟 | ¥38,500 | 71天 | C高 | 本周内催收
...
【业务员回款排行】
业务员 | 负责客户 | 欠款总额 | 回款率
张伟 | 4家 | ¥180,000 | 45%
...
【客户预存余额】
客户 | 预存金额
惠民农产品直销 | ¥704.87
...
限制
- 仅支持 .xlsx / .xls 格式
- 字段识别依赖列名包含关键词,极端情况可能漏匹配(会提示用户手动指定)
- 账龄以下单时间为近似值,如有"应收日期"列更精确(未来版本支持)
- 不涉及数据库直连,纯本地文件分析
- 更新提醒基于本地 state.json,删除该文件后首次分析会视为"首次"(重新建立基准)