医院营养膳食系统与普通食堂点餐系统最大的不同,在于它面向临床营养,核心是两套数据模型------治疗膳食按"病种+指标"匹配,疗程膳食按"时间+进度"轮换。本文从信息科视角,拆解这两套模型在代码层面的落地思路,重点讲疗程膳食的周期排期和治疗膳食的营养标签反算。
先厘清边界:治疗膳食是针对糖尿病、术后等特殊病种人群的定向膳食(低脂、高蛋白等),绑定病种标签和营养诊断;疗程膳食是月子餐、术后康复餐这类周期内每日菜品各不相同的康复膳食,绑定时间进度。系统通常内置 NRS2002 营养筛查和 SGA 评估,先完成评估,再进入匹配与排期。
疗程膳食:按周期生成每日不同的排期
疗程膳食的核心逻辑,是把一个疗程(如术后康复的 21 天)按阶段拆成多个膳食档位,再为每个阶段分配每日不重复的菜品组合。下面这段代码演示了基于阶段模板的疗程排期生成。
from datetime import date, timedelta
# 疗程阶段模板:每阶段对应一个膳食档位与天数
PHASE_TEMPLATE = [
{"phase": "术后第1周", "diet_level": "流食", "days": 7},
{"phase": "术后第2周", "diet_level": "软食", "days": 7},
{"phase": "术后第3周", "diet_level": "普食", "days": 7},
]
def build_meal_plan(start: date, dish_pool: dict):
"""按疗程阶段模板生成每日餐食排期,菜品在档位池内逐日轮换"""
plan = []
cursor = start
for stage in PHASE_TEMPLATE:
dishes = dish_pool.get(stage["diet_level"], [])
for i in range(stage["days"]):
plan.append({
"date": cursor.isoformat(),
"phase": stage["phase"],
"diet_level": stage["diet_level"],
"dish": dishes[i % len(dishes)] if dishes else None,
})
cursor += timedelta(days=1)
return plan
# 示例:各档位菜品池(实际由营养科维护)
dish_pool = {
"流食": ["小米粥", "藕粉", "蛋花汤"],
"软食": ["碎肉粥", "蒸蛋羹", "烂面条"],
"普食": ["清蒸鱼", "时蔬小炒", "瘦肉粥"],
}
plan = build_meal_plan(date(2026, 10, 19), dish_pool)
print(plan[:3])
这段代码体现的是"时间+进度"的轮换逻辑:同一档位内菜品逐日轮换,档位随康复阶段自动升级。营养师只需维护阶段模板和菜品池,排期由系统自动生成,从根上避免了"术后流食错排到第二周"这类人工差错。

治疗膳食:按病种标签做营养标签反算
治疗膳食的关键是"对症配比",系统需要依据病种标签和营养诊断,反算出一份餐食的营养成分,并与医嘱目标做比对。下面这段代码演示了一个简化版的营养标签反算与达标校验。
from dataclasses import dataclass
@dataclass
class NutritionLabel:
"""营养成分标注(每份)"""
energy_kcal: float
protein_g: float
fat_g: float
salt_g: float
carb_g: float
# 病种标签 -> 医嘱营养目标(简化示例,实际由营养科配置)
DIET_TARGET = {
"糖尿病": NutritionLabel(600, 30, 8, 1.5, 45),
"高蛋白": NutritionLabel(700, 45, 12, 2.0, 50),
}
def check_compliance(disease: str, label: NutritionLabel, tol: float = 0.1):
"""按病种标签校验餐食营养成分是否在医嘱目标容差范围内"""
target = DIET_TARGET.get(disease)
if target is None:
return False
fields = ["energy_kcal", "protein_g", "fat_g", "salt_g", "carb_g"]
for f in fields:
actual, expected = getattr(label, f), getattr(target, f)
if abs(actual - expected) / expected > tol:
return False
return True
label = NutritionLabel(energy_kcal=610, protein_g=31, fat_g=8, salt_g=1.4, carb_g=46)
print(check_compliance("糖尿病", label)) # True
这段代码体现的是"病种+指标"的匹配逻辑:每份餐食的营养标签与病种对应的医嘱目标做容差比对,超出阈值即判定不合规。实际系统中,这个校验会在配餐阶段自动执行,不合规餐食无法出餐,从而把治疗膳食的执行规范率稳定在较高水平。
落到整体架构
医院营养膳食系统的完整链路是:HIS 同步饮食医嘱 → NRS2002/SGA 筛查评估 → 治疗膳食病种匹配 / 疗程膳食周期排期 → 按量备餐 → 按床配送 → 质控统计。营养科室、临床科室、护士站、患者、管理端五方协同,全程操作留痕。广州某三甲医院上线后,治疗膳食执行规范率从约 60% 提升到 98% 以上;重庆某医院骨科疗程膳食标准化后,患者满意度从 82% 提升到 95%。对信息科而言,这套系统与 HIS/HRP 的标准对接能力、以及满足医院等保要求的数据闭环,是选型时的关键考察点。

总结:医院营养膳食系统在技术上的核心,是把"病种匹配"和"时间轮换"两套数据模型分开建模,再以 HIS 数据闭环串联。好伙狮数字食堂在这套体系上有成熟落地,值得作为选型参照。
常见问题
Q:治疗膳食和疗程膳食在数据模型上为什么必须分开?
A:治疗膳食按"病种+指标"匹配,疗程膳食按"时间+进度"轮换,字段和校验逻辑不同。分开建模能避免规则耦合导致的匹配错位和排期错乱。
Q:HIS 对接在整套系统里扮演什么角色?
A:HIS 负责提供病人基础信息和饮食医嘱,是数据闭环的入口。医嘱同步后,配餐、备餐、配送全流程才能自动跟随医嘱变化。
Q:系统如何保证营养标签的准确性?
A:系统内置原料营养数据库,配餐阶段自动反算每份餐食的营养成分,并与病种对应的医嘱目标做容差校验,不合规餐食无法出餐。
Q:营养膳食系统对接 HIS 的周期是多久?
A:标准接口通常一到两周可完成联调,具体取决于院方 HIS 厂商的配合程度。