File size: 2,446 Bytes
ec90eae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""
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"]
        )