# 差旅计算器员工解析跨租户命中

日期：2026-07-17
文档路径：document/development/2026-07-17/dev-logs/bugs/travel-calculator-employee-tenant-isolation.md

## 修复记录
- 14:07：记录 bug 修复：差旅计算器员工解析跨租户命中。（bug-log:242d68c3）
  - Git 提交检查：已执行 `git fetch --all --prune`、状态、upstream 和双向日志检查；`origin/main` 无新提交，本地 `main` ahead 17。ahead 摘要：`242d68c3/28b834ed/4940ebc4` 为审批与风险处置，`ee88a36b` 至 `a662cfe6` 为费用学习/预审/票据/记忆闭环，`5ed34c2b/11275e4b` 为回填和迁移安全，`1347366b/22669a90/a616b30c/661990b2` 为费用事件与事务，`653eda05` 为认证会话；本轮未改写这些提交。
  - 根因：差旅计算器按邮箱、工号或姓名查员工时没有租户谓词，也忽略认证上下文的 `employee_id/employee_no`；员工身份现为租户内唯一，不同企业可以合法存在相同值，首条命中会把另一企业职级和办公城市带入计算。
  - 修改：`travel_reimbursement_calculator.py` 先校验可信 `tenant_id`，将 `employee_id` 加入最高优先候选，所有 ID/邮箱/工号/姓名查询都以 `Employee.tenant_id` 为首层条件。
  - 操作：新增两企业相同邮箱、工号和姓名的反向测试，故意先插入另一企业员工，确认当前登录企业的 employee ID、职级和地点始终胜出。
  - 验证：容器内差旅计算器 5 项通过；员工服务、导入、认证和行为画像 35 项通过；目标 Ruff、format check、compileall、代码体积门禁和 `git diff --check` 通过。
  - 影响：差旅住宿、补助和交通估算不会再读取另一企业员工的职级或办公地点；无合法租户时直接失败关闭。
