docs(openspec): C4 质控闸门 change 提案
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
7d183d39c9
commit
ff968766b8
2
openspec/changes/svc-org-c4-qc/.openspec.yaml
Normal file
2
openspec/changes/svc-org-c4-qc/.openspec.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-10-15
|
||||
38
openspec/changes/svc-org-c4-qc/design.md
Normal file
38
openspec/changes/svc-org-c4-qc/design.md
Normal file
@ -0,0 +1,38 @@
|
||||
## Context
|
||||
|
||||
C3 已有 ho_record(submitted)、abnormal(handle_status)、C2 的 plan.change、C1 的 elder。C4 新增质控闸门,纯新增、不侵入脚手架。设计背景见 `docs/superpowers/specs/2026-10-15-服务机构端-C4质控闸门-design.md`。
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
**Goals:** qc + ho_record_correction 两表、全量质控(定时任务)、放行/退回(4001 自审自放行)、五类推送聚合、异常联动改计划、补正、admin 质控中心页。
|
||||
|
||||
**Non-Goals:** 上报池(二期)、真推送(APP 期)、APP 补正录入、家属端。
|
||||
|
||||
## Decisions
|
||||
|
||||
1. **表命名**:`qc`(无前缀)、`ho_record_correction`(补正属留痕域 ho_)。
|
||||
2. **全量质控**:`@Cron` 每小时扫描 submitted 无 qc → 生成 qc(pending)。
|
||||
3. **qc 生命周期**:pending → passed/returned;退回补正后 recheck(first_qc_id)。
|
||||
4. **放行自检**:四要素(1004) → 必拍(3001) → 幂等 → 非自审(4001)。
|
||||
5. **五类推送** = pending/list 跨表聚合(异常/逾期/住院/计划/待质控),带消除条件。
|
||||
6. **异常联动改计划**:复用 plan.change + link_plan_change。
|
||||
7. **补正**:ho_record_correction 新增说明,不改原记录;≥3 次进质控重点。
|
||||
8. **批量放行**:排除异常/未执行项/临时加项/时长异常/补正过。
|
||||
|
||||
## 数据模型
|
||||
|
||||
qc(id/tenant_code/record_id/qc_type/qc_result/qc_note/qc_staff_id/qc_time/pass_time/first_qc_id,SOFT_DELETE)、ho_record_correction(id/tenant_code/record_id/qc_id/correction_note/corrected_by/corrected_at,子表不入 SOFT_DELETE)。UUID v7、@map snake_case、utf8mb4_general_ci。
|
||||
|
||||
## 接口
|
||||
|
||||
qc:GET /qc/pending/list、GET /qc/detail、POST /qc/pass、POST /qc/return、POST /qc/exception/link、POST /qc/correct、POST /qc/batch-pass。权限码 qc.*;错误码域 46;规则号 1004/3001/4001 写 message。
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- 定时任务延迟(≤1h)→ 可后续改 checkout 同步。
|
||||
- 补正=新增说明(不可无痕修改)→ 合规。
|
||||
- 自审自放行 4001 → 单人机构必须再配审的人(PRD 底线)。
|
||||
|
||||
## Migration Plan
|
||||
|
||||
新增 2 表(utf8mb4_general_ci 手改)。迁移链损坏:migrate diff + 手工目录 + deploy。
|
||||
32
openspec/changes/svc-org-c4-qc/proposal.md
Normal file
32
openspec/changes/svc-org-c4-qc/proposal.md
Normal file
@ -0,0 +1,32 @@
|
||||
## Why
|
||||
|
||||
C3 已落地履约留痕(ho_record 四表,record_status=submitted)+ 异常上报。C4 交付 PRD 第四块「质控闸门」:对每条已提交留痕做全量质控(放行/退回,禁止自审自放行)、五类主动推送聚合、异常处理台 + 异常联动改计划、补正。这是「先质控再上报」铁律的代码落地。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 新增 `qc` 表(质控记录)+ `ho_record_correction` 表(补正说明)。
|
||||
- 全量质控:定时任务扫描 `submitted` 留痕生成 qc 记录(非抽检)。
|
||||
- 放行/退回:放行前按序自检(四要素 1004 → 必拍 3001 → 幂等 → 放行人≠录入人 4001);退回必填原因;批量放行排除异常/未执行项/临时加项/时长异常/补正过。
|
||||
- 五类主动推送:后台聚合(异常待处理/逾期未做/住院仍有派单/计划未制定/留痕待放行),每类带消除条件。
|
||||
- 异常处理台 + 异常联动改计划(复用 plan.change + link_plan_change)。
|
||||
- 补正:原记录保留 + 新增更正说明(ho_record_correction),不可补正签到时间/定位/照片。
|
||||
- 前端「质控中心」页(B4)。
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `backend/qc`: 全量质控生成、放行/退回/4001 自检、五类推送聚合、异常联动改计划、补正。
|
||||
- `frontend/ad/qc`: admin 质控中心页(待我处理/待放行队列/异常处理台)。
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `shared/data-model`: 新增 `qc` + `ho_record_correction` 两实体。
|
||||
- `shared/api-contract`: 新增 qc 接口(pending-list/detail/pass/return/exception-link/correct/batch-pass)。
|
||||
|
||||
## Impact
|
||||
|
||||
- 后端 ec-nest:新增 qc 模块(纯新增),依赖 record/abnormal/plan/order/elder 模块。
|
||||
- 前端 ec-admin:质控中心页(替换 qc 占位)。
|
||||
- 数据:新增 2 张表(迁移,utf8mb4_general_ci)。
|
||||
- 依赖:C3 的 record(submitted)、abnormal、C2 的 plan.change、C1 的 elder。
|
||||
58
openspec/changes/svc-org-c4-qc/specs/backend/qc/spec.md
Normal file
58
openspec/changes/svc-org-c4-qc/specs/backend/qc/spec.md
Normal file
@ -0,0 +1,58 @@
|
||||
## Purpose
|
||||
|
||||
定义服务机构端质控闸门的后端行为——全量质控、放行/退回(自审自放行 4001)、五类推送聚合、异常联动改计划、补正。
|
||||
|
||||
## ADDED 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** 拒绝(必须逐条看)
|
||||
26
openspec/changes/svc-org-c4-qc/specs/frontend/ad/qc/spec.md
Normal file
26
openspec/changes/svc-org-c4-qc/specs/frontend/ad/qc/spec.md
Normal file
@ -0,0 +1,26 @@
|
||||
## Purpose
|
||||
|
||||
定义服务机构端「质控中心」页面的交互。
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 质控中心页
|
||||
admin「质控中心」页 MUST 提供三区:① 待我处理(五类主动推送聚合 + 计数)② 待放行队列(逐条放行/退回)③ 异常处理台(处理/转派/关闭 + 处理意见)。
|
||||
|
||||
#### Scenario: 查看待办
|
||||
- **WHEN** 质控员打开质控中心
|
||||
- **THEN** 看到五类待办计数 + 待放行队列 + 异常处理台
|
||||
|
||||
### Requirement: 放行与退回
|
||||
放行 MUST 一键;退回 MUST 选原因(下拉);批量放行 MUST 排除异常/未执行项记录。
|
||||
|
||||
#### Scenario: 放行
|
||||
- **WHEN** 质控员点放行
|
||||
- **THEN** 记录转 passed,从待放行队列消失
|
||||
|
||||
### Requirement: 异常处理
|
||||
质控员 MUST 能对异常记录处理/转派/关闭并附处理意见;判断需加专项时 MUST 能联动到计划变更。
|
||||
|
||||
#### Scenario: 联动改计划
|
||||
- **WHEN** 质控员对异常选「联动改计划」
|
||||
- **THEN** 生成新计划并回填 link_plan_change
|
||||
@ -0,0 +1,19 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### 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** 该类从待办列表消除
|
||||
@ -0,0 +1,15 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### 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** 写一条更正说明,原记录保留不动
|
||||
30
openspec/changes/svc-org-c4-qc/tasks.md
Normal file
30
openspec/changes/svc-org-c4-qc/tasks.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Tasks — svc-org-c4-qc
|
||||
|
||||
## 1. 数据层
|
||||
|
||||
- [ ] 1.1 `schema.prisma` 新增 `Qc`(表名 qc)+ `RecordCorrection`(表名 ho_record_correction)模型。
|
||||
- [ ] 1.2 `prisma.service.ts`:`Qc` 加入 SOFT_DELETE;`RecordCorrection` 子表不入。
|
||||
- [ ] 1.3 迁移 `c4_qc`(utf8mb4_general_ci,migrate diff + deploy)+ `prisma generate`。
|
||||
|
||||
## 2. 权限码 + 错误码 + APIS
|
||||
|
||||
- [ ] 2.1 `permissions.ts` 新增 `qc.*`(pendingList/detail/pass/return/exceptionLink/correct/batchPass)。
|
||||
- [ ] 2.2 `error-codes.ts` 补域 46:QC_NOT_FOUND、QC_ALREADY_HANDLED、QC_SELF_REVIEW(4001)、QC_ELEMENT_MISSING(1004)、QC_NOTE_REQUIRED、QC_BATCH_UNSAFE 等。
|
||||
- [ ] 2.3 `tenant-template.ts` APIS 登记 qc 接口资源(parent 'qc')。
|
||||
|
||||
## 3. qc 模块(全量质控 + 放行/退回 + 五类推送 + 异常联动 + 补正)
|
||||
|
||||
- [ ] 3.1 `src/qc/` 模块:定时任务(@Cron)全量生成 qc;pass(自检 1004/3001/幂等/4001);return(qc_note 必填);pending-list(五类聚合);detail;exception-link(plan.change + link_plan_change);correct(补正 + 重新 submitted + ≥3 次进重点);batch-pass(排除异常等)。
|
||||
- [ ] 3.2 TDD:全量生成、放行自检四步、4001 自审、退回必填原因、五类聚合各消除条件、联动改计划、补正不改原值、批量安全边界;`pnpm test` + `tsc --noEmit`。
|
||||
|
||||
## 4. 前端
|
||||
|
||||
- [ ] 4.1 `src/api/qc.ts`。
|
||||
- [ ] 4.2 质控中心页(`ltc/qc`):待我处理(五类聚合)+ 待放行队列(放行/退回/批量)+ 异常处理台(处理/联动改计划)。
|
||||
- [ ] 4.3 `pnpm type-check` 通过。
|
||||
|
||||
## 5. 验证
|
||||
|
||||
- [ ] 5.1 冒烟:submitted 留痕 → 定时任务生成 qc → 放行(4001 自审拒/通过)→ 退回(补正)→ recheck → 放行。
|
||||
- [ ] 5.2 五类推送:异常/逾期/住院/计划/待放行各出现与消除。
|
||||
- [ ] 5.3 异常联动改计划生成新 plan + link_plan_change;审计落库。
|
||||
Loading…
x
Reference in New Issue
Block a user