liuyun 3afd009420 docs(openspec): C1 待遇档案 change 提案 + 归档 C0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-14 14:21:25 +08:00

54 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Context
服务机构端 P0 在 sysmgr 脚手架(ec-nest + ec-admin)上落地。脚手架已提供:多租户过滤(tenant_code)、RBAC(resource 树 + 权限码)、审计日志、软删(deleted_at)、错误码注册表。C0 只做映射 + 建业务表 + 配角色/权限/菜单/错误码,不侵入脚手架。
## Goals / Non-Goals
**Goals:**
- 定死机构=租户映射,业务表复用脚手架多租户过滤。
- `staff` 持 `user_id` 关联账号,不动 `sys_user`。
- C0 建 9 张业务表 + 复用 `sys_user`。
- 5 业务角色 + 权限码 + 菜单 + 错误码 + 审计落地。
**Non-Goals:**
- 不实现 C1–C4 业务(待遇档案/派单/留痕/质控)。
- 不接真实 COS 上传(占位)。
- 不做护理员 APP、家属端。
## Decisions
1. **机构=租户,tenant_code 作全局键**(备选:扩展 sys_tenant → 弃,污染框架)。
2. **staff.user_id 关联 user,不动 sys_user**(备选:user.staff_id → 弃,动框架;user.ext_type/ext_id 多态 → 弃,YAGNI + 无外键保障)。
3. **业务角色用脚手架角色 + 权限码**(PRD 的 `user.role` 逗号分隔不照搬,用 user↔role 多对多实现多角色并集)。
4. **主键 UUID v7**(备选 varchar32 → 弃,跟随脚手架)。
5. **软删 deleted_at**(备选 is_deleted 布尔 → 弃,跟随脚手架)。
6. **菜单:脚手架菜单树冻结,业务归「长护服务」分组**。脚手架四个分组(工作台/权限管理/系统管理/系统监控)不修改、不扩展;新增顶级分组「长护服务」=服务对象/排班派单/工单留痕/质控中心/文书档案 + 二级组「服务机构设置」(机构信息/属地与目录/服务项目与配价/拍照分档配置/质控提醒配置/对接档位)。账号与权限复用脚手架「用户管理/角色管理」,不重复建。
## 数据模型(DDL 概览)
通用字段:`created_at`/`created_by`/`updated_at`/`updated_by`/`deleted_at`。
- **org**:org_code(PK, 与 tenant_code 同值)、org_name、org_type、credit_code、loc_code、loc_name、svc_source、license_no、address、contact_name、contact_phone、bed_count、sign_date
- **staff**:staff_id(PK uuid)、tenant_code、user_id(unique 可空 → user.id)、name、id_card_no(加密)、person_code、phone、job_type、work_type、entry_date、leave_date、employ_status、cert_type/cert_no/cert_level/cert_expire/cert_status、cert_verify_url、group_leader_id
- **svc_national**(L1):nat_id、nat_code(unique varchar20)、nat_name、nat_category、nat_sub_category、recommend_staff、recommend_duration、is_medical、version
- **svc_local**(L2):loc_id、loc_code、local_item_name、local_category、svc_time、min_freq、staff_qual、is_medical、source_doc、map_status
- **svc_mapping**(L3):map_id、loc_id、nat_id(可空)、map_type、map_note、status
- **svc_org**(L4):org_svc_id、tenant_code、src_type、src_id、is_enabled、price(预留)、price_effective(预留)、is_new_national
- **dict_abnormal_type**:code、name、sort;**dict_photo_tier**:code、name、tier
- **loc_config**:loc_code(PK)、loc_name、svc_source、item_count_rule(预留)
索引:`staff.user_id` 唯一、`staff.tenant_code`、`svc_national.nat_code` 唯一、`svc_local.loc_code`、`svc_org.tenant_code`。
## Risks / Trade-offs
- [org 表与 sys_tenant 1:1 但分表] → 以 `code = tenant_code` 同值保证一致;创建机构时事务内同步建 tenant。
- [staff.user_id 无法用 DB 外键到不同库] → 同库内仍可建外键;业务层再校验 user 存在 + 唯一。
- [目录四层数据初始化量大] → seed 提供 L1 36 项 + 昆明 L2 45 项 + L3 映射;州市按需插入 loc_config + svc_local。
## Migration Plan
- 新增 Prisma 迁移建 9 张表;seed 初始化目录(L1/L2/L3)、默认角色与权限码;不迁移旧数据(新库)。
- 回滚:删除本次迁移即可(纯新增,无破坏性改动)。