2026-10-14 12:24:01 +08:00

3.9 KiB
Raw Blame History

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)、默认角色与权限码;不迁移旧数据(新库)。
  • 回滚:删除本次迁移即可(纯新增,无破坏性改动)。