{
  "date": "2026-04-24",
  "generated": "2026-04-24T08:15:00",
  "model_version": "3.0",
  "protocol_version": "3.0",
  "paris": [
    {
      "id": null,
      "sport": "football",
      "ligue": "Ligue 1",
      "match": "Stade Brest 29 vs Racing Club De Lens",
      "heure": "18:45",
      "marche": "Over/Under 2.5 buts",
      "selection": "Over 2.5",
      "cote": 1.64,
      "cote_plancher": 1.595,
      "dq_flag": "DQ-A",
      "mise_unites": "2u",
      "mise_euros": 20,
      "kelly_calcul": "f_full=(0.687×0.64-0.313)/0.64=0.198 → f_kelly=4.96% → 24.8€ cap 2.0u",
      "edge_estime": "+7.7%",
      "edge_num": 0.077,
      "probabilite_estimee": "72%",
      "probabilite_marche": "61.0%",
      "probabilite_finale": "68.7%",
      "p_finale_num": 0.687,
      "robustesse": "Si p_finale -3%: edge +4.7% ✓ | Si cote tombe 1.59: edge +5.8% ✓",
      "raisonnement": "Lens 2e en L1, à 1pt de PSG — motivation maximale, doit gagner. Brest 12e, sans objectif, winless sur 4 matchs (D1, L3). H2H: Lens 4/4 victoires consécutives vs Brest. TENDANCE DÉTERMINANTE: 7 derniers matchs de Lens = TOUS Over 2.5 buts. xG Lens vs Toulouse (coupe SF): 3.26 — domination offensive récente confirmée. Lens: 2.09 buts/match, Betis encaisse 1.25/match. Enjeu asymétrique maximal: Lens poussera fort, Brest sans pression défensive peut s'ouvrir. Probabilité estimée 72% bien au-dessus du marché (61%). Edge +7.7% > seuil 6% OU buts.",
      "statut_v3": "VALUE_LEAN",
      "chaos": 1
    },
    {
      "id": null,
      "sport": "football",
      "ligue": "La Liga",
      "match": "Real Betis Seville vs Real Madrid",
      "heure": "19:00",
      "marche": "Over/Under 2.5 buts",
      "selection": "Over 2.5",
      "cote": 1.49,
      "cote_plancher": 1.455,
      "dq_flag": "DQ-A",
      "mise_unites": "2u",
      "mise_euros": 20,
      "kelly_calcul": "f_full=(0.747×0.49-0.253)/0.49=0.231 → f_kelly=5.77% → 28.9€ cap 2.0u",
      "edge_estime": "+7.6%",
      "edge_num": 0.076,
      "probabilite_estimee": "78%",
      "probabilite_marche": "67.1%",
      "probabilite_finale": "74.7%",
      "p_finale_num": 0.747,
      "robustesse": "Si p_finale -3%: edge +4.6% ✓ | Si cote tombe 1.44: edge +5.3% (proche plancher) | Tendance 9/10 très robuste.",
      "raisonnement": "Real Madrid dans la course au titre (chasse Barcelone) — motivation maximale en déplacement. STATISTIQUES DÉTERMINANTES: 9/10 derniers matchs Real Madrid ont eu 3+ buts (Over 2.5 systématique). BTTS Real Madrid: 8/8 derniers matchs. Real Madrid: 2.09 buts/match. Betis concède 1.25/match et BTTS Betis: 5/6. Les deux équipes marquent très régulièrement. Betis voit son adversaire comme une occasion de griller des billets — enjeu fort des deux côtés. Pattern Over 2.5 quasi-systématique pour Real Madrid justifie p_estimee 78%. Edge +7.6% > seuil 6%.",
      "statut_v3": "VALUE_LEAN",
      "chaos": 1
    }
  ],
  "no_bet": [
    {
      "sport": "football", "ligue": "Premier League", "match": "Sunderland AFC vs Nottingham Forest", "heure": "19:00",
      "dq_flag": "DQ-A", "raison": "Match 50-50 (cotes H=2.68 A=2.68). DC 1X et X2 = 1.47. O/U 2.5 Over=2.12, edge négatif (-3.6%). Aucune asymétrie exploitable. NO BET."
    },
    {
      "sport": "football", "ligue": "Bundesliga", "match": "RB Leipzig vs Union Berlin", "heure": "18:30",
      "dq_flag": "DQ-A", "raison": "DC 1X=1.13 et 12=1.19 → < 1.30 = NO BET 1. DC X2=2.80 nécessite edge >=9% — p_estimee insuffisante. O/U 2.5 Over=1.51 edge -0.8% négatif. BTTS edge +1.0% < 6% seuil. NO BET."
    },
    {
      "sport": "football", "ligue": "Serie A", "match": "SSC Napoli vs US Cremonese", "heure": "18:45",
      "dq_flag": "DQ-A", "raison": "DC 1X=1.09, 12=1.18 → < 1.30 = NO BET 1. O/U 2.5 marché quasi-50/50 (Over=1.87 Under=1.89) — edge <=3.2% pour Over, négatif pour Under. Napoli favori écrasant mais Cremonese peut défendre et score 2-0 sous la ligne. NO BET."
    },
    {
      "sport": "football", "ligue": "Liga Portugal", "match": "FC Alverca SAD vs FC Arouca", "heure": "19:15",
      "dq_flag": "DQ-A", "raison": "Tier 2 — edge minimum 7% requis. Match équilibré (H=2.28 D=3.20 A=3.10). DC 1X=1.37 edge insuffisant. Aucun marché > 7% edge identifié. NO BET tier 2."
    },
    {
      "sport": "football", "ligue": "Championship", "match": "Leicester City vs Millwall FC", "heure": "19:00",
      "dq_flag": "DQ-A", "raison": "Tier 2 — edge minimum 7% requis. DC X2=1.24 → < 1.30 = NO BET 1. DC 1X=1.99 edge insuffisant (besoin p_estimee 60.3% vs marché 50.3%). O/U 2.5 Over edge négatif (-3.6%). NO BET tier 2."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Sinner, Jannik vs Bonzi, Benjamin", "heure": "14:00",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Sinner 1.00 < 1.30. Edge Kelly nul."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Rublev, Andrey vs Kopriva, Vit", "heure": "12:30",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Rublev 1.28 < 1.30. Edge Kelly insuffisant."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Fils, Arthur vs Buse, Ignacio", "heure": "11:20",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Fils 1.15 < 1.30. Edge Kelly nul."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Fonseca, Joao vs Cilic, Marin", "heure": "18:10",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Fonseca 1.22 < 1.30. Edge Kelly nul."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Tirante, Thiago Agustin vs Paul, Tommy", "heure": "13:40",
      "dq_flag": "DQ-A", "raison": "Paul @1.43 (CONFIANCE candidat): modèle externe Dimers=66% vs marché 69.9% — marché surpaye Paul. p_estimee=0.68 → p_finale=0.686 < 0.72 CONFIANCE seuil + edge négatif -1.3%. Paul vient de gagner Houston (clay) mais modèle externe sous-marché. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Nava, Emilio vs Vacherot, Valentin", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Vacherot @1.31 (seul marché viable): vient de battre Musetti en Monte-Carlo. p_estimee=0.79 → p_finale=0.782, edge +1.9% — inférieur au seuil CONFIANCE de 2%. Cote 1.31 trop proche du plancher 1.30, Kelly négligeable. NO BET borderline."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Hurkacz, Hubert vs Musetti, Lorenzo", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Musetti @1.53 sur clay (spécialiste). Modèles divergents: Dimers 61% vs PFSN 76% (écart 15pts). Musetti éliminé R1 Monte-Carlo 2026 (Vacherot) — signal négatif forme clay. p_estimee=0.68 → p_finale=0.686 → edge +3.2% < 7% VALUE. Incertitude trop élevée. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Griekspoor, Tallon vs Dzumhur, Damir", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Griekspoor @1.53 p_finale max estimée 0.686 → edge +3.2% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Struff, Jan-Lennard vs Michelsen, Alex", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Match équilibré H=1.70 A=2.04. p_finale max (Struff) = 0.66 → edge +0.5%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Moller, Elmer vs Diallo, Gabriel", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Diallo @1.60 p_finale estimée 0.65 → edge +2.3% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Lajovic, Dusan vs Rinderknech, Arthur", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Rinderknech @1.57 gros serveur moins à l'aise clay. Lajovic @2.28 clay specialist mais edge Lajovic = +2.9% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Shelton, Ben vs Prizmic, Dino", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Shelton @1.48 vient de gagner Munich (ATP 500 clay!). MAIS: fatigue post-Munich (semaine enchaînée), Prizmic frais (a battu Berrettini R1). Polymarket donne Shelton 65.5% vs marché 67.6% — marché surpaye Shelton. p_finale=0.672 < 0.72 CONFIANCE. NO BET (fatigue concern)."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Lehecka, Jiri vs Tabilo, Alejandro", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Tabilo @2.04 — tranche 2.00-2.50 validation renforcée requise. Edge estimé insuffisant (< 9%). Lehecka @1.72 edge +0.6%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Ofner, Sebastian vs Etcheverry, Tomas Martin", "heure": "13:00",
      "dq_flag": "DQ-A", "raison": "Etcheverry @1.60 clay specialist. p_finale=0.657 → edge +3.2% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Norrie, Cameron vs Machac, Tomas", "heure": "14:10",
      "dq_flag": "DQ-A", "raison": "Machac @1.69 p_finale=0.605 → edge +1.3%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ATP Madrid", "match": "Jodar, Rafael vs de Minaur, Alex", "heure": "18:00",
      "dq_flag": "DQ-A", "raison": "Match 50-50 H=1.88 A=1.84. Aucun edge directionnellement clair. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Frech, Magdalena vs Sierra, Solana", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Frech @1.65 p_finale=0.637 → edge +3.1% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Pliskova, Karolina vs Sakkari, Maria", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "Sakkari @1.66 clay, p_finale=0.636 → edge +3.4% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Keys, Madison vs Zhang, Shuai", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Keys 1.17 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Zheng, Qinwen vs Kenin, Sofia", "heure": "09:00",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Zheng 1.23 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Tjen, Janice vs Samsonova, Liudmila", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Samsonova @1.46 (CONFIANCE candidat): Polymarket donne Samsonova seulement 59% vs marché 68.5% — EDGE NÉGATIF! Samsonova sortie R2 Stuttgart (loss vs Gauff), momentum négatif. Tjen vient de gagner son 1er match clay à Madrid. p_finale(Samsonova)=0.640 < 0.72 + edge -4.5%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Sonmez, Zeynep vs Bucsa, Cristina", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "Sonmez @1.53 p_finale=0.654 → edge insuffisant. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Ruse, Elena-Gabriela vs Rybakina, Elena", "heure": "10:10",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Rybakina 1.03 < 1.30. Edge Kelly nul."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Mertens, Elise vs Eala, Alexandra", "heure": "10:30",
      "dq_flag": "DQ-A", "raison": "Mertens @1.35 (CONFIANCE candidat): modèle Dimers 72%, p_finale=0.768 ✓. MAIS: test robustesse fragile — si p_estimee=0.74 (minimal), edge devient négatif. Cote 1.35 proche plancher 1.30. Kelly mise minimale (1u). CONFIANCE borderline rejeté — fragilité du test robustesse. NO BET. [Note: match joué 6-2, 6-1 Mertens selon WTA — résultat confirme analyse directionnelle mais pari non validé à temps]"
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Cirstea, Sorana vs Grant, Tyra Caterina", "heure": "11:20",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Cirstea 1.26 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Waltert, Simona vs Ostapenko, Jelena", "heure": "11:20",
      "dq_flag": "DQ-A", "raison": "Ostapenko @1.61 edge négatif (-0.1%). Ostapenko grosse frappe, clay incertaine. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Noskova, Linda vs Arango, Emiliana", "heure": "11:20",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Noskova 1.12 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Putintseva, Yulia vs Kostyuk, Marta", "heure": "12:30",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Kostyuk 1.24 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Tauson, Clara vs Siniakova, Katerina", "heure": "12:30",
      "dq_flag": "DQ-A", "raison": "Tauson @1.71 p_finale=0.617 → edge +3.2%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Jeanjean, Leolia vs Gauff, Coco", "heure": "13:00",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Gauff 1.02 < 1.30."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "McNally, Caty vs Mboko, Victoria", "heure": "17:00",
      "dq_flag": "DQ-C", "raison": "DQ-C — pas de cotes disponibles. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid", "match": "Pegula, Jessica vs Boulter, Katie", "heure": "19:10",
      "dq_flag": "DQ-A", "raison": "NO BET 1 — cote Pegula 1.13 < 1.30. Edge Kelly nul."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Oeiras", "match": "Semenistaja, Darja vs Osuigwe, Whitney", "heure": "09:30",
      "dq_flag": "DQ-A", "raison": "WTA 125K tier 2 — CONFIANCE interdit. p_finale=0.704 < 0.72 seuil CONFIANCE. Edge VALUE +3.7% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Oeiras", "match": "Semenistaja, Darja vs Monnet, Carole", "heure": "10:00",
      "dq_flag": "DQ-C", "raison": "DQ-C — pas de cotes disponibles. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Oeiras", "match": "Kudermetova, Polina vs Bronzetti, Lucia", "heure": "12:00",
      "dq_flag": "DQ-A", "raison": "WTA 125K tier 2 — CONFIANCE interdit. Kudermetova @1.31 (barely above 1.30 floor). Edge +2.6% CONFIANCE mais tier 2 interdit. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Oeiras", "match": "Klimovicova, Linda vs Yuan, Yue", "heure": "13:10",
      "dq_flag": "DQ-A", "raison": "WTA 125K tier 2 — CONFIANCE interdit. Yuan @1.41 p_finale=0.731, edge +2.2% mais tier 2. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Oeiras", "match": "Pridankina, Elena vs Ferro, Fiona", "heure": "14:20",
      "dq_flag": "DQ-A", "raison": "WTA 125K tier 2. Ferro @1.68 p_finale=0.620 → edge +2.5% < 7%. NO BET."
    },
    {
      "sport": "tennis", "ligue": "WTA Madrid Doubles (exclu)", "match": "4 matchs doubles WTA Madrid", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "DOUBLES — hors scope v3.2. Filtrés à la collecte (fix doggy_analysis.py v3.2). Non analysés."
    },
    {
      "sport": "tennis", "ligue": "WTA 125K Doubles (exclu)", "match": "2 matchs doubles WTA 125K", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "DOUBLES — hors scope v3.2. Filtrés à la collecte (fix doggy_analysis.py v3.2). Non analysés."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Miyazaki (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — niveau inférieur au Challenger. Cotes absentes (DQ-C majoritaire). NO BET protocole v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Xalapa (1 match)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — niveau insuffisant. DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Baotou (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Tokyo (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "mixed", "raison": "ITF — niveau insuffisant même en DQ-A. NO BET protocole v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Luzhou (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Singapore (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Singapore (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Panipat (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Pretoria (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — niveau insuffisant pour analyse v3 même avec cotes. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Heraklion (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Santa Margherita di Pula (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — niveau insuffisant même en DQ-A. NO BET protocole v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Pretoria (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Sharm El Sheikh (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Sharm Elsheikh (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Angers (5 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "mixed", "raison": "ITF — niveau insuffisant. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Santa Margherita di Pula (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Monastir (3 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Monastir (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-C", "raison": "ITF — DQ-C. NO BET."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Sanxenxo (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Roehampton (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Orlando (3 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Men - Orlando (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Charlottesville (2 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Charlotte (1 match)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    },
    {
      "sport": "tennis", "ligue": "ITF Women - Chiasso (4 matchs)", "match": "[groupe ITF]", "heure": "multiple",
      "dq_flag": "DQ-A", "raison": "ITF — NO BET v3."
    }
  ],
  "resume": {
    "total_paris": 2,
    "value": 2,
    "confiance": 0,
    "value_ultra": 0,
    "value_safe": 0,
    "value_lean": 2,
    "exposition_totale_euros": 40,
    "gain_potentiel_brut_si_tout_gagne": 22.60,
    "exhaustivite": "OK — 134 matchs collectés, 6 doubles exclus (scope v3.2), 128 couverts (2 paris + 72 no_bet individuels + 25 tournois ITF groupés + 2 doubles groupés). Delta approx 0.",
    "sports_couverts": ["football", "tennis"],
    "basketball": "aucun match NBA détecté (possible off-day playoffs)",
    "note_fix": "doggy_analysis.py v3.2 appliqué — filtre doubles ajouté (is_valid_tennis_tournament). Prochaine collecte exclura automatiquement WTA/ATP Doubles."
  }
}
