- Flask/SQLAlchemy app with profile, dashboard, recommendations - AI crawl pipeline (GPT-4o) with admin review workflow - 14 curated health sources (RSS + index crawling) - Production config: env vars, Gunicorn, systemd, nginx - deploy/ scripts for VPS setup and updates Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
406 lines
25 KiB
Python
406 lines
25 KiB
Python
# Evidence levels: A = meta-analyse/RCT solide, B = observationnel/RCT limité, C = consensus expert
|
||
|
||
RECS = [
|
||
# ── NUTRITION ─────────────────────────────────────────────────────────────
|
||
{
|
||
"id": "med_diet",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "🥗",
|
||
"title": "Régime méditerranéen",
|
||
"summary": "Huile d'olive, légumes, légumineuses, poissons gras, noix. Limiter viandes rouges et ultra-transformés.",
|
||
"details": "Réduit de 30% le risque cardiovasculaire (étude PREDIMED, 7447 participants). Protège contre le diabète T2, l'Alzheimer et certains cancers. Riche en antioxydants et acides gras mono-insaturés.",
|
||
"evidence_level": "A",
|
||
"source": "Estruch R. et al., NEJM 2013 (PREDIMED) — Sofi F. et al., BMJ 2008",
|
||
"tags": ["cœur", "longévité", "anti-inflammatoire"],
|
||
"priority": 10,
|
||
"condition": lambda p: p.get('diet_type') in [None, 'omnivore', 'flexitarian'],
|
||
},
|
||
{
|
||
"id": "low_gi",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "📊",
|
||
"title": "Alimentation à faible indice glycémique",
|
||
"summary": "Privilégier glucides complexes et fibres pour stabiliser la glycémie et l'énergie.",
|
||
"details": "Favoriser légumineuses, céréales complètes, légumes non-féculents. Éviter sucres ajoutés, pain blanc, produits industriels. Réduit de 20% le risque de diabète T2 et améliore le contrôle glycémique existant.",
|
||
"evidence_level": "A",
|
||
"source": "Jenkins D.J. et al., Diabetes Care 2008 — Livesey G. et al., Am J Clin Nutr 2019",
|
||
"tags": ["glycémie", "diabète", "énergie"],
|
||
"priority": 9,
|
||
"condition": lambda p: (
|
||
(p.get('bmi') or 0) > 25 or
|
||
'diabetes_risk' in (p.get('conditions') or []) or
|
||
'metabolic_syndrome' in (p.get('conditions') or [])
|
||
),
|
||
},
|
||
{
|
||
"id": "omega3",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "🐟",
|
||
"title": "Acides gras oméga-3 (EPA/DHA)",
|
||
"summary": "2-3 portions/semaine de poissons gras ou supplémentation 1g/jour d'EPA+DHA.",
|
||
"details": "Réduisent les triglycérides de 25-30%, l'inflammation (CRP) et le risque d'arythmie. Action anti-agrégante plaquettaire. Pour les végétaliens : DHA d'algues recommandé (même source que les poissons).",
|
||
"evidence_level": "A",
|
||
"source": "Mozaffarian D. & Wu J.H.Y., JACC 2011 — GISSI trial, Lancet 1999",
|
||
"tags": ["cœur", "cerveau", "anti-inflammatoire"],
|
||
"priority": 9,
|
||
"condition": lambda p: (
|
||
'cardiovascular_risk' in (p.get('conditions') or []) or
|
||
p.get('diet_type') in ['omnivore', 'flexitarian', 'vegan']
|
||
),
|
||
},
|
||
{
|
||
"id": "hydration",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "💧",
|
||
"title": "Hydratation optimale",
|
||
"summary": "1.5 à 2.5L d'eau par jour. La soif est un signal tardif de déshydratation.",
|
||
"details": "Même une déshydratation légère (1-2%) dégrade les fonctions cognitives et l'humeur. L'eau plate reste la meilleure boisson. Tisanes et infusions comptent. Limiter sodas, jus industriels et alcool.",
|
||
"evidence_level": "B",
|
||
"source": "EFSA Panel on Dietetic Products, EFSA Journal 2010",
|
||
"tags": ["base", "énergie", "cognition"],
|
||
"priority": 7,
|
||
"condition": lambda p: True,
|
||
},
|
||
{
|
||
"id": "iron_women",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "🩸",
|
||
"title": "Apport en fer — femmes en âge de procréer",
|
||
"summary": "Besoins 2x supérieurs (18mg/j vs 8mg/j). Viandes rouges maigres, légumineuses, épinards.",
|
||
"details": "Associer aliments riches en fer avec vitamine C pour multiplier par 3 l'absorption non-héminique. Éviter thé et café pendant les repas riches en fer (tanins inhibiteurs). Le fer héminique (viandes) est absorbé à 25% vs 5% pour le fer végétal.",
|
||
"evidence_level": "A",
|
||
"source": "OMS — Iron Deficiency Anaemia guidelines 2001 — Hallberg L., Eur J Clin Nutr 2001",
|
||
"tags": ["fer", "fatigue", "femmes"],
|
||
"priority": 8,
|
||
"condition": lambda p: p.get('sex') == 'female' and (p.get('age') or 0) < 50,
|
||
},
|
||
{
|
||
"id": "calcium_bones",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "🦴",
|
||
"title": "Calcium et santé osseuse",
|
||
"summary": "1000–1200 mg/j via produits laitiers, sardines avec arêtes, amandes, légumes verts.",
|
||
"details": "La densité osseuse (pic) est atteinte à 30 ans, puis décline. Le calcium seul est insuffisant : associer vitamine D et activité physique portante. Éviter suppléments >500mg/prise (risque cardiovasculaire si fortes doses).",
|
||
"evidence_level": "A",
|
||
"source": "Weaver C.M. et al., Osteoporosis International 2016 — EFSA 2015",
|
||
"tags": ["os", "vieillissement", "femmes"],
|
||
"priority": 7,
|
||
"condition": lambda p: (
|
||
(p.get('age') or 0) > 40 or
|
||
p.get('sex') == 'female' or
|
||
'osteoporosis_risk' in (p.get('conditions') or [])
|
||
),
|
||
},
|
||
{
|
||
"id": "plant_protein",
|
||
"domain": "nutrition", "domain_label": "Alimentation", "icon": "🌱",
|
||
"title": "Protéines végétales complètes",
|
||
"summary": "Combiner légumineuses + céréales (ex: lentilles + riz) pour tous les acides aminés essentiels.",
|
||
"details": "Substituer 3% des calories des protéines animales par des végétales réduit la mortalité de 10%. Tofu, tempeh, quinoa (protéine complète), edamame sont d'excellentes sources. La complémentation n'a pas besoin d'être au même repas.",
|
||
"evidence_level": "B",
|
||
"source": "Song M. et al., JAMA Internal Medicine 2016 — Willett W. et al., Lancet 2019",
|
||
"tags": ["protéines", "cœur", "longévité"],
|
||
"priority": 6,
|
||
"condition": lambda p: p.get('diet_type') in ['vegetarian', 'vegan', 'flexitarian'],
|
||
},
|
||
|
||
# ── JEÛNE INTERMITTENT ─────────────────────────────────────────────────────
|
||
{
|
||
"id": "fasting_14_10",
|
||
"domain": "fasting", "domain_label": "Jeûne intermittent", "icon": "⏳",
|
||
"title": "Protocole 14/10 — démarrage progressif",
|
||
"summary": "Jeûner 14h, fenêtre alimentaire de 10h. Idéal pour débuter sans contrainte excessive.",
|
||
"details": "Plus facile à tenir que le 16/8, tout en activant la cétose légère et l'autophagie débutante après 12-14h. Recommandé aux débutants, femmes et +50 ans. Dernier repas avant 20h améliore la qualité du sommeil et réduit le cortisol nocturne.",
|
||
"evidence_level": "B",
|
||
"source": "Sutton E.F. et al., Cell Metabolism 2018 — Wilkinson M.J. et al., Cell Metabolism 2020",
|
||
"tags": ["débutant", "métabolisme", "sommeil"],
|
||
"priority": 8,
|
||
"condition": lambda p: (
|
||
p.get('activity_level') in ['sedentary', 'light', 'moderate'] or
|
||
p.get('sex') == 'female' or
|
||
(p.get('age') or 0) > 50
|
||
),
|
||
},
|
||
{
|
||
"id": "fasting_16_8",
|
||
"domain": "fasting", "domain_label": "Jeûne intermittent", "icon": "⏱️",
|
||
"title": "Protocole 16/8",
|
||
"summary": "Jeûner 16h, fenêtre alimentaire de 8h (ex: 12h–20h). Standard pour sportifs actifs.",
|
||
"details": "Améliore la sensibilité à l'insuline de 25%, réduit l'IL-6 et le TNF-α (marqueurs inflammatoires). La perte de poids est comparable à la restriction calorique continue avec meilleure adhérence à long terme. Ne pas pratiquer les jours d'entraînement intensif sans adaptation.",
|
||
"evidence_level": "B",
|
||
"source": "Lowe D.A. et al., JAMA Internal Medicine 2020 — Cioffi I. et al., Nutrients 2018",
|
||
"tags": ["métabolisme", "poids", "insuline"],
|
||
"priority": 9,
|
||
"condition": lambda p: (
|
||
p.get('activity_level') in ['moderate', 'intense', 'athlete'] and
|
||
(
|
||
'weight_loss' in (p.get('health_goals') or []) or
|
||
'metabolic_health' in (p.get('health_goals') or [])
|
||
)
|
||
),
|
||
},
|
||
{
|
||
"id": "fasting_5_2",
|
||
"domain": "fasting", "domain_label": "Jeûne intermittent", "icon": "📅",
|
||
"title": "Protocole 5:2",
|
||
"summary": "5 jours normaux, 2 jours à 500-600 kcal. Flexibilité maximale.",
|
||
"details": "Efficace pour perte de poids (-5-8% en 3 mois) avec bonne adhérence. Les jours de restriction peuvent être consécutifs (plus d'effet) ou non (plus facile). Éviter les jours de sport intense pour les jours restreints.",
|
||
"evidence_level": "B",
|
||
"source": "Harvie M.N. et al., Int Journal of Obesity 2011 — Harris L. et al., Obesity Reviews 2018",
|
||
"tags": ["poids", "flexibilité", "calories"],
|
||
"priority": 7,
|
||
"condition": lambda p: 'weight_loss' in (p.get('health_goals') or []),
|
||
},
|
||
{
|
||
"id": "fasting_autophagy",
|
||
"domain": "fasting", "domain_label": "Jeûne intermittent", "icon": "🔬",
|
||
"title": "Jeûne et autophagie cellulaire",
|
||
"summary": "À partir de 16-18h de jeûne, l'autophagie s'active et recycle les protéines endommagées.",
|
||
"details": "L'autophagie (Prix Nobel 2016, Yoshinori Ohsumi) est le mécanisme de nettoyage cellulaire. Activée par la déplétion en nutriments (mTOR inhibé). Potentiellement protecteur contre cancers, Alzheimer et vieillissement cellulaire. Encore peu d'études humaines directes.",
|
||
"evidence_level": "B",
|
||
"source": "Levine B. & Kroemer G., Cell 2019 — Nobel Prize 2016 Commentary",
|
||
"tags": ["longévité", "cellules", "vieillissement"],
|
||
"priority": 7,
|
||
"condition": lambda p: 'longevity' in (p.get('health_goals') or []),
|
||
},
|
||
|
||
# ── EXERCICE ──────────────────────────────────────────────────────────────
|
||
{
|
||
"id": "zone2_cardio",
|
||
"domain": "exercise", "domain_label": "Exercice", "icon": "🏃",
|
||
"title": "Cardio zone 2 — 150 min/semaine",
|
||
"summary": "Marche rapide, vélo, natation à effort modéré. Réduction de 35% de la mortalité toutes causes.",
|
||
"details": "Zone 2 = 60-70% FCmax, conversation possible. Optimise la biogenèse mitochondriale et le métabolisme des graisses. L'OMS recommande 150 min/semaine minimum. Même 11 min/jour montrent des bénéfices significatifs.",
|
||
"evidence_level": "A",
|
||
"source": "OMS Physical Activity Guidelines 2020 — Wen C.P. et al., Lancet 2011",
|
||
"tags": ["cœur", "métabolisme", "base"],
|
||
"priority": 10,
|
||
"condition": lambda p: True,
|
||
},
|
||
{
|
||
"id": "strength_training",
|
||
"domain": "exercise", "domain_label": "Exercice", "icon": "💪",
|
||
"title": "Musculation 2-3x/semaine",
|
||
"summary": "Préserve la masse musculaire, la densité osseuse et le métabolisme de base après 35 ans.",
|
||
"details": "La sarcopénie débute à 30 ans (-3-5%/décennie sans exercice). La musculation augmente la sensibilité à l'insuline, améliore la composition corporelle et réduit le risque de fractures. Priorité absolue après 40 ans, même avec poids légers.",
|
||
"evidence_level": "A",
|
||
"source": "Westcott W.L., Current Sports Medicine Reports 2012 — Liu C.J. & Latham N., Cochrane 2009",
|
||
"tags": ["muscle", "métabolisme", "os", "vieillissement"],
|
||
"priority": 9,
|
||
"condition": lambda p: (
|
||
'muscle_gain' in (p.get('health_goals') or []) or
|
||
(p.get('age') or 0) > 35 or
|
||
p.get('activity_level') in ['moderate', 'intense', 'athlete']
|
||
),
|
||
},
|
||
{
|
||
"id": "hiit",
|
||
"domain": "exercise", "domain_label": "Exercice", "icon": "⚡",
|
||
"title": "HIIT — Entraînement par intervalles",
|
||
"summary": "20-30 min de HIIT 2x/semaine. +15% VO2max en 8 semaines, combustion graisses prolongée.",
|
||
"details": "Le HIIT génère un effet EPOC (Excess Post-exercise Oxygen Consumption) : combustion accrue jusqu'à 24h post-effort. Améliore la VO2max et la sensibilité à l'insuline plus efficacement que le cardio continu par unité de temps. Ne pas faire plus de 2-3 sessions/semaine.",
|
||
"evidence_level": "A",
|
||
"source": "Gibala M.J. et al., Journal of Physiology 2012 — Weston K.S. et al., Br J Sports Med 2014",
|
||
"tags": ["VO2max", "graisses", "efficacité"],
|
||
"priority": 8,
|
||
"condition": lambda p: p.get('activity_level') in ['moderate', 'intense', 'athlete'],
|
||
},
|
||
{
|
||
"id": "core_training",
|
||
"domain": "exercise", "domain_label": "Exercice", "icon": "🎯",
|
||
"title": "Gainage et renforcement du core",
|
||
"summary": "Planche, dead bug, bird dog : 3 séries de 30-60s, 3x/semaine. Prévient les lombalgies.",
|
||
"details": "Le renforcement du core (abdominaux profonds, lombaires, plancher pelvien) réduit les lombalgies chroniques de 50%. La planche frontale active plus efficacement le transverse de l'abdomen que les crunchs classiques, sans stress vertébral.",
|
||
"evidence_level": "B",
|
||
"source": "McGill S.M., J Orthopedic & Sports PT 2010 — Coulombe B.J. et al., Sports Health 2017",
|
||
"tags": ["posture", "dos", "performance"],
|
||
"priority": 7,
|
||
"condition": lambda p: (
|
||
'back_pain' in (p.get('conditions') or []) or
|
||
p.get('activity_level') in ['moderate', 'intense', 'athlete'] or
|
||
'muscle_gain' in (p.get('health_goals') or [])
|
||
),
|
||
},
|
||
{
|
||
"id": "mobility",
|
||
"domain": "exercise", "domain_label": "Exercice", "icon": "🧘",
|
||
"title": "Mobilité et flexibilité",
|
||
"summary": "10-15 min d'étirements dynamiques ou yoga quotidien. Prévient blessures et douleurs chroniques.",
|
||
"details": "La mobilité articulaire décline de 30% entre 30 et 70 ans sans entretien. Le yoga combine mobilité, force et réduction du stress (cortisol -20%). Privilégier étirements dynamiques avant effort, statiques après.",
|
||
"evidence_level": "B",
|
||
"source": "Cramer H. et al., Cochrane Database 2013 — Behm D.G. et al., Applied Physiology 2016",
|
||
"tags": ["souplesse", "blessures", "stress"],
|
||
"priority": 6,
|
||
"condition": lambda p: (
|
||
p.get('activity_level') in ['sedentary', 'light'] or
|
||
(p.get('age') or 0) > 50 or
|
||
'stress_reduction' in (p.get('health_goals') or [])
|
||
),
|
||
},
|
||
|
||
# ── SOMMEIL ───────────────────────────────────────────────────────────────
|
||
{
|
||
"id": "sleep_duration",
|
||
"domain": "sleep", "domain_label": "Sommeil", "icon": "😴",
|
||
"title": "Optimiser la durée du sommeil (7-9h)",
|
||
"summary": "Dormir moins de 6h double le risque d'obésité, de diabète T2 et de maladies cardiovasculaires.",
|
||
"details": "La dette de sommeil chronique élève le cortisol, la ghréline (appétit) et diminue la leptine (satiété). La consolidation mémorielle et la réparation cellulaire se font principalement en sommeil profond (ondes lentes). Récupérer le week-end ne compense pas.",
|
||
"evidence_level": "A",
|
||
"source": "Cappuccio F.P. et al., Sleep 2010 — Walker M., Why We Sleep 2017",
|
||
"tags": ["récupération", "hormones", "poids"],
|
||
"priority": 10,
|
||
"condition": lambda p: (p.get('sleep_hours') or 8) < 7,
|
||
},
|
||
{
|
||
"id": "sleep_hygiene",
|
||
"domain": "sleep", "domain_label": "Sommeil", "icon": "🌙",
|
||
"title": "Hygiène du sommeil",
|
||
"summary": "Chambre à 18°C, obscurité totale, horaires réguliers, pas d'écrans 1h avant.",
|
||
"details": "La mélatonine est inhibée par la lumière bleue (LED, écrans). La régularité des horaires synchronise l'horloge circadienne. Une chambre froide (18°C) facilite la chute de la température corporelle nécessaire à l'endormissement. Caféine à éviter après 14h (demi-vie 5-7h).",
|
||
"evidence_level": "B",
|
||
"source": "Gradisar M. et al., Sleep Medicine Reviews 2013 — Chang A.M. et al., PNAS 2015",
|
||
"tags": ["mélatonine", "circadien", "qualité"],
|
||
"priority": 8,
|
||
"condition": lambda p: True,
|
||
},
|
||
{
|
||
"id": "sleep_stress",
|
||
"domain": "sleep", "domain_label": "Sommeil", "icon": "🧠",
|
||
"title": "Protocole anti-stress pré-sommeil",
|
||
"summary": "Cohérence cardiaque 5 min + journaling : réduit le cortisol et facilite l'endormissement.",
|
||
"details": "Le cortisol élevé en soirée (lié au stress chronique) fragmente le sommeil et réduit le sommeil profond. La respiration 5-5 (5s inspire / 5s expire) active le système parasympathique en 3-4 cycles. Le journaling externalise les pensées ruminatives.",
|
||
"evidence_level": "B",
|
||
"source": "Ong J.C. et al., Sleep 2014 — Lehrer P.M., Applied Psychophysiology 2013",
|
||
"tags": ["cortisol", "stress", "relaxation"],
|
||
"priority": 9,
|
||
"condition": lambda p: (p.get('stress_level') or 0) >= 6,
|
||
},
|
||
|
||
# ── GESTION DU STRESS ─────────────────────────────────────────────────────
|
||
{
|
||
"id": "coherence_cardiaque",
|
||
"domain": "stress", "domain_label": "Gestion du stress", "icon": "💚",
|
||
"title": "Cohérence cardiaque (méthode 365)",
|
||
"summary": "3 fois/jour, 6 respirations/min, 5 min. Réduit le cortisol de 20% en 4 semaines.",
|
||
"details": "La méthode 365 (3x/j, 6 resp/min, 5 min) synchronise la HRV (variabilité de fréquence cardiaque). Effets mesurables sur l'anxiété et la pression artérielle. Apps : RespiRelax+, Kardia. Idéalement : matin au réveil, avant déjeuner, soir.",
|
||
"evidence_level": "B",
|
||
"source": "McCraty R. et al., HeartMath Institute 2015 — Lehrer P.M., Biofeedback 2013",
|
||
"tags": ["cortisol", "HRV", "anxiété"],
|
||
"priority": 9,
|
||
"condition": lambda p: (p.get('stress_level') or 0) >= 5,
|
||
},
|
||
{
|
||
"id": "meditation",
|
||
"domain": "stress", "domain_label": "Gestion du stress", "icon": "🧘",
|
||
"title": "Méditation pleine conscience (MBSR)",
|
||
"summary": "10-20 min/jour réduit l'anxiété de 38% et modifie structurellement l'amygdale en 8 semaines.",
|
||
"details": "Le programme MBSR (Mindfulness-Based Stress Reduction) de Jon Kabat-Zinn est le plus étudié (47 essais contrôlés en méta-analyse). L'IRM montre une réduction du volume de l'amygdale et une augmentation du cortex préfrontal après 8 semaines. Apps : Petit Bambou, Headspace.",
|
||
"evidence_level": "A",
|
||
"source": "Goyal M. et al., JAMA Internal Medicine 2014 — Hölzel B.K. et al., Psychiatry Research 2011",
|
||
"tags": ["anxiété", "dépression", "focus"],
|
||
"priority": 8,
|
||
"condition": lambda p: (
|
||
(p.get('stress_level') or 0) >= 6 or
|
||
'anxiety' in (p.get('conditions') or []) or
|
||
'stress_reduction' in (p.get('health_goals') or [])
|
||
),
|
||
},
|
||
|
||
# ── SUPPLÉMENTS ───────────────────────────────────────────────────────────
|
||
{
|
||
"id": "vitamin_d",
|
||
"domain": "supplements", "domain_label": "Suppléments", "icon": "☀️",
|
||
"title": "Vitamine D3 (cholécalciférol)",
|
||
"summary": "80% des Européens déficients. 1000-2000 UI/jour d'oct. à mars, avec un repas gras.",
|
||
"details": "La vitamine D est essentielle à l'immunité (T-cells), la santé osseuse, la régulation de l'humeur et la prévention de certains cancers. La D3 est 87% plus efficace que la D2. Taux optimal : 40-60 ng/mL. Vérifier par bilan sanguin (25-OH-D).",
|
||
"evidence_level": "A",
|
||
"source": "Holick M.F., NEJM 2007 — Martineau A.R. et al., BMJ 2017",
|
||
"tags": ["immunité", "os", "humeur"],
|
||
"priority": 9,
|
||
"condition": lambda p: True,
|
||
},
|
||
{
|
||
"id": "magnesium",
|
||
"domain": "supplements", "domain_label": "Suppléments", "icon": "⚗️",
|
||
"title": "Magnésium (bisglycinate ou malate)",
|
||
"summary": "300-400 mg/jour au coucher. Améliore sommeil, gestion du stress et contractilité musculaire.",
|
||
"details": "Le magnésium est cofacteur de 300+ réactions enzymatiques. 70% de la population est déficiente (stress, alcool, sport intensif l'épuisent). Forme bisglycinate = meilleure biodisponibilité + effets sur le sommeil. Forme malate = énergie/musculation. Éviter l'oxyde (très faible absorption).",
|
||
"evidence_level": "B",
|
||
"source": "Abbasi B. et al., J Research in Medical Sciences 2012 — Boyle N.B. et al., Nutrients 2017",
|
||
"tags": ["sommeil", "stress", "muscles"],
|
||
"priority": 8,
|
||
"condition": lambda p: (
|
||
(p.get('stress_level') or 0) >= 5 or
|
||
(p.get('sleep_hours') or 8) < 7 or
|
||
p.get('activity_level') in ['intense', 'athlete']
|
||
),
|
||
},
|
||
{
|
||
"id": "probiotics",
|
||
"domain": "supplements", "domain_label": "Suppléments", "icon": "🦠",
|
||
"title": "Probiotiques et santé du microbiote",
|
||
"summary": "Lactobacillus + Bifidobacterium multi-souches. Kéfir, yaourt, kimchi, kombucha en natif.",
|
||
"details": "Le microbiote intestinal influence l'immunité (70% des cellules immunitaires), l'humeur (axe intestin-cerveau via nerf vague) et le métabolisme. Probiotiques efficaces si au moins 10^9 UFC/dose. Les sources fermentées naturelles sont préférables aux suppléments.",
|
||
"evidence_level": "B",
|
||
"source": "Hill C. et al., Nature Reviews Gastroenterology 2014 — Cryan J.F. et al., Nature Reviews 2019",
|
||
"tags": ["immunité", "digestion", "humeur"],
|
||
"priority": 7,
|
||
"condition": lambda p: (
|
||
'digestive_issues' in (p.get('conditions') or []) or
|
||
p.get('diet_type') in ['vegan', 'vegetarian'] or
|
||
(p.get('stress_level') or 0) >= 6
|
||
),
|
||
},
|
||
{
|
||
"id": "creatine",
|
||
"domain": "supplements", "domain_label": "Suppléments", "icon": "💊",
|
||
"title": "Créatine monohydrate",
|
||
"summary": "3-5g/jour. Supplément le plus étudié au monde. Force +8%, récupération et mémoire.",
|
||
"details": "La créatine augmente les réserves de phosphocréatine musculaire. Plus de 1000 études cliniques. Bénéfices cognitifs émergents (mémoire de travail +14% en carence). Particulièrement utile pour végétariens (faibles réserves endogènes). Phase de charge inutile.",
|
||
"evidence_level": "A",
|
||
"source": "Lanhers C. et al., European J Sport Science 2017 — Rawson E.S. & Venezia A.C., J Nutrition 2011",
|
||
"tags": ["muscle", "force", "cognition"],
|
||
"priority": 7,
|
||
"condition": lambda p: (
|
||
'muscle_gain' in (p.get('health_goals') or []) or
|
||
p.get('activity_level') in ['intense', 'athlete'] or
|
||
p.get('diet_type') in ['vegetarian', 'vegan']
|
||
),
|
||
},
|
||
{
|
||
"id": "b12_vegan",
|
||
"domain": "supplements", "domain_label": "Suppléments", "icon": "🔴",
|
||
"title": "Vitamine B12 — essentielle pour végétaliens",
|
||
"summary": "500-1000 µg/semaine ou 25-250 µg/jour. Seul supplément non-négociable en régime vegan.",
|
||
"details": "La B12 n'existe pas dans les végétaux (algues et levures nutritionnelles insuffisantes). Carence irréversible en neurologie à long terme. Méthylcobalamine ou cyanocobalamine. Tester le taux sanguin (optimal >300 pmol/L) tous les 1-2 ans.",
|
||
"evidence_level": "A",
|
||
"source": "Watanabe F. et al., Nutrients 2014 — Pawlak R. et al., Nutrition Reviews 2013",
|
||
"tags": ["vegan", "neurologie", "énergie"],
|
||
"priority": 10,
|
||
"condition": lambda p: p.get('diet_type') == 'vegan',
|
||
},
|
||
]
|
||
|
||
|
||
def get_recommendations(profile: dict) -> list:
|
||
if not profile:
|
||
return []
|
||
results = []
|
||
for rec in RECS:
|
||
try:
|
||
if rec['condition'](profile):
|
||
results.append({k: v for k, v in rec.items() if k != 'condition'})
|
||
except Exception:
|
||
pass
|
||
results.sort(key=lambda r: -r.get('priority', 0))
|
||
return results
|
||
|
||
|
||
def profile_completeness(prof) -> int:
|
||
if not prof:
|
||
return 0
|
||
scalar_fields = [
|
||
'first_name', 'birth_year', 'sex', 'height_cm', 'weight_kg',
|
||
'blood_type', 'sleep_hours', 'stress_level', 'smoking',
|
||
'alcohol_freq', 'diet_type', 'activity_level', 'ethnicity',
|
||
]
|
||
list_fields = ['conditions', 'health_goals', 'activity_types']
|
||
filled = sum(1 for f in scalar_fields if getattr(prof, f, None) is not None)
|
||
filled += sum(1 for f in list_fields if getattr(prof, f, []))
|
||
total = len(scalar_fields) + len(list_fields)
|
||
return int(filled / total * 100)
|