应收账款自动化:根据提供的记录核查账龄
应收账款自动化可以依据已授权的发票、付款和贷项记录,准备可重复生成的账龄视图。固定报告日期,根据提供的分配记录计算每笔剩余余额,再按币种及相对于所提供到期日的逾期天数,对未结金额分组。保留有争议和不完整的记录供复核。
这里的应收账款自动化任务是一份确定性报表,不发送催收消息,也不更新账簿。哪些付款和贷项属于哪张发票,由提供的分配记录决定;本工作流不会自行发现这些关系。
本设计的能力状态:已有文档说明。 Load CSV、Python Interpreter 和 Update Range 已在组件目录中说明;Ai Flowi 未针对应收账款账龄进行生产环境测试。
可复制的账龄输入契约
在固定的导出快照中,每张发票占一行。保留来源修订版本、币种、到期日、提供的发票金额,以及分别分配的付款和贷项金额。将分配引用保留在行外或行旁,使复核人员能追溯这些合计如何得出。
invoice_ref,currency,due_date,invoice_amount,allocated_payments,allocated_credits,disputed,source_revision
AR-A,MYR,2030-04-30,1000.00,250.00,50.00,false,SYNTHETIC-1
AR-B,MYR,2030-03-31,400.00,0.00,0.00,false,SYNTHETIC-1
AR-C,MYR,2030-03-30,300.00,100.00,0.00,false,SYNTHETIC-1
AR-D,USD,2030-03-01,200.00,0.00,20.00,false,SYNTHETIC-1
AR-E,MYR,2030-02-28,150.00,0.00,0.00,true,SYNTHETIC-1
AR-F,MYR,,90.00,0.00,0.00,false,SYNTHETIC-1
此表中的所有日期和金额均为假设值。虚构报告日期为 2030-04-30;它是练习输入,不是本页发布日期,也不是实时余额日期。应按来源系统的日期政策,只纳入在报告截止日当天或之前生效的分配记录。
在本契约中,已分配贷项以正数表示扣减金额。尚未分配到发票的贷项或付款,应单独保留,直到来源流程完成分配。绝不能从每张发票中都扣除同一笔客户级付款;如果提供的起始金额已经扣除了贷项,也绝不能再次扣减这些贷项。
计算前先定义账龄区间
剩余余额等于提供的发票金额,减去已分配付款,再减去已分配贷项。本例以完整日历日计算账龄,即报告日期减去所提供的到期日。到期日与报告日期相同,逾期天数为零,应归入尚未到期区间。
| 逾期天数 | 区间 | 复核处理 |
|---|---|---|
| 零或负数 | 尚未到期 | 保留到期日;未来到期不等于日期缺失。 |
| 1 至 30 | 1–30 天 | 第 30 天仍属于此区间。 |
| 31 至 60 | 31–60 天 | 第 31 天和第 60 天都属于此区间。 |
| 61 或更多 | 61+ 天 | 此区间从第 61 天开始。 |
| 到期日缺失 | 未分账龄异常 | 保留余额;不纳入按日期划分的区间。 |
争议是独立标记,不是另一种算术规则。将其余额列入对应账龄区间,同时列入争议子集,但不能将该子集再次加到总余额中。日期缺失或无效时,应记录为异常,不能假定付款期限。
虚构账龄视图计算示例
| 发票 | 余额 | 逾期天数 | 预期分类 |
|---|---|---|---|
| AR-A | MYR 700.00 | 0 | 尚未到期 |
| AR-B | MYR 400.00 | 30 | 1–30 天 |
| AR-C | MYR 200.00 | 31 | 31–60 天 |
| AR-D | USD 180.00 | 60 | 31–60 天 |
| AR-E | MYR 150.00 | 61 | 61+ 天;争议子集 |
| AR-F | MYR 90.00 | 未知 | 未分账龄异常 |
MYR 起始金额合计为 1,940.00,已分配付款合计为 350.00,已分配贷项合计为 50.00。剩余余额合计为 1,540.00:按日期划分的区间合计为 1,450.00,未分账龄异常另有 90.00。有争议的 150.00 已包含在按日期划分的区间中。
USD 记录单独对账:200.00 减去 20.00 等于 180.00。不要把 MYR 和 USD 加成一个金额合计,也不要使用未说明的汇率换算。这些是根据编写的数据集得出的预期结果,不是实际观测的客户余额。
可运行的小数与边界检查
这个小型标准库示例保留精确的小数金额,并测试 30/31/60/61 天的边界。它要求输入已复核的小数字符串和 ISO 日期字符串。在更大范围计算前,应验证空白、非有限值、负数分配金额及格式错误的日期输入;使用此辅助函数前,必须满足输入契约。
from datetime import date
from decimal import Decimal
def age_bucket(days):
if days <= 0:
return "not_yet_due"
if days <= 30:
return "1_30"
if days <= 60:
return "31_60"
return "61_plus"
as_of = date.fromisoformat("2030-04-30")
balance = Decimal("1000.00") - Decimal("250.00") - Decimal("50.00")
assert balance == Decimal("700.00")
assert [age_bucket(n) for n in (0, 30, 31, 60, 61)] == [
"not_yet_due", "1_30", "31_60", "31_60", "61_plus"
]
assert age_bucket((as_of - date.fromisoformat("2030-03-31")).days) == "1_30"
print(balance, age_bucket(0))
负数剩余余额必须保留为超额分配异常,不能强制归零。已全额结清的发票剩余余额为零,可与未结余额分开列示。接受报表前,应核对所有来源行,包括这些异常。
配置准备流程与受控报表写入
示例配置,并非有记录的测试
准备 AI Flowi Workflow、已授权的导出记录、你自己的 Google 账户,以及能编辑专用报表区域的连接。这项计算不需要模型或模型提供商密钥。如果另行添加任何 API,则需要你的提供商账户和凭据,提供商收费不包含在方案内。
导入时应遵循 Load CSV 的来源控制;本报表需要上述输入契约中的发票级分配记录和明确的争议标记。
- 使用 Load CSV 加载固定的导出快照。分配列缺失时,应拒绝输入,不能将缺失当作零;每条获接受的发票行都应保留准确的来源修订版本。
- 设置 Python Interpreter 的
global_imports,包含csv、datetime、decimal和json;将已复核的校验、账龄和对账代码放入python_code。上面的小型代码片段用于检查规则,并非完整的 CSV 处理器。 - 明确输入移交方式。Python Interpreter 提供的是兼容 Message 的代码输入,不是 JSON 数据端口。范围受限的试用中,应将已检查的虚构记录作为固定数据,放入复核人员编写的代码;不要将不可信的 CSV 单元格或生成的文本转成可执行指令。
- 检查其
resultsJSON。根据已认可的计算结果,准备由表头和数据行组成的矩形数组;导出定义没有说明结果封装结构,也没有说明自动数组映射。 - Update Range 应使用共用的 Sheets 写入设置;账龄报表专用的目标结构见下方列映射。
将账龄输出映射到注明日期的报表区域
对于六张虚构发票,将 range_name 设为 AgeingReview!A1:M7:一行表头和六行数据。在 values 中,先放明确的表头数组,再为每张发票放入一个宽度相同的数组;将 include_object_headers 设为 false,使本设计仅提供一次自己的表头。选择导出的 value_input_option 值 "RAW",以保留已准备的文本。
| 列 | 按顺序排列的字段 | 验收检查 |
|---|---|---|
| A–D | reporting_date, source_revision, currency, invoice_ref | 每行标明同一个截止日和各自的来源修订版本;币种保持明确。 |
| E–I | due_date, days_overdue, invoice_amount, allocated_payments, allocated_credits | 空白到期日和账龄保持空白;金额保留已复核的小数字符串。 |
| J–M | remaining_balance, age_bucket, disputed, exception_reason | 争议不替代账龄;到期日缺失应显示为未分账龄异常。 |
reporting_date,source_revision,currency,invoice_ref,due_date,days_overdue,invoice_amount,allocated_payments,allocated_credits,remaining_balance,age_bucket,disputed,exception_reason
2030-04-30,SYNTHETIC-1,MYR,AR-A,2030-04-30,0,1000.00,250.00,50.00,700.00,not_yet_due,false,
2030-04-30,SYNTHETIC-1,MYR,AR-F,,,90.00,0.00,0.00,90.00,unaged,false,missing_due_date
这两行 CSV 展示首张和末张发票的输出;完整目标区域还需要 AR-B 至 AR-E。将币种汇总放在单独且标注清楚的区域,避免读者把汇总误认为另一张发票。将六个目标发票引用逐一匹配回六条输入,并分别比较 MYR 1,540.00 和 USD 180.00。如果后续快照的发票更少,应使用新的复核区域,并明确标识当前快照;旧行不得进入新的合计。
为什么在依据应收账款报表行动前要先完成对账?
在输出中清楚保留报告日期、来源修订版本、币种小计、按日期划分的区间、未分账龄记录和争议子集。测试未来到期日、到期日缺失、部分付款、已分配贷项,以及金额超过发票余额的贷项。求和前,必须解决重复发票行。
报表自动化指南介绍更完整的报表生命周期;JSON 转 CSV 介绍导出结构,Google Sheets 参考文档介绍目标操作。本报表不发送催收消息、不匹配银行付款,也不向账簿过账。如果会计系统现有的账龄报表已保留所需分配记录和截止时间,就使用该报表。
准备阶段的用量
套餐:Go 年付方案每月 USD8 起(月付 USD10),Plus 年付方案每月 USD16 起(月付 USD20),Pro 100 年付方案每月 USD80 起(月付 USD100),Pro 200 年付方案每月 USD160 起(月付 USD200),Pro 500 年付方案每月 USD400 起(月付 USD500),每月包含 5,000 至 250,000 个 Flowi Tokens,并支持充值;每次节点运行消耗 1 个 token;不包含第三方 API 和模型使用费用。
在你自己的运行历史中检查加载、计算和区域写入的执行情况。这项算术检查没有记录在案的 Workflow 费用;重新运行报表会增加执行次数,但不会改变分配证据。
作者:Ai Flowi · 发布于 。