# 差旅计算器只读流程触发规则资产提交

日期：2026-07-17
文档路径：document/development/2026-07-17/dev-logs/bugs/travel-calculator-rule-sync-transaction.md

## 修复记录
- 13:48：记录 bug 修复：差旅计算器只读流程触发规则资产提交。（bug-log:242d68c3）
  - Git 提交检查：已执行 `git fetch --all --prune`、`git status -sb`、upstream 解析及双向日志检查；`origin/main` 无新提交，本地 `main` ahead 17。ahead 摘要：`242d68c3/28b834ed/4940ebc4` 为审批与风险处置，`ee88a36b` 至 `a662cfe6` 为 AI 费用学习和申请闭环，`5ed34c2b/11275e4b` 为历史回填与迁移安全，`1347366b/22669a90/a616b30c/661990b2` 为费用事件与事务，`653eda05` 为认证会话；本轮未改写这些提交。
  - 根因：差旅计算器为读取规则先调用 `AgentAssetService.list_assets()`，该入口可能执行资产初始化并提交共享 Session，导致外层报销事务被提前提交；同时规则目录未带认证企业，企业覆盖规则可能退回到错误的全局目录。
  - 修改：`travel_reimbursement_calculator.py` 删除计算路径中的资产同步调用，改为使用当前 Session 和认证用户 `tenant_id` 直接只读加载 `ExpenseRuleRuntimeService` 目录；规则初始化只保留在启动/管理边界，不再混入金额计算事务。
  - 操作：保留地点、职级、住宿、补助和交通估算算法，仅收紧规则读取的事务与租户边界；测试夹具同步补齐结构化企业身份。
  - 验证：容器内差旅计算器 4 项金额、地区拒绝和地点归一化回归通过；AgentAsset service/foundation 28 项、报销服务 121 项及后端全量分片通过；相关新文件 Ruff、compileall 和 `git diff --check` 通过。
  - 影响：用户计算差旅标准时不会意外提交正在编辑的报销单；企业规则按当前登录企业解析，读取失败会明确报错而不会静默使用另一企业或全局可写状态。
