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

60 lines
5.4 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.
# 商业资源权威边界闭环 开发 TODO
更新时间2026-07-17
关联方案:[CONCEPT.md](./CONCEPT.md)
## 使用规则
- 任务边界、计量口径和安全约束以 CONCEPT 对应章节为准。
- `[x]` 只表示已有代码或容器验证证据;没有证据不得勾选。
- 所有后端测试必须在 `local-x-financial-linux` 容器内运行,单命令最长 60 秒。
## 1. 调研与边界
- [x] [CONCEPT: 背景与问题] 盘点连接器认证、重放、冲突、业务 commit 和 operational event 边界。证据:`financial_connector_ingestion.py``financial_connectors.py` 与连接器服务/端点测试。
- [x] [CONCEPT: 背景与问题] 盘点附件上传覆盖、单附件删除、费用明细删除、整单删除和批量归集事务。证据:`expense_claim_attachment_operations.py``expense_claims.py``expense_receipt_association.py`
- [x] [CONCEPT: 目标与非目标] 冻结连接器 `events` 与附件源文件写入 `bytes` 两个唯一 meter不把删除伪装成正向用量。证据两个商业 observer 的固定工具名和 required basis。
## 2. 契约与设计
- [x] [CONCEPT: 后端] 定义业务事务提交后结算、回滚释放的回调协议。证据:`commercial_transaction_callbacks.py`
- [x] [CONCEPT: 算法/规则] 定义 `events=1``bytes=len(content)` 的权威数量,错误 basis 预占前拒绝。证据:`required_quantity_basis` 与资源边界测试。
- [x] [CONCEPT: 数据] 定义商业 metadata 脱敏白名单,不复制业务原文与敏感标识。证据:`test_connector_only_meters_new_authenticated_committed_event` 反向断言。
## 3. 后端实现
- [x] [CONCEPT: 后端] 连接器在认证和既有事件判断之后预占,事件提交后结算。证据:`financial_connector_commercial.py``financial_connector_ingestion.py`
- [x] [CONCEPT: 降级策略] 连接器重放、鉴权失败、冲突和事务回滚不写用量。证据:`test_commercial_resource_boundaries.py`
- [x] [CONCEPT: 后端] 附件在任何旧文件移动或新文件写入前按源文件 bytes 预占。证据:`stage_attachment_replacement()` 调用顺序与配额拒绝测试。
- [x] [CONCEPT: 后端] 上传回滚恢复旧目录,提交后清理备份并追加用量。证据:附件 commit/rollback 资源测试。
- [x] [CONCEPT: 后端] 单附件、费用明细和整张报销单删除均绑定数据库事务。证据:`stage_attachment_deletion()``stage_claim_attachment_deletion()` 与既有删除回归。
- [x] [CONCEPT: 后端] 同一 Session 多操作提交顺序结算、回滚逆序恢复。证据:事务批次实现与连续替换 LIFO 测试。
- [x] [CONCEPT: 降级策略] 未配置 meter 时在调用方 Session 只读短路,不让独立 SQLite Session 回滚业务。证据Direct bridge `lookup_session`、附件归集 31 项通过。
- [x] [CONCEPT: 后端] 允许相同 released 预占在相同账期重开并重新检查配额。证据Direct operation released retry 测试与连接器回滚后重试测试。
## 4. 算法/规则实现
- [x] [CONCEPT: 硬配额判断] 使用 `used + held + requested <= hard_limit` 的既有锁内配额算法。证据:`CommercialRuntimeReservationService.reserve()` 与资源配额拒绝测试。
- [x] [CONCEPT: 附件写入计量口径] 只结算成功持久化的源文件 bytes不包含 OCR/预览/metadata。证据observer authoritative quantity 与 metadata。
- [x] [CONCEPT: 业务事务终态] 回滚不记 usage/cost已释放操作可再次 permit。证据商业直接运行与资源边界回归。
## 5. 前端实现
- [x] [CONCEPT: 前端] 上传端点接收 `X-Request-ID` 并把商业拒绝映射为 HTTP 429。证据`reimbursements.py`
- [x] [CONCEPT: 目标与非目标] 本切片不新增商业或附件页面。证据CONCEPT 非目标;本轮无前端文件变更。
## 6. 测试与验证
- [x] [CONCEPT: 测试方案] 连接器首次提交、重放、冲突、鉴权失败、回滚、重试、配额和脱敏通过。证据:容器内 `test_commercial_resource_boundaries.py` 9 项通过商业资源、Direct、reservation、OCR、RuntimeChat 与连接器组合最终 `63 passed`
- [x] [CONCEPT: 测试方案] 商业 Direct、OCR、RuntimeChat 相关回归通过。证据:容器内组合 33 项通过;新增 released retry 后 Direct + 资源组合 22 项通过;最终商业/连接器组合 63 项通过。
- [x] [CONCEPT: 测试方案] 附件归集和票据夹回归通过。证据:容器内与报销端点最终组合 `54 passed`
- [x] [CONCEPT: 测试方案] 报销端点与附件专项通过。证据:容器内报销/归集组合 54 项、Expense Claim attachment `20 passed, 101 deselected`
- [x] [CONCEPT: 测试方案] 连接器既有服务、端点和配置生命周期回归通过。证据:容器内 15 项通过;最终纳入商业/连接器组合 63 项通过。
- [x] [CONCEPT: 指标与验收] 相关 Python 文件 Ruff、compileall 通过,核心文件均低于 800 行。证据:容器检查退出码 0最大相关文件 `expense_claim_attachment_operations.py` 为 787 行。
## 7. 文档收尾
- [x] [CONCEPT: 本轮实现记录] 创建 CONCEPT 与分阶段 TODO记录 meter、事务、降级和验证口径。证据本目录两份文档。
- [x] [CONCEPT: 风险与开放问题] 记录进程强杀恢复、可选请求 ID 和 GB-month 容量计费边界。证据CONCEPT 风险章节。