diff --git a/openspec/changes/svc-org-c4-qc/.openspec.yaml b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/.openspec.yaml similarity index 100% rename from openspec/changes/svc-org-c4-qc/.openspec.yaml rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/.openspec.yaml diff --git a/openspec/changes/svc-org-c4-qc/design.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/design.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/design.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/design.md diff --git a/openspec/changes/svc-org-c4-qc/proposal.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/proposal.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/proposal.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/proposal.md diff --git a/openspec/changes/svc-org-c4-qc/specs/backend/qc/spec.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/backend/qc/spec.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/specs/backend/qc/spec.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/backend/qc/spec.md diff --git a/openspec/changes/svc-org-c4-qc/specs/frontend/ad/qc/spec.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/frontend/ad/qc/spec.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/specs/frontend/ad/qc/spec.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/frontend/ad/qc/spec.md diff --git a/openspec/changes/svc-org-c4-qc/specs/shared/api-contract/spec.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/shared/api-contract/spec.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/specs/shared/api-contract/spec.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/shared/api-contract/spec.md diff --git a/openspec/changes/svc-org-c4-qc/specs/shared/data-model/spec.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/shared/data-model/spec.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/specs/shared/data-model/spec.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/specs/shared/data-model/spec.md diff --git a/openspec/changes/svc-org-c4-qc/tasks.md b/openspec/changes/archive/2026-10-15-svc-org-c4-qc/tasks.md similarity index 100% rename from openspec/changes/svc-org-c4-qc/tasks.md rename to openspec/changes/archive/2026-10-15-svc-org-c4-qc/tasks.md diff --git a/openspec/specs/backend/qc/spec.md b/openspec/specs/backend/qc/spec.md new file mode 100644 index 0000000..08a3f2a --- /dev/null +++ b/openspec/specs/backend/qc/spec.md @@ -0,0 +1,59 @@ +# backend/qc Specification + +## Purpose +定义服务机构端质控闸门的后端行为——全量质控、放行/退回(自审自放行 4001)、五类推送聚合、异常联动改计划、补正。 + +## Requirements + +### Requirement: 全量质控生成 +定时任务 MUST 扫描 `record_status='submitted'` 且无 qc 记录的留痕 → 生成 qc(qc_result=pending)。非抽检。 + +#### Scenario: 兜底生成 +- **WHEN** 一条留痕 submitted 后无 qc +- **THEN** 定时任务为其生成 qc 记录 + +### Requirement: 放行 +`POST /qc/pass` MUST 按序校验:① 四要素齐(时间/项目/时长/护理员,否则 1004)→ ② 必拍已拍(3001)→ ③ 状态=待质控(幂等)→ ④ **放行人 ≠ 录入人**(4001 自审自放行);通过则 qc_result=passed + pass_time。 + +#### Scenario: 自审自放行拒绝 +- **WHEN** 放行人 = 该记录的录入人 +- **THEN** 返回 4001 拒绝 + +#### Scenario: 缺要素拒绝 +- **WHEN** 留痕缺必填要素 +- **THEN** 返回 1004 拒绝 + +### Requirement: 退回 +`POST /qc/return` MUST qc_note 必填 → qc_result=returned;退回后护理员可补正。 + +#### Scenario: 退回需原因 +- **WHEN** 退回缺 qc_note +- **THEN** 拒绝 + +### Requirement: 五类主动推送聚合 +`GET /qc/pending/list` MUST 聚合五类:异常待处理(abnormal.handle_status=open)、逾期未做(order 过时段无 record 超 24h)、住院仍有派单(elder.treat_status=hosp_pause 且有未完成 order)、计划未制定(待遇生效 5 工作日无 active plan)、留痕待放行(qc pending);每类带消除条件。 + +#### Scenario: 逾期未做 +- **WHEN** 工单过时段超 24h 仍无 record +- **THEN** 出现在「逾期未做」待办 + +### Requirement: 异常处理与联动改计划 +`POST /qc/exception/link` MUST 复用 plan.change 生成新 plan + 回填 record_abnormal.link_plan_change=true。 + +#### Scenario: 异常联动改计划 +- **WHEN** 质控员判断异常需加专项 +- **THEN** 生成新计划并回填 link_plan_change + +### Requirement: 补正 +`POST /qc/correct` MUST 写 ho_record_correction(correction_note)+ record 重新 submitted(触发 recheck);不可补正签到时间/定位/照片;同记录补正 ≥3 次 ⇒ 进质控重点。 + +#### Scenario: 补正不改原值 +- **WHEN** 补正一条留痕 +- **THEN** 原记录不动,新增更正说明,record 重新进质控 + +### Requirement: 批量放行 +`POST /qc/batch-pass` MUST 排除有异常/未执行项/临时加项/时长异常/补正过的记录。 + +#### Scenario: 批量安全边界 +- **WHEN** 批量放行含异常记录 +- **THEN** 拒绝(必须逐条看) diff --git a/openspec/specs/frontend/ad/qc/spec.md b/openspec/specs/frontend/ad/qc/spec.md new file mode 100644 index 0000000..c2e0244 --- /dev/null +++ b/openspec/specs/frontend/ad/qc/spec.md @@ -0,0 +1,27 @@ +# frontend/ad/qc Specification + +## Purpose +定义服务机构端「质控中心」页面的交互。 + +## Requirements + +### Requirement: 质控中心页 +admin「质控中心」页 MUST 提供三区:① 待我处理(五类主动推送聚合 + 计数)② 待放行队列(逐条放行/退回)③ 异常处理台(处理/转派/关闭 + 处理意见)。 + +#### Scenario: 查看待办 +- **WHEN** 质控员打开质控中心 +- **THEN** 看到五类待办计数 + 待放行队列 + 异常处理台 + +### Requirement: 放行与退回 +放行 MUST 一键;退回 MUST 选原因(下拉);批量放行 MUST 排除异常/未执行项记录。 + +#### Scenario: 放行 +- **WHEN** 质控员点放行 +- **THEN** 记录转 passed,从待放行队列消失 + +### Requirement: 异常处理 +质控员 MUST 能对异常记录处理/转派/关闭并附处理意见;判断需加专项时 MUST 能联动到计划变更。 + +#### Scenario: 联动改计划 +- **WHEN** 质控员对异常选「联动改计划」 +- **THEN** 生成新计划并回填 link_plan_change diff --git a/openspec/specs/shared/api-contract/spec.md b/openspec/specs/shared/api-contract/spec.md index 7f80b53..3f6945e 100644 --- a/openspec/specs/shared/api-contract/spec.md +++ b/openspec/specs/shared/api-contract/spec.md @@ -71,3 +71,21 @@ #### Scenario: 结转不改原始时间戳 - **WHEN** 结转垫付记录 - **THEN** 新记录签到时间/定位/照片仍为原始值,仅标记来源=垫付台账 + +### Requirement: 质控接口 +`GET /qc/pending/list`、`GET /qc/detail`、`POST /qc/pass`、`POST /qc/return`、`POST /qc/exception/link`、`POST /qc/correct`、`POST /qc/batch-pass` MUST 存在,遵循统一响应。 + +#### Scenario: 放行前自检 +- **WHEN** 放行一条留痕 +- **THEN** 按序校验四要素(1004)/必拍(3001)/幂等/非自审(4001),任一不过拒绝 + +#### Scenario: 退回必填原因 +- **WHEN** 退回留痕缺 qc_note +- **THEN** 拒绝 + +### Requirement: 五类主动推送 +`GET /qc/pending/list` MUST 聚合五类待办:异常待处理、逾期未做(>24h)、住院仍有派单、计划未制定(5 工作日)、留痕待放行,每类带消除条件。 + +#### Scenario: 消除条件 +- **WHEN** 某类待办已处理 +- **THEN** 该类从待办列表消除 diff --git a/openspec/specs/shared/data-model/spec.md b/openspec/specs/shared/data-model/spec.md index d2d425e..cad564a 100644 --- a/openspec/specs/shared/data-model/spec.md +++ b/openspec/specs/shared/data-model/spec.md @@ -127,3 +127,17 @@ #### Scenario: 预留表空建 - **WHEN** 迁移完成后 - **THEN** settlement/report 表存在且无业务数据 + +### Requirement: 质控记录实体 qc +`qc` 表 MUST 存在(record_id、qc_type、push_reason、qc_result、qc_note、qc_staff_id、qc_time、pass_time、first_qc_id)。`qc_result` MUST ∈ {pending, passed, returned};退回时 `qc_note` 必填;recheck 时 `first_qc_id` 指向首次 qc。 + +#### Scenario: 全量生成 +- **WHEN** 一条留痕 submitted 且无 qc 记录 +- **THEN** 定时任务生成一条 qc(qc_result=pending) + +### Requirement: 补正实体 ho_record_correction +`ho_record_correction` 表 MUST 存在(record_id、qc_id、correction_note、corrected_by、corrected_at)。补正 MUST 新增说明、不直接改原记录。 + +#### Scenario: 补正留痕 +- **WHEN** 退回后护理员补正 +- **THEN** 写一条更正说明,原记录保留不动