学生视力筛查统计 · 体检 BMI 汇总 · 家长复查提醒单
规矩(每次都要遵守)
- 学生健康信息是敏感个人信息。 全部在本机处理,不联网、不上传、不调用任何在线服务。不要把学生名单、视力数字贴到别处,也不要建议用户发到班级群。统计表每页都写着「仅供学校内部使用」,要报给上级时用「只出汇总」(不带学生名单)。
- 不改原表。 脚本只读用户的数据表;报表和提醒单另存为新文件(原文件名后加「_视力统计」「_复查提醒单」),重名自动加 _1、_2,绝不覆盖已有文件。
- 先体检,再统计。 第一次拿到表,先跑
check,用大白话告诉用户:认出了哪些列、缺哪些列、有没有电脑验光数据和身高体重、发现了哪些填写问题。列认错了问用户,再出报表。 - 不诊断、不给治疗建议。 只说筛查数字和「建议到正规医疗机构检查」。不说「孩子近视了」「要配眼镜」「要点什么眼药水」「做什么训练」,不推荐医院、眼镜店或任何产品。用户追问病情,就说:筛查结果不等于诊断,请以医院医生的检查为准。
- 近视率要有电脑验光数据才算。 表里只有视力、没有球镜柱镜时,只说「视力不良率」,并告诉用户视力不良不等于近视;不要把视力不良率说成近视率。
- 数字以脚本输出为准。 不心算、不改数、不推测原因(比如「因为玩手机」)。
- 提醒单一人一页,只含该生本人信息。 提醒用户打印后按人分发,不要把整份文件发到群里。
- 组件缺了只提示,不自动装。 缺 openpyxl 时脚本会告诉用户运行什么安装命令,由用户自己决定。
- 跟用户说话用大白话,一步一步来,不提命令、参数、程序里的名字;但用户问到在运行什么时,如实说明是在本机运行 Python 脚本读这个表格。
用法(给 AI 看)
脚本:python {baseDir}/scripts/vision_check.py <子命令> <文件路径> [选项],路径有空格要加引号。只读 .xlsx 和 .csv。
| 子命令 | 做什么 | 会不会动原文件 |
|---|---|---|
check 文件 |
认列 + 数据体检 + 看有没有验光、身高体重数据 | 只读 |
report 文件 |
生成统计报表 xlsx | 只读,另存新文件 |
letters 文件 |
生成家长复查提醒单 docx(一人一页) | 只读,另存新文件 |
template |
生成一份空白数据模板(含两行虚构示例) | 新建文件 |
常用选项:
| 选项 | 意思 |
|---|---|
--date 2026-09-15 |
筛查日期(表里没有「筛查日期」列时用;算实足年龄要用) |
--prev 上次.xlsx |
和上次筛查对比(只用于 report) |
--school 学校名 |
写在报表和提醒单抬头 |
--summary-only |
只出汇总,不带学生名单(报上级用) |
--se-rule guide / --se-rule 663 |
筛查性近视口径:默认按卫健委指南(等效球镜 ≤ −0.50D),663 按 WS/T 663(< −0.50D) |
--class 三年级2班 |
提醒单只出这个班(只用于 letters) |
--only-hospital |
提醒单只出「建议到医疗机构检查」的,不出「定期复查」的 |
--contact 校医室 王老师 电话xxx |
提醒单上写的联系方式 |
--col 含义=列名 |
列认错时手动指定,如 --col 右眼裸眼视力=视力R、--col 班级=班别 |
--sheet 名称 |
指定工作表 |
--out 路径 |
保存位置(不能和原表同名) |
--col 能用的含义:姓名、学号、班级、年级、性别、年龄、出生日期、筛查日期、学校、右眼裸眼视力、左眼裸眼视力、右眼戴镜视力、左眼戴镜视力、是否戴镜/戴镜类型(也可写「戴镜」)、右眼球镜、左眼球镜、右眼柱镜、左眼柱镜、右眼等效球镜、左眼等效球镜、身高、体重。
大白话 → 怎么做
| 用户说 | 怎么做 |
|---|---|
| 「帮我看看这个筛查表」「这个表能用吗」 | check 文件,把认出的列和问题清单念给用户 |
| 「算一下全校/各班视力不良率」「近视率是多少」 | report 文件 --school 学校名;没有验光数据就说明只能算视力不良率 |
| 「和上学期比一下」 | report 本次文件 --prev 上次文件 |
| 「要报给教育局/卫健,不能带名字」 | report 文件 --summary-only |
| 「各班超重肥胖多少」「BMI 统计」 | report 文件(看「体重BMI汇总」页);表里没出生日期就提醒按整岁判定可能有半岁误差 |
| 「给家长发复查通知」「打印告家长书」 | letters 文件 --school 学校名 --date 筛查日期;只要某班就加 --class 班级名 |
| 「只给要去医院的发」 | 加 --only-hospital |
| 「我还没有表,给个模板」 | template --out 想放的位置\学生视力筛查数据模板.xlsx |
| 「右眼那列没认出来,应该是『视力R』」 | 加 --col 右眼裸眼视力=视力R |
| 「这孩子是不是近视了?要不要配眼镜?」 | 不判断。说筛查结果不等于诊断,请家长带孩子到正规医疗机构检查,以医生意见为准 |
| 「为什么三班视力不良率这么高?」 | 只说数字(比上次高多少、新出现几人),原因请学校结合实际了解,不要猜 |
告诉用户结果时这样说(示例):「报表做好了,保存在原表旁边,文件名是『××_视力统计.xlsx』。全校 520 人,视力不良 213 人,占 41.0%……需要复查的 180 人,名单在『复查名单』那一页。打开后先看『说明』页,里面写了统计口径和出处。」
报表里有什么
- 说明:学校、数据来源、筛查日期、统计口径和出处、「仅供学校内部使用」。
- 视力汇总:全校 / 按年级 / 按班级 / 按性别 / 按年级和性别——受检人数、视力不良人数和率、轻中重度人数和占比、戴镜人数、需复查人数;有验光数据时加筛查性近视人数和率;另有「按眼统计」。
- 体重BMI汇总:同样分组的超重、肥胖人数和率(有身高体重才有)。
- 复查名单:需复查学生、两眼视力、建议类型(到医疗机构检查 / 定期复查)。
- 学生明细:每人 5 分和小数两种记录、每眼档次、等效球镜、BMI 和判定依据、复查建议。
- 与上次对比(给了上次的表才有):全体对比;同一批学生按本次班级对比(避免升级、转学带来的人员变化);每个学生两眼变化行数,标出「新出现视力不良」「下降 2 行及以上」。
- 数据体检:每个问题的位置、内容、怎么处理的。
- 加
--summary-only时不出「复查名单」「学生明细」和对比明细,只剩汇总。
判定口径(详细出处见 references/standards.md)
- 视力不良:裸眼视力 <5.0;4.9 轻度,4.6~4.8 中度,≤4.5 重度(国家卫健委《儿童青少年近视防控适宜技术指南(更新版)》)。按人统计以较差眼定档,另附按眼统计。
- 5 分 ↔ 小数:GB/T 11533—2011 表 3(1.0=5.0,0.8=4.9,0.6=4.8,0.5=4.7,0.4=4.6,0.3=4.5……)。
- 筛查性近视:6 岁以上,裸眼 <5.0 且未散瞳电脑验光等效球镜 ≤ −0.50D(指南);可切换为 WS/T 663—2020 的 < −0.5D。等效球镜 = 球镜 + 1/2 柱镜。
- 复查建议:WS/T 663—2020 附录 B 转诊建议流程。
- 超重肥胖:WS/T 586—2018 表 1,按性别和实足年龄(半岁一组)判定,只适用 6~18 岁;不判定消瘦。
需要的组件
- 必须:Python 3.8+、openpyxl(读写 Excel)。缺了会提示
pip install openpyxl,装不装由用户决定。 - 提醒单 Word 文件用 Python 自带功能生成,不需要额外组件;Word 和 WPS 都能打开。
不做什么
- 不联网、不上传,不调用任何在线服务;不运行任何其他程序。
- 不修改、不覆盖、不删除用户的原文件;不写计划任务、不常驻后台。
- 不做诊断,不给治疗、用药、配镜、训练建议,不推荐医院、眼镜店或商品。
- 不判断近视度数高低(需要散瞳验光,筛查数据做不到)。
- 不读老版本 .xls 和 WPS 的 .et(请用户另存为 .xlsx);不破解有密码的文件。