提交文件

This commit is contained in:
2026-02-28 15:16:15 +08:00
parent 1a4e50e0a4
commit 44f250f58e
159 changed files with 61268 additions and 0 deletions

View File

@@ -0,0 +1,599 @@
# 基础数据字段
<cite>
**本文引用的文件**
- [models.py](file://backend/app/models/models.py)
- [finance.py](file://backend/app/models/finance.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [001_initial.py](file://backend/alembic/versions/001_initial.py)
- [002_template.py](file://backend/alembic/versions/002_template.py)
- [database.md](file://docs/database.md)
- [departments.py](file://backend/app/api/v1/departments.py)
- [staff.py](file://backend/app/api/v1/staff.py)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件聚焦于基础数据字段的详细数据字典,覆盖以下核心表:
- 科室信息表Department
- 员工信息表Staff
- 用户表User
同时补充与基础数据强相关的财务记录表DepartmentFinance字段说明以及与字段相关的枚举类型、索引设计、约束与业务规则。文档提供字段定义、类型与长度、空值与默认值、业务含义、取值范围、注释说明、业务规则约束、字段间关联关系与外键约束、索引设计与性能考虑并给出实际使用示例与最佳实践建议。
## 项目结构
本项目采用前后端分离架构,后端基于 FastAPI + SQLAlchemy ORM数据库迁移使用 Alembic。基础数据模型集中在 models 模块API 路由位于 app/api/v1 下,数据字典与 ER 图见 docs/database.md。
```mermaid
graph TB
subgraph "后端"
A["models.py<br/>数据模型"]
B["finance.py<br/>财务模型"]
C["schemas.py<br/>Pydantic模式"]
D["alembic 迁移<br/>001_initial.py / 002_template.py"]
E["API 路由<br/>departments.py / staff.py"]
end
subgraph "文档"
F["docs/database.md<br/>ER图与字段说明"]
end
A --> D
B --> D
C --> E
E --> A
F --> A
```
图表来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
- [schemas.py](file://backend/app/schemas/schemas.py#L64-L149)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L22-L64)
- [002_template.py](file://backend/alembic/versions/002_template.py#L21-L91)
- [departments.py](file://backend/app/api/v1/departments.py#L17-L108)
- [staff.py](file://backend/app/api/v1/staff.py#L17-L124)
章节来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
- [schemas.py](file://backend/app/schemas/schemas.py#L64-L149)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L22-L64)
- [002_template.py](file://backend/alembic/versions/002_template.py#L21-L91)
- [database.md](file://docs/database.md#L97-L232)
- [departments.py](file://backend/app/api/v1/departments.py#L17-L108)
- [staff.py](file://backend/app/api/v1/staff.py#L17-L124)
## 核心组件
- 科室信息表Department
- 员工信息表Staff
- 用户表User
- 科室财务记录表DepartmentFinance
章节来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [models.py](file://backend/app/models/models.py#L244-L261)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
## 架构总览
基础数据字段与业务流程的关系如下:
- Department 与 Staff 为 1:N 关系(部门-员工)
- Staff 与 User 为 N:1 关系(员工-用户)
- DepartmentFinance 与 Department 为 1:N 关系(科室-财务记录)
```mermaid
erDiagram
DEPARTMENTS {
int id PK
string name
string code UK
enum dept_type
int parent_id FK
int level
int sort_order
boolean is_active
text description
datetime created_at
datetime updated_at
}
STAFF {
int id PK
string employee_id UK
string name
int department_id FK
string position
string title
string phone
string email
decimal base_salary
decimal performance_ratio
enum status
datetime hire_date
datetime created_at
datetime updated_at
}
USERS {
int id PK
string username UK
string password_hash
int staff_id FK
string role
boolean is_active
datetime last_login
datetime created_at
datetime updated_at
}
DEPARTMENT_FINANCES {
int id PK
int department_id FK
int period_year
int period_month
enum finance_type
string category
decimal amount
string source
text remark
datetime created_at
datetime updated_at
}
DEPARTMENTS ||--o{ STAFF : "1:N"
STAFF ||--o{ USERS : "N:1"
DEPARTMENTS ||--o{ DEPARTMENT_FINANCES : "1:N"
```
图表来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [models.py](file://backend/app/models/models.py#L244-L261)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L22-L64)
## 详细组件分析
### 科室信息表Department
- 表名departments
- 主键id自增整数
- 唯一键code唯一
- 外键parent_id 引用 departments.id自关联表示上级科室
- 索引idx_dept_type、idx_dept_parent
- 枚举dept_type来自 DeptType
字段定义与规则
- id
- 类型:整数(主键)
- 约束:自增、非空
- 默认值:无
- 业务含义:科室唯一标识
- 取值范围:正整数
- 注释:主键
- 关联关系parent_id 自关联指向自身
- 索引PK
- name
- 类型:字符串(最大长度 100
- 约束:非空
- 默认值:无
- 业务含义:科室名称
- 取值范围:长度不超过 100
- 注释:科室名称
- code
- 类型:字符串(最大长度 20
- 约束:唯一、非空
- 默认值:无
- 业务含义:科室编码(全局唯一)
- 取值范围:长度不超过 20
- 注释:科室编码
- 索引UK
- dept_type
- 类型枚举DeptType
- 约束:非空
- 默认值:无
- 业务含义:科室类型
- 取值范围clinical_surgical、clinical_nonsurgical_ward、clinical_nonsurgical_noward、medical_tech、medical_auxiliary、nursing、admin、finance、logistics
- 注释:科室类型
- 索引idx_dept_type
- parent_id
- 类型:整数
- 约束:可空,外键引用 departments.id
- 默认值:空
- 业务含义:上级科室 ID自关联
- 取值范围:对应存在的 id 或空
- 注释:上级科室
- 索引idx_dept_parent
- level
- 类型:整数
- 约束:默认 1
- 默认值1
- 业务含义层级1-5
- 取值范围1-5
- 注释:层级
- sort_order
- 类型:整数
- 约束:默认 0
- 默认值0
- 业务含义:排序
- 注释:排序
- is_active
- 类型:布尔
- 约束:默认 true
- 默认值true
- 业务含义:是否启用
- 注释:是否启用
- description
- 类型:文本
- 约束:可空
- 默认值:空
- 业务含义:描述
- 注释:描述
- created_at / updated_at
- 类型:日期时间
- 约束:默认当前时间;更新时自动更新
- 默认值:无
- 业务含义:创建/更新时间
- 注释:创建时间、更新时间
业务规则与最佳实践
- 编码唯一性code 必须全局唯一,新增前需校验重复
- 层级与排序level 与 sort_order 用于树形展示与排序
- 自关联parent_id 支持多级组织架构,查询时注意避免环路
- 索引dept_type 与 parent_id 建议在过滤与树形查询中使用
章节来源
- [models.py](file://backend/app/models/models.py#L62-L86)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L22-L41)
- [database.md](file://docs/database.md#L99-L116)
### 员工信息表Staff
- 表名staff
- 主键id自增整数
- 唯一键employee_id唯一
- 外键department_id 引用 departments.id
- 索引idx_staff_dept、idx_staff_status
- 枚举status来自 StaffStatus
字段定义与规则
- id
- 类型:整数(主键)
- 约束:自增、非空
- 默认值:无
- 业务含义:员工唯一标识
- 注释:主键
- employee_id
- 类型:字符串(最大长度 20
- 约束:唯一、非空
- 默认值:无
- 业务含义:工号(唯一)
- 取值范围:长度不超过 20
- 注释:工号
- 索引UK
- name
- 类型:字符串(最大长度 50
- 约束:非空
- 默认值:无
- 业务含义:姓名
- 取值范围:长度不超过 50
- 注释:姓名
- department_id
- 类型:整数
- 约束:非空,外键引用 departments.id
- 默认值:无
- 业务含义:所属科室
- 注释:所属科室
- 索引idx_staff_dept
- position
- 类型:字符串(最大长度 50
- 约束:非空
- 默认值:无
- 业务含义:职位
- 取值范围:长度不超过 50
- 注释:职位
- title
- 类型:字符串(最大长度 50
- 约束:可空
- 默认值:空
- 业务含义:职称
- 注释:职称
- phone
- 类型:字符串(最大长度 20
- 约束:可空
- 默认值:空
- 业务含义:联系电话
- 注释:联系电话
- email
- 类型:字符串(最大长度 100
- 约束:可空
- 默认值:空
- 业务含义:邮箱
- 注释:邮箱
- base_salary
- 类型:数值(精度 10小数 2
- 约束:默认 0
- 默认值0
- 业务含义:基本工资
- 取值范围≥0
- 注释:基本工资
- performance_ratio
- 类型:数值(精度 5小数 2
- 约束:默认 1.0
- 默认值1.0
- 业务含义绩效系数0-5
- 取值范围0-5
- 注释:绩效系数
- status
- 类型枚举StaffStatus
- 约束:默认 active
- 默认值active
- 业务含义:员工状态
- 取值范围active、leave、resigned、retired
- 注释:状态
- 索引idx_staff_status
- hire_date
- 类型:日期时间
- 约束:可空
- 默认值:空
- 业务含义:入职日期
- 注释:入职日期
- created_at / updated_at
- 类型:日期时间
- 约束:默认当前时间;更新时自动更新
- 默认值:无
- 业务含义:创建/更新时间
- 注释:创建时间、更新时间
业务规则与最佳实践
- 工号唯一性employee_id 必须唯一,新增前需校验重复
- 状态枚举:仅允许枚举值,避免脏数据
- 薪资与系数base_salary 与 performance_ratio 用于后续绩效工资计算
- 索引department_id 与 status 用于筛选与分页
章节来源
- [models.py](file://backend/app/models/models.py#L88-L114)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L42-L64)
- [schemas.py](file://backend/app/schemas/schemas.py#L107-L149)
- [database.md](file://docs/database.md#L117-L136)
### 用户表User
- 表名users
- 主键id自增整数
- 唯一键username唯一
- 外键staff_id 引用 staff.id
- 索引idx_user_username
字段定义与规则
- id
- 类型:整数(主键)
- 约束:自增、非空
- 默认值:无
- 业务含义:用户唯一标识
- 注释:主键
- username
- 类型:字符串(最大长度 50
- 约束:唯一、非空
- 默认值:无
- 业务含义:用户名
- 取值范围:长度不超过 50
- 注释:用户名
- 索引UK
- password_hash
- 类型:字符串(最大长度 255
- 约束:非空
- 默认值:无
- 业务含义:密码哈希
- 注释:密码哈希
- staff_id
- 类型:整数
- 约束:可空,外键引用 staff.id
- 默认值:空
- 业务含义:关联员工
- 注释:关联员工
- role
- 类型:字符串(最大长度 20
- 约束:默认 staff
- 默认值staff
- 业务含义:角色
- 取值范围admin、manager、staff
- 注释:角色
- is_active
- 类型:布尔
- 约束:默认 true
- 默认值true
- 业务含义:是否启用
- 注释:是否启用
- last_login
- 类型:日期时间
- 约束:可空
- 默认值:空
- 业务含义:最后登录时间
- 注释:最后登录
- created_at / updated_at
- 类型:日期时间
- 约束:默认当前时间;更新时自动更新
- 默认值:无
- 业务含义:创建/更新时间
- 注释:创建时间、更新时间
业务规则与最佳实践
- 用户名唯一性username 必须唯一
- 角色枚举:仅允许 admin、manager、staff
- 关联员工staff_id 可空,表示未绑定员工的系统用户
- 登录追踪last_login 用于审计与安全策略
章节来源
- [models.py](file://backend/app/models/models.py#L244-L261)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L156-L172)
- [schemas.py](file://backend/app/schemas/schemas.py#L314-L345)
- [database.md](file://docs/database.md#L218-L232)
### 科室财务记录表DepartmentFinance
- 表名department_finances
- 主键id自增整数
- 外键department_id 引用 departments.id
- 索引idx_finance_dept、idx_finance_period、idx_finance_type、idx_finance_category
- 枚举finance_type来自 FinanceType
- 约束amount ≥ 0
字段定义与规则
- id
- 类型:整数(主键)
- 约束:自增、非空
- 默认值:无
- 业务含义:财务记录唯一标识
- 注释:主键
- department_id
- 类型:整数
- 约束:非空,外键引用 departments.id
- 默认值:无
- 业务含义:所属科室
- 注释科室ID
- 索引idx_finance_dept
- period_year / period_month
- 类型:整数
- 约束:非空
- 默认值:无
- 业务含义:年度/月份
- 注释:年度、月份
- 索引idx_finance_period
- finance_type
- 类型枚举FinanceType
- 约束:非空
- 默认值:无
- 业务含义:财务类型(收入/支出)
- 取值范围revenue、expense
- 注释:财务类型
- 索引idx_finance_type
- category
- 类型:字符串(最大长度 50
- 约束:非空
- 默认值:无
- 业务含义:类别(如检查费、床位费等)
- 取值范围:长度不超过 50
- 注释:类别
- 索引idx_finance_category
- amount
- 类型:数值(精度 12小数 2
- 约束:默认 0且 ≥ 0
- 默认值0
- 业务含义:金额
- 取值范围≥0
- 注释:金额
- 约束check(amount >= 0)
- source
- 类型:字符串(最大长度 100
- 约束:可空
- 默认值:空
- 业务含义:数据来源
- 注释:数据来源
- remark
- 类型:文本
- 约束:可空
- 默认值:空
- 业务含义:备注
- 注释:备注
- created_at / updated_at
- 类型:日期时间
- 约束:默认当前时间;更新时自动更新
- 默认值:无
- 业务含义:创建/更新时间
- 注释:创建时间、更新时间
业务规则与最佳实践
- 金额非负:通过约束保证 amount ≥ 0
- 类别与类型category 与 finance_type 组合用于财务归类与统计
- 周期聚合period_year 与 period_month 用于月度/年度汇总
章节来源
- [finance.py](file://backend/app/models/finance.py#L45-L74)
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L133-L154)
## 依赖分析
- Department 与 Staff 的关系1:N部门-员工),通过 department_id 外键关联
- Staff 与 User 的关系N:1员工-用户),通过 staff_id 外键关联
- Department 与 DepartmentFinance 的关系1:N科室-财务记录),通过 department_id 外键关联
```mermaid
graph LR
DEPT["Department"] --> |FK| STAFF["Staff"]
STAFF --> |FK| USER["User"]
DEPT --> |FK| FIN["DepartmentFinance"]
```
图表来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [models.py](file://backend/app/models/models.py#L244-L261)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
章节来源
- [models.py](file://backend/app/models/models.py#L62-L114)
- [models.py](file://backend/app/models/models.py#L244-L261)
- [finance.py](file://backend/app/models/finance.py#L45-L74)
## 性能考量
- 索引设计
- Departmentidx_dept_type、idx_dept_parent适合按类型过滤与树形查询
- Staffidx_staff_dept、idx_staff_status适合按科室与状态筛选
- Assessmentsidx_assessment_staff、idx_assessment_period、idx_assessment_status适合按员工、周期与状态查询
- SalaryRecordsidx_salary_staff、idx_salary_period适合按员工与周期查询
- Usersidx_user_username适合按用户名登录
- DepartmentFinanceidx_finance_dept、idx_finance_period、idx_finance_type、idx_finance_category适合财务统计与聚合
- 约束与校验
- Staff.performance_ratio 与 Indicator.weight 使用 Pydantic 校验ge/le数据库层使用 CheckConstraint如 DepartmentFinance.amount ≥ 0
- 查询建议
- 分页与过滤:优先使用带索引的列进行 where 条件与 order by
- 树形查询Department.parent_id + level 用于层级展示
- 聚合统计DepartmentFinance 按 period_year/month + category + type 聚合
章节来源
- [models.py](file://backend/app/models/models.py#L82-L86)
- [models.py](file://backend/app/models/models.py#L111-L114)
- [models.py](file://backend/app/models/models.py#L174-L178)
- [models.py](file://backend/app/models/models.py#L227-L230)
- [models.py](file://backend/app/models/models.py#L258-L260)
- [finance.py](file://backend/app/models/finance.py#L68-L74)
- [schemas.py](file://backend/app/schemas/schemas.py#L117-L136)
- [schemas.py](file://backend/app/schemas/schemas.py#L158-L176)
## 故障排查指南
- 新增科室失败(编码重复)
- 现象:创建接口返回错误,提示编码已存在
- 排查:检查 departments.code 是否唯一;确认是否已有相同编码
- 处理:修改编码或删除冲突记录
- 新增员工失败(工号重复)
- 现象:创建接口返回错误,提示工号已存在
- 排查:检查 staff.employee_id 是否唯一
- 处理:修改工号或删除冲突记录
- 删除科室失败(存在子科室)
- 现象:删除接口返回错误,提示无法删除
- 排查确认该科室是否存在子科室parent_id 指向该 id
- 处理:先删除子科室或调整组织架构
- 薪资/财务金额异常
- 现象DepartmentFinance.amount 出现负值
- 排查:检查数据来源与业务逻辑;确认约束是否生效
- 处理:修正数据或调整业务流程
章节来源
- [departments.py](file://backend/app/api/v1/departments.py#L74-L77)
- [staff.py](file://backend/app/api/v1/staff.py#L75-L78)
- [departments.py](file://backend/app/api/v1/departments.py#L104-L106)
- [finance.py](file://backend/app/models/finance.py#L73-L74)
## 结论
本文档对基础数据字段进行了系统梳理,明确了字段类型、长度、空值与默认值、业务含义、取值范围、注释说明、业务规则约束、外键关系与索引设计,并提供了性能考量与故障排查建议。遵循这些字段规范与最佳实践,有助于确保数据一致性、查询性能与业务稳定性。
## 附录
- 字段使用示例(示意)
- 新增科室:提供 name、code、dept_type、parent_id、level、sort_order、is_active、description
- 新增员工:提供 employee_id、name、department_id、position、title、phone、email、base_salary、performance_ratio、status、hire_date
- 新增用户:提供 username、password_hash、staff_id、role、is_active、last_login
- 新增财务记录:提供 department_id、finance_type、category、amount、period_year、period_month、source、remark
- 最佳实践
- 唯一性:严格维护 code 与 employee_id 的唯一性
- 枚举:统一使用模型中定义的枚举类型,避免拼写差异
- 索引:在高频查询列上保持索引,定期评估查询计划
- 校验:前端与后端双重校验,确保数据质量

View File

@@ -0,0 +1,473 @@
# 指标模板字段
<cite>
**本文档引用的文件**
- [models.py](file://backend/app/models/models.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [templates.py](file://backend/app/api/v1/templates.py)
- [template_service.py](file://backend/app/services/template_service.py)
- [002_template.py](file://backend/alembic/versions/002_template.py)
- [init_templates.py](file://backend/app/scripts/init_templates.py)
- [init_indicator_templates.py](file://backend/init_indicator_templates.py)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue)
- [template.js](file://frontend/src/api/template.js)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
## 简介
本文件聚焦于指标模板相关字段的数据字典,覆盖以下核心实体与关系:
- 指标模板表IndicatorTemplate
- 模板指标关联表TemplateIndicator
- 模板类型枚举TemplateType
- 指标与模板的多对多关联关系
- 维度权重配置与指标分类管理
- 模板版本管理与继承关系设计
- 激活状态与使用范围约束
本文件同时提供字段定义、约束说明、数据流向与前后端交互示例,帮助开发者与运维人员快速理解与使用模板系统。
## 项目结构
模板系统由后端模型与服务、API路由、前端页面与接口组成形成“模型-服务-接口-视图”的完整链路。
```mermaid
graph TB
subgraph "后端"
M["models.py<br/>数据模型"]
S["template_service.py<br/>服务层"]
A["templates.py<br/>API路由"]
SC["schemas.py<br/>Pydantic模式"]
ALEMBIC["002_template.py<br/>迁移脚本"]
end
subgraph "前端"
V["Templates.vue<br/>模板管理页面"]
API["template.js<br/>模板API封装"]
end
V --> API
API --> A
A --> S
S --> M
M --> ALEMBIC
SC --> A
```
图表来源
- [models.py](file://backend/app/models/models.py#L387-L438)
- [template_service.py](file://backend/app/services/template_service.py#L20-L293)
- [templates.py](file://backend/app/api/v1/templates.py#L1-L272)
- [schemas.py](file://backend/app/schemas/schemas.py#L640-L743)
- [002_template.py](file://backend/alembic/versions/002_template.py#L21-L96)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
- [template.js](file://frontend/src/api/template.js#L1-L62)
章节来源
- [models.py](file://backend/app/models/models.py#L387-L438)
- [templates.py](file://backend/app/api/v1/templates.py#L1-L272)
- [template_service.py](file://backend/app/services/template_service.py#L20-L293)
- [schemas.py](file://backend/app/schemas/schemas.py#L640-L743)
- [002_template.py](file://backend/alembic/versions/002_template.py#L21-L96)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
- [template.js](file://frontend/src/api/template.js#L1-L62)
## 核心组件
- 指标模板表IndicatorTemplate
- 字段id、template_name、template_code、template_type、description、dimension_weights、assessment_cycle、is_active、created_at、updated_at
- 关系:与模板指标关联表一对多
- 约束唯一索引template_code、索引template_type、is_active
- 模板指标关联表TemplateIndicator
- 字段id、template_id、indicator_id、category、target_value、target_unit、weight、scoring_method、scoring_params、sort_order、remark、created_at、updated_at
- 关系:与模板表、指标表多对一
- 约束唯一索引template_id, indicator_id、索引template_id、indicator_id
- 模板类型枚举TemplateType
- 类型general、surgical、nonsurgical_ward、nonsurgical_noward、medical_tech、nursing、admin、logistics
- 指标表Indicator
- 字段id、name、code、indicator_type、bs_dimension、weight、max_score、target_value、target_unit、calculation_method、assessment_method、deduction_standard、data_source、applicable_dept_types、is_veto、is_active、created_at、updated_at
- 约束CheckConstraint(weight > 0)
章节来源
- [models.py](file://backend/app/models/models.py#L387-L438)
- [models.py](file://backend/app/models/models.py#L117-L147)
- [models.py](file://backend/app/models/models.py#L375-L385)
## 架构总览
模板系统采用“模板-指标”多对多关系,通过模板指标关联表实现灵活配置。模板类型决定适用科室范围,维度权重用于汇总计算,指标分类用于二级归类,权重与评分方法用于最终得分计算。
```mermaid
erDiagram
INDICATOR_TEMPLATE {
int id PK
string template_name
string template_code UK
string template_type
text description
text dimension_weights
string assessment_cycle
boolean is_active
datetime created_at
datetime updated_at
}
TEMPLATE_INDICATOR {
int id PK
int template_id FK
int indicator_id FK
string category
numeric target_value
string target_unit
numeric weight
string scoring_method
text scoring_params
int sort_order
text remark
datetime created_at
datetime updated_at
}
INDICATOR {
int id PK
string name
string code UK
string indicator_type
string bs_dimension
numeric weight
numeric max_score
numeric target_value
string target_unit
text calculation_method
text assessment_method
text deduction_standard
string data_source
text applicable_dept_types
boolean is_veto
boolean is_active
datetime created_at
datetime updated_at
}
INDICATOR_TEMPLATE ||--o{ TEMPLATE_INDICATOR : "包含"
INDICATOR ||--o{ TEMPLATE_INDICATOR : "被包含"
```
图表来源
- [models.py](file://backend/app/models/models.py#L387-L438)
- [models.py](file://backend/app/models/models.py#L117-L147)
## 详细组件分析
### 指标模板表IndicatorTemplate字段字典
- id
- 类型:整数
- 主键:是
- 描述:模板主键
- 约束:自增
- 章节来源
- [models.py](file://backend/app/models/models.py#L391-L391)
- template_name
- 类型字符串最大长度200
- 描述:模板名称
- 章节来源
- [models.py](file://backend/app/models/models.py#L392-L392)
- [schemas.py](file://backend/app/schemas/schemas.py#L699-L700)
- template_code
- 类型字符串最大长度50
- 描述:模板编码(唯一)
- 约束:唯一索引
- 章节来源
- [models.py](file://backend/app/models/models.py#L393-L393)
- [002_template.py](file://backend/alembic/versions/002_template.py#L27-L36)
- [schemas.py](file://backend/app/schemas/schemas.py#L700-L701)
- template_type
- 类型枚举TemplateType
- 描述:模板类型
- 取值general、surgical、nonsurgical_ward、nonsurgical_noward、medical_tech、nursing、admin、logistics
- 章节来源
- [models.py](file://backend/app/models/models.py#L394-L394)
- [schemas.py](file://backend/app/schemas/schemas.py#L702-L702)
- [002_template.py](file://backend/alembic/versions/002_template.py#L28-L28)
- description
- 类型:文本
- 描述:模板描述
- 章节来源
- [models.py](file://backend/app/models/models.py#L395-L395)
- [schemas.py](file://backend/app/schemas/schemas.py#L703-L703)
- dimension_weights
- 类型文本JSON
- 描述:维度权重配置(财务、客户、内部流程、学习与成长)
- 示例:{"financial": 35, "customer": 30, "internal_process": 25, "learning_growth": 10}
- 章节来源
- [models.py](file://backend/app/models/models.py#L396-L396)
- [schemas.py](file://backend/app/schemas/schemas.py#L704-L704)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L88-L88)
- assessment_cycle
- 类型字符串最大长度20
- 描述考核周期monthly/quarterly/annual
- 默认值monthly
- 章节来源
- [models.py](file://backend/app/models/models.py#L397-L397)
- [schemas.py](file://backend/app/schemas/schemas.py#L705-L705)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L89-L89)
- is_active
- 类型:布尔
- 描述:是否启用
- 默认值true
- 章节来源
- [models.py](file://backend/app/models/models.py#L398-L398)
- [schemas.py](file://backend/app/schemas/schemas.py#L728-L728)
- [002_template.py](file://backend/alembic/versions/002_template.py#L32-L32)
- created_at/updated_at
- 类型:日期时间
- 描述:创建与更新时间
- 章节来源
- [models.py](file://backend/app/models/models.py#L399-L400)
- [models.py](file://backend/app/models/models.py#L400-L400)
- 关系与索引
- 关系:与模板指标关联表一对多
- 索引template_type、is_active
- 章节来源
- [models.py](file://backend/app/models/models.py#L402-L408)
- [002_template.py](file://backend/alembic/versions/002_template.py#L38-L39)
### 模板指标关联表TemplateIndicator字段字典
- id
- 类型:整数
- 主键:是
- 描述:模板指标关联主键
- 章节来源
- [models.py](file://backend/app/models/models.py#L415-L415)
- template_id
- 类型:整数
- 外键:指向 indicator_templates.id
- 描述模板ID
- 章节来源
- [models.py](file://backend/app/models/models.py#L416-L416)
- [002_template.py](file://backend/alembic/versions/002_template.py#L45-L57)
- indicator_id
- 类型:整数
- 外键:指向 indicators.id
- 描述指标ID
- 章节来源
- [models.py](file://backend/app/models/models.py#L417-L417)
- [002_template.py](file://backend/alembic/versions/002_template.py#L46-L57)
- category
- 类型字符串最大长度100
- 描述:指标分类(二级指标分类)
- 示例:收支管理、患者满意度、质量与安全
- 章节来源
- [models.py](file://backend/app/models/models.py#L418-L418)
- [schemas.py](file://backend/app/schemas/schemas.py#L657-L657)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L90-L108)
- target_value/target_unit
- 类型:数值/字符串
- 描述:目标值与单位
- 章节来源
- [models.py](file://backend/app/models/models.py#L419-L420)
- [schemas.py](file://backend/app/schemas/schemas.py#L658-L659)
- weight
- 类型数值默认1.0
- 描述:在模板内的权重
- 章节来源
- [models.py](file://backend/app/models/models.py#L421-L421)
- [schemas.py](file://backend/app/schemas/schemas.py#L660-L660)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L91-L107)
- scoring_method/scoring_params
- 类型:字符串/文本
- 描述评分方法与参数JSON
- 方法range、target、deduction、bonus、veto
- 章节来源
- [models.py](file://backend/app/models/models.py#L422-L423)
- [schemas.py](file://backend/app/schemas/schemas.py#L661-L662)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L211-L217)
- sort_order
- 类型:整数
- 描述:排序
- 默认值0
- 章节来源
- [models.py](file://backend/app/models/models.py#L424-L424)
- [template_service.py](file://backend/app/services/template_service.py#L191-L202)
- remark
- 类型:文本
- 描述:备注
- 章节来源
- [models.py](file://backend/app/models/models.py#L425-L425)
- created_at/updated_at
- 类型:日期时间
- 描述:创建与更新时间
- 章节来源
- [models.py](file://backend/app/models/models.py#L426-L427)
- 关系与索引
- 关系:与模板表、指标表多对一
- 索引template_id、indicator_id、(template_id, indicator_id)唯一
- 章节来源
- [models.py](file://backend/app/models/models.py#L429-L437)
- [002_template.py](file://backend/alembic/versions/002_template.py#L61-L63)
### 模板类型枚举TemplateType
- 取值与含义
- general通用模板
- surgical手术临床科室
- nonsurgical_ward非手术有病房科室
- nonsurgical_noward非手术无病房科室
- medical_tech医技科室
- nursing护理单元
- admin行政科室
- logistics后勤科室
- 使用场景
- 用于区分模板适用科室类型,配合指标的适用科室类型字段实现过滤
- 章节来源
- [models.py](file://backend/app/models/models.py#L375-L385)
- [schemas.py](file://backend/app/schemas/schemas.py#L642-L652)
### 指标分类管理与维度权重配置
- 指标分类category
- 作用:对模板内的指标进行二级分类,便于统计与展示
- 示例:收支管理、患者满意度、质量与安全、内部服务效率等
- 章节来源
- [models.py](file://backend/app/models/models.py#L418-L418)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L90-L108)
- 维度权重dimension_weights
- 结构JSON对象键为维度标识值为百分比
- 维度financial、customer、internal_process、learning_growth
- 用途:用于模板层面的维度汇总与权重分配
- 章节来源
- [models.py](file://backend/app/models/models.py#L396-L396)
- [schemas.py](file://backend/app/schemas/schemas.py#L704-L704)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L88-L88)
- 指标维度bs_dimension
- 作用:指标所属的平衡计分卡维度,与模板维度权重协同使用
- 章节来源
- [models.py](file://backend/app/models/models.py#L125-L125)
- [init_templates.py](file://backend/init_indicator_templates.py#L28-L38)
### 模板与指标的多对多关联与权重分配机制
- 关联关系
- 通过 TemplateIndicator 实现模板与指标的多对多绑定
- 每个模板内的指标可独立设置权重、目标值、评分方法等
- 权重分配
- 模板维度权重:用于模板层面的维度汇总
- 指标权重:用于模板内指标的加权计算
- 章节来源
- [models.py](file://backend/app/models/models.py#L411-L431)
- [template_service.py](file://backend/app/services/template_service.py#L110-L124)
### 模板版本管理与继承关系
- 版本字段
- 当前模型未内置版本字段;如需版本管理,可在模板表中扩展 version 字段
- 继承关系
- 可通过模板类型与指标适用科室类型实现“继承”效果:通用模板可作为特定模板的父模板,再叠加差异字段
- 章节来源
- [models.py](file://backend/app/models/models.py#L391-L400)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L82-L186)
### 激活状态与使用范围约束
- 激活状态is_active
- 控制模板是否可用
- 前端通过开关切换,后端接口支持批量更新
- 使用范围
- 模板类型template_type限定适用科室类型
- 指标的适用科室类型applicable_dept_types进一步限制
- 章节来源
- [models.py](file://backend/app/models/models.py#L398-L398)
- [models.py](file://backend/app/models/models.py#L134-L134)
- [templates.py](file://backend/app/api/v1/templates.py#L22-L42)
## 依赖分析
模板系统的关键依赖关系如下:
```mermaid
graph LR
ENUM["TemplateType 枚举"] --> IT["IndicatorTemplate 模型"]
IT --> TI["TemplateIndicator 模型"]
IND["Indicator 模型"] --> TI
SVC["TemplateService 服务"] --> IT
SVC --> TI
API["templates.py 路由"] --> SVC
SCHEMA["schemas.py 模式"] --> API
FRONT["Templates.vue 页面"] --> API
API --> FRONT
```
图表来源
- [models.py](file://backend/app/models/models.py#L375-L385)
- [models.py](file://backend/app/models/models.py#L387-L438)
- [template_service.py](file://backend/app/services/template_service.py#L20-L293)
- [templates.py](file://backend/app/api/v1/templates.py#L1-L272)
- [schemas.py](file://backend/app/schemas/schemas.py#L640-L743)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
章节来源
- [models.py](file://backend/app/models/models.py#L375-L385)
- [models.py](file://backend/app/models/models.py#L387-L438)
- [template_service.py](file://backend/app/services/template_service.py#L20-L293)
- [templates.py](file://backend/app/api/v1/templates.py#L1-L272)
- [schemas.py](file://backend/app/schemas/schemas.py#L640-L743)
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
## 性能考虑
- 查询优化
- 模板列表按 template_type 与 is_active 进行过滤,建议保持索引有效
- 模板详情加载时使用 selectinload 预加载关联指标,避免 N+1 查询
- 写入优化
- 批量添加模板指标时,服务层会自动设置排序,减少重复计算
- 前端渲染
- 前端对维度权重进行 JSON 解析与可视化展示,注意空值处理与错误捕获
## 故障排查指南
- 模板编码冲突
- 现象:创建模板时报错“模板编码已存在”
- 排查:检查唯一索引约束与迁移脚本
- 章节来源
- [templates.py](file://backend/app/api/v1/templates.py#L136-L139)
- [002_template.py](file://backend/alembic/versions/002_template.py#L36-L36)
- 指标重复添加
- 现象:添加模板指标返回失败
- 排查检查唯一索引template_id, indicator_id
- 章节来源
- [template_service.py](file://backend/app/services/template_service.py#L174-L182)
- [002_template.py](file://backend/alembic/versions/002_template.py#L63-L63)
- 维度权重解析失败
- 现象:前端维度权重显示异常
- 排查:确认 JSON 格式正确,服务端/前端均做容错处理
- 章节来源
- [Templates.vue](file://frontend/src/views/basic/Templates.vue#L310-L317)
- 指标权重校验
- 现象指标权重小于等于0导致异常
- 排查:数据库层有 CheckConstraint前端也应限制输入范围
- 章节来源
- [models.py](file://backend/app/models/models.py#L145-L145)
- [schemas.py](file://backend/app/schemas/schemas.py#L158-L158)
## 结论
指标模板系统通过清晰的模型设计与严格的约束,实现了模板类型、维度权重、指标分类与权重分配的灵活配置。模板与指标的多对多关系通过关联表实现解耦,支持按科室类型与适用范围进行精细化管理。建议后续在模板表中增加版本字段以完善版本管理能力,并在前端增强对 JSON 参数的校验与提示,提升系统的稳定性与易用性。

View File

@@ -0,0 +1,596 @@
# 数据字典
<cite>
**本文档引用的文件**
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/models/finance.py](file://backend/app/models/finance.py)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py)
- [backend/app/api/v1/staff.py](file://backend/app/api/v1/staff.py)
- [backend/app/api/v1/departments.py](file://backend/app/api/v1/departments.py)
- [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py)
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py)
- [backend/app/api/v1/templates.py](file://backend/app/api/v1/templates.py)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py)
- [backend/app/services/department_service.py](file://backend/app/services/department_service.py)
- [backend/app/services/indicator_service.py](file://backend/app/services/indicator_service.py)
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py)
- [backend/app/services/template_service.py](file://backend/app/services/template_service.py)
- [docs/database.md](file://docs/database.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本数据字典面向医院绩效管理系统,系统围绕“科室—员工—考核—工资—财务”主线构建,涵盖指标管理、计划管理、模板管理、财务核算等模块。本文档从字段层面梳理每个实体的数据定义(业务含义、数据类型、长度/精度限制、取值范围、默认值),明确枚举类型及其使用场景,阐述字段与业务实体的对应关系,给出数据流转过程,并提供维护更新规范与查询使用指南。
## 项目结构
系统采用前后端分离架构后端基于FastAPI + SQLAlchemy采用分层设计API → Service → Model前端Vue3 + Vite。数据库采用SQLite开发环境通过Alembic进行版本化迁移。
```mermaid
graph TB
FE["前端界面<br/>Vue3 + Vite"] --> API["后端API<br/>FastAPI"]
API --> SVC["服务层<br/>各模块Service"]
SVC --> MODELS["模型层<br/>SQLAlchemy ORM"]
MODELS --> DB["数据库<br/>SQLite"]
```
图表来源
- [backend/app/api/v1/staff.py](file://backend/app/api/v1/staff.py#L1-L124)
- [backend/app/api/v1/departments.py](file://backend/app/api/v1/departments.py#L1-L108)
- [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py#L1-L142)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L310)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py#L1-L217)
- [backend/app/api/v1/templates.py](file://backend/app/api/v1/templates.py#L1-L272)
章节来源
- [backend/app/api/v1/staff.py](file://backend/app/api/v1/staff.py#L1-L124)
- [backend/app/api/v1/departments.py](file://backend/app/api/v1/departments.py#L1-L108)
- [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py#L1-L142)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L310)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py#L1-L217)
- [backend/app/api/v1/templates.py](file://backend/app/api/v1/templates.py#L1-L272)
## 核心组件
- 数据模型层:定义实体、字段、约束、索引、枚举类型
- 模式层Pydantic定义API输入输出结构、字段校验规则
- API层定义REST接口、参数、返回结构
- 服务层:封装业务逻辑、事务处理、数据聚合
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L1-L79)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L1-L743)
## 架构概览
系统围绕“绩效考核—工资核算—财务分析”的主流程展开,指标与模板驱动考核,考核结果驱动工资生成,财务模块提供收支与结余分析。
```mermaid
graph TB
subgraph "基础数据"
DEPT["科室表<br/>departments"]
STAFF["员工表<br/>staff"]
USERS["用户表<br/>users"]
end
subgraph "指标与计划"
IND["指标表<br/>indicators"]
TPL["模板表<br/>indicator_templates"]
TIND["模板指标关联<br/>template_indicators"]
PLAN["绩效计划表<br/>performance_plans"]
REL["计划指标关联<br/>plan_kpi_relations"]
end
subgraph "考核与工资"
ASSESS["考核记录表<br/>assessments"]
DETAIL["考核明细表<br/>assessment_details"]
SAL["工资记录表<br/>salary_records"]
end
subgraph "财务"
FIN["科室财务记录<br/>department_finances"]
end
DEPT <-- "1:N" --> STAFF
STAFF <-- "N:1" --> DEPT
STAFF <-- "N:1" --> USERS
IND <-- "N:1" --> DETAIL
ASSESS <-- "1:N" --> DETAIL
DETAIL <-- "N:1" --> IND
PLAN <-- "1:N" --> REL
REL <-- "N:1" --> IND
STAFF <-- "N:1" --> ASSESS
STAFF <-- "N:1" --> SAL
DEPT <-- "N:1" --> FIN
```
图表来源
- [docs/database.md](file://docs/database.md#L1-L286)
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L79)
## 详细组件分析
### 1) 基础数据实体
#### 1.1 科室表 departments
- 字段定义
- id: 整型, 主键, 自增
- name: 字符串, 长度100, 非空, 说明: 科室名称
- code: 字符串, 长度20, 唯一, 非空, 说明: 科室编码
- dept_type: 枚举, 非空, 说明: 科室类型
- parent_id: 整型, 外键, 说明: 上级科室
- level: 整型, 默认1, 说明: 层级
- sort_order: 整型, 默认0, 说明: 排序
- is_active: 布尔, 默认true, 说明: 是否启用
- description: 文本, 说明: 描述
- created_at/updated_at: 时间戳, 说明: 创建/更新时间
- 约束与索引
- 唯一键: code
- 索引: idx_dept_type, idx_dept_parent
- 业务含义
- 支持多级组织架构,支持停用/启用;用于员工归属、计划/模板适用范围等
- 默认值与取值范围
- level: 1-5
- sort_order: 任意整数
- is_active: true/false
- 使用场景
- 员工入职时绑定科室;计划/模板按科室类型筛选适用范围
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L86)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L64-L103)
- [docs/database.md](file://docs/database.md#L99-L116)
#### 1.2 员工表 staff
- 字段定义
- id: 整型, 主键, 自增
- employee_id: 字符串, 长度20, 唯一, 非空, 说明: 工号
- name: 字符串, 长度50, 非空, 说明: 姓名
- department_id: 整型, 外键, 非空, 说明: 所属科室
- position: 字符串, 长度50, 非空, 说明: 职位
- title: 字符串, 长度50, 说明: 职称
- phone/email: 字符串, 长度20/100, 说明: 联系方式
- base_salary: 数值, 精度(10,2), 默认0, 说明: 基本工资
- performance_ratio: 数值, 精度(5,2), 默认1.0, 说明: 绩效系数
- status: 枚举, 默认active, 说明: 员工状态
- hire_date: 时间戳, 说明: 入职日期
- created_at/updated_at: 时间戳
- 约束与索引
- 唯一键: employee_id
- 索引: idx_staff_dept, idx_staff_status
- 业务含义
- 基于基本工资与绩效系数计算绩效奖金;参与考核与工资生成
- 默认值与取值范围
- base_salary ≥ 0
- 0 ≤ performance_ratio ≤ 5
- 使用场景
- 薪资计算、部门统计、计划责任人
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L88-L115)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L107-L150)
- [docs/database.md](file://docs/database.md#L117-L137)
#### 1.3 用户表 users
- 字段定义
- id: 整型, 主键, 自增
- username: 字符串, 长度50, 唯一, 非空, 说明: 用户名
- password_hash: 字符串, 长度255, 非空, 说明: 密码哈希
- staff_id: 整型, 外键, 说明: 关联员工
- role: 字符串, 长度20, 默认staff, 说明: 角色
- is_active: 布尔, 默认true, 说明: 是否启用
- last_login: 时间戳, 说明: 最后登录
- created_at/updated_at: 时间戳
- 约束与索引
- 唯一键: username
- 索引: idx_user_username
- 业务含义
- 系统访问控制与权限管理的基础
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L244-L261)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L315-L345)
### 2) 指标与模板
#### 2.1 指标表 indicators
- 字段定义
- id: 整型, 主键, 自增
- name/code: 字符串, 长度100/20, 唯一, 非空, 说明: 指标名称/编码
- indicator_type: 枚举, 非空, 说明: 指标类型
- bs_dimension: 枚举, 非空, 说明: 平衡计分卡维度
- weight: 数值, 精度(5,2), 默认1.0, 说明: 权重
- max_score: 数值, 精度(5,2), 默认100, 说明: 最高分值
- target_value/target_unit: 数值/字符串, 说明: 目标值与单位
- calculation_method/assessment_method/deduction_standard/data_source: 文本, 说明: 计算/考核/扣分/数据来源
- applicable_dept_types: 文本(JSON数组), 说明: 适用科室类型
- is_veto: 布尔, 默认false, 说明: 是否一票否决
- is_active: 布尔, 默认true, 说明: 是否启用
- created_at/updated_at: 时间戳
- 约束与索引
- 约束: weight > 0
- 索引: idx_indicator_type
- 业务含义
- 考核的最小颗粒决定评分与权重支持JSON存储适用范围
- 默认值与取值范围
- weight > 0
- max_score ≥ 0
- 使用场景
- 考核打分、计划目标设定、模板匹配
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L117-L147)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L153-L193)
- [docs/database.md](file://docs/database.md#L138-L158)
#### 2.2 指标模板表 indicator_templates
- 字段定义
- id: 整型, 主键, 自增
- template_name/code: 字符串, 长度200/50, 唯一, 非空
- template_type: 枚举, 非空, 说明: 模板类型
- description: 文本, 说明: 模板描述
- dimension_weights: 文本(JSON), 说明: 维度权重
- assessment_cycle: 字符串, 长度20, 默认monthly, 说明: 考核周期
- is_active: 布尔, 默认true
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_template_type, idx_template_active
- 业务含义
- 为不同科室类型提供标准化指标集合,支持批量导入
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L387-L409)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L698-L732)
#### 2.3 模板指标关联表 template_indicators
- 字段定义
- id: 整型, 主键, 自增
- template_id/indicator_id: 整型, 外键, 非空, 说明: 模板与指标
- category: 字符串, 长度100, 说明: 指标分类(二级指标)
- target_value/target_unit: 数值/字符串, 说明: 目标值与单位
- weight: 数值, 精度(5,2), 默认1.0
- scoring_method/scoring_params: 字符串/文本(JSON), 说明: 评分方法与参数
- sort_order: 整型, 默认0, 说明: 排序
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_ti_template, idx_ti_indicator, idx_ti_unique(模板+指标唯一)
- 业务含义
- 将指标纳入模板,支持排序与评分参数配置
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L411-L438)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L654-L696)
### 3) 考核与工资
#### 3.1 考核记录表 assessments
- 字段定义
- id: 整型, 主键, 自增
- staff_id: 整型, 外键, 非空, 说明: 被考核员工
- period_year/period_month: 整型, 非空, 说明: 考核年度/月份
- period_type: 字符串, 长度20, 默认monthly, 说明: 周期类型
- total_score/weighted_score: 数值, 精度(5,2), 默认0, 说明: 总分/加权得分
- status: 枚举, 默认draft, 说明: 状态
- assessor_id/reviewer_id: 整型, 外键, 说明: 考核人/审核人
- submit_time/review_time: 时间戳, 说明: 提交/审核时间
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_assessment_staff, idx_assessment_period, idx_assessment_status
- 业务含义
- 记录一次完整的考核流程,支持草稿、提交、审核、确认、驳回
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L149-L179)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L220-L271)
- [docs/database.md](file://docs/database.md#L159-L180)
#### 3.2 考核明细表 assessment_details
- 字段定义
- id: 整型, 主键, 自增
- assessment_id/indicator_id: 整型, 外键, 非空
- actual_value: 数值, 精度(10,2), 说明: 实际值
- score: 数值, 精度(5,2), 默认0, 说明: 得分
- evidence: 文本, 说明: 佐证材料
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_detail_assessment, idx_detail_indicator
- 业务含义
- 记录每个指标的得分与实际值,支撑总分与加权得分计算
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L181-L203)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L196-L219)
- [docs/database.md](file://docs/database.md#L181-L196)
#### 3.3 工资记录表 salary_records
- 字段定义
- id: 整型, 主键, 自增
- staff_id: 整型, 外键, 非空
- period_year/period_month: 整型, 非空
- base_salary/performance_score/performance_bonus/deduction/allowance: 数值, 精度(10,2)/(5,2), 默认0, 说明: 基本工资/绩效得分/绩效奖金/扣款/补贴
- total_salary: 数值, 精度(10,2), 默认0, 说明: 应发工资
- status: 字符串, 长度20, 默认pending, 说明: 状态
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_salary_staff, idx_salary_period
- 业务含义
- 基于考核结果生成工资,支持确认与批量确认
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L205-L231)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L274-L312)
- [docs/database.md](file://docs/database.md#L197-L217)
### 4) 绩效计划
#### 4.1 绩效计划表 performance_plans
- 字段定义
- id: 整型, 主键, 自增
- plan_name/code: 字符串, 长度200/50, 唯一, 非空
- plan_level: 枚举, 非空, 说明: 计划层级(hospital/department/individual)
- plan_year/plan_month: 整型/可选, 说明: 年度/月份
- plan_type: 字符串, 长度20, 默认annual, 说明: 计划类型(annual/monthly)
- department_id/staff_id: 整型/可选, 外键, 说明: 所属科室/责任人
- parent_plan_id: 整型, 外键, 说明: 上级计划
- description/strategic_goals/key_initiatives: 文本, 说明: 描述/战略目标/关键举措
- status: 枚举, 默认draft, 说明: 状态
- submitter_id/approver_id: 整型, 外键, 说明: 提交人/审批人
- submit_time/approve_time: 时间戳, 说明: 提交/审批时间
- approve_remark: 文本, 说明: 审批意见
- version: 整型, 默认1, 说明: 版本号
- is_active: 布尔, 默认true, 说明: 是否启用
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_plan_level, idx_plan_year, idx_plan_department, idx_plan_status
- 业务含义
- 支持医院/科室/个人三级计划,支持父子计划与审批流程
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L270-L312)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L519-L570)
#### 4.2 计划指标关联表 plan_kpi_relations
- 字段定义
- id: 整型, 主键, 自增
- plan_id/indicator_id: 整型, 外键, 非空
- target_value/target_unit: 数值/字符串, 说明: 目标值与单位
- weight: 数值, 精度(5,2), 默认1.0, 说明: 权重
- scoring_method/scoring_params: 字符串/文本(JSON), 说明: 评分方法与参数
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 索引: idx_relation_plan, idx_relation_indicator, idx_relation_unique(计划+指标唯一)
- 业务含义
- 将指标纳入具体计划,支持目标与权重配置
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L314-L339)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L481-L518)
### 5) 财务核算
#### 5.1 科室财务记录表 department_finances
- 字段定义
- id: 整型, 主键, 自增
- department_id: 整型, 外键, 非空
- period_year/period_month: 整型, 非空
- finance_type: 枚举, 非空, 说明: 收入/支出
- category: 字符串, 长度50, 非空, 说明: 类别
- amount: 数值, 精度(12,2), 默认0, 说明: 金额
- source: 字符串, 长度100, 说明: 数据来源
- remark: 文本, 说明: 备注
- created_at/updated_at: 时间戳
- 约束与索引
- 约束: amount ≥ 0
- 索引: idx_finance_dept, idx_finance_period, idx_finance_type, idx_finance_category
- 业务含义
- 记录各科室的收支明细,支持按类别统计与结余计算
章节来源
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L75)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L407-L452)
### 6) 枚举类型与取值范围
- 科室类型 DeptType
- 取值: clinical_surgical, clinical_nonsurgical_ward, clinical_nonsurgical_noward, medical_tech, medical_auxiliary, nursing, admin, finance, logistics
- 用途: 控制模板与计划适用范围
- 员工状态 StaffStatus
- 取值: active, leave, resigned, retired
- 考核状态 AssessmentStatus
- 取值: draft, submitted, reviewed, finalized, rejected
- 指标类型 IndicatorType
- 取值: quality, quantity, efficiency, service, cost
- 计划层级 PlanLevel
- 取值: hospital, department, individual
- 计划状态 PlanStatus
- 取值: draft, pending, approved, rejected, active, completed, cancelled
- 菜单类型 MenuType
- 取值: menu, button
- 模板类型 TemplateType
- 取值: general, surgical, nonsurgical_ward, nonsurgical_noward, medical_tech, nursing, admin, logistics
- 财务类型 FinanceType
- 取值: revenue, expense
- 收入类别 RevenueCategory
- 取值: examination, lab_test, radiology, bed, nursing, treatment, surgery, injection, oxygen, other
- 支出类别 ExpenseCategory
- 取值: material, personnel, maintenance, utility, other
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L16-L43)
- [backend/app/models/models.py](file://backend/app/models/models.py#L233-L242)
- [backend/app/models/models.py](file://backend/app/models/models.py#L341-L345)
- [backend/app/models/models.py](file://backend/app/models/models.py#L375-L385)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L16-L43)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L12-L45)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L463-L479)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L584-L588)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L642-L652)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L378-L405)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L378-L405)
### 7) 数据流转说明
#### 7.1 考核到工资的流程
```mermaid
sequenceDiagram
participant API as "API"
participant Svc as "SalaryService"
participant DB as "数据库"
API->>Svc : "根据考核生成工资"
Svc->>DB : "查询已确认的考核记录"
DB-->>Svc : "返回考核与明细"
Svc->>Svc : "计算绩效得分/奖金"
Svc->>DB : "写入工资记录"
DB-->>Svc : "返回记录ID"
Svc-->>API : "生成成功"
```
图表来源
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L96-L111)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L194-L206)
#### 7.2 财务收支统计流程
```mermaid
flowchart TD
Start(["开始"]) --> Fetch["查询科室收支记录"]
Fetch --> Group["按类别分组统计"]
Group --> Sum["计算合计"]
Sum --> Balance["结余 = 收入合计 - 支出合计"]
Balance --> End(["结束"])
```
图表来源
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py#L21-L155)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L75)
## 依赖分析
```mermaid
graph LR
STAFF["staff"] --> DEPT["departments"]
STAFF --> USERS["users"]
ASSESS["assessments"] --> STAFF
ASSESS --> DETAIL["assessment_details"]
DETAIL --> IND["indicators"]
SAL["salary_records"] --> STAFF
PLAN["performance_plans"] --> DEPT
PLAN --> STAFF
PLAN --> REL["plan_kpi_relations"]
REL --> IND
TPL["indicator_templates"] --> TIND["template_indicators"]
TIND --> IND
FIN["department_finances"] --> DEPT
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L79)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L79)
## 性能考虑
- 索引策略
- 对常用过滤字段建立索引(如科室类型、状态、周期、部门)
- 对外键字段建立索引,减少连接开销
- 查询优化
- 使用selectinload预加载关联对象避免N+1查询
- 分页查询配合COUNT子查询避免全表扫描
- 数据类型选择
- 数值使用Decimal保证精度字符串使用VARCHAR并设置合理上限
- 缓存建议
- 对静态枚举与模板列表可做内存缓存,降低数据库压力
## 故障排除指南
- 常见错误与定位
- “指标/模板/科室编码已存在”:检查唯一约束冲突
- “无法删除,存在子记录”:先清理子项再删除
- “无法生成/确认工资”:检查考核状态与重复生成
- “无效的类别”:确认财务类别枚举值
- 排查步骤
- 查看API返回状态码与错误信息
- 检查数据库约束与索引是否生效
- 核对枚举值是否在允许范围内
- 使用服务层日志定位业务流程异常点
章节来源
- [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py#L78-L82)
- [backend/app/api/v1/departments.py](file://backend/app/api/v1/departments.py#L103-L107)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L104-L110)
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py#L170-L175)
## 结论
本数据字典系统性梳理了医院绩效管理系统的数据结构与业务规则,明确了字段定义、枚举取值、默认值与约束、索引策略与使用场景,并给出了数据流转与维护规范。建议在后续迭代中持续完善字段注释、扩展审计字段、引入字段变更追踪机制,确保数据治理的可追溯性与一致性。
## 附录
### A. 字段与业务实体对应关系
- 科室 → 员工:一对多
- 员工 → 考核:一对多
- 考核 → 明细:一对多
- 明细 → 指标:多对一
- 员工 → 工资:一对多
- 计划 → 指标多对多通过plan_kpi_relations
- 模板 → 指标多对多通过template_indicators
- 科室 → 财务:一对多
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
- [backend/app/models/finance.py](file://backend/app/models/finance.py#L45-L79)
### B. 数据字典维护与更新规范
- 新增字段
- 在模型层定义字段与约束补充Pydantic模式
- 在API层增加参数校验与默认值
- 在服务层处理字段映射与业务逻辑
- 更新数据库迁移脚本并升级数据库
- 修改字段
- 评估兼容性与影响范围
- 通过迁移脚本安全变更,保留历史数据
- 更新API与模式校验规则
- 删除字段
- 确认无业务依赖后,通过迁移脚本删除
- 清理相关API与服务逻辑
### C. 数据字典查询与使用指南
- 基础查询
- 通过API参数过滤如科室类型、状态、周期
- 使用分页参数控制返回数量
- 高级查询
- 结合多个条件组合查询
- 使用树形结构查询科室层级
- 数据导出
- 指标与模板支持批量导入/导出
- 财务模块支持按类别统计与汇总
章节来源
- [backend/app/api/v1/departments.py](file://backend/app/api/v1/departments.py#L20-L51)
- [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py#L20-L56)
- [backend/app/api/v1/templates.py](file://backend/app/api/v1/templates.py#L22-L75)
- [backend/app/api/v1/finance.py](file://backend/app/api/v1/finance.py#L116-L155)

View File

@@ -0,0 +1,469 @@
# 枚举类型定义
<cite>
**本文档引用的文件**
- [models.py](file://backend/app/models/models.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [templates.py](file://backend/app/api/v1/templates.py)
- [init_templates.py](file://backend/app/scripts/init_templates.py)
- [template_service.py](file://backend/app/services/template_service.py)
- [002_template.py](file://backend/alembic/versions/002_template.py)
- [001_initial.py](file://backend/alembic/versions/001_initial.py)
- [database.md](file://docs/database.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档提供了医院绩效管理系统中所有枚举类型的完整数据字典。系统采用平衡计分卡BSC理论框架通过标准化的枚举类型确保业务逻辑的一致性和可维护性。
该系统涵盖了从基础科室管理到复杂绩效考核的完整业务流程,所有关键业务状态和分类都通过精心设计的枚举类型来实现。
## 项目结构
系统采用分层架构设计,枚举类型分布在多个层次中:
```mermaid
graph TB
subgraph "数据模型层"
A[models.py<br/>数据库模型枚举]
end
subgraph "API层"
B[templates.py<br/>模板管理API]
C[departments.py<br/>科室管理API]
D[menus.py<br/>菜单管理API]
end
subgraph "服务层"
E[template_service.py<br/>模板服务]
F[department_service.py<br/>科室服务]
G[menu_service.py<br/>菜单服务]
end
subgraph "脚本层"
H[init_templates.py<br/>模板初始化]
end
A --> B
A --> C
A --> D
B --> E
C --> F
D --> G
H --> A
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L16-L438)
- [templates.py](file://backend/app/api/v1/templates.py#L1-L272)
## 核心组件
系统定义了以下主要枚举类型:
### 科室类型 (DeptType)
用于标识医院各类科室的标准化分类体系。
### 平衡计分卡维度 (BSCDimension)
基于财务、客户、内部流程、学习成长四个维度的绩效评估框架。
### 员工状态 (StaffStatus)
员工在组织中的生命周期状态管理。
### 考核状态 (AssessmentStatus)
绩效考核流程中的状态流转控制。
### 指标类型 (IndicatorType)
不同类型绩效指标的分类标准。
### 计划状态 (PlanStatus)
绩效计划执行过程中的状态管理。
### 菜单类型 (MenuType)
系统菜单结构的类型区分。
### 模板类型 (TemplateType)
绩效指标模板的分类体系。
**章节来源**
- [models.py](file://backend/app/models/models.py#L16-L438)
- [schemas.py](file://backend/app/schemas/schemas.py#L12-L44)
## 架构概览
系统采用统一的枚举类型管理策略,确保跨层一致性:
```mermaid
classDiagram
class DeptType {
+CLINICAL_SURGICAL
+CLINICAL_NONSURGICAL_WARD
+CLINICAL_NONSURGICAL_NOWARD
+MEDICAL_TECH
+MEDICAL_AUXILIARY
+NURSING
+ADMIN
+FINANCE
+LOGISTICS
}
class BSCDimension {
+FINANCIAL
+CUSTOMER
+INTERNAL_PROCESS
+LEARNING_GROWTH
}
class StaffStatus {
+ACTIVE
+LEAVE
+RESIGNED
+RETIRED
}
class AssessmentStatus {
+DRAFT
+SUBMITTED
+REVIEWED
+FINALIZED
+REJECTED
}
class IndicatorType {
+QUALITY
+QUANTITY
+EFFICIENCY
+SERVICE
+COST
}
class PlanStatus {
+DRAFT
+PENDING
+APPROVED
+REJECTED
+ACTIVE
+COMPLETED
+CANCELLED
}
class MenuType {
+MENU
+BUTTON
}
class TemplateType {
+GENERAL
+SURGICAL
+NON_SURGICAL_WARD
+NON_SURGICAL_NOWARD
+MEDICAL_TECH
+NURSING
+ADMIN
+LOGISTICS
}
DeptType --> BSCDimension : "影响"
IndicatorType --> BSCDimension : "映射"
TemplateType --> DeptType : "适用"
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L16-L438)
## 详细组件分析
### 科室类型 (DeptType) 数据字典
| 枚举值 | 业务含义 | 适用科室 | 使用场景 | 约束条件 |
|--------|----------|----------|----------|----------|
| clinical_surgical | 手术临床科室 | 外科、骨科、胸外科等 | 手术量、手术质量评估 | DRG/ RBRVS 计费 |
| clinical_nonsurgical_ward | 非手术有病房科室 | 内科、儿科、神经科等 | 住院患者管理、病床使用率 | 床位周转率评估 |
| clinical_nonsurgical_noward | 非手术无病房科室 | 急诊科、观察室等 | 急诊处理能力、观察患者管理 | 急诊周转时间 |
| medical_tech | 医技科室 | 检验科、放射科、超声科等 | 检查报告质量、服务效率 | 报告准确率、及时性 |
| medical_auxiliary | 医辅科室 | 病理科、药剂科等 | 辅助诊断支持、药品管理 | 质量控制标准 |
| nursing | 护理单元 | 各病区护理单元 | 护理质量、患者满意度 | 护理技术操作规范 |
| admin | 行政科室 | 院办、党办、财务科等 | 管理效能、服务支持 | 内部客户满意度 |
| finance | 财务科室 | 财务科 | 财务核算、成本控制 | 会计准则遵循 |
| logistics | 后勤保障科室 | 总务科、设备科等 | 后勤保障、设备维护 | 设备完好率 |
**使用场景示例**
- 指标模板选择:不同科室类型适用不同的指标模板
- 数据筛选:按科室类型过滤统计数据
- 权限控制:特定功能对特定科室类型开放
**章节来源**
- [models.py](file://backend/app/models/models.py#L16-L26)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L82-L186)
### 平衡计分卡维度 (BSCDimension) 数据字典
| 维度值 | 业务含义 | 权重范围 | 关键指标示例 | 适用场景 |
|--------|----------|----------|--------------|----------|
| financial | 财务维度 | 30%-40% | 收支结余率、成本控制、资产效率 | 财务绩效评估 |
| customer | 顾客维度 | 25%-35% | 患者满意度、服务可及性、投诉管理 | 服务质量评估 |
| internal_process | 内部流程维度 | 20%-30% | 医疗质量、医疗安全、院感控制 | 运营效率评估 |
| learning_growth | 学习成长维度 | 5%-15% | 科研教学、人才培养、业务学习 | 能力发展评估 |
**权重配置原则**
- 通用模板财务40%客户30%内部流程25%学习成长5%
- 手术科室财务35%客户20%内部流程30%学习成长15%
- 医技科室财务20%客户30%内部流程40%学习成长10%
**章节来源**
- [models.py](file://backend/app/models/models.py#L29-L34)
- [templates.py](file://backend/app/api/v1/templates.py#L63-L74)
- [init_templates.py](file://backend/app/scripts/init_templates.py#L88-L186)
### 员工状态 (StaffStatus) 数据字典
| 状态值 | 业务含义 | 系统行为 | 统计影响 | 权限控制 |
|--------|----------|----------|----------|----------|
| active | 在职 | 可参与考核、享受绩效 | 计入在岗人员统计 | 完整权限 |
| leave | 休假 | 不参与考核、暂停绩效 | 不计入在岗统计 | 有限权限 |
| resigned | 离职 | 不参与考核、结算薪酬 | 不再统计 | 无权限 |
| retired | 退休 | 不参与考核、结算薪酬 | 不再统计 | 无权限 |
**状态流转图**
```mermaid
stateDiagram-v2
[*] --> active
active --> leave : 请假/调休
leave --> active : 返回工作
active --> resigned : 离职办理
active --> retired : 退休办理
resigned --> [*]
retired --> [*]
```
**章节来源**
- [models.py](file://backend/app/models/models.py#L37-L42)
- [schemas.py](file://backend/app/schemas/schemas.py#L24-L28)
### 考核状态 (AssessmentStatus) 数据字典
| 状态值 | 业务含义 | 系统权限 | 数据处理 | 流程控制 |
|--------|----------|----------|----------|----------|
| draft | 草稿 | 创建/编辑 | 临时保存 | 初始状态 |
| submitted | 已提交 | 审核查看 | 待审核状态 | 提交流程 |
| reviewed | 已审核 | 确认审批 | 审核中 | 审核流程 |
| finalized | 已确认 | 工资核算 | 生效状态 | 结束状态 |
| rejected | 已驳回 | 重新编辑 | 退回修改 | 异常流程 |
**状态流转流程**
```mermaid
sequenceDiagram
participant U as 用户
participant S as 系统
participant A as 审核人
participant P as 系统
U->>S : 创建/编辑考核
S->>S : 状态=draft
U->>S : 提交考核
S->>S : 状态=submitted
A->>S : 审核通过
S->>S : 状态=reviewed
A->>S : 确认生效
S->>S : 状态=finalized
S->>P : 生成工资记录
```
**章节来源**
- [models.py](file://backend/app/models/models.py#L45-L51)
- [schemas.py](file://backend/app/schemas/schemas.py#L31-L36)
### 指标类型 (IndicatorType) 数据字典
| 类型值 | 业务含义 | 计算方法 | 评估标准 | 示例指标 |
|--------|----------|----------|----------|----------|
| quality | 质量指标 | 定性/定量评估 | 百分比/分数制 | 甲级病历率、满意度 |
| quantity | 数量指标 | 绝对数值统计 | 完成率/达标率 | 手术台次、门诊量 |
| efficiency | 效率指标 | 比较/比率分析 | 时间/成本效率 | 住院日、周转率 |
| service | 服务指标 | 客户满意度 | 星级/评分制 | 服务态度、及时性 |
| cost | 成本指标 | 成本效益分析 | 成本控制效果 | 材料消耗、成本率 |
**评估方法分类**
- 区间法:设定目标区间,按比例扣分
- 目标参照法:与目标值对比,超耗扣分
- 加分法:超额完成给予奖励分
- 扣分法:违规事件直接扣分
- 一票否决:重大事故直接无效
**章节来源**
- [models.py](file://backend/app/models/models.py#L54-L60)
- [schemas.py](file://backend/app/schemas/schemas.py#L39-L44)
### 计划状态 (PlanStatus) 数据字典
| 状态值 | 业务含义 | 审批流程 | 统计作用 | 系统控制 |
|--------|----------|----------|----------|----------|
| draft | 草稿 | 无需审批 | 临时保存 | 创建/修改 |
| pending | 待审批 | 上级审批 | 待执行 | 提交申请 |
| approved | 已批准 | 审批通过 | 执行准备 | 正式生效 |
| rejected | 已驳回 | 审批拒绝 | 修改调整 | 退回修改 |
| active | 执行中 | 开始执行 | 实际执行 | 进行中 |
| completed | 已完成 | 执行结束 | 归档统计 | 结束状态 |
| cancelled | 已取消 | 主动取消 | 终止执行 | 异常终止 |
**计划层级**
- hospital医院级计划全局性目标
- department科室级计划部门目标
- individual个人级计划员工目标
**章节来源**
- [models.py](file://backend/app/models/models.py#L233-L241)
- [schemas.py](file://backend/app/schemas/schemas.py#L463-L478)
### 菜单类型 (MenuType) 数据字典
| 类型值 | 业务含义 | 界面表现 | 权限控制 | 使用场景 |
|--------|----------|----------|----------|----------|
| menu | 菜单 | 可展开的导航项 | 路由访问权限 | 主要功能入口 |
| button | 按钮 | 可点击的操作按钮 | 功能操作权限 | 具体业务操作 |
**菜单结构**
- 一级菜单:工作台、科室管理、员工管理等
- 二级菜单:具体的业务功能页面
- 按钮权限:新增、编辑、删除、查看等操作
**章节来源**
- [models.py](file://backend/app/models/models.py#L341-L344)
- [schemas.py](file://backend/app/schemas/schemas.py#L584-L587)
### 模板类型 (TemplateType) 数据字典
| 类型值 | 业务含义 | 适用范围 | 权重配置 | 特殊要求 |
|--------|----------|----------|----------|----------|
| general | 通用模板 | 全院各科室 | 4维均衡 | 基础通用指标 |
| surgical | 手术临床科室 | 外科、妇科、眼科等 | 财务35% | DRG/RBRVS导向 |
| nonsurgical_ward | 非手术有病房科室 | 内科、儿科等 | 4维均衡 | 住院管理重点 |
| nonsurgical_noward | 非手术无病房科室 | 急诊、观察室等 | 4维均衡 | 急诊效率评估 |
| medical_tech | 医技科室 | 检验、放射、超声等 | 内部流程40% | 质量效率双核心 |
| nursing | 护理单元 | 各病区护理单元 | 顾客30% | 护理质量优先 |
| admin | 行政科室 | 院办、党办、财务等 | 顾客40% | 服务支持导向 |
| logistics | 后勤科室 | 总务、设备、基建等 | 内部流程40% | 保障效率优先 |
**模板特点**
- **通用模板**:平衡四维度,适合大多数科室
- **手术模板**:强调财务效率,体现技术价值
- **医技模板**:注重质量与效率并重
- **行政模板**:突出服务支持能力
- **后勤模板**:重视保障及时性
**章节来源**
- [models.py](file://backend/app/models/models.py#L375-L384)
- [schemas.py](file://backend/app/schemas/schemas.py#L642-L651)
- [templates.py](file://backend/app/api/v1/templates.py#L45-L60)
## 依赖分析
### 数据库迁移依赖
系统通过 Alembic 迁移管理枚举类型的数据库存储:
```mermaid
flowchart TD
A[初始版本] --> B[添加指标维度字段]
B --> C[模板类型定义]
C --> D[枚举类型持久化]
E[DeptType] --> F[departments表]
G[BSCDimension] --> H[indicators表]
I[AssessmentStatus] --> J[assessments表]
K[TemplateType] --> L[indicator_templates表]
F --> M[SQL约束]
H --> M
J --> M
L --> M
```
**图表来源**
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L22-L173)
- [002_template.py](file://backend/alembic/versions/002_template.py#L65-L95)
### 业务流程依赖
```mermaid
graph LR
subgraph "业务流程"
A[科室类型] --> B[指标模板]
B --> C[绩效考核]
C --> D[工资核算]
end
subgraph "状态管理"
E[员工状态] --> F[考核状态]
F --> G[计划状态]
end
subgraph "系统集成"
H[菜单类型] --> I[权限控制]
I --> J[界面展示]
end
B --> F
C --> G
D --> G
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L62-L438)
- [template_service.py](file://backend/app/services/template_service.py#L270-L293)
**章节来源**
- [002_template.py](file://backend/alembic/versions/002_template.py#L65-L95)
- [template_service.py](file://backend/app/services/template_service.py#L270-L293)
## 性能考虑
### 枚举类型性能优化
1. **数据库索引优化**
- 科室类型departments.dept_type
- 员工状态staff.status
- 考核状态assessments.status
- 指标类型indicators.indicator_type
2. **查询性能**
- 使用枚举值进行精确匹配优于字符串模糊查询
- 合理利用数据库索引提高查询效率
- 避免在 WHERE 子句中进行枚举值转换
3. **内存使用**
- 枚举类型占用固定内存空间
- 避免频繁创建新的枚举实例
- 使用枚举缓存机制减少重复创建
## 故障排除指南
### 常见问题及解决方案
**问题1枚举值不一致**
- 症状:数据库中存储的枚举值与代码定义不匹配
- 解决方案:检查 Alembic 迁移文件,确保数据库字段类型正确
**问题2状态流转异常**
- 症状:考核状态无法正常转换
- 解决方案:验证状态转换规则,检查业务逻辑实现
**问题3模板应用错误**
- 症状:指标模板不适用于特定科室类型
- 解决方案:检查 applicable_dept_types 字段配置
**问题4权限控制失效**
- 症状:菜单权限不生效
- 解决方案:验证 MenuType 和权限标识配置
**章节来源**
- [models.py](file://backend/app/models/models.py#L16-L438)
- [template_service.py](file://backend/app/services/template_service.py#L270-L293)
## 结论
本系统通过标准化的枚举类型设计,实现了以下目标:
1. **业务一致性**:统一的枚举定义确保各模块间业务逻辑的一致性
2. **可维护性**:集中化的枚举管理便于后续扩展和维护
3. **可扩展性**:清晰的枚举层次结构支持业务需求变化
4. **数据完整性**:数据库层面的约束保证数据质量
建议在后续开发中:
- 定期审查和更新枚举定义
- 建立枚举变更的审批流程
- 完善枚举值的业务文档
- 加强枚举类型的单元测试

View File

@@ -0,0 +1,414 @@
# 系统菜单字段
<cite>
**本文档引用的文件**
- [models.py](file://backend/app/models/models.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [menus.py](file://backend/app/api/v1/menus.py)
- [menu_service.py](file://backend/app/services/menu_service.py)
- [menu.js](file://frontend/src/api/menu.js)
- [Menus.vue](file://frontend/src/views/system/Menus.vue)
- [Layout.vue](file://frontend/src/views/Layout.vue)
- [index.js](file://frontend/src/router/index.js)
- [security.py](file://backend/app/core/security.py)
- [create_menu_tables.py](file://backend/create_menu_tables.py)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档提供了医院绩效系统中系统菜单相关字段的详细数据字典。涵盖了系统菜单表(Menu)、菜单类型枚举(MenuType)等字段定义,详细说明了菜单层级结构、权限控制、路由配置等相关字段。文档包含了菜单树形结构的父子关系和排序机制,提供了菜单权限验证和动态加载的字段设计说明,以及菜单可见性和激活状态的字段约束。同时说明了菜单与功能权限的关联关系。
## 项目结构
系统采用前后端分离架构,菜单管理功能分布在以下层次:
```mermaid
graph TB
subgraph "前端层"
FE_API[菜单API调用]
FE_VIEW[菜单管理界面]
FE_ROUTER[前端路由]
end
subgraph "后端层"
API[菜单API路由]
SERVICE[菜单业务逻辑]
MODEL[菜单数据模型]
SCHEMA[数据验证模式]
end
subgraph "数据库层"
DB[(MySQL数据库)]
end
FE_API --> API
FE_VIEW --> FE_API
FE_ROUTER --> FE_VIEW
API --> SERVICE
SERVICE --> MODEL
MODEL --> DB
SCHEMA --> API
```
**图表来源**
- [menus.py](file://backend/app/api/v1/menus.py#L1-L164)
- [menu_service.py](file://backend/app/services/menu_service.py#L1-L137)
- [models.py](file://backend/app/models/models.py#L347-L373)
**章节来源**
- [menus.py](file://backend/app/api/v1/menus.py#L1-L164)
- [menu_service.py](file://backend/app/services/menu_service.py#L1-L137)
- [models.py](file://backend/app/models/models.py#L347-L373)
## 核心组件
### 菜单数据模型
系统菜单采用自引用的树形结构设计,支持无限层级的菜单组织。每个菜单项包含完整的元数据信息,用于前端渲染和权限控制。
### 菜单类型枚举
系统支持两种菜单类型:
- **菜单(Menu)**: 用于页面导航的主要菜单项
- **按钮(Button)**: 用于页面内功能按钮的权限控制
### 菜单字段定义
| 字段名 | 数据类型 | 是否可空 | 默认值 | 描述 |
|--------|----------|----------|--------|------|
| id | Integer | 否 | 自增 | 菜单唯一标识符 |
| parent_id | Integer | 是 | NULL | 父菜单ID自引用外键 |
| menu_type | Enum | 否 | menu | 菜单类型(MENU/BUTTON) |
| menu_name | String(100) | 否 | - | 菜单显示名称 |
| menu_icon | String(50) | 是 | NULL | Element Plus图标名称 |
| path | String(200) | 否 | - | Vue Router路由路径 |
| component | String(200) | 是 | NULL | 页面组件路径 |
| permission | String(100) | 是 | NULL | 权限标识符 |
| sort_order | Integer | 否 | 0 | 排序权重 |
| is_visible | Boolean | 否 | TRUE | 是否在菜单中显示 |
| is_active | Boolean | 否 | TRUE | 菜单是否启用 |
| created_at | DateTime | 否 | 当前时间 | 创建时间戳 |
| updated_at | DateTime | 否 | 当前时间 | 更新时间戳 |
**章节来源**
- [models.py](file://backend/app/models/models.py#L347-L373)
- [schemas.py](file://backend/app/schemas/schemas.py#L590-L638)
## 架构概览
系统菜单架构采用经典的三层架构模式,实现了完整的菜单生命周期管理:
```mermaid
sequenceDiagram
participant Client as 前端客户端
participant API as 菜单API
participant Service as 菜单服务
participant Model as 数据模型
participant DB as 数据库
Client->>API : GET /menus/tree?visible_only=true
API->>Service : get_tree(visible_only)
Service->>Model : 查询菜单树
Model->>DB : SQL查询
DB-->>Model : 菜单数据
Model-->>Service : 菜单对象
Service->>Service : 转换为字典结构
Service-->>API : 菜单树数据
API-->>Client : JSON响应
Note over Client,DB : 菜单树形结构加载流程
```
**图表来源**
- [menus.py](file://backend/app/api/v1/menus.py#L17-L29)
- [menu_service.py](file://backend/app/services/menu_service.py#L16-L29)
**章节来源**
- [menus.py](file://backend/app/api/v1/menus.py#L17-L29)
- [menu_service.py](file://backend/app/services/menu_service.py#L16-L29)
## 详细组件分析
### 菜单树形结构设计
系统采用自引用关系实现菜单树形结构,支持无限层级嵌套:
```mermaid
classDiagram
class Menu {
+Integer id
+Integer parent_id
+MenuType menu_type
+String menu_name
+String menu_icon
+String path
+String component
+String permission
+Integer sort_order
+Boolean is_visible
+Boolean is_active
+DateTime created_at
+DateTime updated_at
+children : Menu[]
+parent : Menu
}
class MenuType {
<<enumeration>>
MENU
BUTTON
}
Menu --> Menu : "parent_id -> id"
Menu --> Menu : "children"
Menu --> MenuType : "uses"
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L347-L373)
- [models.py](file://backend/app/models/models.py#L341-L345)
### 菜单权限控制机制
系统实现了多层次的权限控制体系:
```mermaid
flowchart TD
Start([用户请求菜单]) --> CheckAuth["检查用户认证"]
CheckAuth --> AuthOK{"认证通过?"}
AuthOK --> |否| Deny["拒绝访问"]
AuthOK --> |是| LoadTree["加载菜单树"]
LoadTree --> FilterVisible["过滤可见菜单"]
FilterVisible --> FilterActive["过滤启用菜单"]
FilterActive --> SortOrder["按排序字段排序"]
SortOrder --> BuildTree["构建菜单树"]
BuildTree --> ReturnMenu["返回菜单数据"]
Deny --> End([结束])
ReturnMenu --> End
style Start fill:#e1f5fe
style End fill:#ffebee
style Deny fill:#ffebee
```
**图表来源**
- [menu_service.py](file://backend/app/services/menu_service.py#L16-L29)
- [security.py](file://backend/app/core/security.py#L85-L91)
### 菜单排序机制
系统支持多维度排序控制:
1. **主排序**: `sort_order` 字段,数值越小优先级越高
2. **次排序**: `id` 字段,确保相同排序值的稳定性
3. **层级排序**: 顶级菜单优先于子菜单
**章节来源**
- [menu_service.py](file://backend/app/services/menu_service.py#L24-L24)
- [menu_service.py](file://backend/app/services/menu_service.py#L49-L49)
### 菜单可见性控制
系统通过两个独立字段控制菜单的显示状态:
| 控制字段 | 类型 | 默认值 | 作用域 | 影响范围 |
|----------|------|--------|--------|----------|
| is_visible | Boolean | TRUE | 菜单树渲染 | 前端菜单树显示 |
| is_active | Boolean | TRUE | 功能启用 | 菜单功能可用性 |
**章节来源**
- [menu_service.py](file://backend/app/services/menu_service.py#L20-L21)
- [schemas.py](file://backend/app/schemas/schemas.py#L600-L601)
### 菜单与功能权限关联
系统通过 `permission` 字段实现菜单与功能权限的关联:
```mermaid
erDiagram
MENUS {
int id PK
int parent_id FK
enum menu_type
string menu_name
string menu_icon
string path
string component
string permission
int sort_order
boolean is_visible
boolean is_active
datetime created_at
datetime updated_at
}
USERS {
int id PK
string username UK
string password_hash
string role
boolean is_active
datetime last_login
datetime created_at
datetime updated_at
}
USER_PERMISSIONS {
int user_id FK
string permission
boolean granted
datetime granted_at
}
MENUS ||--o{ MENUS : "parent_id -> id"
USERS ||--o{ USER_PERMISSIONS : "has"
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L347-L373)
- [security.py](file://backend/app/core/security.py#L94-L109)
**章节来源**
- [models.py](file://backend/app/models/models.py#L358-L358)
- [schemas.py](file://backend/app/schemas/schemas.py#L598-L598)
### 前端菜单管理界面
前端提供了完整的菜单管理功能:
```mermaid
sequenceDiagram
participant Admin as 管理员
participant View as 菜单管理界面
participant API as 菜单API
participant Service as 菜单服务
participant DB as 数据库
Admin->>View : 打开菜单管理页面
View->>API : 加载菜单列表
API->>Service : get_list()
Service->>DB : 查询菜单
DB-->>Service : 菜单数据
Service-->>API : 菜单列表
API-->>View : 返回数据
View-->>Admin : 显示菜单表格
Admin->>View : 新建菜单
View->>API : create_menu()
API->>Service : create()
Service->>DB : 插入菜单
DB-->>Service : 成功
Service-->>API : 菜单对象
API-->>View : 返回结果
View-->>Admin : 显示成功消息
```
**图表来源**
- [Menus.vue](file://frontend/src/views/system/Menus.vue#L144-L152)
- [menu.js](file://frontend/src/api/menu.js#L18-L21)
**章节来源**
- [Menus.vue](file://frontend/src/views/system/Menus.vue#L1-L265)
- [menu.js](file://frontend/src/api/menu.js#L1-L37)
## 依赖分析
系统菜单功能涉及多个组件间的复杂依赖关系:
```mermaid
graph TB
subgraph "数据层"
MenuModel[Menu模型]
MenuType[MenuType枚举]
end
subgraph "业务层"
MenuService[MenuService]
Security[安全模块]
end
subgraph "接口层"
MenuAPI[菜单API]
Schema[数据模式]
end
subgraph "表现层"
Frontend[前端界面]
Router[Vue Router]
end
MenuAPI --> MenuService
MenuService --> MenuModel
MenuService --> Security
MenuAPI --> Schema
Frontend --> MenuAPI
Router --> Frontend
MenuModel --> MenuType
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L341-L345)
- [models.py](file://backend/app/models/models.py#L347-L373)
- [menu_service.py](file://backend/app/services/menu_service.py#L1-L137)
- [menus.py](file://backend/app/api/v1/menus.py#L1-L164)
**章节来源**
- [models.py](file://backend/app/models/models.py#L341-L345)
- [models.py](file://backend/app/models/models.py#L347-L373)
- [menu_service.py](file://backend/app/services/menu_service.py#L1-L137)
- [menus.py](file://backend/app/api/v1/menus.py#L1-L164)
## 性能考虑
### 数据库索引优化
系统为菜单表建立了多个关键索引以提升查询性能:
| 索引名称 | 字段组合 | 用途 | 性能影响 |
|----------|----------|------|----------|
| idx_menu_parent | parent_id | 父子关系查询 | 快速定位子菜单 |
| idx_menu_type | menu_type | 类型过滤查询 | 快速筛选菜单类型 |
| idx_menu_visible | is_visible | 可见性过滤 | 快速筛选显示菜单 |
### 查询优化策略
1. **延迟加载**: 使用 `selectinload` 优化N+1查询问题
2. **条件过滤**: 在服务层统一处理查询条件
3. **排序优化**: 利用复合索引支持排序查询
### 前端性能优化
1. **菜单树缓存**: 避免重复加载相同的菜单树
2. **懒加载**: 路由组件按需加载
3. **虚拟滚动**: 大数据量时使用虚拟滚动
## 故障排除指南
### 常见问题及解决方案
| 问题类型 | 症状 | 可能原因 | 解决方案 |
|----------|------|----------|----------|
| 菜单不显示 | 菜单树为空 | is_visible=false 或 is_active=false | 检查菜单状态字段 |
| 菜单排序异常 | 菜单顺序错误 | sort_order字段冲突 | 重新设置排序值 |
| 子菜单无法删除 | 删除报错 | 存在子菜单依赖 | 先删除子菜单再删除父菜单 |
| 权限控制失效 | 无权限访问 | permission字段缺失 | 添加正确的权限标识符 |
### 调试工具
1. **数据库查询**: 使用SQL查询验证菜单状态
2. **API测试**: 使用Postman测试菜单接口
3. **浏览器调试**: 检查前端控制台错误
**章节来源**
- [menu_service.py](file://backend/app/services/menu_service.py#L86-L98)
- [security.py](file://backend/app/core/security.py#L94-L109)
## 结论
系统菜单字段设计体现了良好的软件工程实践,通过清晰的数据模型、完善的权限控制和高效的查询机制,实现了灵活的菜单管理功能。自引用的树形结构设计支持复杂的菜单层级,而权限标识符则为细粒度的权限控制提供了基础。
系统的关键优势包括:
- **灵活性**: 支持无限层级的菜单结构
- **可扩展性**: 易于添加新的菜单类型和字段
- **安全性**: 多层次的权限控制机制
- **易用性**: 完整的前端管理界面
未来可以考虑的改进方向:
- 增加菜单访问日志功能
- 实现菜单模板化管理
- 添加菜单权限继承机制
- 优化大数据量场景下的性能表现

View File

@@ -0,0 +1,454 @@
# 绩效计划字段
<cite>
**本文档引用的文件**
- [models.py](file://backend/app/models/models.py)
- [performance_plans.py](file://backend/app/api/v1/performance_plans.py)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [create_plan_tables.py](file://backend/create_plan_tables.py)
- [001_initial.py](file://backend/alembic/versions/001_initial.py)
- [002_template.py](file://backend/alembic/versions/002_template.py)
- [database.md](file://docs/database.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文件为医院绩效系统中绩效计划相关字段的详细数据字典,涵盖以下核心实体:
- 绩效计划表PerformancePlan
- 计划层级PlanLevel
- 计划状态PlanStatus
- 计划指标关联表PlanKpiRelation
文档详细说明了计划层级结构、计划审批流程、指标权重分配等相关字段,并包含计划执行跟踪和状态管理的字段约束。同时提供计划与指标关联关系的数据字典说明,以及计划版本管理和变更追踪的字段设计。
## 项目结构
该系统采用典型的三层架构设计:
- API层处理HTTP请求和响应
- 服务层:实现业务逻辑和工作流控制
- 数据模型层:定义数据库表结构和关系
```mermaid
graph TB
subgraph "API层"
API[performance_plans.py]
end
subgraph "服务层"
Service[performance_plan_service.py]
end
subgraph "模型层"
Models[models.py]
Schemas[schemas.py]
end
subgraph "数据库"
DB[(SQLite/PostgreSQL)]
end
API --> Service
Service --> Models
Models --> DB
Schemas --> API
```
**图表来源**
- [performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L310)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L1-L342)
- [models.py](file://backend/app/models/models.py#L270-L339)
## 核心组件
### 绩效计划表PerformancePlan
绩效计划表是整个绩效管理体系的核心实体,用于存储各级别(医院级、科室级、个人级)的绩效计划信息。
#### 基础字段定义
| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | Integer | 主键, 自增 | 计划唯一标识符 |
| plan_name | String(200) | 非空 | 计划名称 |
| plan_code | String(50) | 唯一, 非空 | 计划编码,全局唯一 |
| plan_level | Enum | 非空 | 计划层级hospital/department/individual |
| plan_year | Integer | 非空 | 计划年度2000-2100 |
| plan_month | Integer | 可空 | 计划月份1-12仅月度计划使用 |
| plan_type | String(20) | 默认 annual | 计划类型annual/monthly |
| department_id | Integer | 外键 | 所属科室ID |
| staff_id | Integer | 外键 | 责任人ID |
| parent_plan_id | Integer | 外键 | 上级计划ID支持层级结构 |
| description | Text | 可空 | 计划描述 |
| strategic_goals | Text | 可空 | 战略目标 |
| key_initiatives | Text | 可空 | 关键举措 |
| status | Enum | 默认 draft | 计划状态draft/pending/approved/rejected/active/completed/cancelled |
| submitter_id | Integer | 外键 | 提交人ID |
| submit_time | DateTime | 可空 | 提交时间 |
| approver_id | Integer | 外键 | 审批人ID |
| approve_time | DateTime | 可空 | 审批时间 |
| approve_remark | Text | 可空 | 审批意见 |
| version | Integer | 默认 1 | 版本号,用于版本管理 |
| is_active | Boolean | 默认 TRUE | 是否启用 |
| created_at | DateTime | 默认当前时间 | 创建时间 |
| updated_at | DateTime | 默认当前时间 | 更新时间 |
#### 索引设计
- idx_plan_level按计划层级查询优化
- idx_plan_year按年度查询优化
- idx_plan_department按科室查询优化
- idx_plan_status按状态查询优化
### 计划层级PlanLevel
计划层级枚举定义了绩效计划的组织层次结构:
```mermaid
classDiagram
class PlanLevel {
+hospital : "医院级"
+department : "科室级"
+individual : "个人级"
}
class PerformancePlan {
+plan_level : PlanLevel
+parent_plan_id : int
+child_plans : PerformancePlan[]
}
PerformancePlan --> PlanLevel : "使用"
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L263-L268)
- [models.py](file://backend/app/models/models.py#L277-L304)
### 计划状态PlanStatus
计划状态枚举定义了完整的审批和执行生命周期:
```mermaid
stateDiagram-v2
[*] --> 草稿
草稿 --> 待审批 : "提交"
待审批 --> 已批准 : "审批通过"
待审批 --> 已驳回 : "审批驳回"
已批准 --> 执行中 : "激活"
已批准 --> 已取消 : "取消"
执行中 --> 已完成 : "完成"
执行中 --> 已取消 : "取消"
已完成 --> [*]
已取消 --> [*]
已驳回 --> [*]
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L233-L242)
### 计划指标关联表PlanKpiRelation
计划指标关联表建立了计划与具体考核指标之间的多对多关系,支持每个指标在不同计划中的差异化配置。
#### 关联字段定义
| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | Integer | 主键, 自增 | 关联关系唯一标识符 |
| plan_id | Integer | 外键, 非空 | 关联的计划ID |
| indicator_id | Integer | 外键, 非空 | 关联的指标ID |
| target_value | Decimal(10,2) | 可空 | 目标值 |
| target_unit | String(50) | 可空 | 目标值单位 |
| weight | Decimal(5,2) | 默认 1.0 | 权重0-100 |
| scoring_method | String(50) | 可空 | 评分方法 |
| scoring_params | Text | 可空 | 评分参数JSON格式 |
| remark | Text | 可空 | 备注 |
| created_at | DateTime | 默认当前时间 | 创建时间 |
| updated_at | DateTime | 默认当前时间 | 更新时间 |
#### 关联关系
- 一对多:一个计划可以关联多个指标
- 一对多:一个指标可以出现在多个计划中
- 唯一约束:同一计划下的指标必须唯一
**章节来源**
- [models.py](file://backend/app/models/models.py#L314-L339)
- [schemas.py](file://backend/app/schemas/schemas.py#L481-L517)
## 架构概览
系统采用RESTful API设计支持完整的CRUD操作和业务流程控制
```mermaid
sequenceDiagram
participant Client as "客户端"
participant API as "API层"
participant Service as "服务层"
participant Model as "模型层"
participant DB as "数据库"
Client->>API : GET /plans/{plan_id}
API->>Service : get_by_id(plan_id)
Service->>Model : 查询PerformancePlan
Model->>DB : SQL查询
DB-->>Model : 返回结果
Model-->>Service : PerformancePlan对象
Service-->>API : 格式化响应
API-->>Client : JSON数据
Note over Client,DB : 审批流程示例
Client->>API : POST /plans/{plan_id}/approve
API->>Service : approve(approver_id, approved, remark)
Service->>Model : 更新状态和审批信息
Model->>DB : 更新操作
DB-->>Model : 确认更新
Model-->>Service : 更新结果
Service-->>API : 审批结果
API-->>Client : 审批状态
```
**图表来源**
- [performance_plans.py](file://backend/app/api/v1/performance_plans.py#L194-L241)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L144-L182)
## 详细组件分析
### 计划层级结构
系统支持三级层级结构通过parent_plan_id字段实现自关联
```mermaid
graph TD
HospitalPlan["医院级计划<br/>parent_plan_id: NULL"]
DeptPlan1["科室级计划<br/>parent_plan_id: 医院级计划ID"]
DeptPlan2["科室级计划<br/>parent_plan_id: 医院级计划ID"]
IndividualPlan1["个人级计划<br/>parent_plan_id: 科室级计划ID"]
IndividualPlan2["个人级计划<br/>parent_plan_id: 科室级计划ID"]
HospitalPlan --> DeptPlan1
HospitalPlan --> DeptPlan2
DeptPlan1 --> IndividualPlan1
DeptPlan1 --> IndividualPlan2
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L283-L301)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L319-L341)
### 计划审批流程
审批流程严格遵循状态机设计,确保业务合规性:
```mermaid
flowchart TD
Start([开始]) --> Draft["草稿状态<br/>DRAFT"]
Draft --> Submit["提交申请<br/>SUBMIT"]
Submit --> Pending["待审批<br/>PENDING"]
Pending --> Approve{"审批决定"}
Approve --> |通过| Approved["已批准<br/>APPROVED"]
Approve --> |驳回| Rejected["已驳回<br/>REJECTED"]
Approved --> Activate["激活计划<br/>ACTIVE"]
Activate --> Completed["完成<br/>COMPLETED"]
Rejected --> End([结束])
Completed --> End
Active --> End
```
**图表来源**
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L131-L182)
### 指标权重分配
指标权重分配支持动态配置,每个计划可以为相同指标设置不同的权重:
#### 权重约束
- 权重范围0-100
- 总权重同一计划内所有指标权重之和通常为100%
- 动态调整:支持运行时修改权重分配
#### 评分参数
支持JSON格式的评分参数
```json
{
"threshold": 90,
"bonus": 1.2,
"penalty": 0.8
}
```
**章节来源**
- [schemas.py](file://backend/app/schemas/schemas.py#L486-L488)
- [models.py](file://backend/app/models/models.py#L323-L325)
### 计划执行跟踪
系统提供完整的过程跟踪机制:
#### 时间戳管理
- created_at记录创建时间
- updated_at自动更新时间戳
- submit_time提交时间
- approve_time审批时间
#### 版本管理
- version字段支持版本追踪
- is_active控制计划启用状态
- 支持历史版本对比
**章节来源**
- [models.py](file://backend/app/models/models.py#L288-L296)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L120-L128)
### 计划与指标关联关系
关联关系通过PlanKpiRelation表实现支持灵活的配置
```mermaid
erDiagram
PERFORMANCE_PLANS {
int id PK
string plan_name
int plan_year
enum plan_level
int department_id FK
int staff_id FK
}
PLAN_KPI_RELATIONS {
int id PK
int plan_id FK
int indicator_id FK
decimal weight
decimal target_value
string target_unit
}
INDICATORS {
int id PK
string name
string code
enum indicator_type
decimal weight
}
PERFORMANCE_PLANS ||--o{ PLAN_KPI_RELATIONS : "包含"
INDICATORS ||--o{ PLAN_KPI_RELATIONS : "被包含"
```
**图表来源**
- [models.py](file://backend/app/models/models.py#L270-L339)
## 依赖关系分析
系统采用清晰的分层依赖关系:
```mermaid
graph LR
subgraph "外部依赖"
FastAPI[FastAPI框架]
SQLAlchemy[SQLAlchemy ORM]
Alembic[Alembic迁移]
end
subgraph "内部模块"
API[API层]
Service[服务层]
Models[模型层]
Schemas[模式层]
end
FastAPI --> API
SQLAlchemy --> Models
Alembic --> Models
API --> Service
Service --> Models
Service --> Schemas
Models --> Schemas
```
**图表来源**
- [performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L18)
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L1-L13)
### 数据库迁移
系统使用Alembic进行数据库版本管理支持增量升级和降级
#### 迁移版本
- 001_initial初始版本创建基础表结构
- 002_template添加指标模板相关表
#### 迁移特性
- 自动检测模型变化
- 支持安全的数据库演进
- 提供回滚能力
**章节来源**
- [001_initial.py](file://backend/alembic/versions/001_initial.py#L21-L183)
- [002_template.py](file://backend/alembic/versions/002_template.py#L21-L96)
## 性能考虑
### 查询优化
1. **索引策略**
- 多列组合索引用于常用查询条件
- 唯一索引确保数据完整性
- 选择性索引提升查询性能
2. **查询优化**
- 使用selectinload避免N+1查询问题
- 分页查询支持大数据集
- 条件查询减少数据传输
### 缓存策略
- 配置适当的缓存层
- 对静态配置数据进行缓存
- 利用数据库连接池
## 故障排除指南
### 常见问题
1. **计划状态异常**
- 检查状态转换规则
- 验证审批权限
- 确认时间戳完整性
2. **指标关联问题**
- 验证唯一性约束
- 检查权重分配合理性
- 确认评分参数格式
3. **数据库连接问题**
- 检查连接池配置
- 验证迁移版本一致性
- 监控数据库性能
### 调试建议
1. **日志记录**
- 启用详细的API日志
- 记录关键业务操作
- 监控错误堆栈
2. **测试策略**
- 单元测试覆盖核心逻辑
- 集成测试验证流程
- 性能测试评估瓶颈
**章节来源**
- [performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L131-L182)
- [performance_plans.py](file://backend/app/api/v1/performance_plans.py#L194-L241)
## 结论
本数据字典详细描述了医院绩效系统中绩效计划相关的核心字段和业务逻辑。系统采用清晰的分层架构,支持完整的计划生命周期管理,包括:
- 多层级的组织结构支持
- 完整的审批流程控制
- 灵活的指标权重配置
- 详细的执行跟踪机制
- 强大的版本管理功能
通过合理的数据库设计和API接口系统能够有效支撑医院的绩效管理体系为不同层级的组织提供个性化的绩效管理解决方案。

View File

@@ -0,0 +1,364 @@
# 考核相关字段
<cite>
**本文引用的文件**
- [models.py](file://backend/app/models/models.py)
- [schemas.py](file://backend/app/schemas/schemas.py)
- [assessments.py](file://backend/app/api/v1/assessments.py)
- [assessment_service.py](file://backend/app/services/assessment_service.py)
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue)
- [assessment.js](file://frontend/src/api/assessment.js)
- [stats.py](file://backend/app/api/v1/stats.py)
- [database.md](file://docs/数据库设计.md)
- [详细设计文档.md](file://docs/详细设计文档.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件聚焦于“考核相关字段”的数据字典与业务规则,覆盖以下对象:
- 考核记录表Assessment
- 考核明细表AssessmentDetail
- 考核状态枚举AssessmentStatus
- 考核周期、状态流转、评分计算、完整性校验与一致性保障机制
- 考核结果计算与统计分析相关字段说明
目标是帮助开发者与业务人员快速理解字段含义、取值范围、约束条件、状态转换与计算逻辑,并提供排障建议与最佳实践。
## 项目结构
后端采用分层架构API 控制器 → 服务层 → ORM 模型;前端通过 API 与后端交互,展示与操作考核流程。
```mermaid
graph TB
FE["前端视图<br/>Assessments.vue / AssessmentDetail.vue"] --> API["FastAPI 路由<br/>assessments.py"]
API --> SVC["服务层<br/>assessment_service.py"]
SVC --> DB["SQLAlchemy 模型<br/>models.py"]
DB --> SQL["数据库表<br/>assessments / assessment_details"]
API --> STATS["统计接口<br/>stats.py"]
```
图表来源
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L1-L96)
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
- [models.py](file://backend/app/models/models.py#L149-L202)
- [stats.py](file://backend/app/api/v1/stats.py#L1-L242)
章节来源
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L1-L96)
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
- [models.py](file://backend/app/models/models.py#L149-L202)
- [stats.py](file://backend/app/api/v1/stats.py#L1-L242)
## 核心组件
- Assessment考核记录表
- 关键字段period_year、period_month、period_type、total_score、weighted_score、status、assessor_id、reviewer_id、submit_time、review_time、remark
- 业务规则:按月度周期生成记录;总分与加权得分由明细计算;状态驱动流程推进
- AssessmentDetail考核明细表
- 关键字段assessment_id、indicator_id、actual_value、score、evidence、remark
- 业务规则:每个指标一条明细;得分与佐证材料可编辑(草稿态)
- AssessmentStatus考核状态枚举
- 草稿draft、已提交submitted、已审核reviewed、已确认finalized、已驳回rejected
章节来源
- [models.py](file://backend/app/models/models.py#L149-L202)
- [schemas.py](file://backend/app/schemas/schemas.py#L31-L36)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L70-L108)
## 架构总览
考核流程由前端触发,经 API 路由进入服务层,持久化到数据库模型,最终支持统计分析。
```mermaid
sequenceDiagram
participant FE as "前端"
participant API as "API 路由"
participant SVC as "服务层"
participant DB as "模型/数据库"
FE->>API : "提交/审核/确认"
API->>SVC : "调用对应方法"
SVC->>DB : "读取/更新 Assessment/Details"
DB-->>SVC : "返回实体"
SVC-->>API : "返回处理结果"
API-->>FE : "返回响应"
```
图表来源
- [assessments.py](file://backend/app/api/v1/assessments.py#L105-L145)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L158-L205)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L227-L255)
## 详细组件分析
### Assessment考核记录表数据字典
- 字段定义与约束
- id主键自增整数
- staff_id外键指向员工必填
- period_year整数必填年份范围约束见后端校验
- period_month整数必填1-12
- period_type字符串默认 monthly
- total_score数值总分创建时由明细得分求和
- weighted_score数值加权得分按指标权重加权求和
- status状态枚举默认 draft
- assessor_id外键考核人
- reviewer_id外键审核人
- submit_time提交时间
- review_time审核时间
- remark备注
- created_at/updated_at时间戳
- 业务规则
- 考核周期:以年/月为单位period_type 默认 monthly
- 总分与加权得分:由明细聚合计算
- 状态流转:草稿 → 已提交 → 已审核 → 已确认;或草稿 → 已驳回
- 时间字段:提交/审核时写入对应时间
- 约束与索引
- 索引staff_id、period_year+period_month、status
- 约束:状态枚举值限定
章节来源
- [models.py](file://backend/app/models/models.py#L149-L178)
- [schemas.py](file://backend/app/schemas/schemas.py#L220-L257)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L70-L108)
- [database.md](file://docs/数据库设计.md#L159-L177)
### AssessmentDetail考核明细表数据字典
- 字段定义与约束
- id主键自增整数
- assessment_id外键必填
- indicator_id外键必填
- actual_value实际值可选
- score数值得分创建默认 0
- evidence佐证材料可选
- remark备注
- created_at/updated_at时间戳
- 业务规则
- 每个指标一条明细
- 草稿态允许编辑得分与佐证材料
- 服务层在创建/更新时重新计算总分与加权得分
- 约束与索引
- 索引assessment_id、indicator_id
章节来源
- [models.py](file://backend/app/models/models.py#L181-L202)
- [schemas.py](file://backend/app/schemas/schemas.py#L196-L218)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L70-L108)
### AssessmentStatus考核状态枚举数据字典
- 枚举值
- draft草稿
- submitted已提交
- reviewed已审核
- finalized已确认
- rejected已驳回
- 状态转换规则
- 草稿 → 已提交(提交)
- 已提交 → 已审核 或 已驳回(审核)
- 已审核 → 已确认(确认)
- 草稿/已驳回 → 可更新(更新时仅允许草稿或已驳回)
章节来源
- [models.py](file://backend/app/models/models.py#L45-L52)
- [schemas.py](file://backend/app/schemas/schemas.py#L31-L36)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L158-L205)
### 考核周期与状态流转
- 考核周期
- 默认周期类型为 monthly
- 不同指标模板可配置周期(如年度、季度),但记录层面以年/月为单位
- 状态流转
- 提交:将状态从草稿改为已提交并记录提交时间
- 审核:将状态从已提交改为已审核或已驳回,并记录审核时间
- 确认:将状态从已审核改为已确认
```mermaid
stateDiagram-v2
[*] --> 草稿
草稿 --> 已提交 : "提交"
已提交 --> 已审核 : "审核通过"
已提交 --> 已驳回 : "审核驳回"
已审核 --> 已确认 : "确认"
已确认 --> [*]
已驳回 --> 草稿 : "重新编辑"
```
图表来源
- [assessment_service.py](file://backend/app/services/assessment_service.py#L158-L205)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L57-L63)
章节来源
- [assessment_service.py](file://backend/app/services/assessment_service.py#L158-L205)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L57-L63)
### 评分计算与字段约束
- 总分计算
- 总分 = 明细得分之和
- 加权得分计算
- 加权得分 = Σ(明细得分 × 指标权重)
- 权重来自指标表(指标权重 > 0
- 字段约束
- 指标权重必须大于 0数据库 CheckConstraint
- 年度/月份范围在 Pydantic 层面有限制
- 得分字段有最小值 0 的约束
```mermaid
flowchart TD
Start(["创建/更新考核"]) --> LoadDetails["加载明细与指标"]
LoadDetails --> SumScore["总分 = Σ 明细.score"]
LoadDetails --> WeightCalc["加权得分 = Σ 明细.score × 指标.weight"]
SumScore --> SaveAssessment["保存 Assessment"]
WeightCalc --> SaveAssessment
SaveAssessment --> End(["完成"])
```
图表来源
- [assessment_service.py](file://backend/app/services/assessment_service.py#L70-L108)
- [models.py](file://backend/app/models/models.py#L149-L178)
章节来源
- [assessment_service.py](file://backend/app/services/assessment_service.py#L70-L108)
- [models.py](file://backend/app/models/models.py#L149-L178)
### 完整性检查与一致性保障
- 前端约束
- 草稿态允许编辑得分与佐证材料,得分上限为指标最大分值
- 状态按钮随状态变化显示
- 后端约束
- 状态流转严格限制(仅草稿/已驳回可更新;仅已提交可审核;仅已审核可确认)
- 批量创建时按年/月/员工去重,避免重复记录
- 指标权重 > 0 的数据库约束
- 统计一致性
- 统计接口基于当前周期与部门维度聚合,确保跨部门/跨周期对比一致
章节来源
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L57-L96)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L57-L63)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L208-L262)
- [models.py](file://backend/app/models/models.py#L144-L146)
### 考核结果计算与统计分析
- 计算字段
- total_score总分
- weighted_score加权得分
- 统计接口
- 科室绩效统计、周期统计、趋势分析、排名等
- 前端展示平均分、总人数、奖金汇总等
章节来源
- [stats.py](file://backend/app/api/v1/stats.py#L36-L242)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L31-L74)
## 依赖关系分析
- 模型层
- Assessment ←→ AssessmentDetail一对多
- Assessment ←→ Staff多对一
- AssessmentDetail ←→ Indicator多对一
- 服务层
- 服务层负责状态流转、计算与批量创建
- API 层
- 提供 CRUD、提交、审核、确认、批量创建等接口
- 前端
- 视图根据状态动态渲染按钮与输入框
```mermaid
classDiagram
class Assessment {
+int id
+int staff_id
+int period_year
+int period_month
+string period_type
+float total_score
+float weighted_score
+AssessmentStatus status
+int assessor_id
+int reviewer_id
+datetime submit_time
+datetime review_time
+string remark
}
class AssessmentDetail {
+int id
+int assessment_id
+int indicator_id
+float actual_value
+float score
+string evidence
+string remark
}
class Staff
class Indicator
Assessment "1" o-- "*" AssessmentDetail : "明细"
Assessment "many" --> "1" Staff : "员工"
AssessmentDetail "many" --> "1" Indicator : "指标"
```
图表来源
- [models.py](file://backend/app/models/models.py#L149-L202)
章节来源
- [models.py](file://backend/app/models/models.py#L149-L202)
## 性能考量
- 查询性能
- 为 staff_id、period_year+period_month、status 建立索引,有利于筛选与排序
- 写入性能
- 批量创建时按部门与周期预检,避免重复记录
- 计算性能
- 总分与加权得分在服务层一次性计算,减少多次往返
- 建议
- 对高频查询增加复合索引
- 对大表进行分区或归档策略(如历史周期)
章节来源
- [models.py](file://backend/app/models/models.py#L174-L178)
- [assessment_service.py](file://backend/app/services/assessment_service.py#L208-L262)
## 故障排查指南
- 常见问题
- 状态不可变更:仅草稿/已驳回可更新;仅已提交可审核;仅已审核可确认
- 无法提交/审核/确认:检查当前状态是否符合预期
- 批量创建重复:系统按 staff_id+period_year+period_month 去重
- 指标权重异常:数据库约束要求权重 > 0
- 前端定位
- 查看状态标签与按钮可用性
- 校验得分上限与佐证材料输入
- 后端定位
- 检查服务层状态判断与时间字段写入
- 核对明细聚合逻辑与指标权重
章节来源
- [assessment_service.py](file://backend/app/services/assessment_service.py#L158-L205)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L57-L63)
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L57-L96)
## 结论
本数据字典明确了考核记录与明细的核心字段、状态流转、评分计算与约束条件,并结合前后端实现展示了完整的业务闭环。遵循上述规则可确保数据一致性与流程可控性,同时为后续扩展(如维度得分、模板周期等)提供清晰边界。
## 附录
- API 路由与前端交互
- 列表/详情/创建/更新/提交/审核/确认/批量创建
- 前端通过 assessment.js 发起请求Assessments.vue 与 AssessmentDetail.vue 控制 UI 行为
章节来源
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [assessment.js](file://frontend/src/api/assessment.js#L1-L50)
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L1-L96)