--- doc_id: DEV-202606-001 feature_id: FEAT-202606-001-unified-entry-client type: dev-progress title: 统一入口客户端演示闭环纵向任务拆分 status: implemented owner: 医梦研发团队 created_at: 2026-06-02 updated_at: 2026-06-02 reviewers: [] related_docs: - PRD-202606-001 - DDS-202606-001 - API-202606-001 related_modules: - emoon-openplatform - emoon-ai-device - emoon-ai-agent - emoon-ai-card - emoon-ai-mcp tags: - 统一入口客户端 - 任务拆分 - 演示闭环 --- # 统一入口客户端演示闭环纵向任务拆分 > 用途:团队任务分配。每个任务包按“用户可感知的纵向能力”拆分,尽量覆盖前端、后端、Mock HIS、测试和验收,而不是按纯技术层横切。 ## 公共必读文档 所有参与人员开工前必须读透: | 文档 | 必须理解的点 | | --- | --- | | `docs/standards/AI中台工程约束.md` | 模块边界、依赖方向、Controller 不直连 Mapper、Card 不绕过 Agent 调 MCP | | `docs/standards/工程规约生效说明.md` | 架构测试和新 AI 模块落位规则 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/对外接口联调基准.md` | 终端调用白名单、SSE、Card Action、HIS Tool 风险分级、Mock/真实适配边界 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/详细设计.md` | 统一入口整体架构、AgentRouter、TaskState、Card Runtime、MCP/HIS Adapter 职责 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` | 前端真实调用接口、SSE 事件、卡片动作、错误码 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` | 演示范围冻结、DeepSeek/Dify/Card/MCP 分工、SQLite Mock HIS 口径 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/design/终端Web演示设计.md` | 前端 UI 定稿:A+B、品牌色、对话优先、右侧医生形象/卡片状态 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` | 后端挂号演示闭环详细任务 | | `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` | 前端 Web Demo 详细任务 | | `.superpowers/brainstorm/86383-1780383912/content/ui-direction-options.html` | 初始 UI 方向对比,理解为什么最终选择单应用 Web Demo 和 A+B 混合布局 | | `.superpowers/brainstorm/86383-1780383912/content/registration-flow-ab.html` | A+B 挂号交互流,理解对话区、卡片区、流程状态的协同方式 | | `.superpowers/brainstorm/86383-1780383912/content/final-web-demo-design-v4.html` | 最终视觉基线,重点理解品牌色、无左侧功能菜单、右侧医生静态形象 idle 状态 | ## 任务包总览 | 编号 | 任务包 | 推荐负责人 | 主要产物 | 依赖 | 预估工作量 | | --- | --- | --- | --- | --- | --- | | T0 | 演示契约与联调基线 | 技术负责人/后端负责人 | 冻结接口、卡片 schema、演示数据口径 | 无 | 0.5 人日 | | T1 | SQLite Mock HIS 挂号服务 | 后端 | 独立 Mock HIS 服务、SQLite seed、HIS API | T0 | 1.5 人日 | | T2 | MCP Tool + HIS Adapter 纵向工具链 | 后端 | HIS 工具注册、MockHisClient、工具调用日志 | T1 | 1 人日 | | T3 | OpenPlatform 终端入口与 SSE 会话 | 后端 | 设备/鉴权/SSE/会话入口可用 | T0 | 1 人日 | | T4 | AgentRouter + TaskState 挂号任务主链路 | 后端/AI | 意图识别、任务状态、Dify 输出归一 | T3 | 1 人日 | | T5 | Card Runtime 挂号动作闭环 | 后端 | 科室/医生/时间/支付/成功卡片动作链 | T2、T4 | 1.5 人日 | | T6 | Web Demo UI Shell 与品牌视觉 | 前端 | 三栏布局、医生静态形象、主题色 | T0 | 1 人日 | | T7 | Web Demo 对话入口与 SSE 消费 | 前端 | 中间对话流、输入/语音按钮、SSE parser | T3、T6 | 1 人日 | | T8 | Web Demo 挂号卡片流 | 前端 | 右侧卡片专区、卡片组件、幂等提交 | T5、T7 | 1.5 人日 | | T9 | Mock 支付与挂号成功演示 | 前后端联合 | 支付二维码/模拟支付/成功卡/Mock 标识 | T1、T5、T8 | 1 人日 | | T10 | 端到端验收与演示脚本 | QA/全栈 | curl 脚本、Playwright、演示证据包 | T1-T9 | 1 人日 | --- ## T0. 演示契约与联调基线 **目标** 冻结前后端统一口径,避免开发过程中各自发明字段、卡片、状态和 Mock 文案。 **预估工作量** 0.5 人日。 **交付范围** - 确认本轮只做 Web 浏览器演示优先,视口 `1440x900` / `1920x1080`。 - 确认本轮只完整做挂号闭环。 - 冻结 cardKey: - `department-selection` - `doctor-selection` - `time-slot-selection` - `confirm-appointment` - `payment-qrcode` - `appointment-success` - 冻结 SSE 事件: - `task_updated` - `message_delta` - `message_completed` - `card_created` - `error` - `completed` - 冻结 Mock 标识文案:`联调演示 / Mock 支付`、`联调演示`。 **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` - `docs/initiatives/FEAT-202606-001-unified-entry-client/design/终端Web演示设计.md` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` **验收标准** - 前后端共同确认一份字段表和卡片链路。 - 任何新增 cardKey/actionName 必须先更新契约文档。 --- ## T1. SQLite Mock HIS 挂号服务 **目标** 提供真实可演示的 HIS 业务语义,不能用随机数据或内存假成功。 **预估工作量** 1.5 人日。 **交付范围** - 独立 `mock-his-service`,不进入后端 Maven reactor。 - SQLite 数据库和 seed 数据。 - 科室、医生、排班、号源、锁号、Mock 支付、预约接口。 - 号源锁定 5 分钟过期。 - 支付成功后才能创建预约。 - 幂等键重复提交返回首次结果。 - 号源余量真实扣减。 **涉及模块/路径** - `mock-his-service/` - `mock-his-service/src/main/resources/schema.sql` - `mock-his-service/src/main/resources/seed.sql` - `mock-his-service/src/test/java/com/emoon/mockhis/*` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` 的 `3.1 Step 1`、`10.1 Mock HIS` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 1: Build SQLite Mock HIS Service` - `docs/initiatives/FEAT-202606-001-unified-entry-client/对外接口联调基准.md` 中写操作幂等和 Mock/Real Adapter 边界 **验收标准** - `mvn -f mock-his-service/pom.xml -DskipTests=false test` 通过。 - 重复锁号/预约不会重复扣号。 - 未支付订单不能创建预约。 - 返回结果包含 `mock:true`。 --- ## T2. MCP Tool + HIS Adapter 纵向工具链 **目标** AI 中台通过统一工具出口调用 Mock HIS,Dify 和前端都不能绕过。 **预估工作量** 1 人日。 **交付范围** - 扩展 `McpToolService` 挂号工具: - 查询科室/医生/排班 - 锁号/释放锁 - 创建 Mock 支付订单 - 标记 Mock 支付成功 - 创建预约 - `MockHisClient` 对接 SQLite Mock HIS。 - 工具调用带 `traceId`、风险等级、幂等键。 - 写操作只允许 Card Action 链路触发。 **涉及模块/路径** - `emoon-infra/emoon-modules/emoon-ai/emoon-ai-mcp` - `com.emoon.ai.mcp.application.McpToolService` - `com.emoon.mcp.his.client.MockHisClient` - `emoon-infra/emoon-modules/emoon-ai/emoon-ai-mcp/src/test/java/com/emoon/ai/mcp/application/McpToolServiceTest.java` **开发前必须彻底理解** - `docs/standards/AI中台工程约束.md` 中 MCP、Card、Agent 依赖方向 - `docs/initiatives/FEAT-202606-001-unified-entry-client/详细设计.md` 的 `11. MCP/HIS Adapter 设计` - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` 的 `3.2 Step 2` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 2` **验收标准** - `mvn -pl emoon-infra/emoon-modules/emoon-ai/emoon-ai-mcp -DskipTests=false test` 通过。 - 日志能追踪每次工具调用的 `traceId`。 - 工具返回 Mock 标识,不伪装真实支付/真实 HIS。 --- ## T3. OpenPlatform 终端入口与 SSE 会话 **目标** Web 客户端能通过统一入口发起对话,并收到稳定 SSE 事件和卡片创建事件。 **预估工作量** 1 人日。 **交付范围** - 新终端端点鉴权/HMAC 或演示模式兼容。 - `/api/v1/agent/chat/stream`。 - 设备上下文解析。 - conversation 创建/恢复。 - SSE 事件顺序稳定: - `task_updated` - `message_delta` - `message_completed` - `card_created` - `completed` - 错误事件包含可展示信息和 `traceId`。 **涉及模块/路径** - `emoon-openplatform/src/main/java/com/emoon/openplatform/controller/v1/AgentChatController.java` - `emoon-openplatform/src/main/java/com/emoon/openplatform/service/impl/AgentChatApplicationServiceImpl.java` - `emoon-openplatform/src/test/java/com/emoon/openplatform/acceptance/TerminalMvpAcceptanceTest.java` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` 的 `4. 流式对话` - `docs/initiatives/FEAT-202606-001-unified-entry-client/前端接入指引.md` 的 SSE 部分 - `docs/standards/AI中台工程约束.md` 中 openplatform 禁止直连 Mapper - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 4` **验收标准** - `mvn -pl emoon-openplatform -DskipTests=false -Dtest=TerminalMvpAcceptanceTest test` 通过。 - 前端不传 `agentId` 也能正确路由到挂号任务。 - SSE 断开时前端能保留 `conversationId`。 --- ## T4. AgentRouter + TaskState 挂号任务主链路 **目标** 让系统表现得“智能”:由自然语言识别任务,而不是靠左侧菜单按钮进入流程。 **预估工作量** 1 人日。 **交付范围** - AgentRouter 优先级: - 设备策略 - activeTask - waitingCard - 确定性规则 - DeepSeek JSON 分类 - 低置信度澄清 - REGISTRATION task 创建和状态推进。 - 用户说“下午”等上下文输入时,不重新走 DeepSeek 路由。 - Dify 输出校验/归一化,非法 JSON 降级。 **涉及模块/路径** - `emoon-infra/emoon-modules/emoon-ai/emoon-ai-agent` - `AgentRouterService` - `TaskStateService` - `IntentClassifier` - `DifyOutputNormalizer` - `TerminalReplyTemplateService` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` 的 `3.3 Step 3`、`6. AgentRouter` - `docs/initiatives/FEAT-202606-001-unified-entry-client/详细设计.md` 的 `7. AgentRouter 设计`、`9. TaskStateService 设计` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 4`、`Task 5` **验收标准** - `mvn -pl emoon-infra/emoon-modules/emoon-ai/emoon-ai-agent -DskipTests=false test` 通过。 - activeTask 场景不被 DeepSeek 错误切换。 - Dify 不直接写 HIS。 --- ## T5. Card Runtime 挂号动作闭环 **目标** 让每一次用户选择和确认都经过 Card Action,保障幂等、审计、状态推进。 **预估工作量** 1.5 人日。 **交付范围** - 卡片动作链: - `select_department` - `select_doctor` - `select_time_slot` - `confirm_appointment` - `mock_payment_paid` - `select_time_slot` 后锁号。 - `confirm_appointment` 后创建 Mock 支付订单。 - `mock_payment_paid` 后创建预约。 - 重复点击同一动作不创建重复业务结果。 - Card Runtime 不直接调用 MCP,必须经 AgentActionOrchestrator。 **涉及模块/路径** - `emoon-infra/emoon-modules/emoon-ai/emoon-ai-card` - `emoon-infra/emoon-modules/emoon-ai/emoon-ai-agent/src/main/java/com/emoon/ai/agent/application/AgentActionOrchestrator.java` - `CardActionService` - `CardInstanceService` **开发前必须彻底理解** - `docs/standards/AI中台工程约束.md` 中 Card 不绕过 Agent 调 MCP 红线 - `docs/initiatives/FEAT-202606-001-unified-entry-client/详细设计.md` 的 `10. Card Runtime 设计` - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` 的 `5. 卡片动作` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 3` **验收标准** - `mvn -pl emoon-infra/emoon-modules/emoon-ai/emoon-ai-agent,emoon-infra/emoon-modules/emoon-ai/emoon-ai-card -DskipTests=false test` 通过。 - 重复 idempotencyKey 返回首次结果。 - `appointment-success` 来自 Mock HIS 真实预约结果。 --- ## T6. Web Demo UI Shell 与品牌视觉 **目标** 做出甲方能看的第一屏:对话优先、品牌色正确、右侧静态医生形象,不再使用粗糙 CSS 图形。 **预估工作量** 1 人日。 **交付范围** - 独立 `emoon-terminal-client` 单应用。 - Vue 3 + TypeScript + Vite。 - 三栏布局: - 左:助手上下文,不是菜单 - 中:对话和输入 - 右:Context Panel - 品牌色: - `#2b1f99` - `#3ad4d8` - 医生形象使用真实 PNG 资产。 - 右侧 idle 状态只展示医生形象,不放语音/发送按钮。 **涉及模块/路径** - `/Users/destiny/dev/emoon/emoon-terminal-client` - `src/theme/tokens.css` - `src/layouts/AppShell.vue` - `src/layouts/AssistantContextPanel.vue` - `src/layouts/DoctorAssistantFigure.vue` - `src/assets/doctor-assistant.png` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/design/终端Web演示设计.md` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` 的 `Task 1`、`Task 2`、`Task 3` - `docs/initiatives/FEAT-202606-001-unified-entry-client/design/前端工程启动指南.md` - `.superpowers/brainstorm/86383-1780383912/content/ui-direction-options.html` - `.superpowers/brainstorm/86383-1780383912/content/final-web-demo-design-v4.html` **验收标准** - `pnpm build` 能通过。 - 页面在 `1440x900` 无横向滚动。 - 左侧没有大功能按钮或 agent 菜单。 - 右侧医生形象质量达标,不使用 CSS 拼图。 --- ## T7. Web Demo 对话入口与 SSE 消费 **目标** 前端中间区域承载输入、语音按钮、发送按钮,并能消费后端 SSE。 **预估工作量** 1 人日。 **交付范围** - `ConversationPanel` - `MessageBubble` - `ChatInput` - SSE parser。 - 语音按钮首版只展示提示,不实现 STT。 - 用户输入后能追加消息。 - 收到 `card_created` 后切换右侧为卡片。 **涉及模块/路径** - `src/chat/ConversationPanel.vue` - `src/chat/ChatInput.vue` - `src/chat/MessageBubble.vue` - `src/api/sse.ts` - `src/state/terminalStore.ts` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/design/终端Web演示设计.md` 的 `Center Conversation Panel`、`Interaction Flow` - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` 的 `4. 流式对话` - `docs/initiatives/FEAT-202606-001-unified-entry-client/前端接入指引.md` 的 `4. 流式对话(SSE)` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` 的 `Task 4`、`Task 5` - `.superpowers/brainstorm/86383-1780383912/content/registration-flow-ab.html` **验收标准** - `pnpm vitest run tests/unit/sse.spec.ts` 通过。 - 语音和发送按钮都在中间输入区。 - 右侧 idle 不出现语音/发送交互。 --- ## T8. Web Demo 挂号卡片流 **目标** 前端右侧 Context Panel 能完整渲染挂号卡片并提交动作。 **预估工作量** 1.5 人日。 **交付范围** - Context Panel 状态: - `idle` - `task` - `error` - `completed` - 卡片组件: - DepartmentSelectionCard - DoctorSelectionCard - TimeSlotSelectionCard - ConfirmAppointmentCard - PaymentQrCard - AppointmentSuccessCard - ErrorCard - 每个动作带 `idempotencyKey`。 - 成功后点击 `完成` 回到 idle 医生形象。 **涉及模块/路径** - `src/layouts/ContextPanel.vue` - `src/layouts/RegistrationProgress.vue` - `src/cards/*` - `src/api/client.ts` - `src/api/demoFixtures.ts` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/design/终端Web演示设计.md` 的 `Right Context Panel`、`Card Flow` - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` 的 `5. 卡片动作`、`11. 前端卡片组件映射` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` 的 `Task 6`、`Task 7` - `.superpowers/brainstorm/86383-1780383912/content/final-web-demo-design-v4.html` **验收标准** - `pnpm vitest run tests/unit/cardRenderer.spec.ts` 通过。 - 卡片顺序正确。 - `PaymentQrCard` 必须显示 `联调演示 / Mock 支付`。 - `AppointmentSuccessCard` 必须显示 `联调演示`。 --- ## T9. Mock 支付与挂号成功联合闭环 **目标** 打通“确认挂号 → Mock 支付 → 支付完成 → 预约成功”这一段最容易被甲方追问的链路。 **预估工作量** 1 人日。 **交付范围** - 后端: - 创建 Mock 支付订单。 - 标记 Mock 支付完成。 - 支付成功后创建预约。 - 前端: - 显示 Mock 支付卡。 - 显示模拟支付完成按钮。 - 显示挂号成功卡。 - 演示文案明确当前是 Mock 支付和 Mock HIS。 **涉及模块/路径** - `mock-his-service` - `emoon-ai-mcp` - `emoon-ai-agent` - `emoon-ai-card` - `emoon-terminal-client/src/cards/PaymentQrCard.vue` - `emoon-terminal-client/src/cards/AppointmentSuccessCard.vue` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` 的 `4.7 支付二维码`、`4.8 支付成功后创建预约` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 1`、`Task 2`、`Task 3` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` 的 `Task 6` - `docs/initiatives/FEAT-202606-001-unified-entry-client/对外接口联调基准.md` 中写操作和财务动作风险控制 **验收标准** - 未支付不能创建预约。 - 支付卡和成功卡都显示 Mock/联调演示。 - 预约号来自后端/Mock HIS 结果,不由前端编造。 --- ## T10. 端到端验收与演示脚本 **目标** 形成可重复的演示证据,保证甲方现场不会只靠手动点击“碰巧成功”。 **预估工作量** 1 人日。 **交付范围** - 后端 curl 脚本: - happy path - edge cases - 前端 Playwright: - 1440×900 视觉检查 - 1920×1080 视觉检查 - 挂号闭环点击流程 - 演示证据包: - conversationId - taskId - cardInstanceId 序列 - traceId - appointmentId - appointmentNo - mock:true 响应或截图 **涉及模块/路径** - `scripts/demo-registration/*` - `emoon-terminal-client/tests/e2e/*` - `emoon-openplatform/src/test/java/com/emoon/openplatform/acceptance/TerminalMvpAcceptanceTest.java` **开发前必须彻底理解** - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/统一入口挂号演示实施计划.md` 的 `Task 6`、`Task 7` - `docs/initiatives/FEAT-202606-001-unified-entry-client/dev-progress/终端Web演示实施计划.md` 的 `Task 8`、`Task 9` - `docs/initiatives/FEAT-202606-001-unified-entry-client/MVP接口契约.md` 全文 - `docs/initiatives/FEAT-202606-001-unified-entry-client/需求文档.md` 的 `7. 核心 Case 验证清单` **验收标准** - 后端模块测试通过。 - `mvn -pl emoon-openplatform -DskipTests=false test` 通过。 - `mvn -pl emoon-admin -DskipTests=false -Dprofiles.active= -Dtest=AiPlatformArchitectureTest test` 通过。 - 前端 `pnpm build && pnpm test:unit && pnpm test:e2e` 通过。 - 演示前能一键重置 Mock HIS 数据。 --- ## 推荐分配方式 | 小组/人 | 建议负责 | | --- | --- | | 王康 | T1 SQLite Mock HIS | | 高力 | T2 MCP Tool + T5 Card Action | | 高力 | T3 OpenPlatform SSE + T4 AgentRouter/Task/Dify | | 韩朝 | T6 UI Shell + 医生形象 + 品牌视觉 | | 韩朝 | T7 对话/SSE + T8 卡片流 | | 一起 | T9 支付成功联合闭环 + T10 验收脚本 | | 王康 | T0 契约冻结、跨任务 review、最终架构测试 | ## 工作量汇总 | 范围 | 包含任务 | 预估工作量 | | --- | --- | --- | | 契约冻结 | T0 | 0.5 人日 | | 后端/Mock HIS/AI 中台 | T1、T2、T3、T4、T5 | 6 人日 | | 前端 Web Demo | T6、T7、T8 | 3.5 人日 | | 前后端联调和验收 | T9、T10 | 2 人日 | | 合计 | T0-T10 | 12 人日 | | 建议风险缓冲 | Dify 输出不稳定、SSE 兼容、Mock HIS 边界补漏、视觉微调 | 2-3 人日 | 建议按 14-15 人日安排总容量。若投入 3 名后端、2 名前端、1 名全栈/QA,并且 T0 在首日上午冻结,理想情况下 4-5 个自然工作日可以完成可演示闭环;如果 Dify 工作流需要重新设计或真实 MCP 注册环境不可用,需要额外预留 1-2 天。 ## 关键依赖顺序 ```text T0 ├── T1 ── T2 ── T5 ── T9 ├── T3 ── T4 ────────┘ └── T6 ── T7 ── T8 ─┘ ↓ T10 ``` ## 每日联调检查点 | 时间点 | 必查内容 | | --- | --- | | Day 1 | T0 契约冻结,Mock HIS seed 数据可跑,前端 shell 可启动 | | Day 2 | SSE 能返回 `task_updated/card_created`,前端能显示医生 idle 形象和首张科室卡 | | Day 3 | 科室→医生→时间卡片链路跑通,锁号真实落库 | | Day 4 | Mock 支付→预约成功跑通,前端显示 Mock 标识 | | Day 5 | curl + Playwright 全链路验收,准备演示证据包 |