Files
caoxiaozhu 787bc3a481 feat(platform): close AI expense value loop
Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
2026-07-17 14:14:08 +08:00

374 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 节省事实账本与 CFO 经营价值看板 概念文档
更新时间2026-07-17
## 功能一句话
把费用优化从“发现风险和预计能省”推进为“执行、实际结果、独立财务确认、可回放冲回”的事实账本,并让 CFO 只看到有来源、有基线、有证据、可去重的企业价值。
## 背景与问题
- 现有财务看板能够回答支出、单量、待付款、预算使用和风险分布,但不能可信回答企业已经节省了多少钱。
- 风险观察金额、暂缓付款、未使用预算和未执行建议都不是现金节省;如果直接汇总,会形成虚假 ROI。
- 当前最接近真实节省的链路是“住宿超标准 → 用户接受职级标准重算 → 审批 → 付款”。它已经真实降低报销金额,但尚未形成独立机会、付款后结果、财务签字、去重和冲回记录。
- `ExpenseClaim`、预算和应付旧表没有结构化租户键Claim 只能通过 `ExpenseCaseLink` 判断租户;旧 `FinanceDashboardService` 仍有全表读取和跨租户快照复用风险,不能作为客户 ROI 的事实源。
- 现有 `accept_standard_adjustment` 优先使用客户端传入的原金额,客户端理论上可以放大差额;任何节省计算必须改为只使用服务端锁定的明细金额和政策计算快照。
- 当前“已付款”是财务人员在系统内确认的业务状态,尚没有银行流水、支付回执或 ERP 凭证。因此付款只能把机会推进到“实际结果待确认”,不能直接进入财务确认 KPI。
- 报销提交时间到同租户首个 `payment_completed` 业务事件可以形成可审计的端到端流程周期,但它包含等待与系统处理,不是人工活跃工时;在没有人工计时基线、角色成本和客户认可释放比例前,工时价值必须显示“待采集”,不能伪造为 0 或现金节省。
本方案是 `2026-07-13/feature/ai-expense-closed-loop-and-value-proof` 中 P2“费用经营与价值证明”的实施拆分。
## 目标与非目标
### 目标
- [G1] 建立租户安全的 Savings Ledger完整区分风险暴露、预计机会、执行中、实际结果、财务确认和冲回。
- [G2] 建立不可变基线和证据链,所有金额都能追溯到费用事件、单据明细、政策版本、执行动作、付款事件和确认人。
- [G3] 建立经济收益去重键和归因约束,避免同一单据、付款义务或政策差额被多个风险重复计入。
- [G4] 建立严格状态机、乐观版本、幂等响应和数据库并发约束,防止重复确认、陈旧操作和跨租户访问。
- [G5] 建立 CFO 价值看板,分开展示财务确认现金节省、可释放工时价值、安全智能直通率、经营漏斗和风险护栏。
- [G6] 支持部门、项目、费用类型、供应商、城市、时间、负责人、来源和单据下钻,并显示数据覆盖、口径和新鲜度。
- [G7] 持久化费用基线快照,记录窗口、样本量、算法版本、政策版本、来源指纹和数据质量。
- [G8] 修复旧财务聚合与快照的租户边界,禁止真实接口失败时回退成看似真实的演示数字。
### 非目标
- [NG1] 不把风险关联金额、暂缓付款金额、未采纳建议、未使用预算或预计金额计入已确认节省。
- [NG2] 首个切片不宣称已具备外部银行或 ERP 付款凭证;后续通过连接器补齐。
- [NG3] 首个切片不使用缺少租户、合同价、采购数量和付款凭证的 `AccountsPayableRecord` 计算供应商节省。
- [NG4] 不把申请金额与最终报销差额默认归因给 AI缺少具体 AI 决策、采纳动作和结果链时AI 归因金额为 0。
- [NG5] 不把流程经过时长换算为人工工时,不直接暴露个人薪酬或个人成本。
- [NG6] 不跨币种直接求和;没有锁定汇率的金额只按原币展示并进入数据质量提醒。
- [NG7] 不删除、覆盖已确认收益;补付、退款、申诉或归因修正使用追加负向冲回事件。
- [NG8] 不在本阶段重写整个 Overview也不把不可信的预算中心模拟数据接入价值看板。
## 用户与场景
### 目标用户
1. CFO/管理层:查看企业已经确认的现金价值、价值兑现速度和风险护栏。
2. 财务运营:复核机会、实际结果、重复归因、凭证和冲回事项。
3. 费用治理负责人:领取机会、执行动作、补充结果和跟进逾期。
4. 预算负责人:只在授权部门或成本中心范围内查看机会与驱动。
5. 审计/风控:回放基线、政策、执行、付款、确认、冲回和操作事件。
6. 普通员工:仅在自己的费用事件中看到与本人相关的调整说明,不访问企业 CFO 汇总。
### 核心场景
1. 员工接受住宿职级标准重算。服务端锁定明细原金额、城市、天数、职级、政策版本和可报销上限,同事务生成唯一节省机会。
2. 机会进入执行后仍只展示预计金额;审批未通过、单据取消或超过期限时保留失败/到期事实,不从兑现率分母中消失。
3. 单据完成付款业务事件后,系统根据冻结差额记录实际结果,但不进入财务确认 KPI。
4. 与机会负责人和结果填报人不同的财务人员检查证据、去重、币种和成本后确认;确认后才计入 CFO 现金节省。
5. 后续发生例外补付或申诉时,追加负向冲回并保留原确认,历史月报按报告 `as_of` 可回放。
6. CFO 从价值总览下钻到部门、项目、费用类型、城市、负责人和具体单据,查看基线、建议、执行、实际、确认人和证据。
7. 费用治理负责人查看异常集中维度和只读政策模拟准备项;历史中位数只能作为异常信号,缺少正式政策反事实时不显示预计节省,也不自动创建机会。
### 异常场景
- 服务端政策无法计算、明细金额缺失或差额不为正:原报销流程可继续,但不创建可货币化节省机会。
- Claim 没有合法 `ExpenseCaseLink` 或租户不一致fail-closed不自动归入默认租户。
- 相同请求重复发送:返回首次不可变响应;相同请求 ID 内容不同409 拒绝。
- 陈旧版本、重复付款事件或重复经济收益:通过版本锁、事件唯一键和收益去重键拒绝。
- 缺少付款/凭证、汇率、独立确认或证据不完整:停留在实际待确认,不进入主 KPI。
- 看板接口失败、无权限、无数据、基线不足或快照过期:分别展示明确状态,绝不使用模拟数字伪装真实指标。
## 功能能力
- [C1] 机会发现:从服务端核验的政策调整、后续分析洞察或风险复核创建机会。
- [C2] 状态管理:支持 identified、accepted、in_progress、realized、verified、rejected、expired 和 reversed 事实。
- [C3] 实现记录:保存实际毛收益、新增执行成本、净收益、发生时间、币种和结果证据。
- [C4] 财务确认:独立确认人复核去重、证据、汇率、成本和归因后签字。
- [C5] 证据与审计只追加事件、内容指纹、before/after、首次响应和 correlation 全链路回放。
- [C6] 基线快照:按员工、部门、费用类型、供应商、城市、项目和流程持久化窗口、样本量和版本。
- [C7] 价值分析:经营漏斗、兑现率、周期、逾期、来源、责任人和数据质量。
- [C8] CFO 看板真实指标、全局筛选、URL 恢复、下钻、移动端和口径抽屉。
- [C9] 安全边界:租户、角色、数据范围、自证禁止、管理员业务权限分离和字段白名单。
- [C10] 冲回能力:补付、退款、申诉或归因修正只能追加负向记录,不改历史。
## 方案设计
### 前端
- 在现有“分析看板”增加 `value` / “经营价值看板”,复用统一时间筛选,不新增一级导航。
- `OverviewView.vue` 只负责挂载独立 `CfoValueDashboard.vue`;价值加载、筛选和展示模型拆到 `useCfoValueDashboard.js``cfoValueDashboardModel.js``analyticsValue.js`,避免继续扩大接近 800 行的 `useOverviewView.js`
- 默认视图从上到下为:主 KPI 与护栏、价值漏斗、现金节省趋势、来源/组织驱动、机会执行表、数据质量和口径说明。
- 全局筛选只保留时间、部门、费用类型和价值类型;项目、供应商、城市、负责人、状态和置信度进入高级筛选。
- 看板状态同步到 URL query当前机会使用 `value_opportunity` 保存,刷新、浏览器前进/后退和分享链接能够恢复同一抽屉。非法 ID、403/404、跨租户不可见或不再符合当前筛选/时间窗口的机会会 fail-closed 清理,避免残留上一租户详情。
- 机会详情展示基线、建议、执行、实际结果、财务确认、去重与证据时间线;证据只使用服务端可见性 DTO。来源动作由独立 helper 根据 Claim、Expense Case、AI Decision、维度和 Evidence Resource 构造,不在抽屉组件内拼接路由规则。
- 单据来源进入 `app-document-detail`;风险来源优先进入关联单据,并只携带风险 focus、观察/决策 ID 与现有锚点。详情返回动作恢复 `dashboard=value`、时间窗口和 `value_*` 查询。
- 预算来源进入 `app-budget` 的“预算配置视图”,按授权范围应用部门和费用类型焦点;页面明确说明配置、阈值及当前演示金额不是该机会的真实预算事实。未配置的费用科目显示“未找到配置”,不得解释为预算为零。
- 部门、项目、费用类型、供应商、城市、负责人和来源维度可返回 CFO 看板相应筛选;切换维度时移除旧机会 ID避免筛选与抽屉详情不一致。
- 实际结果登记必须具备真实付款事件或可追溯外部凭证;外部凭证上传/连接器尚未接入时,前端隐藏无证据手工登记并解释下一步,不发送必然失败或可能污染价值账本的空证据请求。
- 真实为 0、无数据、基线不足、无权限、接口失败、部分数据和快照过期使用不同状态。
- 禁止复用 `data/metrics.js``BudgetCenterView` 静态种子或遗留 `demoTotals` 作为 CFO 真实回退。
### 后端
- `SavingsDiscoveryService` 只负责从可信业务事实发现/创建机会,不提交事务。
- `SavingsActionService` 负责机会状态动作、版本、权限、幂等和事件。
- `SavingsRealizationService` 负责付款后实际结果、财务确认、拒绝和冲回。
- `SavingsQueryService` 负责租户安全分页、详情和可见动作投影。
- `SavingsFactScopeReader` 只读取当前租户与授权部门中的已归档报销事实,并以报告窗口和 `as_of` 排除未来单据、修改和完成事件。
- `SavingsBaselineGenerationService` 分开冻结金额中位数与流程历时中位数;流程只使用提交时间和首个付款完成业务事件,指标固定为 elapsed minutes。
- `SavingsAnomalyAttributionAnalyzer` 只生成描述性异常集中归因和政策模拟准备项,不声称因果,不写 `SavingsOpportunity`
- `CfoValueAnalyticsService` 只从 Savings Ledger、风险事实和明确资格快照聚合不从 UI mock 或风险金额推导节省。
- 标准重算只使用数据库行锁中的 `ExpenseClaimItem.item_amount` 作为原金额;客户端原金额和可报销金额只可作为展示输入,不能成为节省事实。
- 标准重算在同一事务内写 Claim 调整、机会、证据、Savings 事件和 `saving_opportunity_created` 业务事件API 边界统一提交。
- 付款动作在 Claim → Opportunity 的固定锁顺序中创建 actual realization 和 `saving_action_completed`,与 `payment_completed` 同事务。
- 财务确认写 `saving_confirmed`,拒绝和冲回写对应只追加事件;相同请求安全重放。
-`/analytics/finance-dashboard` 必须接收可信 `CurrentUserContext`Claim 通过 `ExpenseCaseLink` 限定租户;快照键至少包含租户与数据权限范围,后台任务必须显式指定租户。
### 算法与规则
#### 第一条可信机会
```text
server_original_amount = locked ExpenseClaimItem.item_amount
policy_target_amount = server policy calculator result
estimated_net_saving = max(0, server_original_amount - policy_target_amount)
```
- 仅当政策计算成功、输入快照完整、币种一致、差额大于 0 时创建可货币化机会。
- 机会唯一键首期为 `tenant + claim + item + policy_version + policy_input_fingerprint`
- 接受重算表示建议已采纳,机会进入 `in_progress`;付款完成后进入 `realized`,独立财务确认后进入 `verified`
- 员工自行承担差额同时是员工体验护栏,必须跟踪申诉和例外补付率,防止通过不合理转嫁美化节省。
#### 流程基线、异常归因与政策模拟
```text
workflow_elapsed_minutes
= first_tenant_payment_completed_event.occurred_at - claim.submitted_at
```
- 流程窗口按首个付款完成事件归属;提交时间缺失、完成早于提交、跨租户事件、`as_of` 之后完成或截止后被修改的单据全部排除。
- 流程快照使用 `median_submission_to_payment_elapsed_minutes``minutes` 单位、独立算法版本和来源指纹;证据元数据固定声明 `elapsed_cycle_not_active_labor`
- 异常归因按部门、费用类型、城市和项目聚合质量合格的历史偏离候选,只表示异常集中度,不表示该维度导致支出。
- 政策模拟候选只输出版本化政策、生效期、适用范围、限额和例外规则等必需输入;历史中位数不是政策反事实,缺少正式反事实时 `estimated_savings=None`
- 预算预测复用现有预算分配和核销事实,以 `min(as_of, window_end)` 为截止点;旧预算表没有租户字段时仅允许 default 租户,部门权限优先按稳定部门 ID 收紧。
- 供应商缺少核验 ID、数量和单位价格时继续返回 unavailable不读取 `AccountsPayableRecord` 演示或应付种子。
#### 收益去重
- `benefit_key` 表达同一个经济结果,不表达同一个风险观察。
- 多条风险可指向一个机会;同一发票、付款义务、报销明细或价格变化只能有一个 canonical 确认收益。
- 同一收益多个动作的归因比例之和不得超过 1。
- 确认后大额、超预计、手工基线、缺外部凭证和归因异常进入二次复核或数据质量队列。
#### 状态转换
```text
identified -> accepted -> in_progress -> realized -> verified -> reversed
| | | |
+-------- rejected -------+------------+
+-------- expired --------+
```
- `identified`:冻结基线、方法、价值类型、币种、预计净值、负责人、截止时间、去重键和来源证据。
- `accepted`:负责人明确采纳。
- `in_progress`:保存执行动作、执行人、开始时间和动作证据;预计值不得静默上调。
- `realized`:保存实际结果、净值、发生时间、归因和付款/结果证据,但不计主 KPI。
- `verified`:完成去重、币种、成本、证据和独立财务确认。
- `reversed`:追加负向冲回,原确认不可删除。
- `rejected/expired`:保留失败事实,防止只保留成功机会美化兑现率。
### 数据与契约
#### `profile_baseline_snapshots`
- 租户、基线类型、稳定维度 ID、指标、单位和原币。
- 基线值、窗口开始/结束、样本量、方法、查询指纹和数据质量。
- 算法版本、政策版本、冻结时间/人和有效期。
- 历史群组基线强制窗口与样本量;政策反事实基线强制政策版本、生效区间和目标明细。
- 金额基线按员工、部门、费用类型、城市和项目分组;流程基线按稳定流程键分组,使用独立 metric/unit不能与币种金额比较或求和。
#### `savings_opportunities`
- 租户、费用事件、Claim 软引用、来源类型/ID、类别和价值类型。
- 风险暴露只作护栏;基线、目标、预计毛收益、预计成本、预计净收益和区间分开保存。
- 原币、报告币、负责人、截止时间、状态、版本、`benefit_key` 和去重组。
- 部门、项目、费用类型、供应商、城市和流程维度使用明确快照字段或受控 JSON。
- 唯一约束至少覆盖 `(tenant_id, opportunity_key)`
#### `savings_realizations`
- 租户、机会、费用事件、Claim、BusinessEvent 和实际发生时间。
- 实际毛收益、新增执行成本、实际净收益、原币、报告金额和汇率快照。
- 归因方法/比例、`benefit_key`、去重状态和 canonical realization。
- 财务确认/拒绝/冲回人、时间、说明和证据。
- 只追加金额事实;确认投影可更新,但每次变更必须有不可变事件。
#### `savings_evidence_links` 与 `savings_events`
- 证据保存实体、证据角色、资源类型/ID、来源系统、外部事件 ID、内容哈希、发生/采集时间和验证状态。
- 事件保存动作、请求 ID、操作人、版本、指纹、before/after、首次响应、correlation 和时间。
- PostgreSQL 触发器禁止修改或删除 `savings_events`
### 权限
- `finance``executive` 可读取租户 CFO 汇总;预算负责人仅看被授权部门/成本中心。
- 普通员工、普通经理不得读取 CFO 汇总;只能看到本人费用事件中的最小调整说明。
- 机会接受、拒绝和指派需要 finance/executive 或明确负责人权限。
- 财务确认必须是 finance/executive且不能是机会负责人或实际结果填报人。
- 只有 `admin` 而没有财务角色时允许运维只读,不允许业务确认。
- 所有 API、聚合、快照、导出和后台任务强制 `tenant_id` 与数据范围;不允许默认全表扫描。
- Claim 通过 `ExpenseCaseLink` 校验租户;缺 Link 的非默认历史数据不自动猜测归属。
### 降级策略
- 政策或基线服务失败:不创建货币化机会,原报销主流程保留人工处理。
- 外部付款/ERP 连接器未接入:付款业务事件只能推进到 realized必须人工财务确认。
- 汇率缺失:保留原币明细,不进入跨币种总计。
- 工时基线缺失:显示“待采集”,不显示 0不计扩展 ROI。
- 流程历时可用但活跃工时缺失:只展示 elapsed cycle 驱动指标CFO 工时价值仍保持 collecting。
- CFO 聚合失败:显示错误和重试,不加载演示值;旧财务支出看板独立可用。
- 快照过期:展示过期提示并触发受控刷新,不能跨租户复用旧快照。
## 算法与公式
### 主 KPI 1财务确认净现金节省
```text
verified_net_cash_savings
= sum(actual_gross_saving - incremental_execution_cost + reversal_amount)
where value_kind = cash
and confirmation_status = finance_confirmed
and dedupe_status = canonical
and confirmed_at <= report_as_of
```
-`realized_at` 归属业务期间,按 `confirmed_at` 和报告 `as_of` 保证历史可回放。
- 风险暴露、预计金额、执行中金额和未确认实际金额不得进入。
- 多币种只有存在锁定汇率时才折算;否则按原币分组。
### 主 KPI 2财务确认可释放工时价值
```text
verified_releasable_labor_value
= max(0, baseline_active_minutes_per_unit - actual_active_minutes_per_unit)
* eligible_units
* approved_role_cost_per_minute
* approved_releasable_ratio
```
- 现金与工时分账、分卡、分报告,默认不相加。
- 缺少上线前后活跃分钟、角色完全成本、生效期或客户认可释放比例时不可计算。
### 主 KPI 3安全智能直通率
```text
safe_straight_through_rate
= qualified_completed_cases_without_manual_correction_or_return
and no_major_post_audit_issue
/ eligible_completed_cases_frozen_at_creation
```
- 必须保存 eligibility 快照、策略版本、必要审批完成和事后抽检结果。
### 驱动指标
- 现金兑现率:同一成熟机会队列的财务确认净现金 / 冻结预计净现金。
- 机会到财务确认 P50 天数、逾期负责人占比。
- 提交至首个付款完成的端到端 P50 elapsed minutes它与每单人工活跃分钟分开后者在采集前保持不可用。
- 人工触点、首次提交完整率和 AI 字段采纳率。
### 风险护栏
- 开放且已确认的高危/重大风险暴露,按单据或经济义务去重;它不是节省。
- 重大风险漏检率、事后审计重大问题率、误报率和人工覆盖率。
- 财务确认后冲回率、实际超过预计异常率、去重待复核金额和证据不完整金额。
- 标准重算员工申诉/例外补付率。
## 测试方案
### 后端
- 状态机合法/非法转换、确认人独立性、管理员只读和角色权限。
- 机会/实现/确认/冲回幂等、请求内容冲突、陈旧版本和租户隔离。
- 服务端明细金额锁定、客户端放大原金额无效、政策快照完整性。
- 付款事件重复、经济收益去重、跨币种、成本扣除、冲回和归因上限。
- 看板按租户、时间、部门、项目、费用类型、城市、来源和负责人聚合对账。
- 六维基线验证员工、部门、费用类型、城市、项目和流程的窗口、样本量、算法版本、来源指纹、租户/部门范围与稳定重放。
- 洞察验证预算截止点、描述性归因、政策模拟准备项、供应商 unavailable、所有无反事实候选 `estimated_savings=None` 且不会创建机会。
- 旧财务看板 Claim、预算和缓存键租户隔离回归。
- Alembic 空库升级、重复升级、约束、append-only 触发器、无损降级和 PostgreSQL 并发。
### 前端
- API snake/camel 归一化、部分数据和过期快照。
- verified、realized、estimated 和 risk exposure 严格分区,不得混算。
- loading/error/empty/partial/stale/permission-denied/baseline-missing 状态。
- 时间、部门、费用类型、价值类型筛选与 URL 恢复。
- 机会详情证据链、可用动作、版本冲突、幂等重放和确认反馈。
- 单据、风险、预算和维度下钻参数。
- 机会 `value_opportunity` 的恢复、关闭清理、非法格式、403/404、跨筛选和时间窗口清理。
- 风险来源最小定位参数、单据返回 CFO、预算配置焦点和“非真实预算金额”口径。
- 响应式、键盘操作、44px 触控目标和生产构建。
### 集成
- 住宿超标准 → 服务端重算 → 机会 → 审批 → 付款 → actual realization → 独立财务确认 → CFO 看板。
- 相同重算/付款/确认并发只产生一个经济收益和一条对应版本事件。
- 确认后补付/申诉 → 负向冲回 → 历史报告 `as_of` 可回放。
- 多租户同单号、同员工名、相同 request ID 和快照缓存隔离。
### 容器验证
所有 pytest、Alembic、PostgreSQL 并发、前端测试和构建必须在 `local-x-financial-linux` 容器内完成,单条命令超时不超过 60 秒。
## 指标与验收
- [A1] 任一 verified cash saving 可追溯到费用事件、明细原金额、政策快照、执行动作、付款事件、确认人、去重键和证据。
- [A2] 风险暴露、预计、执行中、实际待确认、财务确认和冲回在 API、数据库和 UI 中均不混算。
- [A3] 客户端伪造原金额、跨租户访问、陈旧版本、自证确认和重复经济收益被服务端拒绝。
- [A4] CFO 三个主 KPI 有口径、时间窗口、来源、新鲜度、数据覆盖和护栏;缺数据时明确“待采集”。
- [A4.1] 流程 elapsed cycle 有独立 metric/unit/算法版本/来源指纹,且不会进入工时价值或现金节省。
- [A5] 价值看板支持部门、项目、费用类型、供应商、城市、时间、负责人、来源和单据下钻。
- [A6] 真实接口失败不出现演示数字;零值、无数据、无权限、错误和过期可区分。
- [A7] 迁移在一次性 PostgreSQL 空库完成升级、重复升级、约束验证和安全降级边界测试。
- [A8] 相关后端、前端、Ruff、构建、端到端和并发测试全部在容器内通过。
## 风险与开放问题
### 风险
- 员工承担差额不一定等同企业创造价值;需要跟踪申诉、补付和政策公平性,避免激励扭曲。
- 当前付款是人工状态,不是外部现金事实;确认页必须清晰披露证据等级。
- 旧 Claim/预算缺租户列,读取必须经过 Case Link 或正式迁移,不能依赖默认租户猜测。
- 数据稀疏且包含模拟种子,试点目标值必须在真实基线采集后冻结。
- 当前预算中心仍是配置演示视图CFO 来源入口只用于定位部门/费用类型配置,页面和价值计算均不得把其中金额当成预算事实或节省事实。
- 多币种、分摊收益和跨期冲回会显著增加财务口径复杂度,必须保留原始事实和版本。
- 工时价值若没有活跃时间采集与客户认可成本率,容易被夸大,因此默认不计现金 ROI。
- 历史异常集中不是因果,历史中位数也不是政策反事实;模拟候选必须在正式政策版本和客户确认适用口径补齐后才可货币化。
### 已处理决策
- 首条闭环选择“住宿职级标准重算”,不选择缺少付款事实的重复支付阻止。
- 价值看板进入现有分析看板,独立拆组件和 composable。
- 只设 3 个主 KPI其余作为驱动和护栏现金与工时分开披露。
- Savings Ledger 直接带结构化租户键,不复用旧财务快照作为价值事实源。
- 流程基线采用提交至首个付款完成的端到端 elapsed cycle人工活跃工时继续作为独立待采集事实。
- 异常归因仅做描述性集中度,政策模拟候选保持只读,不自动写入节省机会。
### 待后续真实客户确认
- 独立财务确认是否要求双人复核及大额阈值。
- 报告币、汇率来源和月末汇率锁定规则。
- 工时价值是否进入扩展 ROI、角色成本口径和可释放比例。
- 标准重算差额在客户会计政策中属于现金节省、成本避免还是员工自担调整。
- 试点 30/90 天目标、CFO 月报签字人和节省分成合同边界。
## 本轮实现记录
- 2026-07-16完成现有财务、预算、风险、付款、标准重算、前端入口与 KPI 口径盘点;确认旧财务聚合租户边界和客户端原金额信任问题。
- 2026-07-16冻结 Savings Ledger、CFO KPI、状态机、权限、去重、证据和首条纵向闭环方案尚未完成的代码与验证全部保留在同目录 TODO 中继续执行。
- 2026-07-16完成 Savings Ledger 五表与 0015 迁移、租户/权限/幂等/并发/证据/冲回契约,并把住宿标准重算和付款动作接入同事务价值链。
- 2026-07-16完成独立财务确认、证据复核留痕、canonical 收益去重、负向冲回、`as_of` 回放和历史标准调整安全回填。
- 2026-07-16完成 CFO 价值分析 API只将已确认 canonical 现金结果计入主 KPI多币种分组工时、安全直通率和审计事实缺口显式披露不使用演示数据回退。
- 2026-07-16完成 CFO 经营价值前端入口、URL 筛选恢复、主 KPI、漏斗、趋势、驱动维度、护栏、数据质量、机会证据链与响应式状态详情明确展示财务确认人、时间和说明。
- 2026-07-16收紧无证据手工登记边界。真实付款事件仍可自动形成待确认实际结果在支付/银行/ERP 凭证连接器接入前,页面不再提交空证据,并向用户解释必须先完成付款或等待外部回执。
- 2026-07-16完成租户隔离的员工、部门、费用类型、城市和项目五维历史中位数冻结基线以及预算预测偏差、重复小额模式和历史中位数偏离候选非政策反事实信号只披露暴露不生成节省金额并补齐 `as_of` 基线时间一致性门禁。
- 2026-07-16补齐第六维流程周期基线以同租户首个付款完成业务事件冻结提交到完成的 elapsed minutes窗口、样本量、算法版本、来源指纹、质量状态和证据完整保存明确禁止推算人工活跃工时。
- 2026-07-16新增部门/费用类型/城市/项目异常集中归因和版本化政策模拟准备项;复用预算预测并收紧配置/交易截止点,所有缺少反事实的候选保持 `estimated_savings=None`、零机会副作用,供应商分析继续明确 unavailable。
- 2026-07-16完成机会抽屉 `value_opportunity` 深链、刷新/前进/后退恢复和非法/越权/跨筛选安全清理;来源动作可跳关联单据、风险证据位置、预算配置视图及 CFO 维度筛选,单据返回时恢复经营价值查询状态。
- 2026-07-16预算来源只应用授权部门与费用类型配置焦点未覆盖科目显示“未找到配置”所有入口和页面均明确演示预算金额不是当前机会的真实预算事实。