liuyun 19876fdadd chore(openspec): 归档 C1/C2/C3 change,spec 合并进主 specs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-15 01:13:08 +08:00

2.9 KiB
Raw Permalink Blame History

backend/record Specification

Purpose

定义服务机构端履约留痕域的后端行为——签到/签退/项目执行/照片/离线补传/垫付台账与结转。

Requirements

Requirement: 签到

POST /record/checkin MUST 校验 L3(order 存在、order_status ∈ {assigned, serving}、elder/assignee 匹配);checkin_time 服务器取时(不接受客户端传入);定位失败 3002 不阻塞(locate_status=failed/denied);建 record(serving)并返回 record_id。

Scenario: 服务器取时

  • WHEN 签到
  • THEN checkin_time 由服务端生成,客户端传入被忽略

Scenario: 定位失败不阻塞

  • WHEN 签到但定位失败
  • THEN 标记 locate_status=failed,照常提交(3002)

Requirement: 签退提交

POST /record/checkout MUST 校验必拍未拍(3001 硬拒 + 拒拍出路 is_refused_photo=1);checkout_time/duration_min 服务器取时;record_status 转 submitted;waiting_period 老人 is_prepaid=1、billable=0(3004 仅标记)。

Scenario: 必拍未拍硬拒

  • WHEN 必拍项未拍照且未走拒拍出路
  • THEN 返回 3001 拒绝签退

Scenario: 垫付标记

  • WHEN 等待期老人签退
  • THEN record.is_prepaid=1、billable=0,不计费

Requirement: 项目执行

POST /record/item/save MUST exec_result ∈ {done, undo_not_done, undo_refused};svc_id 落本机构 L4;photo_required 快照自 order.item_list。

Scenario: 措辞纪律

  • WHEN 项目未执行
  • THEN exec_result 用 undo_not_done(非 not_done)

Requirement: 照片上传

POST /record/photo/upload MUST 校验文件 ≤500KB;visible_to_family=0;keep_until 补传后 ≥7 天。

Scenario: 超限拒绝

  • WHEN 上传超过 500KB 的照片
  • THEN 拒绝并提示压缩

Requirement: 离线补传

POST /record/offline/sync MUST 按 client_md5 幂等去重(重复提交返回已存在,静默不弹窗)。

Scenario: 去重

  • WHEN 同 client_md5 重复补传
  • THEN 幂等返回,不重复落库

Requirement: 垫付台账与结转

waiting_period 老人留痕 MUST is_prepaid=1、billable=0;POST /record/prepaid/carryover MUST 勾选若干 is_prepaid=1 记录 → 生成对应正式记录(复制、is_prepaid=0、source_prepaid_of=原 id),原记录保留只读、不改原始时间戳(签到时间/定位/照片仍是原始值)。

Scenario: 结转不改原始时间戳

  • WHEN 结转垫付记录
  • THEN 新记录签到时间/定位/照片仍为原始值,仅标记来源

Requirement: 留痕列表与详情

GET /record/list(admin B3,按 elder/assignee/日期/状态筛选)与 GET /record/detail MUST 返回留痕列表/详情(含项目、照片、异常、定位、垫付标记)。

Scenario: 质控查看留痕

  • WHEN 质控员查询留痕列表与详情
  • THEN 返回时间/项目/照片/异常/定位/垫付标记