# 统计报表接口 **本文档引用的文件** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py) - [backend/app/services/stats_service.py](file://backend/app/services/stats_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/main.py](file://backend/app/main.py) - [backend/app/core/config.py](file://backend/app/core/config.py) - [backend/app/core/database.py](file://backend/app/core/database.py) - [backend/app/api/__init__.py](file://backend/app/api/__init__.py) - [docs/详细设计.md](file://docs/详细设计.md) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件详细说明医院绩效管理系统的统计报表接口,涵盖BSC维度分析、绩效统计、趋势分析、预警数据、周期统计、关键指标仪表盘、收支趋势、科室绩效排名、个人绩效统计与对比分析等功能。文档重点阐述多维度数据聚合、图表数据生成、报表格式化、实时数据更新、缓存策略、性能优化、统计数据准确性保证、数据源管理与ETL流程、自定义报表、数据导出与可视化集成、统计口径说明、数据质量控制与异常检测机制。 ## 项目结构 后端采用FastAPI + SQLAlchemy 2.0 + PostgreSQL + 异步IO架构,统计报表接口位于API路由层,业务逻辑封装在服务层,数据模型定义在ORM层,配置与数据库连接在核心模块中。 ```mermaid graph TB subgraph "表现层" Frontend[前端应用] end subgraph "应用层" API_Router[API路由层
stats.py] Main_App[主应用入口
main.py] end subgraph "服务层" Stats_Service[统计服务层
stats_service.py] end subgraph "数据层" Models[数据模型
models.py] Schemas[数据模式
schemas.py] Database[数据库连接
database.py] Config[系统配置
config.py] end Frontend --> API_Router API_Router --> Stats_Service Stats_Service --> Models Stats_Service --> Database API_Router --> Main_App Main_App --> Config Database --> Config ``` **图表来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L242) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L1-L300) - [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/main.py](file://backend/app/main.py#L1-L92) - [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47) - [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L242) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L1-L300) - [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/main.py](file://backend/app/main.py#L1-L92) - [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47) - [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39) ## 核心组件 - API路由层:提供REST接口,负责请求参数解析、鉴权与响应包装。 - 服务层:实现统计逻辑,包括BSC维度分析、科室/个人绩效统计、趋势分析、指标完成度等。 - 数据模型层:定义科室、员工、指标、考核、明细、工资等实体及其关系。 - 数据模式层:定义Pydantic模型用于序列化/反序列化与API响应。 - 核心模块:配置系统参数、数据库连接与中间件。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L14-L242) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L16-L300) - [backend/app/models/models.py](file://backend/app/models/models.py#L62-L231) - [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L347-L375) - [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47) - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39) ## 架构概览 统计报表接口遵循分层架构,API路由层仅负责输入输出与鉴权,服务层封装复杂查询与聚合逻辑,数据模型层提供ORM映射,核心模块提供配置与数据库连接。 ```mermaid sequenceDiagram participant Client as "客户端" participant API as "统计API路由
stats.py" participant Service as "统计服务
stats_service.py" participant DB as "数据库引擎
database.py" participant Model as "数据模型
models.py" Client->>API : GET /api/v1/stats/bsc-dimension API->>Service : get_bsc_dimension_stats(...) Service->>DB : 异步SQL查询 DB->>Model : ORM映射 Model-->>DB : 查询结果 DB-->>Service : 结果集 Service-->>API : 聚合后的统计结果 API-->>Client : JSON响应 ``` **图表来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L33) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72) - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39) - [backend/app/models/models.py](file://backend/app/models/models.py#L117-L197) ## 详细组件分析 ### BSC维度分析 - 功能:按财务、客户、内部流程、学习与成长四个维度统计得分、权重与指标数量,并计算平均分。 - 查询条件:支持按年度、月份、科室过滤,仅统计已确认的考核记录。 - 聚合逻辑:按维度分组,计算加权总分、总权重、指标数量与平均分。 - 输出格式:包含维度详情与统计周期。 ```mermaid flowchart TD Start(["开始"]) --> BuildConditions["构建查询条件
状态=FINALIZED
可选: 年度/月份/科室"] BuildConditions --> QueryGroup["按维度分组查询
SUM(得分*权重)/SUM(权重)"] QueryGroup --> Aggregate["聚合维度统计
得分/权重/指标数/平均分"] Aggregate --> FormatOutput["格式化输出
包含周期信息"] FormatOutput --> End(["结束"]) ``` **图表来源** - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L33) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72) ### 科室绩效统计 - 功能:获取各科室的绩效统计,包括员工人数、总分、平均分、最高/最低分、员工列表。 - 聚合逻辑:按科室汇总,计算平均分并按平均分降序排列。 - 输出格式:包含科室基本信息与员工明细。 ```mermaid flowchart TD Start(["开始"]) --> FilterFinalized["过滤已确认考核记录"] FilterFinalized --> JoinTables["连接科室/员工/考核表"] JoinTables --> GroupByDept["按科室分组聚合"] GroupByDept --> CalcStats["计算员工数/总分/最高/最低分"] CalcStats --> AvgScore["计算平均分"] AvgScore --> Sort["按平均分降序排序"] Sort --> Format["格式化输出"] Format --> End(["结束"]) ``` **图表来源** - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L74-L146) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L36-L49) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L74-L146) ### 趋势分析 - 功能:按月度统计平均分与加权平均分,支持指定最近N个月或按年份范围查询。 - 时间处理:跨年处理,确保月份范围正确。 - 输出格式:包含月份与对应的平均分。 ```mermaid flowchart TD Start(["开始"]) --> SetPeriod["设置统计周期
默认当前年份"] SetPeriod --> MonthRange["计算最近N个月范围"] MonthRange --> CrossYear{"是否跨年?"} CrossYear --> |是| YearConditions["年份条件: 上一年>=起始月
当年<=当前月"] CrossYear --> |否| SameYear["年份条件: 当年且起止范围内"] YearConditions --> QueryAvg["按月分组查询平均分"] SameYear --> QueryAvg QueryAvg --> Format["格式化输出"] Format --> End(["结束"]) ``` **图表来源** - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L148-L199) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L52-L70) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L148-L199) ### 预警数据 - 功能:预留接口,用于返回低分员工、未完成考核科室、异常数据等预警信息。 - 当前实现:返回模拟数据,后续可扩展为从数据库查询实际预警数据。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L73-L90) ### 周期统计 - 功能:按年月统计全院的科室数量、员工总数、平均分等汇总信息。 - 计算逻辑:对科室统计结果进行汇总计算。 - 输出格式:包含周期、总数、平均分与明细列表。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L93-L125) ### 关键指标仪表盘 - 功能:返回关键指标的仪表盘数据,如床位使用率、药占比、材料占比、患者满意度等。 - 当前实现:返回模拟数据,后续可扩展为从数据库查询实际指标。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L128-L153) ### 收支趋势 - 功能:按月统计收入、支出、利润趋势。 - 当前实现:返回模拟数据,后续可扩展为从财务系统查询实际数据。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L156-L183) ### 科室绩效排名 - 功能:按平均分对科室进行排名,支持限制返回数量。 - 实现:基于科室统计结果进行排序与截取。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L186-L207) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L74-L146) ### 个人绩效统计与对比分析 - 功能:获取个人绩效排名,支持限制返回数量。 - 实现:连接员工、科室、考核表,按加权平均分排序并标注排名。 ```mermaid sequenceDiagram participant API as "统计API" participant Service as "统计服务" participant DB as "数据库" participant Model as "模型" API->>Service : get_ranking_stats(year, month, limit) Service->>DB : 查询已确认考核记录 DB->>Model : 连接员工/科室/考核表 Model-->>DB : 查询结果 DB-->>Service : 排序后的结果集 Service-->>API : 格式化排名数据 API-->>API : 标注排名序号 ``` **图表来源** - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L201-L244) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L210-L224) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L201-L244) ### 指标完成度 - 功能:按指标统计平均分、最大/最小分、完成率等。 - 计算逻辑:完成率=平均分/目标值×100%,上限100%。 - 输出格式:包含指标基本信息与统计指标。 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L227-L241) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L246-L299) ## 依赖关系分析 统计报表接口的依赖关系清晰,API路由层依赖服务层,服务层依赖数据模型与数据库连接,整体耦合度低、内聚性强。 ```mermaid graph TB StatsAPI["统计API路由
stats.py"] --> StatsService["统计服务
stats_service.py"] StatsService --> Models["数据模型
models.py"] StatsService --> Database["数据库连接
database.py"] StatsAPI --> MainApp["主应用
main.py"] MainApp --> Config["配置
config.py"] Database --> Config ``` **图表来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L242) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L1-L300) - [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438) - [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39) - [backend/app/main.py](file://backend/app/main.py#L1-L92) - [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47) **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L242) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L1-L300) - [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438) - [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39) - [backend/app/main.py](file://backend/app/main.py#L1-L92) - [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47) ## 性能考虑 - 异步数据库连接:使用SQLAlchemy异步引擎与会话工厂,减少阻塞,提升并发能力。 - 查询优化:合理使用索引(如考核记录的状态、年月、员工ID等),避免N+1查询。 - 分页与限制:接口支持分页与返回数量限制,防止大数据量查询导致性能问题。 - 缓存策略:当前接口未实现缓存,建议对高频查询(如趋势分析、排名)引入Redis缓存,设置合理的TTL。 - 数据库连接池:配置合适的连接池大小与溢出数量,避免连接争用。 - 前端渲染:图表数据建议采用分页或分批加载,避免一次性传输大量数据。 **章节来源** - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L21) - [backend/app/core/config.py](file://backend/app/core/config.py#L18-L22) - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L75-L90) ## 故障排除指南 - 数据库连接失败:检查DATABASE_URL配置与数据库服务状态。 - 查询超时:优化查询条件,增加索引,减少不必要的JOIN。 - 权限错误:确认用户角色与接口权限,确保鉴权中间件正常工作。 - 响应格式异常:检查服务层返回的数据结构与API路由的响应包装。 - 预警与仪表盘:当前返回模拟数据,需实现真实数据查询逻辑。 **章节来源** - [backend/app/core/config.py](file://backend/app/core/config.py#L18-L26) - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L73-L90) - [backend/app/main.py](file://backend/app/main.py#L58-L75) ## 结论 统计报表接口实现了BSC维度分析、绩效统计、趋势分析、排名与指标完成度等核心功能,具备良好的扩展性与可维护性。建议后续完善预警与仪表盘的真实数据查询、引入缓存策略、优化查询性能,并补充数据质量控制与异常检测机制,以满足生产环境的稳定性与准确性要求。 ## 附录 ### API接口定义 - BSC维度分析:GET /api/v1/stats/bsc-dimension - 参数:department_id(可选)、period_year、period_month - 返回:维度得分、权重、指标数量与平均分 - 科室绩效统计:GET /api/v1/stats/department - 参数:period_year、period_month - 返回:各科室统计与员工明细 - 趋势分析:GET /api/v1/stats/trend - 参数:department_id(可选)、period_year(可选)、months(1-24,默认6) - 返回:月度平均分趋势 - 预警数据:GET /api/v1/stats/alerts - 参数:limit(1-100,默认10) - 返回:低分员工、未完成考核科室、异常数据 - 周期统计:GET /api/v1/stats/period - 参数:period_year(可选)、period_month(可选) - 返回:周期汇总与明细 - 关键指标仪表盘:GET /api/v1/stats/kpi-gauges - 参数:period_year(可选)、period_month(可选) - 返回:床位使用率、药占比、材料占比、患者满意度 - 收支趋势:GET /api/v1/stats/finance-trend - 参数:months(1-24,默认6) - 返回:月度收入、支出、利润 - 科室绩效排名:GET /api/v1/stats/department-ranking - 参数:period_year(可选)、period_month(可选)、limit(1-100,默认10) - 返回:前N名科室 - 个人绩效统计:GET /api/v1/stats/ranking - 参数:period_year、period_month、limit - 返回:个人绩效排名 - 指标完成度:GET /api/v1/stats/completion - 参数:indicator_id(可选)、period_year、period_month - 返回:指标平均分、完成率等 **章节来源** - [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L241) ### 数据模型关系 ```mermaid erDiagram DEPARTMENTS ||--o{ STAFF : "拥有" STAFF ||--o{ ASSESSMENTS : "参与" INDICATORS ||--o{ ASSESSMENT_DETAILS : "被评估" ASSESSMENTS ||--o{ ASSESSMENT_DETAILS : "包含" SALARY_RECORDS ||--|| STAFF : "关联" ``` **图表来源** - [backend/app/models/models.py](file://backend/app/models/models.py#L62-L231) ### 统计口径说明 - 加权平均分:按指标权重计算的平均分,体现权重影响。 - 完成率:平均分与目标值的比值,上限100%。 - 排名:按加权平均分降序排列,相同分数按规则处理并列。 **章节来源** - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L62-L67) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L284-L296) ### 数据质量控制与异常检测 - 数据完整性:仅统计状态为已确认的考核记录,确保数据有效性。 - 异常值处理:在服务层对空值与边界值进行处理,避免异常影响统计结果。 - ETL流程:建议在系统外部实现ETL,从HIS、财务、院感等系统抽取数据,清洗后入库,统计接口从数据库读取。 **章节来源** - [docs/详细设计.md](file://docs/详细设计.md#L96-L109) - [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L36-L43)