前阵子朋友找我帮忙看一个社区健康类小程序的方案,需求方想做一个“中医体质+社区问诊+居民健康档案”的一体化系统,而且明确要求必须能跑在 Android 环境下,最终形态又要是小程序。乍一听好像有点绕——又是 Android 又是小程序,到底服务端在哪端、管理端在哪端、居民用哪个入口?等我把里面那层逻辑理顺之后才发现,这个需求其实非常典型:物业型社区医疗、企业园区健康角、基层公卫驿站这类场景里,运营人员手里拿的基本都是 Android 平板或安卓手机,而居民侧最轻的交互方式就是小程序,扫码即用、不用装 App。今天我就把这个项目的完整设计思路、体质辨识算法落地方案和排坑过程写出来,给正在做类似社区健康管理系统的朋友一个可复用的参考。这个项目适合两类人看:一类是刚接触 uni-app 跨端开发、想搞明白“Android 壳 + 小程序端”到底怎么配合的开发者;另一类是产品经理或项目经理,想知道中医体质这种偏传统理论的东西,怎么转化成一套能工程化、可量化、可追溯的数字系统。
1. 为什么是“Android 端 + 小程序”双端形态
1.1 双端职责划分的底层逻辑
很多第一次看到这个标题的人都会问:既然做小程序,为什么还要扯上 Android?甚至有人会直接把它理解成“做一个 Android 手机上的问诊 App”。其实这里头的角色划分是这样的:
- Android 端:面向社区医疗站的工作人员,用的是
Android Studio开发的原生工程或通过uni-app打包出来的管理端。主要职责是录入居民档案、维护坐诊安排、查看问诊排队记录、管理中医体质评估任务。因为使用场景是在社区卫生站前台或诊室里的固定设备上,所以 Android 平板是最合理的选择——便宜、可控、可以锁应用。 - 小程序端:面向社区居民。用户不需要下载 App,在微信里搜一下或者扫个码就能填体质评估问卷、预约社区医生问诊、查看历次健康记录和体质报告。
这里必须强调一个关键点:哪怕你用的是 uni-app 这种跨端框架,也不代表 Android 端和小程序端的业务代码可以完全共用。管理端的界面密度高、信息展示量大,适合用宽屏平板来呈现;居民端则要足够轻、路径足够短,老人也能按得动。所以我的做法是——在同一个 uni-app 工程里通过条件编译分平台输出,但两端的页面结构完全独立设计。管理端用了 split-view 的布局来保证列表和详情同屏;居民端则全部是上下层级关系的小程序页面,一个页面只干一件事。
1.2 体质辨识服务的跨端复用
体质辨识和问诊记录这部分逻辑比较重,而且后续可能还要扩展微信服务号、PC 管理后台等多入口,所以我没有把算法写死在端上,而是抽成了独立的后端服务。Android 管理端和小程序端都通过 HTTPS 调统一接口,这样居民在小程序里填的量表数据、管理端在 Android 上录入的线下问诊记录,最终都能汇到同一条业务链路上。
服务端技术栈我用的是 Spring Boot,数据库用 MySQL,体质辨识相关的规则引擎单独做了一个模块,方便后续调整算法而不用动两端代码。整体协作模式是:小程序负责采集居民端信息,Android 管理端负责线下核实和补充巡检数据,服务端负责算体质、建档、推报告。这样的三角结构,下面每一块单独拆开讲都有一堆细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从“望闻问切”到可计算的九型体质辨识算法
2.1 九型体质分类绝不是空泛的玄学标签
要把中医体质理论工程化,第一件事就是明确它到底有没有一个可操作的标准。实际上中华中医药学会发布的《中医体质分类与判定》标准里,对体质类型的定义是非常清晰的——九种体质类型(平和质、气虚质、阳虚质、阴虚质、痰湿质、湿热质、血瘀质、气郁质、特禀质),每一种都有对应的症状表现和判定量表的条目,比如“平和质”的判定条目里有“精力充沛”“不易疲劳”这些正向条目,而偏颇体质则各有各的负向条目集。
这套标准落到系统里的核心,是一份标准化的《中医体质分类与判定自测表》,分 9 个亚量表,共 60 多个条目,每个条目按 5 级评分(没有/很少/有时/经常/总是)。居民端的评估流程就靠这份量表来驱动。
量表设计的时候有个产品层面要特别小心的地方:不能把全部 60 多个题目一次性堆在一屏上,尤其是目标用户里有相当一部分是中老年人。我实际做的时候把题目拆成了 4 步,每一步只展示一个体质维度下的 7~8 道题,每题用大字号的单选卡片,点选后自动跳到下一题,并配了进度条。这种交互在小程序端实现并不难,但对完成率的提升非常明显——测试阶段全量一屏展示的弃答率是 38%,改成分段式之后弃答率降到了 6% 左右。
2.2 原始分到转化分:判定规则的工程化表达
判定标准里最核心的算法其实就是两个公式:
- 原始分 = 该亚量表各条目得分之和
- 转化分 = (原始分 − 该亚量表条目数) ÷ (该亚量表条目数 × 4) × 100
每个亚量表按转化分做判定:
- 平和质:转化分 ≥ 60 分,且其他 8 种偏颇体质转化分均 < 30 分时,判定为“是”;≥ 60 分但其他偏颇体质有 ≥ 30 分的情况,判定为“基本是”;否则判定为“否”。
- 偏颇体质:转化分 ≥ 40 分判定为“是”;30~39 分判定为“倾向是”;< 30 分判定为“否”。
这套规则看起来简单,但落到代码里有一个极容易踩的坑——边界条件的范围区间到底用开区间还是闭区间,下面这段是调整次数
