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