区域长管理周报表 — 开发方案
一项目概述
▼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) | 护理用品/治疗/点餐收入 |
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_info | care_level ✔ | — |
| 失能险人数/占比 | resident_info | ✘ 未同步 | insurance_flag(需向轻流确认queId) |
| 请假外出人数 | resident_info | ✘ 未同步 | leave_out_status(需向轻流确认queId) |
| 入住/退住统计 | resident_info | admission_date, leave_date, status ✔ | — |
| 不良事件 | adverse_events | 全部 ✔ | — |
| 总床位/空床 | resident_info | bed_number ✔ | — |
五与现有系统的衔接
▼周报表项目完全复用现有的护理漏测/不良事件系统的同一套基础设施:
| 基础设施 | 复用方式 |
|---|---|
| 服务器 | 同一台 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 等)
六开发优先级建议
▼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. 确认哪些指标最终仍是手动项 |
收尾 |
6.2 你需要的输入
- 入住协议表单中"失能险标记"的 queId(如果存在)
- 入住协议表单中"请假外出状态"的 queId(如果存在)
- 员工管理 / 满意度 / 增值收入的轻流 appKey(如果有对应应用)
- 所有缺失字段的 queId → 含义对照表
七注意事项
▼7.1 轻流字段前置条件
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 粗灰线分隔
- 关键数值红/绿/橙三色高亮
- 响应式:窄屏横向滚动