20 KiB
20 KiB
绩效考核管理
**本文档引用的文件** - [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py) - [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py) - [backend/app/models/models.py](file://backend/app/models/models.py) - [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py) - [backend/app/api/v1/indicators.py](file://backend/app/api/v1/indicators.py) - [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue) - [frontend/src/views/assessment/AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue) - [frontend/src/api/assessment.js](file://frontend/src/api/assessment.js) - [frontend/src/api/indicator.js](file://frontend/src/api/indicator.js) - [docs/api.md](file://docs/api.md) - [docs/详细设计.md](file://docs/详细设计.md)目录
简介
本模块聚焦于医院绩效系统的“绩效考核管理”,围绕考核流程(草稿→提交→审核→确认→完成)、考核记录与明细处理、批量创建、平衡计分卡(财务、客户、内部流程、学习与成长)应用、状态管理与审批控制、数据统计与报表、以及规则配置与权重计算展开。文档同时提供业务流程图、界面操作说明与API接口规范,帮助开发者与使用者高效理解与使用。
项目结构
后端采用FastAPI + SQLAlchemy异步ORM,前端采用Vue 3 + Element Plus,数据模型、服务层与API路由清晰分离,前端通过封装的API模块调用后端接口。
graph TB
subgraph "前端"
FE_List["Assessments.vue<br/>考核列表视图"]
FE_Detail["AssessmentDetail.vue<br/>考核详情视图"]
FE_API_A["assessment.js<br/>考核API封装"]
FE_API_I["indicator.js<br/>指标API封装"]
end
subgraph "后端"
API["assessments.py<br/>考核API路由"]
SVC["assessment_service.py<br/>考核服务"]
MODELS["models.py<br/>数据模型"]
SCHEMAS["schemas.py<br/>数据模式"]
IND_API["indicators.py<br/>指标API路由"]
end
FE_List --> FE_API_A
FE_Detail --> FE_API_A
FE_List --> FE_API_I
FE_API_A --> API
FE_API_I --> IND_API
API --> SVC
SVC --> MODELS
SVC --> SCHEMAS
IND_API --> SVC
图表来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/models/models.py
- backend/app/schemas/schemas.py
- backend/app/api/v1/indicators.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
- frontend/src/api/assessment.js
- frontend/src/api/indicator.js
章节来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/models/models.py
- backend/app/schemas/schemas.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
- frontend/src/api/assessment.js
- frontend/src/api/indicator.js
核心组件
- 数据模型
- Assessment:考核记录,包含周期、总分、加权得分、状态、关联人员与明细。
- AssessmentDetail:考核明细,记录每个指标的实际值、得分、佐证材料等。
- Indicator:考核指标,包含类型、平衡计分卡维度、权重、最高分、目标值等。
- AssessmentStatus:枚举状态(草稿、已提交、已审核、已确认、已驳回)。
- 服务层
- AssessmentService:提供列表查询、详情加载、创建、更新、提交、审核、确认、批量创建等核心能力。
- API层
- 路由提供列表、详情、创建、更新、提交、审核、确认、批量创建等REST接口。
- 前端
- Assessments.vue:列表页,支持筛选、分页、批量创建、状态流转。
- AssessmentDetail.vue:详情页,支持草稿态编辑、保存、提交、审核、确认。
- assessment.js/indicator.js:前端API封装,统一调用后端接口。
章节来源
- backend/app/models/models.py
- backend/app/models/models.py
- backend/app/models/models.py
- backend/app/services/assessment_service.py
- backend/app/api/v1/assessments.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
- frontend/src/api/assessment.js
- frontend/src/api/indicator.js
架构总览
后端采用分层架构:API路由负责参数解析与鉴权,服务层封装业务逻辑,模型层映射数据库表结构。前端通过HTTP请求与后端交互,完成考核流程的可视化操作。
graph TB
Client["浏览器/移动端"] --> FE["前端Vue应用"]
FE --> API["FastAPI路由层"]
API --> Service["服务层"]
Service --> DB["数据库"]
Service --> Models["数据模型"]
Service --> Schemas["数据模式"]
图表来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/models/models.py
- backend/app/schemas/schemas.py
详细组件分析
考核流程管理(草稿→提交→审核→确认→完成)
- 流程状态
- 草稿:可编辑明细与得分。
- 已提交:等待审核。
- 已审核:等待确认。
- 已确认:完成,不可再编辑。
- 已驳回:退回草稿,可重新提交。
- 接口流转
- 草稿 → 提交:POST /assessments/{id}/submit
- 已提交 → 审核:POST /assessments/{id}/review(批准/驳回)
- 已审核 → 确认:POST /assessments/{id}/finalize
- 已确认 → 完成:不可逆
- 前端操作
- 列表页仅显示状态与操作按钮,按钮随状态变化。
- 详情页支持草稿态编辑与保存,提交后进入审核流程。
stateDiagram-v2
[*] --> 草稿
草稿 --> 已提交 : "提交"
已提交 --> 已审核 : "审核通过"
已提交 --> 草稿 : "审核驳回"
已审核 --> 已确认 : "确认"
已确认 --> [*]
图表来源
- backend/app/models/models.py
- backend/app/api/v1/assessments.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
章节来源
- backend/app/models/models.py
- backend/app/api/v1/assessments.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
考核记录管理与明细处理
- 记录管理
- 创建:POST /assessments(携带明细数组)
- 更新:PUT /assessments/{id}(仅允许草稿或已驳回状态)
- 详情:GET /assessments/{id}(包含明细与指标名称)
- 明细字段
- 指标ID、实际值、得分、佐证材料、备注
- 加权得分计算
- 总分:明细得分求和
- 加权得分:∑(明细得分 × 指标权重)
flowchart TD
Start(["创建/更新考核"]) --> CalcTotal["计算总分<br/>sum(明细得分)"]
CalcTotal --> LoadIndicators["加载指标权重"]
LoadIndicators --> CalcWeighted["计算加权得分<br/>sum(得分×权重)"]
CalcWeighted --> SaveAssessment["保存考核记录与明细"]
SaveAssessment --> End(["完成"])
图表来源
- backend/app/services/assessment_service.py
- backend/app/services/assessment_service.py
- backend/app/schemas/schemas.py
章节来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/schemas/schemas.py
批量创建功能
- 触发入口:列表页“批量创建”
- 参数:科室ID、年度、月份、指标ID列表
- 逻辑:为该科室当月在职员工逐一创建空明细的考核记录(若不存在)
sequenceDiagram
participant U as "用户"
participant V as "Assessments.vue"
participant A as "assessment.js"
participant R as "assessments.py"
participant S as "assessment_service.py"
U->>V : "点击批量创建"
V->>A : "调用批量创建API"
A->>R : "POST /assessments/batch-create"
R->>S : "batch_create_for_department()"
S->>S : "查询在职员工"
S->>S : "检查是否存在重复"
S->>S : "创建考核记录+明细"
S-->>R : "返回创建数量"
R-->>A : "返回成功响应"
A-->>V : "提示成功并刷新列表"
图表来源
- frontend/src/views/assessment/Assessments.vue
- frontend/src/api/assessment.js
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
章节来源
- frontend/src/views/assessment/Assessments.vue
- frontend/src/api/assessment.js
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
平衡计分卡维度应用
- 指标维度
- 财务(financial)
- 客户(customer)
- 内部流程(internal_process)
- 学习与成长(learning_growth)
- 应用方式
- 指标表包含bs_dimension字段,用于区分维度
- 前端在详情页展示指标类型标签,便于识别维度属性
- 配置建议
- 不同科室类型可选用不同模板或指标组合,体现维度侧重点差异
classDiagram
class Indicator {
+bs_dimension
+weight
+max_score
}
class AssessmentDetail {
+indicator_id
+actual_value
+score
}
Indicator <.. AssessmentDetail : "被引用"
图表来源
章节来源
- backend/app/models/models.py
- backend/app/models/models.py
- frontend/src/views/assessment/AssessmentDetail.vue
状态管理与审批控制
- 状态枚举与流转限制
- 草稿/已驳回:可更新
- 已提交:仅能审核
- 已审核:仅能确认
- 已确认:不可再更改
- 审批接口
- 审核:POST /assessments/{id}/review(批准/驳回)
- 确认:POST /assessments/{id}/finalize
章节来源
- backend/app/models/models.py
- backend/app/services/assessment_service.py
- backend/app/api/v1/assessments.py
数据统计分析与报表
- 指标管理API
- 获取启用指标:GET /indicators/active
- 获取指标列表:GET /indicators
- 报表与统计
- 文档中提供统计接口(如科室统计、趋势分析、分布等),可结合考核数据进行分析
- 建议
- 基于Assessment与AssessmentDetail聚合,生成部门/个人/维度的统计报表
章节来源
考核规则配置、权重计算与结果汇总
- 规则配置
- 指标权重:Indicator.weight
- 最高分:Indicator.max_score
- 计算方法/公式:Indicator.calculation_method
- 权重计算
- 总分:明细得分求和
- 加权得分:∑(明细得分 × 指标权重)
- 结果汇总
- 以Assessment为单位汇总,支持按周期、部门、状态等维度统计
章节来源
- backend/app/models/models.py
- backend/app/models/models.py
- backend/app/services/assessment_service.py
依赖关系分析
graph LR
AssessAPI["assessments.py"] --> AssessSvc["assessment_service.py"]
AssessSvc --> Models["models.py"]
AssessSvc --> Schemas["schemas.py"]
IndAPI["indicators.py"] --> AssessSvc
FEAssess["Assessments.vue"] --> FEAssessAPI["assessment.js"]
FEDetail["AssessmentDetail.vue"] --> FEAssessAPI
FEAssessAPI --> AssessAPI
FEInd["indicator.js"] --> IndAPI
图表来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/models/models.py
- backend/app/schemas/schemas.py
- backend/app/api/v1/indicators.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
- frontend/src/api/assessment.js
- frontend/src/api/indicator.js
章节来源
- backend/app/api/v1/assessments.py
- backend/app/services/assessment_service.py
- backend/app/models/models.py
- backend/app/schemas/schemas.py
- backend/app/api/v1/indicators.py
- frontend/src/views/assessment/Assessments.vue
- frontend/src/views/assessment/AssessmentDetail.vue
- frontend/src/api/assessment.js
- frontend/src/api/indicator.js
性能考虑
- 查询优化
- 列表查询支持按员工、科室、年度、月份、状态过滤,建议在相关列建立索引(如 idx_assessment_staff、idx_assessment_period、idx_assessment_status)。
- 批量创建
- 批量创建时避免重复记录,减少数据库写入压力。
- 前端渲染
- 大列表分页加载,避免一次性渲染过多行。
- 异步处理
- 服务层使用异步会话,适合高并发场景。
章节来源
故障排查指南
- 常见问题
- 状态不允许:仅允许在草稿或已驳回状态下更新;仅允许在已提交状态下审核;仅允许在已审核状态下确认。
- 资源不存在:接口返回404,检查ID或参数。
- 参数错误:检查必填字段与范围(如月份1-12、权重>0)。
- 前端提示
- 使用Element Plus的消息组件提示成功/失败。
- 日志与监控
- 后端日志目录:logs/,可定位异常请求与SQL执行情况。
章节来源
结论
本模块以清晰的流程状态与严格的审批控制为核心,结合平衡计分卡维度与指标权重,实现了从草稿到完成的全流程管理。前后端职责分明,接口规范明确,具备良好的扩展性与可维护性。建议后续完善统计分析与报表模块,并在生产环境增加更完善的日志与监控策略。
附录
业务流程图(概念)
flowchart TD
A["开始"] --> B["创建/编辑考核<br/>草稿态"]
B --> C["提交考核"]
C --> D{"审核通过?"}
D -- "是" --> E["确认考核"]
D -- "否" --> F["退回草稿<br/>可重新提交"]
E --> G["完成"]
F --> C
G --> H["结束"]
[此图为概念流程图,不对应具体代码文件]
界面操作说明
- 列表页
- 支持按科室、考核周期、状态筛选;分页浏览;批量创建;对草稿/已提交/已审核状态显示相应操作按钮。
- 详情页
- 展示基本信息与明细;草稿态可编辑实际值、得分、佐证材料;支持保存、提交、审核、确认等操作。
章节来源
API接口文档(节选)
- 获取考核列表:GET /assessments
- 获取考核详情:GET /assessments/{id}
- 创建考核:POST /assessments
- 更新考核:PUT /assessments/{id}
- 提交考核:POST /assessments/{id}/submit
- 审核考核:POST /assessments/{id}/review
- 确认考核:POST /assessments/{id}/finalize
- 批量创建:POST /assessments/batch-create
- 获取启用指标:GET /indicators/active
章节来源