费用分摊核算
开始识别附件前,读取 references/execution-evidence.md,按证据、确认、核算、交接顺序执行;该规范不替代以下业务门禁。
本 Skill 可单独启用,只处理本次上传的业务材料,不安装、调用或要求先运行其他 Skill。文中的业务角色表示可选标准结果或核算角色;原始事实、确认口径与可追溯证据齐全时,由本 Skill 完成识别、确定性计算及验证。独立使用不免除材料与金额门禁。
任务目标
把本次上传的费用来源整理为唯一、可追溯的来源底表,按确认规则完成直接归属或分摊,并明确收入核算的平台费与库存核算已计入 COGS 的覆盖关系,避免利润核算重复扣除。
折算汇率必须为有限正数且来源、方向、有效期唯一;零、负数或不可解析汇率属于无效证据,停止受影响折算,不阻断可独立完成的原币检查。
同一会话中用户已明确确认的口径,在展示实际映射并核实一致后直接沿用,不重复索要同一确认;仅对新歧义、冲突或范围变化补问。多个附件同名时分配会话内 attachment_id,来源保留 basename、Sheet 和行号;无法唯一匹配时停止,不以最新文件或附件顺序猜选。
执行约束
- 只处理当前会话附件,不扫描目录、不要求固定路径。
- 开始时记录附件读取、确定性计算、文件产物返回、代码执行和最终产物可读本地路径五项能力,不得默认它们存在。
- 父键守恒、多路分摊、依赖图拓扑排序与循环检测必须使用平台原生表格/公式/分析能力或运行期轻量代码确定性完成,不得由 Agent 手工排序复杂图或心算多行金额。不创建、安装或扩展大型 Python/JavaScript 工程。轻量代码只接收本次附件和显式参数,不扫描目录、不依赖固定路径、不写入 Skill/项目目录、不补 0 或硬编码特定结果;它与报告测试入口分属两层。
- 无确定性计算能力时仍完成附件角色、字段映射、依赖边候选和材料缺口;受影响分摊、拓扑、守恒和交接控制记录
DETERMINISTIC_COMPUTE_UNAVAILABLE并标记NOT_RUN。只能读缓存值时,仅将FORMULA_VALUE_STALE检测标记NOT_RUN,如实披露未核验缓存;只能读公式文本且平台不能重算时,记录FORMULA_VALUE_UNAVAILABLE,所有依赖该金额的控制NOT_RUN。能够重算时按当前输入确定性重算,不把公式文本当金额。 - 附件无法读取时记录
FILE_READ_FAILED,受影响步骤标记NOT_RUN;不得猜字段或补 0。 - 收入核算标准结果只能作为驱动或覆盖证据,不得形成费用核算费用来源行。
- 每条费用来源、分摊驱动、规则、部门依赖和覆盖证据都必须有明确主体;主体缺失、冲突或跨表不一致时,相关归集与分摊
NOT_RUN,不得从文件名或目录猜主体。 - 存在跨币种费用、分摊驱动或汇总时,正式折算前必须询问用户采用交易日、费用归属日、月均、期末、固定期间或其他企业汇率口径,并记录来源、方向、生效期和适用范围;未确认时只停止受影响的折算与跨币种分摊。同币种恒等换算也要确认本位币口径。
- 预计算分摊明细、汇总和其他
role=reference内容只用于交叉核对,不得进入来源归集或替代本次重算。 - XLSX 目标单元格含公式时,同时读取公式表达式、可用的已计算值和当前引用输入;有计算值时按计算值核算并独立复算引用关系,不得把
=...公式文本当作金额。没有可用计算值且平台不能重算时记录FORMULA_VALUE_UNAVAILABLE并将受影响控制标记NOT_RUN;计算值与当前引用输入重算不一致时记录FORMULA_VALUE_STALE并标记FAIL。两种情况都保留附件 basename、Sheet 和单元格/源行定位,不得补 0 或把公式解析失败直接误报为业务差异。
附件角色与主体门禁
- 先按 Sheet、表头和样例行区分
source、driver/rule、evidence与reference,文件名只作提示。 - 工资来源文件只接受原始“人员工资”一类来源 Sheet;“工资分摊明细”“平台分摊汇总”等预计算结果必须作为独立
reference识别并排除出来源底表。 - 覆盖证据至少应能定位
period/entity/currency/source_key/source_file/source_sheet/source_row/source_amount,并带scope/covered_by_module/decision/coverage_status/evidence/confirmation_status。 - 覆盖证据中的
upstream_dataset/upstream_result_row只有采用真实标准结果时才填写;原始台账使用 coverage_evidence_type=SOURCE_LEDGER 及 covered_source_file/sheet/row/field,不伪造结果行;费用核算自有费用无真实上游定位时保持空白,不得制造行号。 - 材料中的
INCLUDE_IN_OPERATING_EXPENSES是待确认候选。当前会话未确认“不属于收入核算平台费且未计入库存核算 COGS”时,coverage_status与confirmation_status保持REVIEW,不得升级为PASS。
执行流程
- 展示附件角色、Sheet、表头、主体、期间、币种、费用科目和候选归属;区分来源底表、规则/驱动、覆盖证据和参考汇总。
- 来源已有
source_key时先校验唯一性并保留原键与来源定位;缺键时才按 basename、Sheet、源行和业务主键形成稳定且在来源底表中唯一的父source_key;不得仅因业务主键相同就合并来源行。 - 将费用标记为
platform_fees、included_in_cogs、operating_expenses或exception;参考汇总不生成来源行,覆盖证据只证明候选口径、不重复形成费用金额。 - 优先直接归属;不能直接归属时,展示驱动、权重、对象和依据,待确认后分摊。
- 为一次完整重算生成唯一
calculation_version;直接归属也形成 100% 分摊行。 - 为每条分摊结果生成全局唯一
allocation_line_key;父source_key可在多条分摊行重复。 - 把六类规则全部登记到依赖表,按确定性拓扑顺序执行;从唯一分摊明细重建实体、类别、占比和利润核算总计。
- 生成覆盖桥接、来源桥接、异常池和验证结果;任一输入规则变化后废止旧版本并从来源归集重算。
详细方法与字段见 references/allocation_methods.md。
主键和守恒
普通分摊的每个权重必须可解析、有限且在 0 至 1 之间,驱动值必须非负且同口径分母大于 0;合计 100% 不能掩盖负权重与超过 100% 的单项。冲销费用保留金额符号,但不自动产生负驱动;负销售/退货驱动须先确认专项政策,未确认时相关分摊 NOT_RUN。
source_key标识一条父来源记录,在expense_collection.csv中唯一;同一父费用拆给多个对象时允许在分摊明细重复。allocation_line_key标识一条分摊结果,按calculation_version + parent_source_key + 完整目标维度 + 稳定序号生成,在expense_allocation_detail.csv中全局唯一;它不是父source_key的改名。- 对每个父
source_key单独核对:source_amount = Σ allocated_amount + Σ excluded_amount + Σ exception_amount。一对多拆分的所有子行先按父键汇总;正式可分摊基数等于source_amount - excluded_amount - exception_amount,其权重合计必须为 100%。 - 不得把父键重复视为分摊明细重复;只在来源底表父键冲突、
allocation_line_key重复或同一业务凭证被多次建父键时阻断。
依赖顺序
- 先应用特殊期间与停用对象排除,再生成依赖边表。
expense_dependency_edges.csv覆盖六类:一至三类登记为NO_DEPENDENCY控制行;四类按被服务部门到使用部门建边;五类登记穿透链的每一跳;六类从全部必需前序节点指向最后分摊节点。每行带唯一dependency_id、期间、类别、证据和状态。- 仅把真实依赖边按
被依赖部门 → 使用其结果的部门加入有向图并执行 Kahn 拓扑排序;零入度节点同层按稳定部门键排序,禁止按附件顺序决定。 - 若拓扑排序仍有未处理节点,记录完整循环路径,循环节点及依赖其结果的分摊标记
NOT_RUN。 - 五类先按人数或投入权重拆到下属部门,再应用各部门本期已验证的分摊结果;两阶段权重、金额均守恒,最终权重为乘积;缺任一层证据则
NOT_RUN,不得直接用整体销售额替代。 - 六类最后分摊仅在全部前序节点完成且剩余基数守恒后执行;前序缺失、目标多候选或残余不守恒时
NOT_RUN。
利润核算入口口径
platform_fees:平台费由收入核算单独披露、并在利润核算利润链中单列扣减;费用核算只披露和核对、不重复计入,固定included_in_profit=false。included_in_cogs:库存核算已计入 COGS(含其已吸收的头程),固定included_in_profit=false。operating_expenses:证据、分摊、覆盖和守恒均通过时进入利润核算。exception:证据不足、重复或口径不明,不进入利润核算。
结构化覆盖与来源桥接
expense_coverage_bridge.csv使用唯一coverage_line_key,每个父来源至少一行。每行自包含calculation_version、source_key、父来源 basename/Sheet/源行、scope、covered_by_module、实际upstream_dataset/upstream_result_row、match_key、source_amount/covered_amount、coverage_status和decision;不得依赖附件顺序或另一张映射表才能解释覆盖决定。- 读取覆盖证据时,按上述字段语义与父
source_key唯一匹配;role=evidence不等于来源角色。证据行金额只能与父来源核对,不能再次计入费用核算。 covered_by_module=revenue-settlement/inventory-cost-calculator表示平台费用/销售成本角色,必须有唯一的已验证标准结果定位,或本次平台结算/成本底表的原件定位与同范围金额匹配;证据类型分别记 STANDARD_RESULT/SOURCE_LEDGER,否则不能据此排除。covered_by=expense-allocation + decision=INCLUDE_IN_OPERATING_EXPENSES仍须当前会话确认防重复事实,未确认保持REVIEW并阻断正式利润核算交接。expense_lineage_bridge.csv使用唯一bridge_line_key;每个分摊结果至少一行,并为排除/异常金额保留组件行。每行自包含allocation_line_key/allocation_line_amount、allocation_dataset/allocation_result_row、parent_source_key/parent_source_amount、父来源 basename/Sheet/源行、component_type/allocated_component、完整目标维度、scope/included_in_profit、calculation_version和lineage_status。正式分摊固定allocation_dataset=expense_allocation_detail.csv;结果行号不含表头、从 1 开始。- 桥接中的
parent_source_amount、allocated_component、allocation_line_amount统一使用该父来源的source_currency原币金额;ALLOCATED组件按allocation_line_key汇总后必须等于分摊明细的allocated_amount_original,按父source_key汇总全部分摊、排除与异常组件必须等于parent_source_amount。不得把allocated_amount_report填入这三个原币字段;需要报告币桥接时另列带_report的金额和报告币,单独守恒。 - CSV 原件定位写
source_sheet/parent_source_sheet=CSV,source_row/parent_source_row使用包含表头的原始逻辑行号,首条表头后的记录至少为第2行;不把重排后的记录序号当来源行号。保留汇率附件的同类真实定位。 - 覆盖证据无法唯一匹配、上游结果行无法定位或桥接任一侧不守恒时,相应费用及利润核算交接标记
NOT_RUN。
利润核算标准交接
必须导出 expense_profit_operating_expenses.csv:
- 仅从同一
calculation_version中scope=operating_expenses、included_in_profit=true、audit_status=PASS且覆盖与来源桥接均通过的唯一分摊行,先将各父来源按已确认口径映射到报告币,按period + entity + report_currency聚合 allocated_amount_report,再生成 TOTAL;交接 currency 固定为 report_currency,不按父原币另造正式 TOTAL。 record_type=TOTAL的handoff_key必须精确为period|entity|currency,并在文件中唯一;三段任一为空或含分隔符|时标记NOT_RUN。不得直接把分摊明细交给利润核算做多对多连接。- TOTAL 至少包含
record_type、handoff_key、period、entity、currency、report_currency、unique_operating_expenses、scope、included_in_profit、calculation_version、audit_status、result_dataset、result_row、source_bridge_dataset、coverage_dataset和lineage_status。 - 主体与店铺必须分离:
entity/target_entity是来源证据明确的法律/核算主体,store/target_store是经营店铺,二者不得互填。无明确跨主体分摊政策时,目标主体沿用父来源主体;有跨主体政策时须提供主体映射和金额桥接,不从店铺 ID 推断主体。 - 交接前从全部父来源、已确认主体及源币到报告币映射独立重建
period + entity + report_currency范围集合,与 TOTAL 键集合逐一比较;每个范围的 TOTAL 金额必须等于该主体本次完整范围的已核对报告币分摊之和。把店铺/SKU写成主体、漏键、多键或错键时记录ENTITY_GRAIN_MISMATCH=FAIL,禁止正式利润核算交接;总金额恰好相等也不能通过。 - 固定
result_dataset=expense_profit_operating_expenses.csv;最终按稳定键排序后写入,result_row是不含表头、从 1 开始的数据行号。原始来源使用桥接表的parent_source_file/parent_source_sheet/parent_source_row,不得使用结果工作表定位。 - 固定
source_bridge_dataset=expense_lineage_bridge.csv、coverage_dataset=expense_coverage_bridge.csv;文件缺失或名称与实际附件不一致时不得交接。 - 可附
record_type=DIMENSION行,但不得与 TOTAL 混加;每行必须显式填写dimension_grain和完整dimension_key,并在calculation_version + handoff_key + dimension_grain + dimension_key内唯一。仅在收入、库存、费用核算的粒度、完整键集合和唯一性完全一致时供利润核算使用。
Amazon 驱动边界
- 优先接收用户本次上传的同口径脱敏聚合驱动数据,也可接收已核对的
revenue_profit_standard_result.csv(包括本次已确认、字段和来源完整的聚合汇总材料,不强制完整收入核算交接文件);不得读取 Amazon 原始订单、结算号或地址字段。 - 采用本次驱动证据已确认的 Released/Deferred 或已入账期间口径,不重新归期,也不要求生成驱动的其他 Skill。驱动粒度、期间、币种或受益范围不一致时,受影响分摊
NOT_RUN。 - 收入核算的
platform_fees和refunds只用于驱动说明或覆盖核对,不在费用核算新建运营费用。
差异替换附件(overlay)
- overlay 是对本次已上传基线附件的差异替换,不是完整输入集;按实际 Sheet、表头、角色、主体、期间、币种和业务键识别替换范围,不得预置广告费、工资或任何预设角色清单。
- overlay 中出现的角色只替换能够唯一对应的基线角色;未出现的角色可以继续使用本次会话已上传且已确认属于同一范围的基线附件,但不得因预置目录结构自动补齐,也不得去本地目录查找。
- 零命中、多命中、同一角色同时存在冲突版本,或 overlay 与基线的主体、期间、币种和业务键不一致时,停止合并并列入异常清单。
- 对替换后的全部实际数据重新执行数量级、重复
source_key、权重守恒和部门依赖循环等通用控制;不得只寻找预设异常,也不得通过放宽规则令异常通过。
报告交付
生成报告时必须先读 references/report-contract.md,按其 HTML/CSV、安全、控制记录及验收规则交付。该规范随本 Skill 自带,不依赖其他 Skill。
- 当前会话唯一附件:
expense_allocation_report.html;复用assets/report-shell.html,不手写另一套页面或导出器。 - 页内完整 CSV:
expense_attachment_mapping.csv,expense_collection.csv,expense_dependency_edges.csv,expense_allocation_detail.csv,expense_coverage_bridge.csv,expense_lineage_bridge.csv,expense_entity_summary.csv,expense_category_summary.csv,expense_profit_operating_expenses.csv,expense_exclusion_list.csv,expense_exception_pool.csv,expense_validation_results.csv。 - 业务状态与技术验收分开;缺材料保留 FAIL/NOT_RUN/REVIEW,不因页面生成成功而改判。能力不足时采用规范中的沙箱兼容输出。
必做验证
- EXP-01 行级覆盖与来源金额对账,无法解析值不得补零。
- EXP-02 父
source_key在来源底表唯一;allocation_line_key在分摊明细唯一。 - EXP-03 每个父键金额守恒,正式分摊权重合计 100%,尾差落到明确分摊行。
- EXP-04 依赖边表完整,拓扑顺序确定,无环;循环及受影响下游为
NOT_RUN。 - EXP-05 平台费、已计 COGS、运营费用和异常之间有逐行覆盖证据,无重复扣除。
- EXP-06 来源桥接按分摊行和父来源双向守恒;本次范围桥接父键集合必须覆盖全部真实父来源,已排除与异常费用也分别写 EXCLUDED/EXCEPTION 组件,不能只验证已分摊行便宣称全来源覆盖。
- EXP-07 实体、类别、占比和利润核算总计均由同一版本的唯一分摊明细重建并交叉一致。
- EXP-08 TOTAL 必须先按期间、实体、报告币聚合,currency=report_currency,unique_operating_expenses 使用报告币金额;
handoff_key唯一,金额等于正式运营费用汇总,且result_dataset/result_row可定位。 - EXP-09 本次要求维度核算且正式分摊明细具备完整目标维度时,由同版本明细生成 DIMENSION,不能因未上传分项成品而停止。DIMENSION 必须显式提供
dimension_grain/dimension_key且组合唯一;TOTAL 与 DIMENSION 分别核对、不得相加。 - EXP-10 主体在来源、驱动、规则、依赖和覆盖证据间一致;参考结果未进入来源归集,差异替换附件只覆盖其声明角色。
来源桥接同时传递父费用的真实原始币种、币种字段定位与本次已确认汇率证据;保留 input_* 历史状态,不覆盖本次有证据的当前确认与覆盖结论。
本次完整范围内仍有未解决来源、重复父费用、缺驱动或分摊异常时,不得仅筛选通过行便声称该范围完整;受影响 TOTAL 不得为 PASS,异常父来源不能从范围全集中消失。
任一适用控制 FAIL 时不得生成正式利润核算入口;缺材料或驱动时标记 NOT_RUN,但可继续完成证据齐全的其他归集。
已确认单一报告币时,未知覆盖或分摊问题按该报告币范围阻断完整 TOTAL;不得把通过的原币子集另命名为一条完整正式 TOTAL 来绕开缺口。原币或部分已完成金额可在归集/分摊明细说明,但不能进入正式交接。