项目概述

1.1 什么是区域长管理周报表?

区域长每周填写的综合性运营报表,汇总本区域当周的 经营指标、质量指标、团队指标 三大类数据,每周一张。

分类二级指标数据特点
经营指标 失能险、照护等级、满年练签、老带新、退住、增值收入 大部分可从轻流自动获取,少部分需手动
质量指标 客户需求、满意度、不良事件、新老客个性化落实、客服 部分已有数据,部分需新建轻流应用
团队指标 员工出入、教育培训、周例会、评估签字、风险告知签字、晨检查 多为手动填报项,轻流覆盖较少
目标:最终实现"数据自动同步 → 脚本自动计算 → 页面自动渲染",区域长只需补充少数手动项即可完成周报。

五步开发流程

遵循样式先行 → 规则锁定 → 数据就位 → 页面打通的核心原则,每步可独立验收。

Step 1 — 确认报表样式 当前阶段

产出:静态 HTML 模板(列头、分组、配色、空白数据行)

操作:你确认样式和列名,我调整布局和响应式

验收标准:各列名正确、二级指标分割线清晰、手机端可正常浏览

Step 2 — 定义指标规则

产出:指标定义文档(指标名、取值规则、数据源、计算公式、单位)

操作:你告诉我每个指标的取数逻辑,我整理成规范文档

验收标准:每个指标的三要素齐全——数据源(哪个轻流app/表)+ 取数口径(时间范围/筛选条件)+ 计算公式

Step 3 — 建表 + 同步

产出:MySQL 建表、sync_*.py 同步脚本、cron 定时任务

操作:根据 Step 2 的指标清单,确定哪些需要新建表,哪些只需扩展已有表字段

验收标准:每个数据源对应的原始表数据完整、定时同步正常、可手动触发刷新

Step 4 — 分析脚本

产出:analyze_weekly.py,从原始表聚合计算,写入缓存表

操作:覆盖经营/质量/团队三大类所有指标的计算逻辑

验收标准:运行后缓存表数据与手工验算一致、支持按机构+休养区+日期分别输出

Step 5 — 报表页面 + API

产出:Flask API + 动态 HTML 报表页面 + 手动填报入口

操作:Step 1 的静态模板升级为从 API 读数据渲染;手动项提供行内编辑

验收标准:页面秒级加载、周切换器可用、手动填报可保存、历史周可回溯

三层数据架构

不采用单张宽表(太臃肿),也不过度拆分(JOIN太多)。用 原始表 + 缓存表 + 手工表 三层分离,各司其职。

3.1 Layer 1 — 原始数据层(轻流同步)

按业务条线分表存储,每张表对应一个轻流 appKey。这张图列出所有可能涉及的表:

表名状态数据来源周报表用途
resident_info已有入住协议 (8a7fonqg0o02)照护等级、失能险、入住/离院/请假、床位
adverse_events已有不良事件 (dtonmhf02801)不良事件统计
nursing_records已有护理记录 (8h0q8e5s1401)护理相关信息(如有需要)
assessment_records已有评估记录 (8hjq5k381401)评估信息(如有需要)
staff_info待新建员工管理(待确认appKey)员工出入、培训记录、岗前带教
satisfaction_surveys待新建满意度调查(待确认appKey)现场问卷数、均分、客户需求
move_out_records可能扩展可在 resident_info 中加入字段退住/离世统计
revenue_records待新建增值收入(待确认appKey)护理用品/治疗/点餐收入
扩展已有表优先:如果轻流字段存在于已接入的app中(如入住协议),只需 ALTER TABLE + 修改 FIELD_MAP + 全量重同步,不需要新建表。

3.2 Layer 2 — 计算缓存层

每周运行一次 analyze_weekly.py,从原始表按机构+休养区+日期聚合,写入缓存表:

缓存表设计模式说明
weekly_report_snapshot 宽表 一行 = 一个区域一周。50+ 列对应各指标。适合报表页面 SELECT 一次即得全部数据。
report_indicator_values EAV(键值对) 多行变长存储:
(area, week, indicator_key, value, unit, source)
用于未来扩展新指标而不 ALTER TABLE。
report_manual_entries 手工表 存储区域长手动填报的数据:
(area, week, field, value, updated_by, updated_at)

3.3 Layer 3 — 展示层

报表页面从缓存表读取数据,秒级渲染。手动填报项从 report_manual_entries 读取并合入。

# 数据流全链路
轻流 openApi → sync_*.py → MySQL原始表
                              ↓
                     analyze_weekly.py
                              ↓
                   weekly_report_snapshot  ←  report_manual_entries
                              ↓
                       Flask API (/api/weekly-report?...)
                              ↓
                      HTML 报表页面(动态渲染)
关键:缓存表是只写一次的快照。不会因为原始数据后续变动而影响已生成的历史周报表。这使得"回头看上周的报表"成为可能。

指标分类策略(A/B/C)

按数据获取方式将全部指标分为三类,决定开发路径和优先级。

类型特征示例指标开发难度实现方式
A 已有原始表,纯SQL计算 照护等级分布、失能险统计、不良事件数、退住统计、入住/离院/请假人数 analyze_weekly.py 中写SQL聚合即可
B 轻流有数据,需新建同步 员工出入、培训记录、满意度、客户需求、增值收入 建表 + sync脚本 + cron + SQL聚合
C 轻流没有,纯手动填报 晨检查状态、周例会系统录入、评估签字版签率、部分老带新详情 页面内编辑 → 写入 manual_entries 表

4.1 A类指标当前覆盖情况

以下A类指标的数据已在 MySQL 中,可通过 SQL 直接计算。但部分字段需要追加到现有同步脚本中:

指标数据源表已有字段?缺失字段
照护等级分布resident_infocare_level ✔
失能险人数/占比resident_info✘ 未同步insurance_flag(需向轻流确认queId)
请假外出人数resident_info✘ 未同步leave_out_status(需向轻流确认queId)
入住/退住统计resident_infoadmission_date, leave_date, status ✔
不良事件adverse_events全部 ✔
总床位/空床resident_infobed_number ✔
好消息:A 类指标的 60% 数据已就位。只需补充 resident_info 中 2~3 个缺失字段(失能险、请假),就可以跑通 Step 3~4 的主流程。

与现有系统的衔接

周报表项目完全复用现有的护理漏测/不良事件系统的同一套基础设施:

基础设施复用方式
服务器同一台 110.42.221.197,Flask 端口 9090
MySQL同一容器 mysql-nursing,同一数据库 nursing
轻流 Token共用 187f968c-48a4-4874-95bc-edb084a4083d
同步模式沿用 openApi + accessToken + 3次重试(指数退避)
Cron同一 crontab,新增周报分析任务
前端框架复用侧边栏导航 + 工作台入口
已有数据表resident_info / adverse_events 直接用于周报指标计算

5.1 新建内容清单

  • 2~3 张新原始表(员工、满意度、增值收入——取决于轻流中是否有对应应用)
  • 3 张缓存表(weekly_report_snapshot / report_indicator_values / report_manual_entries)
  • 1 个分析脚本(analyze_weekly.py)
  • 1 个报表页面(weekly-report.html,从 Step 1 的静态模板升级)
  • 若干 Flask API(/api/weekly-report/data、/api/weekly-report/manual-save 等)
与不良事件项目的相似之处:两条线的模式几乎一样——建表 → 同步脚本 → 分析脚本 → API → 页面。可以参考 adverse_events 的开发经验快速推进。

开发优先级建议

6.1 分三阶段推进

阶段范围内容预计工作量
P0 A类优先 + 框架搭通 1. 补充 resident_info 缺失字段(失能险、请假)
2. 建3张缓存表
3. 写 analyze_weekly.py(只算A类指标)
4. 报表页面 v1:A类指标自动填充,B/C类显示占位
5. cron 定时任务
核心
P1 B类逐个接入 1. 确认轻流中员工/满意度/收入的 appKey 和 queId
2. 逐个建表 + 同步脚本
3. analyze_weekly.py 加入 B 类计算
4. 报表页面 B 类指标动态填充
按需
P2 C类手动填报 1. report_manual_entries 表
2. 页面内行内编辑(点击→输入→保存)
3. 确认哪些指标最终仍是手动项
收尾
P0 即可产出"能用"的报表:经营指标的大部分(照护等级、失能险、退住、床位)、质量指标的不良事件部分、以及团队指标的结构框架,在P0阶段就能自动填充。区域长只需补少量手动项。

6.2 你需要的输入

  • 入住协议表单中"失能险标记"的 queId(如果存在)
  • 入住协议表单中"请假外出状态"的 queId(如果存在)
  • 员工管理 / 满意度 / 增值收入的轻流 appKey(如果有对应应用)
  • 所有缺失字段的 queId → 含义对照表

注意事项

7.1 轻流字段前置条件

部分指标在轻流中目前的字段可能不完整(如失能险标记、请假状态)。需要先在轻流后台完善表单字段,然后才能通过 API 同步到 MySQL。

7.2 缓存表的快照特性

每周的分析结果写入 weekly_report_snapshot不再更新。这是刻意设计——保证了历史周报表不会因为后续数据变化而失真。

7.3 手动填报数据的持久化

  • C 类手动填报数据写入 report_manual_entries,不混入缓存表
  • 页面渲染时分层读取:缓存表(自动)+ 手工表(手动),在前端合并
  • 下次分析不会覆盖手工数据

7.4 复用已有部署规范

  • HTML 页面需同时部署到 /opt/leakcheck//opt/site/
  • Python 脚本用 pymysql + charset=utf8mb4 避免中文乱码
  • queId 在 API 请求中必须传 int 类型
  • pageSize 上限为 200

7.5 报表样式规范

  • 表头信息行独立于表格之上
  • 一级指标用彩色竖排标签(绿/橙/蓝)
  • 二级指标组之间用 3px 粗灰线分隔
  • 关键数值红/绿/橙三色高亮
  • 响应式:窄屏横向滚动