3.9 KiB
shared/api-contract Specification
Purpose
定义服务机构端 C0 的统一响应契约与业务错误码,作为前后端接口交互的唯一约定。
Requirements
Requirement: 统一响应结构
所有接口 MUST 返回统一响应结构 {code, message, data, hint};code=0 成功,非 0 失败;硬锁拒绝时 hint MUST 提供用户可读的「怎么解」提示。
Scenario: 硬锁拒绝带 hint
- WHEN 接口因硬锁拒绝(如无有效待遇)
- THEN 返回非 0 code 与可读 message,且
hint说明「先做什么才能做」
Requirement: 业务错误码
业务错误码 MUST 落地为 5 位码 [域码2][序3],并覆盖:1001 无有效待遇、1002 无有效计划、1003 无有效工单、1004 留痕不完整、1005 未质控、1006 资质不匹配(提示级)、2001 时间冲突(硬拒)、2002 项数不满足(提示)、3001 必拍未拍(硬拒)、3002 定位失败(非错误)、3003 扑空登记、3004 垫付不计费、4001 越权或自审自放行。
Scenario: 资质不匹配提示级
- WHEN 派单时护理员资质不匹配
- THEN 返回 1006,前端仅提示、允许继续(本期不拦截,二期改硬拒)
Requirement: 老人档案接口
GET /elder、POST /elder、GET /elder/:id、POST /elder/:id/status、GET /elder/:id/status/log、POST /elder/assess-evidence MUST 存在,遵循统一响应 {code,message,data,hint}。
Scenario: 状态变更必填原因
- WHEN 调用
/elder/:id/status且缺 change_reason - THEN 返回校验错误,拒绝变更
Requirement: 身份证服务端掩码
/elder/list MUST 返回掩码后的身份证(如 5301**********1234);明文仅在 /elder/detail 且 admin/qc 授权时返回,并 MUST 落审计。
Scenario: 列表掩码
- WHEN 调用
/elder/list - THEN id_card_no 返回掩码值,非明文
Requirement: 计划与工单接口
POST /plan、POST /plan/change、GET /plan/:id、POST /plan/:id/confirm、GET /plan/by-elder/:elderId、POST /order/generate、POST /order/assign、POST /order/:id/reassign、GET /order/batch-recommend、GET /order/today、POST /order/:id/cancel、GET /order/:id、GET /elder-svc/:elderId、PUT /elder-svc/:elderId MUST 存在,遵循统一响应。
Scenario: 时间冲突硬拒
- WHEN 派单时同护理员时间重叠
- THEN 返回 2001,拒绝保存
Requirement: 属地项数校验
制定计划时,昆明按 care_mode×care_level 校验项数(一级≥18/二级≥15/三级≥13,附加≤5),不满足返回 2002(提示级);州市只提示不拦。
Scenario: 昆明项数不满足
- WHEN 昆明一级护理计划项数 < 18
- THEN 返回 2002 提示,不硬拦
Requirement: 履约留痕接口
POST /record/checkin、POST /record/item/save、POST /record/photo/upload、POST /record/checkout、POST /record/offline/sync、GET /record/:id、GET /record、GET /record/prepaid-list、POST /record/prepaid/carryover MUST 存在,遵循统一响应。
Scenario: 签退必拍未拍硬拒
- WHEN 必拍项未拍照且未走拒拍出路时签退
- THEN 返回 3001,拒绝签退
Scenario: 签到服务器取时
- WHEN 签到
- THEN checkin_time 由服务端生成,客户端传入被忽略
Requirement: 异常接口
POST /abnormal、GET /abnormal MUST 存在,遵循统一响应。
Scenario: 扑空
- WHEN 护理员登记未遇(扑空)
- THEN 工单转 not_met、到访时间/定位/原因必留、不产生 record
Requirement: 垫付结转接口
GET /record/prepaid-list MUST 返回老人垫付台账(is_prepaid=1);POST /record/prepaid/carryover MUST 勾选垫付记录生成正式记录,原记录保留只读。
Scenario: 结转不改原始时间戳
- WHEN 结转垫付记录
- THEN 新记录签到时间/定位/照片仍为原始值,仅标记来源=垫付台账