PregoPal / plugins /dri_analysis.py
J.B-Lin
chore: save current version before UI improvements (i18n + font fix)
ec90eae
Raw
History Blame Contribute Delete
2.45 kB
"""
PregoPal - DRIs 营养素对比分析插件
==================================
对比营养素参考摄入量,分析不足。
"""
from plugins.base import LoopPlugin, PluginResult, LoopStage, LoopContext
from modules.nutrition_standards import DRIsParser
class DRIAnalysisPlugin(LoopPlugin):
"""对比营养素参考摄入量"""
def stage(self) -> LoopStage:
return LoopStage.ANALYZE
def name(self) -> str:
return "dri_analysis"
async def run(self, ctx: LoopContext) -> PluginResult:
# 获取昨日饮食数据
yesterday_diet = ctx.briefing.get("yesterday_diet", {})
if yesterday_diet.get("status") != "found":
return PluginResult(
success=True,
data={"status": "no_data"},
message="昨日无饮食数据,跳过 DRIs 分析"
)
# 模拟摄入量(后续由 AI 或更精确的解析提供)
# 这里使用简化的估算
intake = {
"能量(MJ)": 8.2,
"蛋白质(g)": 55,
"钙(mg)": 420,
"铁(mg)": 12,
"锌(mg)": 8,
"维生素A(μg RAE)": 600,
"维生素D(μg)": 2.1,
"维生素E(mg α-TE)": 10,
"维生素B1(mg)": 1.0,
"维生素B2(mg)": 0.9,
"叶酸(μg DFE)": 350,
"碘(μg)": 180,
}
# 获取孕期阶段(从简报或默认)
trimester = ctx.briefing.get("trimester", "孕中期")
# 对比分析
analysis = DRIsParser.compare_with_intake(trimester, intake)
ctx.analysis_results = analysis
# 写入简报
ctx.briefing["dri_analysis"] = {
"stage": trimester,
"focus_nutrients": analysis["focus_nutrients"],
"summary": analysis["summary"],
"comparison_table": DRIsParser.format_comparison_table(
analysis["comparisons"]
),
}
# 生成推荐食物(结合家庭菜谱)
recommended = []
for nutrient in analysis["focus_nutrients"][:5]:
foods = DRIsParser.RICH_FOODS.get(nutrient, [])
recommended.extend(foods[:3])
# 去重
ctx.briefing["recommended_foods"] = list(set(recommended))
return PluginResult(
success=True,
data=analysis,
message=analysis["summary"]
)