{
  "subject": "450设备端与手机端打餐建议结果不一致",
  "description": "## 需求背景\n\n用户在 450 设备端完成打餐后，设备屏幕显示建议为“正常”，但同一笔打餐记录在手机端显示为“超量”。两个终端给出的结论相反，容易使用户对营养建议和系统数据失去信任。\n\n## 当前问题\n\n- 发生设备：450 设备端与手机端。\n- 发生场景：用户完成打餐后查看营养建议。\n- 设备端表现：显示“正常”。\n- 手机端表现：显示“超量”。\n- 根因尚未确认，可能涉及统计范围、计算口径、数据同步、用户营养目标、餐次归属、单位精度、缓存或账号映射等方面。\n\n## 需求内容\n\n1. 对同一用户、同一餐次、同一笔取餐记录，450 设备端与手机端应使用相同的数据快照、营养目标和判断口径。\n2. 统一建议结果的统计范围，明确区分“本次取餐”“本餐累计”和“今日累计”，避免两个终端针对不同范围只展示“正常/超量”。\n3. 建议由服务端统一计算并返回，终端展示同一份结果；如设备端存在离线计算，联网后应以服务端结果校正。\n4. 建议结果需能够关联用户、餐次、取餐记录、计算时间和算法版本，便于问题追踪。\n5. 同步期间如无法立即获得最终结果，应显示“数据同步中”，不得先展示与最终结果相反的明确结论。\n\n## 排查重点\n\n- 设备端判断的是当前一次取餐，手机端是否判断本餐累计或全天累计。\n- 两端是否使用不同的公式、阈值或算法版本。\n- 设备端计算时是否只包含当前菜品，手机端是否已合并其他取餐记录。\n- 两端获取的用户健康档案和推荐摄入目标是否一致。\n- 早餐、午餐、晚餐及跨天时间边界是否一致。\n- 克、份、千卡等单位换算及四舍五入规则是否一致。\n- 手机端或设备端是否使用旧缓存。\n- 设备识别用户与手机登录用户是否对应同一档案。\n\n## 验收要点\n\n- 同一用户、同一餐次、同一取餐记录在 450 设备端与手机端展示的建议状态一致。\n- 两端展示或使用的实际摄入量、建议目标和统计范围一致。\n- 覆盖低于、等于及刚超过建议上限的临界值场景。\n- 多次追加取餐后，两端可同步从“正常”变为“超量”。\n- 撤销或删除取餐记录后，两端可同步恢复正确状态。\n- 覆盖跨餐次、跨天、设备离线重连及用户营养目标更新场景。\n- 同步失败时保留最后一次有效结果并明确提示数据尚未更新。\n\n## 建议排查证据\n\n异常复现时记录用户 ID、设备 ID、取餐记录 ID、菜品和重量、当前/本餐/全天累计量、推荐目标、餐次归属、两端取数时间、算法版本、缓存命中情况及最终状态。",
  "descriptionFormat": "MARKDOWN",
  "formatType": "MARKDOWN",
  "assignedTo": "63575519287a2b849fa9a642",
  "participant": [
    "63575519287a2b849fa9a642"
  ],
  "status": "100005",
  "space": "dd2f708d1702891ff45b6f5d99",
  "spaceIdentifier": "dd2f708d1702891ff45b6f5d99",
  "spaceType": "Project",
  "category": "Req",
  "workitemType": "9uy29901re573f561d69jn40",
  "viewSpaceId": "dd2f708d1702891ff45b6f5d99",
  "spaceId": "dd2f708d1702891ff45b6f5d99",
  "workitemTypeId": "9uy29901re573f561d69jn40",
  "workItemTypeId": "9uy29901re573f561d69jn40",
  "workitemTypeIdentifier": "9uy29901re573f561d69jn40"
}

