{
    "ok": true,
    "generated_at": "2026-07-08T00:17:54+00:00",
    "summary": "Bundle public pour publier une fiche territoire Winerix avec sections, modes KPI, dependances sources, blocs copiables et caveats.",
    "live_summary": {
        "card_count": 7,
        "live_count": 0,
        "partial_count": 3,
        "demo_count": 0,
        "blocked_count": 4,
        "mode_counts": {
            "partial": 3,
            "blocked": 4
        }
    },
    "dependency_summary": {
        "score_count": 7,
        "component_dependency_count": 27,
        "unique_source_count": 23,
        "normalization_output_count": 20,
        "top_outputs": [
            "sources/inao-aoc-aop-communes.csv",
            "sources/inao-siqo-products.csv",
            "sources/source-refresh-policy.csv",
            "sources/rpg-vineyard-parcels.csv",
            "sources/datatourisme-oenotourism.csv",
            "sources/insee-tourism-capacity-communes-2026.csv",
            "sources/atout-france-classified-accommodations.csv",
            "sources/insee-tourism-occupancy-normalized.csv"
        ]
    },
    "sections": [
        {
            "key": "hero_reference",
            "label": "Hero reference territoire",
            "user_need": "Comprendre en 10 secondes si le territoire est credible, source et publiable.",
            "kpi_slots": [
                "reference_score",
                "publication_gate",
                "official_source_count",
                "primary_caveat"
            ],
            "source_stack": [
                "reference_territory_kpi_crosswalk",
                "reference_source_fidelity",
                "reference_publication_gate"
            ],
            "visual_treatment": "Grande carte score, fond ivoire, accent bordeaux, anneau de confiance et caveat visible.",
            "copy_block": "Un territoire Winerix de reference combine preuves officielles, KPI agreges et caveats explicites avant toute promesse publique.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        },
        {
            "key": "proof_stack",
            "label": "Pile de preuves appellation",
            "user_need": "Verifier les sources reglementaires qui soutiennent le perimetre viticole.",
            "kpi_slots": [
                "appellation_count",
                "siqo_product_count",
                "commune_coverage",
                "eambrosia_match_rate"
            ],
            "source_stack": [
                "inao_aoc_aop_communes",
                "inao_siqo_products",
                "eambrosia_gi",
                "appellation_evidence_pack"
            ],
            "visual_treatment": "Stack de preuves avec badges INAO, eAmbrosia, SIQO et gaps visibles.",
            "copy_block": "Le perimetre viticole est documente par les sources officielles ; les non-matchs restent visibles pour eviter une preuve juridique excessive.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        },
        {
            "key": "oenotourism_capacity",
            "label": "Capacite et offre oenotouristique",
            "user_need": "Savoir si le territoire peut soutenir une promesse d accueil et d experience.",
            "kpi_slots": [
                "wine_offer_count",
                "classified_beds",
                "accessible_establishment_count",
                "labeled_destination_count"
            ],
            "source_stack": [
                "datatourisme_oenotourism",
                "insee_tourism_capacity_communes",
                "atout_france_classified_accommodations",
                "tourisme_handicap_establishments",
                "vignobles_decouvertes"
            ],
            "visual_treatment": "Grille capacite avec badges offre, hebergement, accessibilite et label destination.",
            "copy_block": "La readiness oenotouristique se lit par la densite d offres, la capacite d accueil et les labels qualite, pas par la frequentation reelle.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        },
        {
            "key": "business_sustainability",
            "label": "Densite business et durabilite",
            "user_need": "Identifier le tissu economique vin et les signaux environnementaux utiles.",
            "kpi_slots": [
                "wine_establishment_count",
                "core_naf_share",
                "hve_wine_related_count",
                "geocoded_rate"
            ],
            "source_stack": [
                "sirene_wine_establishments",
                "hve_certified_estates",
                "ban_address_reference",
                "source_fidelity_ledger"
            ],
            "visual_treatment": "Heatmap business, split coeur/adjacent, badge HVE et score adresse.",
            "copy_block": "La densite business est un signal de potentiel ; elle doit rester agregee tant que les rapprochements nominaux ne sont pas relus.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        },
        {
            "key": "supply_market_context",
            "label": "Contexte offre, foncier et marche",
            "user_need": "Ajouter des ordres de grandeur economiques sans surpromettre la precision locale.",
            "kpi_slots": [
                "production_hl_total",
                "stock_to_production_ratio",
                "vineyard_land_value_eur_ha",
                "bulk_price_trend"
            ],
            "source_stack": [
                "dgddi_vitivinicole_stocks_harvests",
                "agreste_vineyard_land_values",
                "franceagrimer_bulk_prices",
                "agreste_viticulture_territorial"
            ],
            "visual_treatment": "Mini trend cards, sparkline marche, badge pipeline si source non normalisee.",
            "copy_block": "Le contexte offre et marche enrichit la lecture territoriale ; il ne doit pas devenir le KPI principal si les donnees sont historiques ou pipeline.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        },
        {
            "key": "trust_receipt",
            "label": "Recu de confiance",
            "user_need": "Copier la preuve de fiabilite : source, fraicheur, transformation, limite.",
            "kpi_slots": [
                "source_lineage",
                "refresh_status",
                "citation_text",
                "publication_status"
            ],
            "source_stack": [
                "reference_source_lineage",
                "source_refresh_policy",
                "reference_citation_kit",
                "reference_launch_readiness"
            ],
            "visual_treatment": "Encart methodo compact avec quatre lignes : origine, date, transformation, limite.",
            "copy_block": "Chaque KPI public doit embarquer son recu de confiance : d ou vient le chiffre, comment il est transforme et ce qu il ne dit pas.",
            "display_policy": "Show source, caveat and mode badge for every KPI slot."
        }
    ],
    "kpi_cards": [
        {
            "score_key": "territory_reference_score",
            "label": "Territory Reference Score",
            "score_value": 74,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 66.7,
            "publishability_status": "annotate",
            "display_mode": "partial",
            "display_label": "Partiel",
            "display_rule": "Afficher les composants prets et marquer le reste en pipeline.",
            "copy_sentence": "Score reference : synthese ponderee des preuves officielles, de la fidelite source, de l empreinte viticole et du gate de publication.",
            "minimum_gate": "Publier seulement si les preuves INAO/eAmbrosia/SIQO sont visibles et si le caveat principal est present.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "oenotourism_readiness_score",
            "label": "Oenotourism Readiness Score",
            "score_value": 60,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 14.3,
            "publishability_status": "annotate",
            "display_mode": "partial",
            "display_label": "Partiel",
            "display_rule": "Afficher les composants prets et marquer le reste en pipeline.",
            "copy_sentence": "Readiness oenotourisme : offres vin, capacite, demande touristique Insee, labels, Qualite Tourisme, mobilite douce, accessibilite et adresse dans un score caveate.",
            "minimum_gate": "Ne jamais decrire ce score comme frequentation oenotouristique : Insee mesure la demande hebergements generale, a croiser avec offre vin.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "wine_business_density_score",
            "label": "Wine Business Density Score",
            "score_value": 52.7,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 33.3,
            "publishability_status": "hold",
            "display_mode": "blocked",
            "display_label": "Bloque",
            "display_rule": "Ne pas afficher comme KPI public.",
            "copy_sentence": "Densite business : volume d etablissements vin, part coeur filiere, qualite geocodage et signaux HVE.",
            "minimum_gate": "Publier en agrege si Sirene/HVE ne sont pas relus nominativement ; marquer pipeline si le stock Sirene manque.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "sustainable_wine_signal",
            "label": "Sustainable Wine Signal",
            "score_value": 57.1,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 50,
            "publishability_status": "hold",
            "display_mode": "blocked",
            "display_label": "Bloque",
            "display_rule": "Ne pas afficher comme KPI public.",
            "copy_sentence": "Signal durabilite : HVE, bio vin Agence Bio, produits SIQO et surface viticole, avec caveats distincts par source.",
            "minimum_gate": "Toujours distinguer HVE, Bio et SIQO ; publier les operateurs bio en agregat territoire avant listing nominatif.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "organic_wine_sustainability_score",
            "label": "Organic Wine Sustainability Score",
            "score_value": 43.1,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 50,
            "publishability_status": "hold",
            "display_mode": "blocked",
            "display_label": "Bloque",
            "display_rule": "Ne pas afficher comme KPI public.",
            "copy_sentence": "Bio vin : operateurs engages, certificateurs et prochain jalon surfaces viticoles bio/conversion pour qualifier la durabilite d un territoire.",
            "minimum_gate": "Publier comme signal bio officiel uniquement avec agregats territoire, source Agence Bio citee, output surfaces VI normalise ou badge partiel explicite.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "supply_market_context_score",
            "label": "Supply & Market Context Score",
            "score_value": 37.3,
            "hydration_status": "blocked_by_normalization",
            "hydration_rate": 0,
            "publishability_status": "hold",
            "display_mode": "blocked",
            "display_label": "Bloque",
            "display_rule": "Ne pas afficher comme KPI public.",
            "copy_sentence": "Contexte offre/marche : production, stocks, foncier et prix servent de cadrage, pas de promesse principale.",
            "minimum_gate": "Score a utiliser comme contexte secondaire tant que DGDDI/FranceAgriMer/Agreste ne sont pas normalises et frais.",
            "next_action": "Executer les normalisations sources requises avant hydratation.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        },
        {
            "score_key": "map_publication_readiness",
            "label": "Map Publication Readiness",
            "score_value": 61.6,
            "hydration_status": "partially_hydratable",
            "hydration_rate": 0,
            "publishability_status": "annotate",
            "display_mode": "partial",
            "display_label": "Partiel",
            "display_rule": "Afficher les composants prets et marquer le reste en pipeline.",
            "copy_sentence": "Readiness carte : mieux vaut moins de points, mais geocodes, sources et caveates.",
            "minimum_gate": "Ne pas afficher de lieux nominatifs si adresse, ouverture au public ou statut RGPD ne sont pas clarifies.",
            "next_action": "Hydrater les composants prets et afficher les autres comme pipeline.",
            "caveat": "Ne publier en live que si hydratation, sources, caveat et Publication Gate sont alignes."
        }
    ],
    "copy_blocks": [
        {
            "key": "public_summary",
            "label": "Synthese publique",
            "format": "markdown",
            "text": "## Territoire viticole reference\n\nCette fiche Winerix assemble preuves appellation, capacite oenotouristique, densite business, durabilite, contexte marche et recu de confiance.\n\nModes KPI disponibles : 0 live, 3 partiel, 0 demo.\n\nCaveat : toute valeur publique doit conserver ses sources, son perimetre et son Publication Gate."
        },
        {
            "key": "editor_note",
            "label": "Note editeur",
            "format": "markdown",
            "text": "### Note methode\n\nLes KPI sont affiches selon le Live KPI Board : live si hydratation et gate sont alignes, partiel si certaines sources manquent, demo si les composants restent non normalises, bloque si le gate interdit la publication."
        },
        {
            "key": "api_sources",
            "label": "Endpoints sources",
            "format": "text",
            "text": "/api/get_reference_territory_publication_bundle.php?format=json\n/api/get_reference_live_kpi_board.php?format=json\n/api/get_reference_territory_page_kit.php?format=json\n/api/get_reference_kpi_dependency_map.php?format=json\n/api/get_reference_score_hydration.php?format=json"
        },
        {
            "key": "html_embed_hint",
            "label": "Snippet HTML",
            "format": "html",
            "text": "<section class=\"wx-territory-page\" data-winerix-territory>\n  <header class=\"wx-territory-hero\">\n    <p class=\"wx-eyebrow\">Reference territoire Winerix</p>\n    <h1>{{territory_name}}</h1>\n    <strong>{{reference_score}}/100</strong>\n    <p>{{copy_reference_sentence}}</p>\n    <small>Sources : {{source_list}}. Caveat : {{primary_caveat}}</small>\n  </header>\n  <article>\n    <h2>Preuves et capacite</h2>\n    <ul>\n      <li>{{official_appellation_count}} preuves appellation</li>\n      <li>{{wine_offer_count}} offres vin/oenotourisme</li>\n      <li>{{classified_beds}} lits classes</li>\n      <li>{{hve_wine_related_count}} signaux HVE rapproches</li>\n    </ul>\n  </article>\n  <footer>\n    <button data-copy=\"#wx-territory-copy\">Copier la synthese</button>\n    <pre id=\"wx-territory-copy\">{{copy_markdown}}</pre>\n  </footer>\n</section>"
        }
    ],
    "source_endpoints": [
        "/api/get_reference_territory_page_kit.php?format=json",
        "/api/get_reference_live_kpi_board.php?format=json",
        "/api/get_reference_kpi_dependency_map.php?format=json",
        "/api/get_reference_score_hydration.php?format=json"
    ],
    "caveat": "Bundle de publication : ne remplace pas la revue metier finale, la validation runtime, les imports DB ni le Publication Gate externe.",
    "copy_markdown": "# Reference Territory Publication Bundle\n\nBundle public pour publier une fiche territoire Winerix avec sections, modes KPI, dependances sources, blocs copiables et caveats.\n\n## Decision affichage\n- Live : 0\n- Partiel : 3\n- Demo : 0\n- Bloque : 4\n\n## Sections page\n\n### Hero reference territoire\n- Besoin : Comprendre en 10 secondes si le territoire est credible, source et publiable.\n- KPI slots : reference_score, publication_gate, official_source_count, primary_caveat\n- Sources : reference_territory_kpi_crosswalk, reference_source_fidelity, reference_publication_gate\n- Copy : Un territoire Winerix de reference combine preuves officielles, KPI agreges et caveats explicites avant toute promesse publique.\n\n### Pile de preuves appellation\n- Besoin : Verifier les sources reglementaires qui soutiennent le perimetre viticole.\n- KPI slots : appellation_count, siqo_product_count, commune_coverage, eambrosia_match_rate\n- Sources : inao_aoc_aop_communes, inao_siqo_products, eambrosia_gi, appellation_evidence_pack\n- Copy : Le perimetre viticole est documente par les sources officielles ; les non-matchs restent visibles pour eviter une preuve juridique excessive.\n\n### Capacite et offre oenotouristique\n- Besoin : Savoir si le territoire peut soutenir une promesse d accueil et d experience.\n- KPI slots : wine_offer_count, classified_beds, accessible_establishment_count, labeled_destination_count\n- Sources : datatourisme_oenotourism, insee_tourism_capacity_communes, atout_france_classified_accommodations, tourisme_handicap_establishments, vignobles_decouvertes\n- Copy : La readiness oenotouristique se lit par la densite d offres, la capacite d accueil et les labels qualite, pas par la frequentation reelle.\n\n### Densite business et durabilite\n- Besoin : Identifier le tissu economique vin et les signaux environnementaux utiles.\n- KPI slots : wine_establishment_count, core_naf_share, hve_wine_related_count, geocoded_rate\n- Sources : sirene_wine_establishments, hve_certified_estates, ban_address_reference, source_fidelity_ledger\n- Copy : La densite business est un signal de potentiel ; elle doit rester agregee tant que les rapprochements nominaux ne sont pas relus.\n\n### Contexte offre, foncier et marche\n- Besoin : Ajouter des ordres de grandeur economiques sans surpromettre la precision locale.\n- KPI slots : production_hl_total, stock_to_production_ratio, vineyard_land_value_eur_ha, bulk_price_trend\n- Sources : dgddi_vitivinicole_stocks_harvests, agreste_vineyard_land_values, franceagrimer_bulk_prices, agreste_viticulture_territorial\n- Copy : Le contexte offre et marche enrichit la lecture territoriale ; il ne doit pas devenir le KPI principal si les donnees sont historiques ou pipeline.\n\n### Recu de confiance\n- Besoin : Copier la preuve de fiabilite : source, fraicheur, transformation, limite.\n- KPI slots : source_lineage, refresh_status, citation_text, publication_status\n- Sources : reference_source_lineage, source_refresh_policy, reference_citation_kit, reference_launch_readiness\n- Copy : Chaque KPI public doit embarquer son recu de confiance : d ou vient le chiffre, comment il est transforme et ce qu il ne dit pas.\n\n## Blocs copiables\n\n### Synthese publique\n```markdown\n## Territoire viticole reference\n\nCette fiche Winerix assemble preuves appellation, capacite oenotouristique, densite business, durabilite, contexte marche et recu de confiance.\n\nModes KPI disponibles : 0 live, 3 partiel, 0 demo.\n\nCaveat : toute valeur publique doit conserver ses sources, son perimetre et son Publication Gate.\n```\n\n### Note editeur\n```markdown\n### Note methode\n\nLes KPI sont affiches selon le Live KPI Board : live si hydratation et gate sont alignes, partiel si certaines sources manquent, demo si les composants restent non normalises, bloque si le gate interdit la publication.\n```\n\n### Endpoints sources\n```markdown\n/api/get_reference_territory_publication_bundle.php?format=json\n/api/get_reference_live_kpi_board.php?format=json\n/api/get_reference_territory_page_kit.php?format=json\n/api/get_reference_kpi_dependency_map.php?format=json\n/api/get_reference_score_hydration.php?format=json\n```\n\n### Snippet HTML\n```html\n<section class=\"wx-territory-page\" data-winerix-territory>\n  <header class=\"wx-territory-hero\">\n    <p class=\"wx-eyebrow\">Reference territoire Winerix</p>\n    <h1>{{territory_name}}</h1>\n    <strong>{{reference_score}}/100</strong>\n    <p>{{copy_reference_sentence}}</p>\n    <small>Sources : {{source_list}}. Caveat : {{primary_caveat}}</small>\n  </header>\n  <article>\n    <h2>Preuves et capacite</h2>\n    <ul>\n      <li>{{official_appellation_count}} preuves appellation</li>\n      <li>{{wine_offer_count}} offres vin/oenotourisme</li>\n      <li>{{classified_beds}} lits classes</li>\n      <li>{{hve_wine_related_count}} signaux HVE rapproches</li>\n    </ul>\n  </article>\n  <footer>\n    <button data-copy=\"#wx-territory-copy\">Copier la synthese</button>\n    <pre id=\"wx-territory-copy\">{{copy_markdown}}</pre>\n  </footer>\n</section>\n```\n"
}