Spaces:
Runtime error
Runtime error
| """ | |
| 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"] | |
| ) | |