# 生长激素缺乏预测模型项目需求文档 **项目名称:** 生长激素缺乏(GHD)预测模型系统 **项目类型:** 医疗健康小程序 + 后台管理系统 **技术架构:** 微信小程序(前端)+ ThinkPHP 5.0(后端) **数据库:** MySQL **文档版本:** v1.0 **创建日期:** 2025年1月28日 --- ## 一、项目概述 ### 1.1 项目背景 生长激素缺乏(Growth Hormone Deficiency, GHD)是儿童内分泌疾病中的常见问题,早期诊断和预测对患者的治疗和预后具有重要意义。本项目旨在开发一个基于多因素分析的GHD预测模型系统,通过微信小程序为医生和患者提供便捷的预测工具,并通过后台管理系统进行数据管理和内容维护。 ### 1.2 项目目标 1. **提供GHD预测功能**:基于骨龄、实际年龄、IGF-1、IGFBP-3等指标,计算GHD患病概率 2. **数据管理**:记录用户计算历史,便于医生和患者追踪 3. **资讯管理**:提供相关医疗资讯的发布和管理功能 4. **用户管理**:管理小程序注册用户信息 ### 1.3 用户群体 - **主要用户**:医生、患者及其家属 - **管理员**:医疗机构的系统管理员 --- ## 二、系统架构 ### 2.1 技术架构 ``` ┌─────────────────┐ │ 微信小程序前端 │ │ (WeChat Mini │ │ Program) │ └────────┬────────┘ │ HTTP/HTTPS │ API调用 ┌────────▼────────┐ │ ThinkPHP 5.0 │ │ 后端服务 │ └────────┬────────┘ │ ┌────────▼────────┐ │ MySQL数据库 │ └─────────────────┘ ``` ### 2.2 目录结构 ``` /www/wwwroot/code/ ├── application/ # 应用目录 │ ├── adminghd/ # 后台管理模块 │ │ ├── controller/ # 控制器 │ │ │ ├── Login.php # 登录控制器 │ │ │ ├── Menu.php # 菜单管理 │ │ │ ├── Wechatinfro.php # 微信用户信息管理 │ │ │ └── Wechatset.php # 微信设置管理 │ │ ├── model/ # 模型 │ │ └── view/ # 视图 │ ├── app/ # 小程序API模块 │ │ └── controller/ │ │ ├── Ghdwechat.php # GHD相关API │ │ └── Ruilaiwechat.php # 瑞来相关API │ └── database.php # 数据库配置 ├── public/ # 公共访问目录 │ ├── index.php # 入口文件 │ └── static/ # 静态资源 ├── szjs/ # 微信小程序源码 │ ├── pages/ # 小程序页面 │ │ ├── ghdCalculator/ # GHD计算器页面 │ │ ├── home/ # 首页 │ │ ├── my/ # 个人中心 │ │ └── ... │ ├── app.js # 小程序入口 │ └── app.json # 小程序配置 └── thinkphp/ # ThinkPHP框架核心 ``` --- ## 三、功能需求 ### 3.1 微信小程序功能 #### 3.1.1 GHD预测计算器 **功能描述:** 用户输入相关指标,系统自动计算GHD患病概率 **前端计算器输入参数:** - **骨龄(BA)**:单位:年,支持小数 - **实际年龄(CA)**:单位:年,支持小数 - **IGF-1值**:单位:ng/ml,支持小数 - **IGFBP-3值**:单位:mg/L,支持小数 **后端API计算输入参数:** - **用户ID(uid)**:必填 - **患者姓名(name)**:必填 - **年龄(age)**:必填,数字 - **身高(height)**:必填,数字 - **骨龄(bone_age)**:必填,数字 - **父亲身高(father_height)**:必填,数字 - **母亲身高(mother_height)**:必填,数字 - **IGF-1值(IGF)**:必填,数字,单位:ng/ml - **LH值(LH)**:必填,数字,单位:mIU/ml - **子宫厚度(uterus_thickness)**:必填,数字,单位:mm **前端计算公式:** ``` Y = 3.726 - 0.876×(BA-CA) - 0.058×(IGF-1) + 0.229×(IGFBP-3) P = e^Y / (1 + e^Y) ``` 其中: - Y:中间变量 - P:GHD预测概率(0-1之间) - BA-CA:骨龄与实际年龄的差值 **后端API计算公式:** ``` P = exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) / (1 + exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度)) ``` 其中: - P:GHD预测概率(0-1之间),保留3位小数 **输出结果:** - GHD预测概率(百分比形式) - 计算过程详情(分步骤展示) - 结果解释和建议 **结果分级:** - **P ≥ 0.8**:GHD可能性较大,建议进一步进行相关检查 - **0.5 ≤ P < 0.8**:存在GHD可能,建议进行相关检查 - **P < 0.5**:GHD可能性较小,但仍需结合临床表现进行综合判断 **参考范围:** 系统内置IGF-1和IGFBP-3的参考范围(按性别和年龄段): - IGF-1参考范围(男性/女性,0-17岁,分9个年龄段) - IGFBP-3参考范围(男性/女性,0-17岁,分9个年龄段) #### 3.1.2 其他工具页面 根据小程序配置,还包含以下页面: - **首页(home)**:展示资讯和功能入口 - **个人中心(my)**:用户信息、历史记录 - **IGF参考值(igfrefer)**:IGF-1和IGFBP-3参考范围查询 - **身高SDS计算器(heightSdsCalculator)**:身高标准差评分计算 - **工具集合(tool)**:其他医疗工具 - **性发育图表(sexChart)**:性发育相关图表 - **关于(guanyu)**:关于小程序的信息 #### 3.1.3 用户功能 - **微信授权登录**: - 通过微信授权获取用户信息 - 接口:`/app/Ghdwechat/wechatLogin` 或 `/app/Ruilaiwechat/wechatLogin` - 参数:`code`(微信登录code)、`encryptedData`(加密数据)、`iv`(初始向量) - 返回:用户ID(uid)和登录状态 - **计算历史记录**: - 查看历史计算记录:`/app/Ghdwechat/selectRecordList` 或 `/app/Ruilaiwechat/selectRecordList` - 删除历史记录:`/app/Ghdwechat/deleteRecord` 或 `/app/Ruilaiwechat/deleteRecord` - 支持分页查询(默认每页30条) - **资讯浏览**: - 获取资讯列表:`/app/Ghdwechat/selectRealtimeInfoList` 或 `/app/Ruilaiwechat/selectRealtimeInfoList` - 支持分页查询(默认每页20条) ### 3.2 后台管理系统功能 #### 3.2.1 用户登录 **功能描述:** 管理员登录后台管理系统 **登录方式:** - 用户名/手机号 + 密码登录 - Session会话管理(1小时有效期) **权限控制:** - 基于Session的用户身份验证 - 不同用户类型可能有不同权限(当前代码中部分权限检查被注释) #### 3.2.2 微信用户管理 **功能描述:** 查看和管理小程序注册用户 **功能列表:** - **用户列表查询**: - 支持按昵称搜索 - 分页显示(默认每页30条) - 显示字段:用户ID、昵称、头像、注册时间 - **用户信息查看**:查看用户详细信息 **数据表:** `ghd_wechat_user` - `uid`:用户ID - `nickname`:昵称 - `headimg`:头像 - `create_time`:注册时间 #### 3.2.3 计算记录管理 **功能描述:** 查看和管理用户的GHD预测计算记录 **功能列表:** - **记录列表查询**: - 支持按姓名搜索 - 分页显示(默认每页30条) - 显示字段:序号、姓名、年龄、身高、骨龄、父亲身高、母亲身高、IGF、LH、子宫厚度、计算结果、创建时间 - **记录详情查看**:查看完整的计算记录详情 **数据表:** `wechat_calculate_record` - `id`:记录ID - `name`:姓名 - `age`:年龄 - `height`:身高 - `bone_age`:骨龄 - `father_height`:父亲身高 - `mother_height`:母亲身高 - `IGF`:IGF-1值 - `LH`:LH值 - `uterus_thickness`:子宫厚度 - `calculate_resutlt`:计算结果 - `create_time`:创建时间 #### 3.2.4 资讯管理 **功能描述:** 管理小程序中展示的医疗资讯 **功能列表:** - **资讯列表**: - 支持按标题搜索 - 分页显示(默认每页30条) - 显示字段:标题、缩略图、简介、跳转链接、创建时间 - **添加资讯**: - 标题(必填) - 缩略图(必填) - 简介(必填) - 跳转链接(必填) - **编辑资讯**:修改已有资讯信息 - **删除资讯**:删除不需要的资讯 **数据表:** `wechat_real_time_info` - `id`:资讯ID - `title_plain`:标题 - `thumbnail`:缩略图 - `excerpt_plain`:简介 - `url`:跳转链接 - `create_time`:创建时间 #### 3.2.5 菜单管理 **功能描述:** 管理系统菜单(当前部分功能被注释) **功能列表:** - 获取菜单列表 - 添加菜单 - 修改菜单 - 删除菜单 --- ## 四、数据库设计 ### 4.1 核心数据表 #### 4.1.1 用户表(t_sys_user) **用途:** 存储后台管理员用户信息 **主要字段:** - `id`:用户ID(主键) - `user_name`:用户名 - `phone`:手机号(登录账号) - `password`:密码(MD5加密) - `user_head`:头像 - `status`:状态(1:启用,0:禁用) - `type`:用户类型(1:管理员) #### 4.1.2 微信用户表(ghd_wechat_user / wechat_user) **用途:** 存储小程序注册用户信息 **主要字段:** - `uid`:用户ID(主键,自增) - `openid`:微信OpenID(唯一标识) - `nickname`:昵称 - `headimg`:头像URL - `create_time`:注册时间 **注意:** 代码中同时使用了 `ghd_wechat_user` 和 `wechat_user` 两个表名,需要确认实际使用的表名 #### 4.1.3 计算记录表(wechat_calculate_record) **用途:** 存储用户的GHD预测计算记录 **主要字段:** - `id`:记录ID(主键) - `name`:姓名 - `age`:年龄 - `height`:身高 - `bone_age`:骨龄 - `father_height`:父亲身高 - `mother_height`:母亲身高 - `IGF`:IGF-1值 - `uid`:用户ID(关联微信用户) - `LH`:LH值(促黄体生成素),单位:mIU/ml - `uterus_thickness`:子宫厚度,单位:mm - `calculate_resutlt`:计算结果(GHD概率,0-1之间,保留3位小数) - `create_time`:创建时间 #### 4.1.4 资讯表(wechat_real_time_info) **用途:** 存储小程序展示的医疗资讯 **主要字段:** - `id`:资讯ID(主键,MD5生成) - `title_plain`:标题 - `thumbnail`:缩略图URL - `excerpt_plain`:简介 - `url`:跳转链接 - `create_time`:创建时间 #### 4.1.5 菜单表(t_sys_menu) **用途:** 存储后台管理系统菜单 **主要字段:** - `id`:菜单ID(主键) - `pid`:父菜单ID - `menu_name`:菜单名称 - `url`:菜单链接 - `menu_icon`:菜单图标 - `seq_on`:排序序号 - `create_time`:创建时间 --- ## 五、API接口设计 ### 5.1 小程序API接口 #### 5.1.1 用户相关接口 **接口路径:** `/app/Ghdwechat/xxx` 或 `/app/Ruilaiwechat/xxx` **主要接口:** - 用户登录/注册 - 获取用户信息 - 更新用户信息 #### 5.1.2 计算相关接口 **计算接口:** - **接口路径:** `/app/Ghdwechat/calculate` 或 `/app/Ruilaiwechat/calculate` - **请求方式:** POST - **功能:** 提交计算参数,返回计算结果并保存记录 **请求参数:** ```json { "uid": "用户ID", "name": "患者姓名", "age": 10.5, "height": 140, "bone_age": 9.5, "father_height": 175, "mother_height": 160, "IGF": 250, "LH": 0.8, "uterus_thickness": 10 } ``` **响应数据:** ```json { "erro": 0, "msg": "计算成功", "calculate_resutlt": 0.661 } ``` **错误响应:** ```json { "erro": -1, "msg": "错误信息(如:未传入用户id、未传入姓名等)" } ``` **历史记录查询接口:** - **接口路径:** `/app/Ghdwechat/selectRecordList` 或 `/app/Ruilaiwechat/selectRecordList` - **请求方式:** POST - **请求参数:** ```json { "uid": "用户ID", "page": 1, "page_size": 30 } ``` **响应数据:** ```json { "erro": 0, "msg": "查询成功", "lists": [ { "id": "记录ID", "name": "患者姓名", "age": 10.5, "height": 140, "bone_age": 9.5, "father_height": 175, "mother_height": 160, "IGF": 250, "LH": 0.8, "uterus_thickness": 10, "calculate_resutlt": 0.661, "create_time": "2024-05-19 17:47:17" } ], "lastPage": 10, "currentPage": 1 } ``` **删除记录接口:** - **接口路径:** `/app/Ghdwechat/deleteRecord` 或 `/app/Ruilaiwechat/deleteRecord` - **请求方式:** POST - **请求参数:** ```json { "uid": "用户ID", "id": "记录ID" } ``` #### 5.1.3 资讯相关接口 **获取资讯列表:** - **接口路径:** `/app/Ghdwechat/selectRealtimeInfoList` 或 `/app/Ruilaiwechat/selectRealtimeInfoList` - **请求方式:** POST - **请求参数:** ```json { "page": 1, "page_size": 20 } ``` **响应数据:** ```json { "erro": 0, "msg": "查询成功", "lists": [ { "title_plain": "资讯标题", "thumbnail": "图片URL", "excerpt_plain": "简介", "url": "跳转链接" } ], "lastPage": 10, "currentPage": 1 } ``` #### 5.1.4 用户登录接口 **微信授权登录:** - **接口路径:** `/app/Ghdwechat/wechatLogin` 或 `/app/Ruilaiwechat/wechatLogin` - **请求方式:** POST - **请求参数:** ```json { "code": "微信登录code", "encryptedData": "加密的用户数据", "iv": "初始向量" } ``` **响应数据:** ```json { "erro": 0, "msg": "登录成功", "uid": "用户ID" } ``` **错误响应:** ```json { "erro": -1, "msg": "错误信息(如:未传入code、解析数据失败等)" } ``` ### 5.2 后台管理API接口 #### 5.2.1 登录接口 **接口路径:** `/adminghd/Login/login` **请求方式:** POST **请求参数:** ```json { "username": "13212345678", "password": "123456", "loginsubmit": "true" } ``` **响应数据:** ```json { "status": 1, "msg": "登录成功", "token": 1 } ``` #### 5.2.2 用户信息接口 **接口路径:** `/adminghd/Menu/getUserInfor` **请求方式:** GET/POST **响应数据:** ```json { "status": 1, "msg": "查询成功", "infro": { "user_name": "管理员", "user_head": null } } ``` #### 5.2.3 微信用户列表接口 **接口路径:** `/adminghd/Wechatinfro/getWechatUserList` **请求方式:** POST **请求参数:** ```json { "page": 1, "page_size": 30, "title": "搜索关键词(可选)" } ``` **响应数据:** ```json { "erro": 0, "msg": "查询成功", "lists": [ { "uid": "xxx", "nickname": "用户昵称", "headimg": "头像URL", "create_time": "2024-05-19 17:47:17", "no_id": 1 } ], "lastPage": 10, "currentPage": 1 } ``` #### 5.2.4 计算记录列表接口 **接口路径:** `/adminghd/Wechatinfro/getWechatRecordList` **请求方式:** POST **请求参数:** ```json { "page": 1, "page_size": 30, "title": "搜索关键词(可选)" } ``` **响应数据:** ```json { "erro": 0, "msg": "查询成功", "lists": [ { "id": "xxx", "name": "患者姓名", "age": 10.5, "height": 140, "bone_age": 9.5, "father_height": 175, "mother_height": 160, "IGF": 250, "LH": 0.8, "uterus_thickness": 10, "calculate_resutlt": 0.661, "create_time": "2024-05-19 17:47:17", "no_id": 1 } ], "lastPage": 10, "currentPage": 1 } ``` #### 5.2.5 资讯管理接口 **获取资讯列表:** - **接口路径:** `/adminghd/Wechatset/getWechatRealTimeInfoList` - **请求方式:** POST **添加/更新资讯:** - **接口路径:** `/adminghd/Wechatset/saveWechatRealTimeInfo` - **请求方式:** POST - **请求参数:** ```json { "id": "资讯ID(更新时必填)", "title_plain": "标题", "thumbnail": "缩略图URL", "excerpt_plain": "简介", "url": "跳转链接" } ``` **删除资讯:** - **接口路径:** `/adminghd/Wechatset/delWechatRealTimeInfo` - **请求方式:** POST - **请求参数:** ```json { "id": "资讯ID" } ``` --- ## 六、预测模型算法 ### 6.1 GHD预测模型(小程序前端模型 - 基于骨龄和IGF指标) **模型公式:** ``` Y = 3.726 - 0.876×(BA-CA) - 0.058×(IGF-1) + 0.229×(IGFBP-3) P = e^Y / (1 + e^Y) ``` **参数说明:** - **BA**:骨龄(Bone Age),单位:年 - **CA**:实际年龄(Chronological Age),单位:年 - **IGF-1**:胰岛素样生长因子-1,单位:ng/ml - **IGFBP-3**:胰岛素样生长因子结合蛋白-3,单位:mg/L - **Y**:中间变量(对数几率) - **P**:GHD预测概率(0-1之间) **计算步骤:** 1. 计算骨龄差值:BA-CA 2. 代入公式计算Y值 3. 通过Logistic函数计算概率P 4. 将P转换为百分比形式 **使用场景:** 小程序前端计算器页面(`ghdCalculator`),用于前端实时计算展示 ### 6.2 GHD预测模型(后端API模型 - 基于IGF、LH和子宫厚度) **模型公式:** ``` P = exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) / (1 + exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度)) ``` **参数说明:** - **IGF-1**:胰岛素样生长因子-1,单位:ng/ml - **LH**:促黄体生成素(Luteinizing Hormone),单位:mIU/ml - **子宫厚度**:单位:mm - **P**:预测概率(0-1之间),保留3位小数 **计算步骤:** 1. 计算指数部分:exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) 2. 通过Logistic函数计算概率P 3. 将P四舍五入保留3位小数 **使用场景:** 后端API接口(`/app/Ghdwechat/calculate` 和 `/app/Ruilaiwechat/calculate`),用于服务器端计算并保存记录 **输入参数(后端API):** - `uid`:用户ID(必填) - `name`:患者姓名(必填) - `age`:年龄(必填,数字) - `height`:身高(必填,数字) - `bone_age`:骨龄(必填,数字) - `father_height`:父亲身高(必填,数字) - `mother_height`:母亲身高(必填,数字) - `IGF`:IGF-1值(必填,数字) - `LH`:LH值(必填,数字) - `uterus_thickness`:子宫厚度(必填,数字) **输出结果:** - `calculate_resutlt`:计算结果(概率值,0-1之间) - 计算结果自动保存到数据库表 `wechat_calculate_record` **注意:** - 小程序前端和后端API使用不同的预测模型公式 - 前端模型基于骨龄和IGF指标,后端模型基于IGF、LH和子宫厚度 - 两个模型可能适用于不同的预测场景或患者群体 - 建议统一模型或明确说明两个模型的适用场景 --- ## 七、非功能性需求 ### 7.1 性能需求 - **响应时间**:API接口响应时间 < 500ms - **并发支持**:支持至少100个并发用户 - **数据库查询**:优化查询性能,使用索引 ### 7.2 安全需求 - **数据加密**:用户密码使用MD5加密存储 - **Session管理**:使用Session进行用户身份验证 - **HTTPS支持**:生产环境使用HTTPS协议 - **SQL注入防护**:使用ThinkPHP的ORM防止SQL注入 - **XSS防护**:对用户输入进行过滤和转义 ### 7.3 可用性需求 - **系统可用性**:99%以上 - **数据备份**:定期备份数据库 - **错误处理**:友好的错误提示信息 ### 7.4 兼容性需求 - **微信小程序**:支持微信小程序最新版本 - **浏览器**:后台管理系统支持主流浏览器(Chrome、Firefox、Safari、Edge) - **移动端**:后台管理系统支持移动端访问 --- ## 八、部署要求 ### 8.1 服务器环境 - **操作系统**:Linux(CentOS 7+) - **Web服务器**:Nginx 1.20+ - **PHP版本**:PHP 5.6+(推荐PHP 7.3+) - **数据库**:MySQL 5.7+ - **PHP扩展**:mysqli、pdo_mysql、mbstring、openssl ### 8.2 目录权限 - `runtime/`:可写权限(日志、缓存) - `public/uploads/`:可写权限(文件上传) - `public/static/`:可读权限(静态资源) ### 8.3 配置文件 - **数据库配置**:`/www/wwwroot/code/application/database.php` - **应用配置**:`/www/wwwroot/code/application/config.php` - **Nginx配置**:`/etc/nginx/conf.d/default.conf` 或宝塔面板配置 --- ## 九、项目现状 ### 9.1 已完成功能 ✅ **后台管理系统:** - 用户登录功能 - 微信用户管理 - 计算记录管理 - 资讯管理 - 菜单管理(部分功能) ✅ **小程序前端:** - GHD计算器页面 - 首页、个人中心等基础页面 - 计算逻辑实现 ✅ **后端API:** - 用户相关接口 - 计算记录接口 - 资讯接口 ### 9.2 待完善功能 ⏳ **数据验证:** - 输入参数的范围验证 - 计算结果合理性检查 ⏳ **用户体验:** - 错误提示优化 - 加载状态提示 - 结果可视化展示 ⏳ **功能扩展:** - 计算历史记录查看(小程序端) - 数据导出功能 - 统计分析功能 ⏳ **文档完善:** - API接口文档 - 用户使用手册 - 管理员操作手册 --- ## 十、风险评估 ### 10.1 技术风险 - **PHP版本兼容性**:当前使用PHP 5.6,建议升级到PHP 7.3+ - **数据库连接**:需要确保MySQL服务稳定运行 - **Session管理**:需要确保Session配置正确 ### 10.2 业务风险 - **数据准确性**:预测模型需要定期验证和优化 - **医疗责任**:系统仅作为辅助工具,不能替代专业医疗诊断 - **数据隐私**:需要保护患者隐私信息 ### 10.3 运维风险 - **数据备份**:需要建立定期备份机制 - **系统监控**:需要监控系统运行状态 - **安全更新**:需要及时更新安全补丁 --- ## 十一、后续规划 ### 11.1 短期规划(1-3个月) 1. **功能优化**: - 完善输入验证 - 优化用户界面 - 添加计算历史功能 2. **性能优化**: - 数据库查询优化 - 缓存机制引入 - 接口响应时间优化 3. **文档完善**: - 编写API文档 - 编写用户手册 ### 11.2 中期规划(3-6个月) 1. **功能扩展**: - 多模型支持 - 数据统计分析 - 报告生成功能 2. **技术升级**: - PHP版本升级 - 框架版本升级 - 前端框架优化 ### 11.3 长期规划(6-12个月) 1. **智能化**: - 机器学习模型集成 - 个性化推荐 - 智能诊断辅助 2. **平台化**: - 多租户支持 - 开放API平台 - 第三方集成 --- ## 十二、附录 ### 12.1 术语表 - **GHD**:Growth Hormone Deficiency,生长激素缺乏 - **IGF-1**:Insulin-like Growth Factor-1,胰岛素样生长因子-1 - **IGFBP-3**:Insulin-like Growth Factor Binding Protein-3,胰岛素样生长因子结合蛋白-3 - **BA**:Bone Age,骨龄 - **CA**:Chronological Age,实际年龄 - **LH**:Luteinizing Hormone,促黄体生成素 ### 12.2 参考文档 - ThinkPHP 5.0 官方文档:http://www.kancloud.cn/manual/thinkphp5 - 微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ - MySQL官方文档:https://dev.mysql.com/doc/ ### 12.3 联系方式 - **项目地址**:`/www/wwwroot/code` - **后台管理地址**:`https://www.ruilaizipj.com/adminghd/login` - **数据库**:MySQL (`ruilai`) --- **文档结束** **创建时间:** 2025年1月28日 **最后更新:** 2025年1月28日 **文档版本:** v1.0