File size: 3,467 Bytes
33b10b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
79
import os
import json
from typing import List, Dict, Any

# Nutrient thresholds for solids and liquids
thresholds = {
    'solid': {
        'calories': 250,
        'sugar': 3,
        'salt': 625
    },
    'liquid': {
        'calories': 70,
        'sugar': 2,
        'salt': 175
    }
}

# Function to calculate percentage difference from threshold
def calculate_percentage_difference(value: float, threshold: float) -> float:
    if threshold is None:
        return None  # For nutrients without a threshold
    return ((value - threshold) / threshold) * 100

# Function to analyze nutrients and calculate differences
async def analyze_nutrients(product_type: str, calories: float, sugar: float, salt: float, serving_size: float):
    threshold_data = thresholds.get(product_type)
    if not threshold_data:
        raise HTTPException(status_code=400, detail=f"Invalid product type: {product_type}")

    # Calculate scaled values based on serving size
    scaled_calories = (calories / serving_size) * 100 if calories is not None else None
    scaled_sugar = (sugar / serving_size) * 100 if sugar is not None else None
    scaled_salt = (salt / serving_size) * 100 if salt is not None else None

    nutrient_analysis = {}
    nutrient_analysis_str = ""
    
    # Analyze calories
    if scaled_calories is not None:
        nutrient_analysis['calories'] = {
            'value': scaled_calories,
            'threshold': threshold_data['calories'],
            'difference': scaled_calories - threshold_data['calories'],
            'percentageDiff': calculate_percentage_difference(scaled_calories, threshold_data['calories'])
        }
        if nutrient_analysis['calories']['percentageDiff'] > 0:
            nutrient_analysis_str += f"Calories exceed the ICMR-defined threshold by {nutrient_analysis['calories']['percentageDiff']}%."
        else:
            nutrient_analysis_str += f"Calories are {abs(nutrient_analysis['calories']['percentageDiff'])}% below the ICMR-defined threshold."
            
    # Analyze sugar
    if scaled_sugar is not None:
        nutrient_analysis['sugar'] = {
            'value': scaled_sugar,
            'threshold': threshold_data['sugar'],
            'difference': scaled_sugar - threshold_data['sugar'],
            'percentageDiff': calculate_percentage_difference(scaled_sugar, threshold_data['sugar'])
        }
        if nutrient_analysis['sugar']['percentageDiff'] > 0:
            nutrient_analysis_str += f" Sugar exceeds the ICMR-defined threshold by {nutrient_analysis['sugar']['percentageDiff']}%."
        else:
            nutrient_analysis_str += f"Sugar is {abs(nutrient_analysis['sugar']['percentageDiff'])}% below the ICMR-defined threshold."
            
    # Analyze salt
    if scaled_salt is not None:
        nutrient_analysis['salt'] = {
            'value': scaled_salt,
            'threshold': threshold_data['salt'],
            'difference': scaled_salt - threshold_data['salt'],
            'percentageDiff': calculate_percentage_difference(scaled_salt, threshold_data['salt'])
        }
        if nutrient_analysis['salt']['percentageDiff'] > 0:
            nutrient_analysis_str += f" Salt exceeds the ICMR-defined threshold by {nutrient_analysis['salt']['percentageDiff']}%."
        else:
            nutrient_analysis_str += f"Salt is {abs(nutrient_analysis['salt']['percentageDiff'])}% below the ICMR-defined threshold."

    return {"analysis": nutrient_analysis_str}