# Success Criteria

## Project Success

- 未登录用户只能看到 ARR 登录页或无详情 readiness；页面、API、上传、日志和下载均由服务端会话保护，退出后立即失效。
- XML 上传、确定性处理、完整结果验证和 Finance 提交不依赖 Agent/MCP，并得到终态任务回执。
- 纯 `PRICE_UNMATCHED` 上传得到 `needs_review` 而非失败：初始阶段没有日报、Finance 版本、失败事件或月报事件；填写全部键后原 XML + 冻结清单的独立重放才可产生一次最终成功。
- 用户上传 XML 后无需再提交月报参数；结构化结果成功入库会自动触发相应月报处理。
- 生成的月报包含 `TOTAL PRICE` 字段，并在每个数据行使用 `REAL PRICE × NIGHTS × NO_OF_ROOMS` 的 Excel 公式。
- 月报发布完成后，打开的月报页面自动出现新版本，不要求用户点击刷新。

## Task Completion Standard

- 行为改动必须同时覆盖触发链、内部参数推导、工作簿公式和失败/重试边界。
- 仅更新记忆的任务必须清楚标注哪些旧说法已失效，以及产品代码仍存在哪些差异。

## Quality Checks

- 测试必须覆盖错误/正确登录、尝试限流、安全回跳、CSRF 退出、会话撤销、桌面/H5 会话过期处理，以及 375/768/1024/1440 响应式无横向溢出。
- 测试必须证明月报触发发生在数据库成功提交之后，且失败提交不会触发。
- 测试必须覆盖合并重复价格键、候选价、整数格式、显式 `0`（冻结清单规范化为 `0.00`）、未完成禁止确认、revision 冲突、重复最终化、技术重试、取消留痕、认证/CSRF和隐私字段隔离。
- `待人工处理` 状态与复核进度必须作为同一个操作入口，点击或键盘激活后定位并聚焦人工价格面板，不能误开任务日志；复核面板、动态消息、确认弹窗和安全 API 错误必须完整支持中文、英文和泰文。
- Daily Report 具体行必须是非操作型表格内容，不得通过鼠标、Enter 或 Space 打开任务日志；只有页头右上角的 `任务日志` 控件可以打开 `#task-log-dialog`，下载和人工复核仍由各自明确控件触发。
- 人工确认请求在途时，上传卡片必须显示本地化的“日报生成中”；请求结束后按成功、仍在生成或可重试复核状态收敛，不能继续显示过期的“等待人工定价”。
- 最终人工成功必须证明日报行序/数值可重放、Finance 只有一个 active 版本、`manual_review` 行数和冻结清单 SHA-256 可追踪、月报事件仅一次。
- 重新打开生成的 XLSX，确认 `TOTAL PRICE` 为公式单元格并逐行引用同一行的 `REAL PRICE`、`NIGHTS`、`NO_OF_ROOMS`。
- 用户入口不得要求提交月报年份、月份或截止日期。
- 页面自动同步必须避免重叠请求；页面隐藏或离开月报页时停止轮询，恢复可见时立即重新读取。

## Last Reviewed

2026-08-11
