4. 健康数据模型与标准化

企业健康管理平台的数据模型,决定了平台能否把体检、问卷、干预、标签等分散信息串成一条可追溯的健康档案。如果数据模型设计得过于松散,后续做人群分层、风险预警、干预效果评估时就会陷入“同名不同义、同义不同码”的困境。本节围绕六类核心实体——员工、组织、体检指标、问卷量表、健康标签、干预记录——说明它们之间的结构关系,并给出可落地的编码标准设计方法。

一、六类核心实体的定位与关系

员工是健康档案的主体,组织是员工归属与统计聚合的维度,体检指标和问卷量表是两类原始健康数据来源,健康标签是对原始数据加工后的结论,干预记录则是对标签所反映问题的响应动作。它们不是并列的六张表,而是“主体—来源—结论—行动”的链路关系。下图给出实体间的结构与数据流向。

组织 org_id / 层级路径 员工 emp_id / 工号 / 岗位 体检指标 LOINC 编码 / 值 / 单位 问卷量表 量表ID / 题目 / 得分 健康标签 标签码 / 等级 / 来源 干预记录 干预码 / 状态 / 结果 归属 体检数据 问卷作答 规则计算 规则计算 触发干预 效果回写 主体(员工/组织)→ 数据来源(体检/问卷)→ 结论(标签)→ 行动(干预)→ 反馈闭环

二、员工与组织实体:主数据与层级编码

员工实体至少应包含:员工唯一标识(emp_id)、工号、姓名、性别、出生日期、所属组织、岗位、入职日期、在职状态。其中 emp_id 建议采用平台内部生成的不可变主键,工号作为业务标识可变更,两者分离可避免组织调整或工号重编导致历史数据断裂。组织实体采用“组织编码 + 父级编码 + 层级路径”的方式表达树形结构,例如路径 /HQ/RD/BJ01 表示总部—研发中心—北京一组。层级路径字段让“按部门统计体检异常率”这类查询无需递归即可完成。

组织编码建议使用固定长度分段码,如 2 位公司码 + 2 位部门码 + 2 位小组码,便于人工识别与排序。员工与组织之间通过 org_id 关联,同时保留“历史归属”表,记录员工调岗前后的组织变化,否则跨年度统计会出现归属漂移。

三、体检指标:以 LOINC 为骨架的标准化

体检指标是平台中数量最多、来源最杂的数据。不同体检机构对“空腹血糖”可能给出 GLU、FPG、血糖 等不同名称,若不标准化,跨机构对比和趋势分析无法进行。推荐做法是:以 LOINC 编码作为指标的标准标识,平台维护一张“指标字典表”,字段包括 loinc_code、标准名称、别名列表、默认单位、参考范围、指标分类(如肝功能、血脂、血常规)。

体检结果表则记录:emp_id、loinc_code、检测值、单位、参考下限、参考上限、异常标志、体检日期、数据来源机构。异常标志建议用枚举值统一为 N(正常)、H(偏高)、L(偏低)、A(异常未分类),避免各机构用“↑”“偏高”“阳性”等混杂表达。单位必须显式存储,因为同一指标可能以 mmol/L 或 mg/dL 上报,平台应在入库时按字典表默认单位做换算并保留原始值。

四、问卷量表:量表版本与题目编码

问卷量表的核心难点是版本管理。同一份“压力自评量表”可能在不同年度修订题目或计分方式,若只存一个量表 ID,历史得分将失去可比性。因此量表实体应包含 scale_id、scale_name、version、适用人群、计分规则;题目实体包含 item_id、scale_id、version、题干、选项、分值映射;作答记录包含 emp_id、scale_id、version、item_id、选项值、得分、作答时间。

计分规则建议以可配置的表达式存储,例如总分 = 各题得分之和,或维度分 = 某几题之和。这样新增量表时无需改代码,只需在后台配置题目与计分公式。量表得分还应记录“常模参照”,即该得分对应的风险等级阈值,便于后续自动生成标签。

五、健康标签:从原始数据到可行动结论

健康标签是对体检、问卷等原始数据按规则计算出的结论,例如“血压偏高”“压力高风险”“久坐人群”。标签实体应包含 tag_code、tag_name、标签类别(疾病风险/行为/心理/职业)、风险等级(低/中/高)、数据来源、计算规则版本、生效时间。标签码建议采用“类别前缀 + 序号”的稳定编码,如 RISK_BP_01、PSY_STRESS_02,避免用中文名称做主键。

标签与员工之间是多对多关系,且标签具有时效性。因此需要一张“员工标签事实表”,记录 emp_id、tag_code、标签值、风险等级、计算时间、失效时间、规则版本。这样既能查询员工当前标签,也能回溯某次标签是由哪版规则、哪批数据计算得出,满足审计与效果评估需求。

六、干预记录:状态机与效果回写

干预记录描述“针对某个标签采取了什么动作、结果如何”。其字段包括 intervention_id、emp_id、触发标签码、干预类型(宣教/随访/转诊/课程)、干预内容、负责人、计划时间、实际完成时间、状态、效果评价。状态建议用固定状态机:待执行 → 执行中 → 已完成 → 已评估,异常时进入已取消。状态流转必须记录时间戳,便于计算干预及时率。

效果评价应尽量结构化,例如用“标签是否转归”作为客观指标:干预前标签为“血压偏高(中风险)”,干预后复测标签降为“血压正常”,则效果评价为“改善”。若仅用自由文本描述,后续无法做干预有效性统计。干预完成后,系统应将效果回写到员工标签事实表,形成“标签—干预—复评—标签更新”的闭环。

编码标准的三条实用原则:一是主键用内部稳定码,业务码可变更;二是所有枚举值集中维护字典表,禁止在业务表中散落中文枚举;三是任何影响统计口径的字段(单位、量表版本、规则版本)必须随数据一起存储,保证历史可复现。

七、最小可用数据模型示例

以下给出核心表的字段级示例,可作为建表或接口设计的起点。示例中的字段名与类型为合理假设,实际落地时可按所用数据库调整。

-- 员工主表
employee(emp_id PK, emp_no, name, gender, birth_date,
         org_id FK, position, hire_date, status)

-- 组织表
organization(org_id PK, org_code, org_name,
             parent_org_id, level_path, status)

-- 体检指标字典
exam_item(loinc_code PK, std_name, alias_list,
          default_unit, ref_low, ref_high, category)

-- 体检结果
exam_result(result_id PK, emp_id FK, loinc_code FK,
            value_num, unit, ref_low, ref_high,
            abnormal_flag, exam_date, source_org)

-- 量表与题目
scale(scale_id PK, scale_name, version, score_rule)
scale_item(item_id PK, scale_id FK, version,
           question, options, score_map)

-- 员工标签事实
emp_tag(tag_id PK, emp_id FK, tag_code, tag_value,
        risk_level, calc_time, expire_time, rule_version)

-- 干预记录
intervention(interv_id PK, emp_id FK, trigger_tag_code,
             interv_type, content, owner, plan_time,
             done_time, status, effect_eval)

这套模型的关键不在于表数量,而在于每条数据都能回答三个问题:它属于谁、它从哪来、它按什么规则变成结论。把这三个问题在字段层面固定下来,后续的人群统计、风险预警和干预闭环才有稳定的数据基础。