分析 P1 已上线 L0

应收账龄与坏账准备

按四段账龄统计应收余额并按段计提坏账,各段之和等于应收总额,比例缺失或为 0 要说明未计提

技能 slugar-aging
所属栏目分析 成本 / 预算 / 经营
交付阶段P1 P1 在建 · 形成数据-票证-记账-报表-资金-分析-底座的完整闭环
版权© 2026 律令科技(深圳)有限公司开发 · 财友云(caiyouyun.cn)发布
这个包已上线。复制到本地即可离线运行;正文与用法以下方随包 SKILL.md 为准。

技能正文(随包 SKILL.md)

> **本地运行,零网络、免 API Key、数据不出电脑。**
> 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。

# 应收账龄与坏账准备

账龄表最常见的问题不是算错,而是**算出来对不上**:各段余额加起来比应收总额少一截,
一问才发现有几笔的日期是空的;或者某段比例漏填,系统按 0 处理,账面上「计提了」,
实际一分钱没提。

本包把这两件事写成了硬断言:

- **守恒断言 1**:各段余额之和 + 无法判断账龄余额 = 应收总额,差 0.01 元直接拒出
- **守恒断言 2**:逐笔计提之和 = 分段计提之和 = 坏账准备合计
- **分段不静默**:比例缺失或填 0 的段,写明「未计提」并说明原因

## 输入 / 输出

### 输入:1 个应收账期表 + (可选)1 个计提比例表

| 列 | 必须 | 说明 |
|---|---|---|
| 客户 | 建议 | 异常表里用来定位;缺省记「(未填客户)」 |
| 单据号 | 可选 | 便于回溯 |
| 起算日(开票日期 / 账单日期 / 结算日期 / 记账日期 / 到期日) | **必须** | 按这个顺序挑第一个存在的列 |
| 应收金额 | **必须** | 缺失或 ≤ 0 的行单列 |

起算日列一个都没有时本包直接拒绝——没有起算日就没有账龄,
也不会把未到期的按下不来。

### 计提比例表(可选 `--rates`)

两列:`账龄段, 计提比例`。比例写 `0.5%` / `2` / `0.02` 都认。
不给这张表时本包用**内置默认比例**(0-30 0.5% / 31-60 2% / 61-90 5% / 90+ 20%),
并在校验表与计提状态列反复标注「非本企业会计政策,须人工确认」。
**计提比例必须来自贵司会计政策,别直接用默认值出报表。**

### 输出:四件套(进 `_out/`,源文件一个字节都不动)

| 文件 | 内容 |
|---|---|
| `age_主表.csv` | 0-30 / 31-60 / 61-90 / 90+ 四段:笔数、余额、占应收总额、计提比例、坏账准备、计提状态;末行合计 |
| `age_异常表.csv` | 金额缺失 / 非正 / 无法判断账龄的行(带风险等级、原始行号) |
| `age_校验表.csv` | 起算日口径、基准日、守恒断言 1 / 2 的验证结果 |
| `fin-log.jsonl` | 处理日志(追加) |

## 用法

```bash
PY="<python 3.8+ 路径>"   # 纯标准库,无需 pip install
"$PY" <skill目录>/scripts/aging.py 应收账期.xlsx --execute
```

常用参数:

```bash
# 带上本公司会计政策的计提比例表 + 指定基准日
"$PY" aging.py 应收账期.xlsx --rates 计提比例.csv --as-of 2026-09-30 --execute

# 指定输出目录 + 记录操作人
"$PY" aging.py 应收账期.xlsx --out-dir _out --operator 张三 --execute

# 先预览、确认无误再落盘
"$PY" aging.py 应收账期.xlsx
```

**默认不写盘**——不加 `--execute` 只打印预览。

## 真实输出样例

实测(10 笔应收,基准日 2026-09-27,比例表故意给 61-90 填 0、90+ 留空):

```
方案:age_应收账期_好表.xlsx(10 行数据,起算日列「开票日期」,基准日 2026-09-27)
计提比例来源:age_计提比例.csv

--- 账龄分段与坏账准备(主表)---
  账龄段      账龄区间             笔数           应收余额        占比      计提比例           坏账准备 计提状态
  0-30     0 ~ 30 天          4      238000.00    35.47%     0.50%        1190.00 已按 0.50% 计提
  31-60    31 ~ 60 天         2      138000.00    20.57%     2.00%        2760.00 已按 2.00% 计提
  61-90    61 ~ 90 天         1      135000.00    20.12%     0.00%           0.00 未计提:61-90 分段的计提比例在表里填的是 0,不按「已计提 0%」静默处理
  90+      90 天以上            3      160000.00    23.84%         —           0.00 未计提:90+ 分段在计提比例表里没给比例(缺失或填的不是数字)
  合计       各段之和             10      671000.00   100.00%         —        3950.00 计提前坏账准备合计 = 0(本期按账龄新计提);各段余额之和 = 应收总额

  应收总额(有效行)671000.00 元,其中已分段 671000.00 元,无法判断账龄 0.00 元(0 行)
```

校验表的关键几行:

```
守恒断言 1(各段 + 无法判断账龄 = 应收总额),671000.00 + 0.00 = 671000.00,差异 0.00
坏账准备合计(计提前),0.00(本包不读入期初坏账准备,期初余额需人工并入报表)
坏账准备合计(计提后),3950.00
守恒断言 2(逐笔计提之和 = 分段计提之和),3950.00 = 3950.00,差异 0.00
```

失败路径实测(坏数据 + 缺日期列,全部「算不出」,不吐假数):

```
--- 异常表(4 条)---
  [高] 行2  甲坏司        应收金额缺失或不是数字,本行不参与分段与坏账计提
  [高] 行3  乙坏司        应收金额非正(-8000.00):疑似未开票或红字冲销,本行不参与分段与坏账计提
  [中] 行4  丙坏司        无法判断账龄:起算日(不见)读不出来,本行未计入任何账龄分段
  [中] 行5  丁坏司        无法判断账龄:起算日(空)读不出来,本行未计入任何账龄分段
```
```
【算不出】表里找不到任何日期列(开票日期 / 账单日期 / 结算日期 / 记账日期 / 到期日),账龄无法判断
建议:补一列起算日(开票日或账单日)后再跑;缺账期的不按 0 天计入任何分段
```

## 拒绝权:什么情况下拒绝执行

| 情况 | 本包做法 |
|---|---|
| 没有「应收金额」列 | 拒绝:无法分段统计 |
| 没有任何起算日列 | 拒绝:账龄无法判断,不按下不来 |
| 某行日期读不出来 / 空 | 标「无法判断账龄」,进异常表,**不计入任何分段** |
| 某行金额缺失或不是数字 | 进异常表,不参与分段与计提 |
| 某行金额为 0 或负 | 进异常表(疑似未开票 / 红字冲销) |
| 守恒断言 1 不过(各段 + 无法判断账龄 ≠ 应收总额) | 拒绝输出并打印差多少 |
| 守恒断言 2 不过(逐笔计提 ≠ 分段计提) | 拒绝输出并打印差异 |
| 某段计提比例 > 100% | 拒绝:先确认比例表填的是比例还是百分数 |
| 基准日 `--as-of` 不是有效日期 | 拒绝 |

**本包不会把「比例缺失」当 0 计提,也不会把「无法判断账龄」的行塞进 0-30 段充数。**

## 关键设计

1. **账龄从起算日算起,不是从"今天"倒推到期日**。起算日优先取开票日 → 账单日 →
   结算日 → 记账日 → 到期日,选中的那列会写进校验表;账龄天数 = 基准日 − 起算日。
2. **日期读不出来的行,单独袋起来**。它们既不是「0 天」也不是「超期」,
   而是「不知道」——本包让它们不进任何分段,并在合计行注明还有多少元没分段。
3. **未到约定结算日的按 0 天计**,并在状态里写明「未到约定结算日(起算日 x),
   按 0 天计入 0-30 段」,避免被误当成真的逾期。
4. **缺失比例 ≠ 0 比例**。前者写「未提供比例」,后者写「表里填的是 0,不按已计提 0% 静默处理」,
   两种情况都在「计提状态」列明说「未计提」。
5. **不读入期初坏账准备**。本包只算本期按账龄新计提的金额,计提前合计为 0;
   期末余额要自己叠上期初,否则会少提。
6. **占比分母是应收总额**(含无法判断账龄的余额),所以四段占比之和通常小于 100%,
   差额正好是「无法判断账龄」那部分。

## 人工复核(必读)

- 计提比例必须来自贵司**现行会计政策**,用内置默认比例出的数只能做量级参考
- 「无法判断账龄」的余额必须人工补日期后重跑;这部分余额既没分段也没计提,
  报表上会体现为「账龄表不平」,别直接忽略
- 本包按**账龄组合提**,未考虑单笔金额大小与担保 / 质押情况,实务上常需叠加单项计提
- 基准日建议固定在月末最后一天,中途换基准日会让账龄整体平移
- 起算日用「开票日」还是「账单日」,不同行业差别很大,先用一张历史表对一次

## 相邻路线转交

| 用户要做的事 | 转交给 |
|---|---|
| 应收到期日与付款提醒 | `bill-due-remind` |
| 应收与回款勾稽 | `ledger-reconcile` |
| 客户欠款集中度与信用评级 | `customer-profit-analysis` |
| 坏账核销申报与税务处理 | `tax-form-fill` |
| 管理层一页摘要 | `exec-summary` |

## 可直接复制的说法

```text
按 0-30、31-60、61-90、90+ 四段给我的应收账龄表,每段给余额和笔数,
再按计提比例算出各段坏账准备和合计。
计提比例表我单独给你,哪一段的比例没填或者填的是 0,
在主表里写「未计提」并说明原因,不要按 0 默默算进去。
日期读不出来或者缺账期的行,标「无法判断账龄」,单独列进异常表,不要塞进任何分段。
各段余额加起来必须等于应收总额,这一点请帮我校验,对不上就别出表。
```

## 做完怎么算完成

- [ ] 校验表「守恒断言 1」为 0.00:各段余额 + 无法判断账龄 = 应收总额
- [ ] 校验表「守恒断言 2」为 0.00:逐笔计提之和 = 分段计提之和
- [ ] 主表「计提状态」列已逐段看过,未计提的段都写明了原因
- [ ] 「无法判断账龄」的每一行都已追到原因(日期格式错?还是真的没账期?)
- [ ] 计提比例已换成本公司会计政策,内置默认值没有直接出报表
- [ ] 起算日口径(开票日 / 账单日)已与财务确认,并写入校验表
- [ ] 期末坏账准备 = 本表计提 + 期初余额,已人工叠加

---

本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。

版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。
本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。

允许个人及企业内部免费使用、复制、修改,包括内部生产环境。
未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。
各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。

相邻技能

分析 规划中P1 在建 已上线

成本归集与分摊

按工时/产量/面积/收入等动因分摊,输出分摊过程表

L0 · 成本 / 预算 / 经营
分析 规划中P1 在建 已上线

多维度毛利分析

按产品/客户/区域/月份拆解毛利与贡献边际

L0 · 成本 / 预算 / 经营
分析 规划中P2 长尾 已上线

预算执行差异分析

预算 vs 实际的额差率差与预警清单

L0 · 成本 / 预算 / 经营
分析 规划中P2 长尾 已上线

本量利与盈亏平衡

盈亏平衡点、安全边际、敏感性与情景测算

L0 · 成本 / 预算 / 经营
分析 规划中P2 长尾 已上线

经营分析素材生成

月度经营分析的数字、结论与图表数据源一次产出

L0 · 成本 / 预算 / 经营
分析 规划中P1 在建 已上线

费用报销汇总

按部门/项目/费用类型三维汇总,本期-上期-变动额-变动率,未审批与缺发票不入正式汇总,超预算单列

L0 · 成本 / 预算 / 经营
分析 规划中P1 在建 已上线

进销存差异检查

理论期末=期初+入库-出库,与系统/盘点/账面三方比对,负库存与异常单价优先,按影响金额排序

L0 · 成本 / 预算 / 经营
分析 规划中P2 长尾 已上线

部门费用与降本分析

按部门/项目/供应商汇总增长贡献,区分一次性与持续性费用,识别单价上涨/重复采购/供应商集中

L0 · 成本 / 预算 / 经营
分析 规划中P2 长尾 已上线

管理层一页摘要

一句话结论+5 个核心指标+3 个关键变化+风险影响+待决策事项,事实/假设/建议三段分开,每个结论带数据依据

L0 · 成本 / 预算 / 经营
分析 规划中P1 在建 已上线

客户盈利分析

按客户算收入成本毛利毛利率,亏损客户与成本缺失单列标高风险,不按 0 成本算毛利

L0 · 成本 / 预算 / 经营
票证 规划中P0 计划 已上线

发票查重

按发票号码+代码+金额+日期组合查重,拦住重复报销与重复入账

L0 · 发票 / 票据
票证 规划中P0 计划 已上线

发票台账

进销项发票台账,按月/客户/税率汇总,导出 CSV

L0 · 发票 / 票据
本页内容由本地构建生成于 2026-09-27。技能正文以随包 SKILL.md 为准。