提交文件
This commit is contained in:
428
.qoder/repowiki/zh/content/数据模型详解/核心数据模型/考核指标模型.md
Normal file
428
.qoder/repowiki/zh/content/数据模型详解/核心数据模型/考核指标模型.md
Normal file
@@ -0,0 +1,428 @@
|
||||
# 考核指标模型
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [models.py](file://backend/app/models/models.py)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py)
|
||||
- [indicators.py](file://backend/app/api/v1/indicators.py)
|
||||
- [indicator_service.py](file://backend/app/services/indicator_service.py)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py)
|
||||
- [001_initial.py](file://backend/alembic/versions/001_initial.py)
|
||||
- [002_template.py](file://backend/alembic/versions/002_template.py)
|
||||
- [init_indicator_templates.py](file://backend/init_indicator_templates.py)
|
||||
- [详细设计文档.md](file://docs/详细设计文档.md)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概览](#架构概览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
|
||||
本文件详细阐述了医院绩效系统中的考核指标模型设计与实现。该模型基于平衡计分卡理论,支持财务、客户、内部流程、学习与成长四个维度,涵盖质量、数量、效率、服务、成本等多种指标类型。系统通过明确的权重管理、评分规则和数据源管理,实现了科学、规范的绩效考核体系。
|
||||
|
||||
## 项目结构
|
||||
|
||||
后端采用分层架构设计,主要包含以下层次:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "表现层"
|
||||
API[API路由层]
|
||||
end
|
||||
subgraph "服务层"
|
||||
IndicatorService[指标服务层]
|
||||
AssessmentService[考核服务层]
|
||||
end
|
||||
subgraph "模型层"
|
||||
Indicator[指标模型]
|
||||
Assessment[考核记录模型]
|
||||
AssessmentDetail[考核明细模型]
|
||||
IndicatorTemplate[指标模板模型]
|
||||
TemplateIndicator[模板指标关联模型]
|
||||
end
|
||||
subgraph "数据层"
|
||||
Database[(数据库)]
|
||||
end
|
||||
API --> IndicatorService
|
||||
API --> AssessmentService
|
||||
IndicatorService --> Indicator
|
||||
AssessmentService --> Assessment
|
||||
AssessmentService --> AssessmentDetail
|
||||
Indicator --> AssessmentDetail
|
||||
IndicatorTemplate --> TemplateIndicator
|
||||
Indicator --> Database
|
||||
Assessment --> Database
|
||||
AssessmentDetail --> Database
|
||||
IndicatorTemplate --> Database
|
||||
TemplateIndicator --> Database
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L117-L146)
|
||||
- [indicators.py](file://backend/app/api/v1/indicators.py#L1-L142)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L1-L438)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L1-L743)
|
||||
|
||||
## 核心组件
|
||||
|
||||
### 指标类型枚举 (IndicatorType)
|
||||
|
||||
系统定义了五种核心指标类型,每种类型都有明确的业务含义和适用场景:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class IndicatorType {
|
||||
<<enumeration>>
|
||||
+quality
|
||||
+quantity
|
||||
+efficiency
|
||||
+service
|
||||
+cost
|
||||
}
|
||||
class BSCDimension {
|
||||
<<enumeration>>
|
||||
+financial
|
||||
+customer
|
||||
+internal_process
|
||||
+learning_growth
|
||||
}
|
||||
class Indicator {
|
||||
+int id
|
||||
+string name
|
||||
+string code
|
||||
+IndicatorType indicator_type
|
||||
+BSCDimension bs_dimension
|
||||
+float weight
|
||||
+float max_score
|
||||
+float target_value
|
||||
+string target_unit
|
||||
+string calculation_method
|
||||
+string assessment_method
|
||||
+string deduction_standard
|
||||
+string data_source
|
||||
+string applicable_dept_types
|
||||
+bool is_veto
|
||||
+bool is_active
|
||||
}
|
||||
Indicator --> IndicatorType : uses
|
||||
Indicator --> BSCDimension : uses
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L54-L61)
|
||||
- [models.py](file://backend/app/models/models.py#L29-L35)
|
||||
- [models.py](file://backend/app/models/models.py#L117-L146)
|
||||
|
||||
### 权重管理机制
|
||||
|
||||
权重是指标体系的核心要素,系统通过以下机制确保权重的合理分配:
|
||||
|
||||
1. **权重范围约束**:权重必须大于0,确保每个指标都有实际意义
|
||||
2. **加权得分计算**:在考核过程中,加权得分 = 指标得分 × 指标权重
|
||||
3. **模板权重继承**:从指标模板中继承权重设置,支持批量配置
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L126-L127)
|
||||
- [models.py](file://backend/app/models/models.py#L144-L145)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L76-L84)
|
||||
|
||||
## 架构概览
|
||||
|
||||
系统采用MVC架构模式,通过清晰的职责分离实现高效的数据处理:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Client as 客户端
|
||||
participant API as API路由
|
||||
participant Service as 服务层
|
||||
participant Model as 模型层
|
||||
participant DB as 数据库
|
||||
Client->>API : GET /indicators
|
||||
API->>Service : get_list()
|
||||
Service->>Model : 查询指标列表
|
||||
Model->>DB : 执行SQL查询
|
||||
DB-->>Model : 返回查询结果
|
||||
Model-->>Service : 返回指标对象
|
||||
Service-->>API : 返回指标数据
|
||||
API-->>Client : JSON响应
|
||||
Note over Client,DB : 数据持久化通过ORM映射
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [indicators.py](file://backend/app/api/v1/indicators.py#L20-L41)
|
||||
- [indicator_service.py](file://backend/app/services/indicator_service.py#L17-L46)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 指标模型设计
|
||||
|
||||
指标模型是整个系统的核心,包含了完整的考核指标定义:
|
||||
|
||||
#### 核心字段设计
|
||||
|
||||
| 字段名 | 类型 | 描述 | 约束条件 |
|
||||
|--------|------|------|----------|
|
||||
| id | Integer | 主键标识 | 自增 |
|
||||
| name | String | 指标名称 | 非空,最大100字符 |
|
||||
| code | String | 指标编码 | 唯一,非空,最大20字符 |
|
||||
| indicator_type | Enum | 指标类型 | 非空,枚举类型 |
|
||||
| bs_dimension | Enum | BSC维度 | 非空,枚举类型 |
|
||||
| weight | Numeric | 权重 | 默认1.0,>0 |
|
||||
| max_score | Numeric | 最高分值 | 默认100.0 |
|
||||
| target_value | Numeric | 目标值 | 可选 |
|
||||
| target_unit | String | 目标值单位 | 可选,最大50字符 |
|
||||
| calculation_method | Text | 计算方法 | 可选 |
|
||||
| assessment_method | Text | 考核方法 | 可选 |
|
||||
| deduction_standard | Text | 扣分标准 | 可选 |
|
||||
| data_source | String | 数据来源 | 可选,最大100字符 |
|
||||
| applicable_dept_types | Text | 适用科室类型 | JSON数组 |
|
||||
| is_veto | Boolean | 一票否决标志 | 默认False |
|
||||
| is_active | Boolean | 启用状态 | 默认True |
|
||||
|
||||
#### 适用科室类型过滤
|
||||
|
||||
系统通过JSON格式存储适用科室类型,支持灵活的科室匹配:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始筛选]) --> GetDeptTypes["获取指标适用科室类型<br/>JSON数组"]
|
||||
GetDeptTypes --> ParseJSON["解析JSON字符串"]
|
||||
ParseJSON --> CompareDept{"匹配当前科室类型?"}
|
||||
CompareDept --> |是| Include["包含在适用范围内"]
|
||||
CompareDept --> |否| Exclude["排除在适用范围外"]
|
||||
Include --> End([结束])
|
||||
Exclude --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L134)
|
||||
- [indicator_service.py](file://backend/app/services/indicator_service.py#L112-L154)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L121-L138)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L153-L163)
|
||||
|
||||
### 一票否决指标处理
|
||||
|
||||
一票否决是系统的重要风控机制,具有以下特点:
|
||||
|
||||
#### 特殊处理逻辑
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始处理指标]) --> CheckVeto{"是否为一票否决指标?"}
|
||||
CheckVeto --> |否| NormalCalc["正常评分计算"]
|
||||
CheckVeto --> |是| VetoCheck["检查否决条件"]
|
||||
VetoCheck --> VetoTrigger{"否决条件触发?"}
|
||||
VetoTrigger --> |是| ZeroScore["直接得分为0分"]
|
||||
VetoTrigger --> |否| NormalCalc
|
||||
NormalCalc --> End([结束])
|
||||
ZeroScore --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L135)
|
||||
- [init_indicator_templates.py](file://backend/init_indicator_templates.py#L194-L195)
|
||||
|
||||
#### 实际应用场景
|
||||
|
||||
在临床手术科室的院感控制指标中,系统设置了"院感控制达标率"作为一票否决指标,确保医疗安全底线。
|
||||
|
||||
**章节来源**
|
||||
- [init_indicator_templates.py](file://backend/init_indicator_templates.py#L180-L196)
|
||||
|
||||
### 计算方法与考核方法的区别
|
||||
|
||||
系统明确区分了两种不同的指标处理方式:
|
||||
|
||||
#### 计算方法 (Calculation Method)
|
||||
- **定义**:用于计算实际值的具体公式或方法
|
||||
- **用途**:从原始数据中提取和计算指标的实际数值
|
||||
- **示例**:`(本期收入 - 同期收入)/同期收入 × 100%`
|
||||
|
||||
#### 考核方法 (Assessment Method)
|
||||
- **定义**:用于验证和确认指标结果的检查方法
|
||||
- **用途**:提供数据验证和审计依据
|
||||
- **示例**:统计报表、现场核查、问卷调查
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L130-L131)
|
||||
|
||||
### 指标与模板的关系
|
||||
|
||||
系统实现了指标与模板的多对多关系,支持灵活的指标配置:
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
INDICATORS {
|
||||
int id PK
|
||||
string code UK
|
||||
string name
|
||||
enum indicator_type
|
||||
enum bs_dimension
|
||||
numeric weight
|
||||
numeric max_score
|
||||
bool is_active
|
||||
}
|
||||
INDICATOR_TEMPLATES {
|
||||
int id PK
|
||||
string template_code UK
|
||||
string template_name
|
||||
enum template_type
|
||||
bool is_active
|
||||
}
|
||||
TEMPLATE_INDICATORS {
|
||||
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
|
||||
}
|
||||
INDICATORS ||--o{ TEMPLATE_INDICATORS : "被包含"
|
||||
INDICATOR_TEMPLATES ||--o{ TEMPLATE_INDICATORS : "包含"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L387-L438)
|
||||
- [002_template.py](file://backend/alembic/versions/002_template.py#L65-L95)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L411-L437)
|
||||
- [init_indicator_templates.py](file://backend/init_indicator_templates.py#L23-L200)
|
||||
|
||||
### 指标与考核明细的一对多关系
|
||||
|
||||
每个指标可以对应多个考核记录,形成完整的历史追踪:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Indicator {
|
||||
+int id
|
||||
+string code
|
||||
+string name
|
||||
+AssessmentDetail[] assessment_details
|
||||
}
|
||||
class AssessmentDetail {
|
||||
+int id
|
||||
+int assessment_id
|
||||
+int indicator_id
|
||||
+float actual_value
|
||||
+float score
|
||||
+string evidence
|
||||
+string remark
|
||||
}
|
||||
class Assessment {
|
||||
+int id
|
||||
+int staff_id
|
||||
+int period_year
|
||||
+int period_month
|
||||
+float total_score
|
||||
+float weighted_score
|
||||
+AssessmentDetail[] details
|
||||
}
|
||||
Indicator "1" --> "0..*" AssessmentDetail : "被考核"
|
||||
Assessment "1" --> "0..*" AssessmentDetail : "包含"
|
||||
AssessmentDetail --> Indicator : "关联"
|
||||
AssessmentDetail --> Assessment : "属于"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L117-L146)
|
||||
- [models.py](file://backend/app/models/models.py#L181-L202)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L140-L141)
|
||||
- [models.py](file://backend/app/models/models.py#L195-L197)
|
||||
|
||||
## 依赖关系分析
|
||||
|
||||
系统通过清晰的依赖关系实现模块化设计:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "外部依赖"
|
||||
SQLAlchemy[SQLAlchemy ORM]
|
||||
FastAPI[FastAPI框架]
|
||||
Pydantic[Pydantic验证]
|
||||
end
|
||||
subgraph "内部模块"
|
||||
Models[数据模型]
|
||||
Schemas[数据模式]
|
||||
Services[业务服务]
|
||||
API[API路由]
|
||||
end
|
||||
SQLAlchemy --> Models
|
||||
FastAPI --> API
|
||||
Pydantic --> Schemas
|
||||
Models --> Services
|
||||
Schemas --> Services
|
||||
Services --> API
|
||||
Models --> API
|
||||
Schemas --> API
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L1-L13)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L1-L8)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L1-L438)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L1-L743)
|
||||
|
||||
## 性能考虑
|
||||
|
||||
系统在设计时充分考虑了性能优化:
|
||||
|
||||
### 数据库索引策略
|
||||
- 指标类型索引:加速指标类型的查询和筛选
|
||||
- 权重约束:确保数据完整性的同时维护性能
|
||||
- 多字段复合索引:优化复杂查询场景
|
||||
|
||||
### 缓存策略
|
||||
- 指标列表缓存:减少频繁的数据库查询
|
||||
- 模板数据缓存:提升模板导入和使用的响应速度
|
||||
|
||||
### 异步处理
|
||||
- 使用异步数据库连接:提高并发处理能力
|
||||
- 异步服务调用:避免阻塞操作影响整体性能
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 指标编码重复错误
|
||||
**问题描述**:创建指标时提示编码已存在
|
||||
**解决方法**:检查指标编码的唯一性,确保每个编码在整个系统中唯一
|
||||
|
||||
#### 权重值异常
|
||||
**问题描述**:权重值小于等于0导致计算异常
|
||||
**解决方法**:确保权重值大于0,系统已通过数据库约束保证数据完整性
|
||||
|
||||
#### 一票否决触发
|
||||
**问题描述**:某些情况下指标得分为0分
|
||||
**解决方法**:检查一票否决条件的触发逻辑,确认是否符合预设的标准
|
||||
|
||||
**章节来源**
|
||||
- [indicators.py](file://backend/app/api/v1/indicators.py#L78-L81)
|
||||
- [models.py](file://backend/app/models/models.py#L144-L145)
|
||||
|
||||
## 结论
|
||||
|
||||
考核指标模型通过精心设计的架构和完善的约束机制,为医院绩效管理提供了坚实的技术基础。系统不仅支持灵活的指标配置和权重管理,还通过一票否决机制确保关键指标的严格执行。多对多关系的设计使得指标模板能够灵活复用,而清晰的计算方法与考核方法区分则保证了数据处理的准确性。
|
||||
|
||||
该模型的成功实施将有助于医院建立科学、公正、透明的绩效考核体系,为提升医疗质量和患者满意度提供有力支撑。
|
||||
Reference in New Issue
Block a user