""" 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"] )