{
    "ok": true,
    "generated_at": "2026-07-06T16:59:44+02:00",
    "filters": {
        "limit": 12,
        "min_score": 50,
        "label": null
    },
    "count": 12,
    "total_sources": 17,
    "summary": {
        "à industrialiser": 7,
        "à connecter vite": 9,
        "à qualifier": 1,
        "à surveiller": 0,
        "due_or_critical": 17
    },
    "roadmap": [
        {
            "source_key": "inao_denominations",
            "name": "Dénominations viticoles INAO",
            "provider": "INAO",
            "category": "appellations",
            "status": "active",
            "priority": 15,
            "trust_score": "93.00",
            "coverage_scope": "Appellations, catégories, types IG et rattachements communaux issus de sources locales INAO.",
            "refresh_frequency": "Manuel, à vérifier lors des mises à jour INAO.",
            "license_label": "Open data public, à confirmer fichier par fichier",
            "license_url": "https://www.data.gouv.fr/fr/licences",
            "source_url": "sources/denominations.csv",
            "ingestion_script": "scripts/seed_communes.php, scripts/seed_appellations.php",
            "local_tables": [
                "communes",
                "appellations"
            ],
            "merge_keys": [
                "insee_code",
                "appellation_name",
                "id_app_inao",
                "type_ig"
            ],
            "report_uses": [
                "rapport territoire",
                "rapport appellation",
                "rapport château",
                "rapport opportunité"
            ],
            "quality_notes": "Source pivot pour les croisements territoriaux ; attention aux communes fusionnées, déléguées ou renommées.",
            "next_step": "Ajouter une date de millésime de source et un contrôle de dérive avec COMAGRI/eAmbrosia.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: inao_denominations)",
            "data_freshness": "missing",
            "local_row_count": 28447,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "communes",
                "appellations"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 88.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 93,
                "priority": 95,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 75
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INAO, Dénominations viticoles INAO, Open data public, à confirmer fichier par fichier — sources/denominations.csv",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "quotidien",
            "cadence_days": 2,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/seed_communes.php, scripts/seed_appellations.php"
        },
        {
            "source_key": "comagri_ao_2025",
            "name": "COMAGRI aires AO 2025",
            "provider": "INAO / Ministère de l’Agriculture",
            "category": "appellations",
            "status": "active",
            "priority": 18,
            "trust_score": "90.00",
            "coverage_scope": "Aires géographiques et produits officiels filtrés sur les produits viticoles.",
            "refresh_frequency": "Manuel lors des nouveaux fichiers COMAGRI.",
            "license_label": "Open data public, à confirmer fichier par fichier",
            "license_url": "https://www.data.gouv.fr/fr/licences",
            "source_url": "sources/2025-03-10-comagri-aires-produits.csv + sources/2025-10-09-comagri-communes-aires-ao.csv",
            "ingestion_script": "scripts/seed_comagri.php",
            "local_tables": [
                "appellations"
            ],
            "merge_keys": [
                "insee_code",
                "appellation_name",
                "id_app_inao"
            ],
            "report_uses": [
                "rapport appellation",
                "rapport territoire",
                "contrôle qualité INAO"
            ],
            "quality_notes": "Bon complément officiel, avec encodage ISO-8859-1 traité au seed ; le filtrage par mots-clés vin doit rester contrôlé.",
            "next_step": "Comparer les libellés avec denominations.csv et marquer les divergences par appellation.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: comagri_ao_2025)",
            "data_freshness": "missing",
            "local_row_count": 21948,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "appellations"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 87.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 90,
                "priority": 92,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 75
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INAO / Ministère de l’Agriculture, COMAGRI aires AO 2025, Open data public, à confirmer fichier par fichier — sources/2025-03-10-comagri-aires-produits.csv + sources/2025-10-09-comagri-communes-aires-ao.csv",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "semestriel",
            "cadence_days": 180,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/seed_comagri.php"
        },
        {
            "source_key": "agence_bio",
            "name": "Professionnels engagés en bio",
            "provider": "Agence Bio",
            "category": "durabilité",
            "status": "active",
            "priority": 20,
            "trust_score": "89.00",
            "coverage_scope": "Opérateurs bio, SIRET, numéro bio, statut, certificat et date d’engagement.",
            "refresh_frequency": "Batch paginé via API Agence Bio.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://opendata.agencebio.org/api/gouv/operateurs/",
            "ingestion_script": "scripts/ingest_bio.php",
            "local_tables": [
                "bio_certifications"
            ],
            "merge_keys": [
                "siret",
                "insee_code",
                "estate_name",
                "numero_bio"
            ],
            "report_uses": [
                "rapport bio",
                "rapport territoire",
                "rapport sourcing durable"
            ],
            "quality_notes": "Donnée publique solide, mais localisée au siège ou à l’adresse déclarée ; ne prouve pas toujours la parcelle viticole exacte.",
            "next_step": "Ajouter un rapprochement SIRENE et distinguer producteurs viticoles, négociants et autres opérateurs.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: agence_bio)",
            "data_freshness": "missing",
            "local_row_count": 7415,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "bio_certifications"
            ],
            "refresh_policy": {
                "source_key": "agence_bio",
                "source_family": "open_data_licence_ouverte",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "date API, numero bio, SIRET, statut certificat",
                "primary_action": "php scripts/ingest_bio.php",
                "fallback_action": "ne pas presenter comme preuve parcellaire"
            },
            "policy_source_family": "open_data_licence_ouverte",
            "evidence_required": "date API, numero bio, SIRET, statut certificat",
            "fallback_action": "ne pas presenter comme preuve parcellaire",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 86.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 93,
                "trust": 89,
                "priority": 90,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Agence Bio, Professionnels engagés en bio, Licence ouverte Etalab — https://opendata.agencebio.org/api/gouv/operateurs/",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_bio.php"
        },
        {
            "source_key": "local_wine_catalog",
            "name": "Catalogue vins local",
            "provider": "importData / référentiel LWIN local",
            "category": "catalogue",
            "status": "active",
            "priority": 10,
            "trust_score": "82.00",
            "coverage_scope": "Vins, producteurs, régions, classifications, couleurs et millésimes disponibles localement.",
            "refresh_frequency": "Batch interne via scripts/ingest_import_profiles.php",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": null,
            "ingestion_script": "scripts/ingest_import_profiles.php",
            "local_tables": [
                "wine_catalog",
                "estate_wine_links",
                "estate_profiles"
            ],
            "merge_keys": [
                "lwin",
                "post_id",
                "producer_name",
                "wine_name",
                "region",
                "sub_region"
            ],
            "report_uses": [
                "rapport château",
                "rapport appellation",
                "rapport millésime",
                "rapport catalogue"
            ],
            "quality_notes": "Très structurant pour Winerix, mais la provenance amont, la licence et les droits de réutilisation doivent être explicités avant diffusion large.",
            "next_step": "Documenter la provenance exacte du catalogue et créer un score de complétude par domaine.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: local_wine_catalog)",
            "data_freshness": "missing",
            "local_row_count": 290112,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "wine_catalog",
                "estate_wine_links",
                "estate_profiles"
            ],
            "refresh_policy": {
                "source_key": "local_wine_catalog",
                "source_family": "internal_or_imported",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "provenance amont, nombre lignes, date import",
                "primary_action": "php scripts/ingest_import_profiles.php",
                "fallback_action": "garder les chiffres comme signal Winerix interne"
            },
            "policy_source_family": "internal_or_imported",
            "evidence_required": "provenance amont, nombre lignes, date import",
            "fallback_action": "garder les chiffres comme signal Winerix interne",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 85.7,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 82,
                "priority": 100,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 60
            },
            "governance": {
                "source_family": "internal_or_imported",
                "reuse_status": "internal_only",
                "attribution_required": true,
                "commercial_reuse": "blocked_until_clarified",
                "redistribution_risk": "high",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : importData / référentiel LWIN local, Catalogue vins local, À documenter",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_import_profiles.php"
        },
        {
            "source_key": "datatourisme",
            "name": "DATAtourisme",
            "provider": "ADN Tourisme",
            "category": "œnotourisme",
            "status": "candidate",
            "priority": 28,
            "trust_score": "84.00",
            "coverage_scope": "Points d’intérêt touristiques, dégustations, caveaux, accueil groupe et capacités potentielles.",
            "refresh_frequency": "À activer via compte diffuseur/API.",
            "license_label": "Open data avec conditions diffuseur",
            "license_url": "https://www.datatourisme.fr/utiliser-les-donnees/",
            "source_url": "https://www.datatourisme.fr/utiliser-les-donnees/",
            "ingestion_script": "scripts/ingest_datatourisme.php",
            "local_tables": [
                "b2b_logistics"
            ],
            "merge_keys": [
                "datatourisme_id",
                "insee_code",
                "estate_name",
                "zipcode"
            ],
            "report_uses": [
                "rapport œnotourisme",
                "score B2B logistique",
                "rapport territoire"
            ],
            "quality_notes": "Très aligné avec la promesse Winerix, mais nécessite configuration du flux et contrôle de couverture locale.",
            "next_step": "Obtenir/paramétrer l’accès diffuseur puis remplacer le script prototype par une ingestion paginée réelle.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "ok",
            "health_message": "Table sans lignes: b2b_logistics | Aucune ligne locale",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [
                "b2b_logistics"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 85.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Lancer un premier import d’échantillon puis évaluer la couverture.",
            "source_value_dimensions": {
                "use_case": 99,
                "trust": 84,
                "priority": 82,
                "status": 68,
                "local_readiness": 85,
                "health": 100,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "institutional_publication",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : ADN Tourisme, DATAtourisme, Open data avec conditions diffuseur — https://www.datatourisme.fr/utiliser-les-donnees/",
                "warning": "Contrôler les conditions de réutilisation avant export commercial automatisé."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "trimestriel",
            "cadence_days": 90,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_datatourisme.php"
        },
        {
            "source_key": "open_meteo_archive",
            "name": "Historique météo Open-Meteo",
            "provider": "Open-Meteo",
            "category": "météo",
            "status": "active",
            "priority": 22,
            "trust_score": "86.00",
            "coverage_scope": "Températures, pluie, soleil, évapotranspiration, gel et chaleur par grille météo.",
            "refresh_frequency": "Batch par grille et année via archive API.",
            "license_label": "Voir conditions Open-Meteo",
            "license_url": "https://open-meteo.com/en/license",
            "source_url": "https://open-meteo.com/en/docs/historical-weather-api",
            "ingestion_script": "scripts/ingest_climate_grid.php",
            "local_tables": [
                "climate_grid",
                "climate_weekly"
            ],
            "merge_keys": [
                "grid_id",
                "lat",
                "lng",
                "year",
                "week_num"
            ],
            "report_uses": [
                "rapport millésime",
                "rapport risque climatique",
                "rapport territoire"
            ],
            "quality_notes": "Excellent pour comparer les profils climatiques ; les résultats restent des réanalyses/grilles et non des mesures station domaine.",
            "next_step": "Créer des normales 10 ans et anomalies par région/appellation.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: open_meteo_archive)",
            "data_freshness": "missing",
            "local_row_count": 32839,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "climate_grid",
                "climate_weekly"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 84.9,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 86,
                "priority": 88,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 90
            },
            "governance": {
                "source_family": "third_party_api",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Open-Meteo, Historique météo Open-Meteo, Voir conditions Open-Meteo — https://open-meteo.com/en/docs/historical-weather-api",
                "warning": "Conserver conditions API, quota, licence et snapshot de requête."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "annuel",
            "cadence_days": 430,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_climate_grid.php"
        },
        {
            "source_key": "local_business_profiles",
            "name": "Profils business domaines",
            "provider": "import_business_details / source locale",
            "category": "domaines",
            "status": "active",
            "priority": 12,
            "trust_score": "76.00",
            "coverage_scope": "Présence web, téléphone, avis, accessibilité, géolocalisation et signaux B2B des domaines.",
            "refresh_frequency": "Batch interne via scripts/ingest_import_profiles.php",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": null,
            "ingestion_script": "scripts/ingest_import_profiles.php",
            "local_tables": [
                "estate_profiles",
                "estate_commune_links",
                "estate_signal_scores"
            ],
            "merge_keys": [
                "post_id",
                "business_id",
                "google_place_id",
                "insee_code",
                "zipcode"
            ],
            "report_uses": [
                "rapport château",
                "rapport œnotourisme",
                "rapport prospection B2B"
            ],
            "quality_notes": "Très utile pour les signaux opérationnels, mais les conditions de réutilisation de certains attributs doivent être clarifiées.",
            "next_step": "Ajouter des indicateurs de fraîcheur et séparer les preuves observées des inférences de score.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: local_business_profiles)",
            "data_freshness": "missing",
            "local_row_count": 67837,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "estate_profiles",
                "estate_commune_links",
                "estate_signal_scores"
            ],
            "refresh_policy": {
                "source_key": "local_business_profiles",
                "source_family": "internal_or_imported",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "provenance, champs enrichis, date import",
                "primary_action": "php scripts/ingest_import_profiles.php",
                "fallback_action": "ne pas exposer les attributs non gouvernes"
            },
            "policy_source_family": "internal_or_imported",
            "evidence_required": "provenance, champs enrichis, date import",
            "fallback_action": "ne pas exposer les attributs non gouvernes",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 83.6,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 97,
                "trust": 76,
                "priority": 98,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 60
            },
            "governance": {
                "source_family": "internal_or_imported",
                "reuse_status": "internal_only",
                "attribution_required": true,
                "commercial_reuse": "blocked_until_clarified",
                "redistribution_risk": "high",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : import_business_details / source locale, Profils business domaines, À documenter",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_import_profiles.php"
        },
        {
            "source_key": "sirene_insee",
            "name": "Base Sirene",
            "provider": "INSEE",
            "category": "entreprises",
            "status": "candidate",
            "priority": 30,
            "trust_score": "95.00",
            "coverage_scope": "Identité légale des entreprises et établissements : SIREN, SIRET, activité, adresse, état administratif.",
            "refresh_frequency": "API ou fichier stock mensuel.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://www.data.gouv.fr/dataservices/api-sirene-open-data",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "siret",
                "siren",
                "raison_sociale",
                "code_naf",
                "zipcode",
                "insee_code"
            ],
            "report_uses": [
                "fiabilisation domaines",
                "rapport prospection",
                "contrôle bio",
                "scoring activité"
            ],
            "quality_notes": "Référence légale incontournable pour solidifier les domaines et rapprocher Bio/DATAtourisme/business profiles.",
            "next_step": "Créer un enrichissement SIRET/SIREN par domaine et par opérateur bio.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "sirene_insee",
                "source_family": "open_data_licence_ouverte",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "SIREN/SIRET, date unite legale, adresse",
                "primary_action": "php scripts/ingest_sirene_insee.php",
                "fallback_action": "laisser les rattachements entreprise en revue"
            },
            "policy_source_family": "open_data_licence_ouverte",
            "evidence_required": "SIREN/SIRET, date unite legale, adresse",
            "fallback_action": "laisser les rattachements entreprise en revue",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 76.7,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 98,
                "trust": 95,
                "priority": 80,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INSEE, Base Sirene, Licence ouverte Etalab — https://www.data.gouv.fr/dataservices/api-sirene-open-data",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_sirene_insee.php"
        },
        {
            "source_key": "douanes_trade",
            "name": "Commerce extérieur des vins",
            "provider": "Douanes françaises / data.gouv.fr",
            "category": "économie",
            "status": "candidate",
            "priority": 35,
            "trust_score": "92.00",
            "coverage_scope": "Flux export/import par produit, pays, période, valeur et volume.",
            "refresh_frequency": "Mensuel ou selon publication Douanes.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://www.data.gouv.fr/datasets/statistiques-nationales-du-commerce-exterieur",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "period",
                "country",
                "product_code",
                "flow",
                "value_eur",
                "volume"
            ],
            "report_uses": [
                "rapport export",
                "opportunité pays",
                "benchmark macro"
            ],
            "quality_notes": "Source publique forte, mais il faut mapper proprement les nomenclatures produits vers styles/appellations Winerix.",
            "next_step": "Définir les codes douaniers vin à suivre et créer une table mensuelle agrégée.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:57",
            "covered_tables": [],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 75.3,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 97,
                "trust": 92,
                "priority": 75,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Douanes françaises / data.gouv.fr, Commerce extérieur des vins, Licence ouverte Etalab — https://www.data.gouv.fr/datasets/statistiques-nationales-du-commerce-exterieur",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "Définir une procédure d’import avant industrialisation."
        },
        {
            "source_key": "eambrosia_gi",
            "name": "eAmbrosia GI Register",
            "provider": "Commission européenne",
            "category": "appellations",
            "status": "candidate",
            "priority": 45,
            "trust_score": "92.00",
            "coverage_scope": "Registre légal européen des indications géographiques et liens vers cahiers des charges.",
            "refresh_frequency": "À surveiller lors des changements réglementaires.",
            "license_label": "Registre public UE, conditions à vérifier",
            "license_url": null,
            "source_url": "https://ec.europa.eu/agriculture/eambrosia/geographical-indications-register/",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "gi_name",
                "country",
                "status",
                "product_category",
                "specification_url"
            ],
            "report_uses": [
                "rapport appellation",
                "preuve réglementaire",
                "cahiers des charges"
            ],
            "quality_notes": "Source juridique majeure pour les rapports appellation ; l’automatisation peut demander un connecteur spécifique.",
            "next_step": "Tester l’extraction des fiches GI françaises et stocker les liens de cahier des charges.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:57",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "eambrosia_gi",
                "source_family": "institutional_publication",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "snapshot registre, statut GI, URL cahier des charges",
                "primary_action": "php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv",
                "fallback_action": "exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps"
            },
            "policy_source_family": "institutional_publication",
            "evidence_required": "snapshot registre, statut GI, URL cahier des charges",
            "fallback_action": "exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 74.8,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 92,
                "priority": 65,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "institutional_publication",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Commission européenne, eAmbrosia GI Register, Registre public UE, conditions à vérifier — https://ec.europa.eu/agriculture/eambrosia/geographical-indications-register/",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv"
        },
        {
            "source_key": "weather_reference_api",
            "name": "API météo consolidée Winerix",
            "provider": "meteo.sprb.fr",
            "category": "météo",
            "status": "active",
            "priority": 24,
            "trust_score": "80.00",
            "coverage_scope": "Disponibilité, statistiques et tuiles cartographiques météo utilisées par le référentiel météo public.",
            "refresh_frequency": "Lecture API avec cache fichier Winerix de 7 jours.",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": "https://meteo.sprb.fr",
            "ingestion_script": "app/includes/site_engine.php",
            "local_tables": [],
            "merge_keys": [
                "lat",
                "lng",
                "date",
                "variable",
                "source"
            ],
            "report_uses": [
                "rapport millésime",
                "cartographie météo",
                "comparaison territoire"
            ],
            "quality_notes": "La donnée est pratique pour l’affichage ; il faut documenter les modèles sous-jacents avant citation analytique externe.",
            "next_step": "Ajouter une page interne de statut API et figer les sources météo incluses dans chaque snapshot de rapport.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "error",
            "health_message": "Operation timed out after 4000 milliseconds with 0 bytes received",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 74.6,
            "source_value_label": "à connecter vite",
            "source_value_action": "Résoudre le blocage avant de publier les KPI associés.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 80,
                "priority": 86,
                "status": 100,
                "local_readiness": 55,
                "health": 10,
                "freshness": 55,
                "governance": 75
            },
            "governance": {
                "source_family": "third_party_api",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : meteo.sprb.fr, API météo consolidée Winerix, À documenter — https://meteo.sprb.fr",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "quotidien",
            "cadence_days": 2,
            "due_level": "critical",
            "due_reason": "blocage ou erreur santé source",
            "age_days": 0,
            "next_command": "app/includes/site_engine.php"
        },
        {
            "source_key": "ban_ign_geocoding",
            "name": "Géocodage BAN / IGN",
            "provider": "IGN / Base Adresse Nationale",
            "category": "géographie",
            "status": "candidate",
            "priority": 32,
            "trust_score": "90.00",
            "coverage_scope": "Normalisation et géocodage des adresses, lieux-dits et coordonnées.",
            "refresh_frequency": "À la demande lors des enrichissements adresse.",
            "license_label": "Open data public, selon service IGN/BAN",
            "license_url": "https://adresse.data.gouv.fr",
            "source_url": "https://geoservices.ign.fr/documentation/services/services-geoplateforme/geocodage",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "full_address",
                "zipcode",
                "city",
                "insee_code",
                "latitude",
                "longitude"
            ],
            "report_uses": [
                "fiabilisation géographique",
                "distance œnotourisme",
                "cartographie"
            ],
            "quality_notes": "Indispensable pour réduire les faux rattachements commune/domaine et fiabiliser les distances.",
            "next_step": "Créer une file de géocodage pour les domaines sans coordonnées fiables ou matches faibles.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "ban_ign_geocoding",
                "source_family": "third_party_api",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "adresse normalisee, score geocodage, source BAN",
                "primary_action": "php scripts/ingest_ban_geocode.php",
                "fallback_action": "masquer les distances/cartes si geocodage faible"
            },
            "policy_source_family": "third_party_api",
            "evidence_required": "adresse normalisee, score geocodage, source BAN",
            "fallback_action": "masquer les distances/cartes si geocodage faible",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 73.9,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 90,
                "priority": 78,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : IGN / Base Adresse Nationale, Géocodage BAN / IGN, Open data public, selon service IGN/BAN — https://geoservices.ign.fr/documentation/services/services-geoplateforme/geocodage",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_ban_geocode.php"
        }
    ],
    "maintenance_queue": [
        {
            "source_key": "inao_denominations",
            "name": "Dénominations viticoles INAO",
            "provider": "INAO",
            "category": "appellations",
            "status": "active",
            "priority": 15,
            "trust_score": "93.00",
            "coverage_scope": "Appellations, catégories, types IG et rattachements communaux issus de sources locales INAO.",
            "refresh_frequency": "Manuel, à vérifier lors des mises à jour INAO.",
            "license_label": "Open data public, à confirmer fichier par fichier",
            "license_url": "https://www.data.gouv.fr/fr/licences",
            "source_url": "sources/denominations.csv",
            "ingestion_script": "scripts/seed_communes.php, scripts/seed_appellations.php",
            "local_tables": [
                "communes",
                "appellations"
            ],
            "merge_keys": [
                "insee_code",
                "appellation_name",
                "id_app_inao",
                "type_ig"
            ],
            "report_uses": [
                "rapport territoire",
                "rapport appellation",
                "rapport château",
                "rapport opportunité"
            ],
            "quality_notes": "Source pivot pour les croisements territoriaux ; attention aux communes fusionnées, déléguées ou renommées.",
            "next_step": "Ajouter une date de millésime de source et un contrôle de dérive avec COMAGRI/eAmbrosia.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: inao_denominations)",
            "data_freshness": "missing",
            "local_row_count": 28447,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "communes",
                "appellations"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 88.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 93,
                "priority": 95,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 75
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INAO, Dénominations viticoles INAO, Open data public, à confirmer fichier par fichier — sources/denominations.csv",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "quotidien",
            "cadence_days": 2,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/seed_communes.php, scripts/seed_appellations.php"
        },
        {
            "source_key": "comagri_ao_2025",
            "name": "COMAGRI aires AO 2025",
            "provider": "INAO / Ministère de l’Agriculture",
            "category": "appellations",
            "status": "active",
            "priority": 18,
            "trust_score": "90.00",
            "coverage_scope": "Aires géographiques et produits officiels filtrés sur les produits viticoles.",
            "refresh_frequency": "Manuel lors des nouveaux fichiers COMAGRI.",
            "license_label": "Open data public, à confirmer fichier par fichier",
            "license_url": "https://www.data.gouv.fr/fr/licences",
            "source_url": "sources/2025-03-10-comagri-aires-produits.csv + sources/2025-10-09-comagri-communes-aires-ao.csv",
            "ingestion_script": "scripts/seed_comagri.php",
            "local_tables": [
                "appellations"
            ],
            "merge_keys": [
                "insee_code",
                "appellation_name",
                "id_app_inao"
            ],
            "report_uses": [
                "rapport appellation",
                "rapport territoire",
                "contrôle qualité INAO"
            ],
            "quality_notes": "Bon complément officiel, avec encodage ISO-8859-1 traité au seed ; le filtrage par mots-clés vin doit rester contrôlé.",
            "next_step": "Comparer les libellés avec denominations.csv et marquer les divergences par appellation.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: comagri_ao_2025)",
            "data_freshness": "missing",
            "local_row_count": 21948,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "appellations"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 87.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 90,
                "priority": 92,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 75
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INAO / Ministère de l’Agriculture, COMAGRI aires AO 2025, Open data public, à confirmer fichier par fichier — sources/2025-03-10-comagri-aires-produits.csv + sources/2025-10-09-comagri-communes-aires-ao.csv",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "semestriel",
            "cadence_days": 180,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/seed_comagri.php"
        },
        {
            "source_key": "agence_bio",
            "name": "Professionnels engagés en bio",
            "provider": "Agence Bio",
            "category": "durabilité",
            "status": "active",
            "priority": 20,
            "trust_score": "89.00",
            "coverage_scope": "Opérateurs bio, SIRET, numéro bio, statut, certificat et date d’engagement.",
            "refresh_frequency": "Batch paginé via API Agence Bio.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://opendata.agencebio.org/api/gouv/operateurs/",
            "ingestion_script": "scripts/ingest_bio.php",
            "local_tables": [
                "bio_certifications"
            ],
            "merge_keys": [
                "siret",
                "insee_code",
                "estate_name",
                "numero_bio"
            ],
            "report_uses": [
                "rapport bio",
                "rapport territoire",
                "rapport sourcing durable"
            ],
            "quality_notes": "Donnée publique solide, mais localisée au siège ou à l’adresse déclarée ; ne prouve pas toujours la parcelle viticole exacte.",
            "next_step": "Ajouter un rapprochement SIRENE et distinguer producteurs viticoles, négociants et autres opérateurs.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: agence_bio)",
            "data_freshness": "missing",
            "local_row_count": 7415,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "bio_certifications"
            ],
            "refresh_policy": {
                "source_key": "agence_bio",
                "source_family": "open_data_licence_ouverte",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "date API, numero bio, SIRET, statut certificat",
                "primary_action": "php scripts/ingest_bio.php",
                "fallback_action": "ne pas presenter comme preuve parcellaire"
            },
            "policy_source_family": "open_data_licence_ouverte",
            "evidence_required": "date API, numero bio, SIRET, statut certificat",
            "fallback_action": "ne pas presenter comme preuve parcellaire",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 86.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 93,
                "trust": 89,
                "priority": 90,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Agence Bio, Professionnels engagés en bio, Licence ouverte Etalab — https://opendata.agencebio.org/api/gouv/operateurs/",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_bio.php"
        },
        {
            "source_key": "local_wine_catalog",
            "name": "Catalogue vins local",
            "provider": "importData / référentiel LWIN local",
            "category": "catalogue",
            "status": "active",
            "priority": 10,
            "trust_score": "82.00",
            "coverage_scope": "Vins, producteurs, régions, classifications, couleurs et millésimes disponibles localement.",
            "refresh_frequency": "Batch interne via scripts/ingest_import_profiles.php",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": null,
            "ingestion_script": "scripts/ingest_import_profiles.php",
            "local_tables": [
                "wine_catalog",
                "estate_wine_links",
                "estate_profiles"
            ],
            "merge_keys": [
                "lwin",
                "post_id",
                "producer_name",
                "wine_name",
                "region",
                "sub_region"
            ],
            "report_uses": [
                "rapport château",
                "rapport appellation",
                "rapport millésime",
                "rapport catalogue"
            ],
            "quality_notes": "Très structurant pour Winerix, mais la provenance amont, la licence et les droits de réutilisation doivent être explicités avant diffusion large.",
            "next_step": "Documenter la provenance exacte du catalogue et créer un score de complétude par domaine.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: local_wine_catalog)",
            "data_freshness": "missing",
            "local_row_count": 290112,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "wine_catalog",
                "estate_wine_links",
                "estate_profiles"
            ],
            "refresh_policy": {
                "source_key": "local_wine_catalog",
                "source_family": "internal_or_imported",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "provenance amont, nombre lignes, date import",
                "primary_action": "php scripts/ingest_import_profiles.php",
                "fallback_action": "garder les chiffres comme signal Winerix interne"
            },
            "policy_source_family": "internal_or_imported",
            "evidence_required": "provenance amont, nombre lignes, date import",
            "fallback_action": "garder les chiffres comme signal Winerix interne",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 85.7,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 82,
                "priority": 100,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 60
            },
            "governance": {
                "source_family": "internal_or_imported",
                "reuse_status": "internal_only",
                "attribution_required": true,
                "commercial_reuse": "blocked_until_clarified",
                "redistribution_risk": "high",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : importData / référentiel LWIN local, Catalogue vins local, À documenter",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_import_profiles.php"
        },
        {
            "source_key": "open_meteo_archive",
            "name": "Historique météo Open-Meteo",
            "provider": "Open-Meteo",
            "category": "météo",
            "status": "active",
            "priority": 22,
            "trust_score": "86.00",
            "coverage_scope": "Températures, pluie, soleil, évapotranspiration, gel et chaleur par grille météo.",
            "refresh_frequency": "Batch par grille et année via archive API.",
            "license_label": "Voir conditions Open-Meteo",
            "license_url": "https://open-meteo.com/en/license",
            "source_url": "https://open-meteo.com/en/docs/historical-weather-api",
            "ingestion_script": "scripts/ingest_climate_grid.php",
            "local_tables": [
                "climate_grid",
                "climate_weekly"
            ],
            "merge_keys": [
                "grid_id",
                "lat",
                "lng",
                "year",
                "week_num"
            ],
            "report_uses": [
                "rapport millésime",
                "rapport risque climatique",
                "rapport territoire"
            ],
            "quality_notes": "Excellent pour comparer les profils climatiques ; les résultats restent des réanalyses/grilles et non des mesures station domaine.",
            "next_step": "Créer des normales 10 ans et anomalies par région/appellation.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: open_meteo_archive)",
            "data_freshness": "missing",
            "local_row_count": 32839,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "climate_grid",
                "climate_weekly"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 84.9,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 86,
                "priority": 88,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 90
            },
            "governance": {
                "source_family": "third_party_api",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Open-Meteo, Historique météo Open-Meteo, Voir conditions Open-Meteo — https://open-meteo.com/en/docs/historical-weather-api",
                "warning": "Conserver conditions API, quota, licence et snapshot de requête."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "annuel",
            "cadence_days": 430,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_climate_grid.php"
        },
        {
            "source_key": "local_business_profiles",
            "name": "Profils business domaines",
            "provider": "import_business_details / source locale",
            "category": "domaines",
            "status": "active",
            "priority": 12,
            "trust_score": "76.00",
            "coverage_scope": "Présence web, téléphone, avis, accessibilité, géolocalisation et signaux B2B des domaines.",
            "refresh_frequency": "Batch interne via scripts/ingest_import_profiles.php",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": null,
            "ingestion_script": "scripts/ingest_import_profiles.php",
            "local_tables": [
                "estate_profiles",
                "estate_commune_links",
                "estate_signal_scores"
            ],
            "merge_keys": [
                "post_id",
                "business_id",
                "google_place_id",
                "insee_code",
                "zipcode"
            ],
            "report_uses": [
                "rapport château",
                "rapport œnotourisme",
                "rapport prospection B2B"
            ],
            "quality_notes": "Très utile pour les signaux opérationnels, mais les conditions de réutilisation de certains attributs doivent être clarifiées.",
            "next_step": "Ajouter des indicateurs de fraîcheur et séparer les preuves observées des inférences de score.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "Etat d'ingestion absent (state_key: local_business_profiles)",
            "data_freshness": "missing",
            "local_row_count": 67837,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:52",
            "covered_tables": [
                "estate_profiles",
                "estate_commune_links",
                "estate_signal_scores"
            ],
            "refresh_policy": {
                "source_key": "local_business_profiles",
                "source_family": "internal_or_imported",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "provenance, champs enrichis, date import",
                "primary_action": "php scripts/ingest_import_profiles.php",
                "fallback_action": "ne pas exposer les attributs non gouvernes"
            },
            "policy_source_family": "internal_or_imported",
            "evidence_required": "provenance, champs enrichis, date import",
            "fallback_action": "ne pas exposer les attributs non gouvernes",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 83.6,
            "source_value_label": "à industrialiser",
            "source_value_action": "Ajouter cette source aux rapports et surveiller sa fraîcheur.",
            "source_value_dimensions": {
                "use_case": 97,
                "trust": 76,
                "priority": 98,
                "status": 100,
                "local_readiness": 100,
                "health": 60,
                "freshness": 15,
                "governance": 60
            },
            "governance": {
                "source_family": "internal_or_imported",
                "reuse_status": "internal_only",
                "attribution_required": true,
                "commercial_reuse": "blocked_until_clarified",
                "redistribution_risk": "high",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : import_business_details / source locale, Profils business domaines, À documenter",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "critical",
            "due_reason": "donnée locale absente",
            "age_days": 0,
            "next_command": "php scripts/ingest_import_profiles.php"
        },
        {
            "source_key": "weather_reference_api",
            "name": "API météo consolidée Winerix",
            "provider": "meteo.sprb.fr",
            "category": "météo",
            "status": "active",
            "priority": 24,
            "trust_score": "80.00",
            "coverage_scope": "Disponibilité, statistiques et tuiles cartographiques météo utilisées par le référentiel météo public.",
            "refresh_frequency": "Lecture API avec cache fichier Winerix de 7 jours.",
            "license_label": "À documenter",
            "license_url": null,
            "source_url": "https://meteo.sprb.fr",
            "ingestion_script": "app/includes/site_engine.php",
            "local_tables": [],
            "merge_keys": [
                "lat",
                "lng",
                "date",
                "variable",
                "source"
            ],
            "report_uses": [
                "rapport millésime",
                "cartographie météo",
                "comparaison territoire"
            ],
            "quality_notes": "La donnée est pratique pour l’affichage ; il faut documenter les modèles sous-jacents avant citation analytique externe.",
            "next_step": "Ajouter une page interne de statut API et figer les sources météo incluses dans chaque snapshot de rapport.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "error",
            "health_message": "Operation timed out after 4000 milliseconds with 0 bytes received",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 74.6,
            "source_value_label": "à connecter vite",
            "source_value_action": "Résoudre le blocage avant de publier les KPI associés.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 80,
                "priority": 86,
                "status": 100,
                "local_readiness": 55,
                "health": 10,
                "freshness": 55,
                "governance": 75
            },
            "governance": {
                "source_family": "third_party_api",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : meteo.sprb.fr, API météo consolidée Winerix, À documenter — https://meteo.sprb.fr",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "quotidien",
            "cadence_days": 2,
            "due_level": "critical",
            "due_reason": "blocage ou erreur santé source",
            "age_days": 0,
            "next_command": "app/includes/site_engine.php"
        },
        {
            "source_key": "datatourisme",
            "name": "DATAtourisme",
            "provider": "ADN Tourisme",
            "category": "œnotourisme",
            "status": "candidate",
            "priority": 28,
            "trust_score": "84.00",
            "coverage_scope": "Points d’intérêt touristiques, dégustations, caveaux, accueil groupe et capacités potentielles.",
            "refresh_frequency": "À activer via compte diffuseur/API.",
            "license_label": "Open data avec conditions diffuseur",
            "license_url": "https://www.datatourisme.fr/utiliser-les-donnees/",
            "source_url": "https://www.datatourisme.fr/utiliser-les-donnees/",
            "ingestion_script": "scripts/ingest_datatourisme.php",
            "local_tables": [
                "b2b_logistics"
            ],
            "merge_keys": [
                "datatourisme_id",
                "insee_code",
                "estate_name",
                "zipcode"
            ],
            "report_uses": [
                "rapport œnotourisme",
                "score B2B logistique",
                "rapport territoire"
            ],
            "quality_notes": "Très aligné avec la promesse Winerix, mais nécessite configuration du flux et contrôle de couverture locale.",
            "next_step": "Obtenir/paramétrer l’accès diffuseur puis remplacer le script prototype par une ingestion paginée réelle.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "ok",
            "health_message": "Table sans lignes: b2b_logistics | Aucune ligne locale",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [
                "b2b_logistics"
            ],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 85.2,
            "source_value_label": "à industrialiser",
            "source_value_action": "Lancer un premier import d’échantillon puis évaluer la couverture.",
            "source_value_dimensions": {
                "use_case": 99,
                "trust": 84,
                "priority": 82,
                "status": 68,
                "local_readiness": 85,
                "health": 100,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "institutional_publication",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : ADN Tourisme, DATAtourisme, Open data avec conditions diffuseur — https://www.datatourisme.fr/utiliser-les-donnees/",
                "warning": "Contrôler les conditions de réutilisation avant export commercial automatisé."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "trimestriel",
            "cadence_days": 90,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_datatourisme.php"
        },
        {
            "source_key": "sirene_insee",
            "name": "Base Sirene",
            "provider": "INSEE",
            "category": "entreprises",
            "status": "candidate",
            "priority": 30,
            "trust_score": "95.00",
            "coverage_scope": "Identité légale des entreprises et établissements : SIREN, SIRET, activité, adresse, état administratif.",
            "refresh_frequency": "API ou fichier stock mensuel.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://www.data.gouv.fr/dataservices/api-sirene-open-data",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "siret",
                "siren",
                "raison_sociale",
                "code_naf",
                "zipcode",
                "insee_code"
            ],
            "report_uses": [
                "fiabilisation domaines",
                "rapport prospection",
                "contrôle bio",
                "scoring activité"
            ],
            "quality_notes": "Référence légale incontournable pour solidifier les domaines et rapprocher Bio/DATAtourisme/business profiles.",
            "next_step": "Créer un enrichissement SIRET/SIREN par domaine et par opérateur bio.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "sirene_insee",
                "source_family": "open_data_licence_ouverte",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "SIREN/SIRET, date unite legale, adresse",
                "primary_action": "php scripts/ingest_sirene_insee.php",
                "fallback_action": "laisser les rattachements entreprise en revue"
            },
            "policy_source_family": "open_data_licence_ouverte",
            "evidence_required": "SIREN/SIRET, date unite legale, adresse",
            "fallback_action": "laisser les rattachements entreprise en revue",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 76.7,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 98,
                "trust": 95,
                "priority": 80,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : INSEE, Base Sirene, Licence ouverte Etalab — https://www.data.gouv.fr/dataservices/api-sirene-open-data",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_sirene_insee.php"
        },
        {
            "source_key": "douanes_trade",
            "name": "Commerce extérieur des vins",
            "provider": "Douanes françaises / data.gouv.fr",
            "category": "économie",
            "status": "candidate",
            "priority": 35,
            "trust_score": "92.00",
            "coverage_scope": "Flux export/import par produit, pays, période, valeur et volume.",
            "refresh_frequency": "Mensuel ou selon publication Douanes.",
            "license_label": "Licence ouverte Etalab",
            "license_url": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
            "source_url": "https://www.data.gouv.fr/datasets/statistiques-nationales-du-commerce-exterieur",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "period",
                "country",
                "product_code",
                "flow",
                "value_eur",
                "volume"
            ],
            "report_uses": [
                "rapport export",
                "opportunité pays",
                "benchmark macro"
            ],
            "quality_notes": "Source publique forte, mais il faut mapper proprement les nomenclatures produits vers styles/appellations Winerix.",
            "next_step": "Définir les codes douaniers vin à suivre et créer une table mensuelle agrégée.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:57",
            "covered_tables": [],
            "refresh_policy": null,
            "policy_source_family": "",
            "evidence_required": "",
            "fallback_action": "",
            "stale_after_days": null,
            "critical_after_days": null,
            "source_value_score": 75.3,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 97,
                "trust": 92,
                "priority": 75,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Douanes françaises / data.gouv.fr, Commerce extérieur des vins, Licence ouverte Etalab — https://www.data.gouv.fr/datasets/statistiques-nationales-du-commerce-exterieur",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "Définir une procédure d’import avant industrialisation."
        },
        {
            "source_key": "eambrosia_gi",
            "name": "eAmbrosia GI Register",
            "provider": "Commission européenne",
            "category": "appellations",
            "status": "candidate",
            "priority": 45,
            "trust_score": "92.00",
            "coverage_scope": "Registre légal européen des indications géographiques et liens vers cahiers des charges.",
            "refresh_frequency": "À surveiller lors des changements réglementaires.",
            "license_label": "Registre public UE, conditions à vérifier",
            "license_url": null,
            "source_url": "https://ec.europa.eu/agriculture/eambrosia/geographical-indications-register/",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "gi_name",
                "country",
                "status",
                "product_category",
                "specification_url"
            ],
            "report_uses": [
                "rapport appellation",
                "preuve réglementaire",
                "cahiers des charges"
            ],
            "quality_notes": "Source juridique majeure pour les rapports appellation ; l’automatisation peut demander un connecteur spécifique.",
            "next_step": "Tester l’extraction des fiches GI françaises et stocker les liens de cahier des charges.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:57",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "eambrosia_gi",
                "source_family": "institutional_publication",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "snapshot registre, statut GI, URL cahier des charges",
                "primary_action": "php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv",
                "fallback_action": "exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps"
            },
            "policy_source_family": "institutional_publication",
            "evidence_required": "snapshot registre, statut GI, URL cahier des charges",
            "fallback_action": "exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 74.8,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 100,
                "trust": 92,
                "priority": 65,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "institutional_publication",
                "reuse_status": "review_before_export",
                "attribution_required": true,
                "commercial_reuse": "review",
                "redistribution_risk": "medium",
                "review_required": true,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : Commission européenne, eAmbrosia GI Register, Registre public UE, conditions à vérifier — https://ec.europa.eu/agriculture/eambrosia/geographical-indications-register/",
                "warning": "Licence incomplète ou à confirmer : revue requise avant publication forte."
            },
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv"
        },
        {
            "source_key": "ban_ign_geocoding",
            "name": "Géocodage BAN / IGN",
            "provider": "IGN / Base Adresse Nationale",
            "category": "géographie",
            "status": "candidate",
            "priority": 32,
            "trust_score": "90.00",
            "coverage_scope": "Normalisation et géocodage des adresses, lieux-dits et coordonnées.",
            "refresh_frequency": "À la demande lors des enrichissements adresse.",
            "license_label": "Open data public, selon service IGN/BAN",
            "license_url": "https://adresse.data.gouv.fr",
            "source_url": "https://geoservices.ign.fr/documentation/services/services-geoplateforme/geocodage",
            "ingestion_script": null,
            "local_tables": [],
            "merge_keys": [
                "full_address",
                "zipcode",
                "city",
                "insee_code",
                "latitude",
                "longitude"
            ],
            "report_uses": [
                "fiabilisation géographique",
                "distance œnotourisme",
                "cartographie"
            ],
            "quality_notes": "Indispensable pour réduire les faux rattachements commune/domaine et fiabiliser les distances.",
            "next_step": "Créer une file de géocodage pour les domaines sans coordonnées fiables ou matches faibles.",
            "last_reviewed_on": "2026-07-03",
            "health_status": "warning",
            "health_message": "HTTP request failed",
            "data_freshness": "stale",
            "local_row_count": 0,
            "missing_tables": [],
            "last_checked_at": "2026-07-06 16:54:52",
            "created_at": "2026-07-03 14:31:10",
            "updated_at": "2026-07-06 16:54:56",
            "covered_tables": [],
            "refresh_policy": {
                "source_key": "ban_ign_geocoding",
                "source_family": "third_party_api",
                "recommended_cadence": "monthly",
                "stale_after_days": 45,
                "critical_after_days": 90,
                "evidence_required": "adresse normalisee, score geocodage, source BAN",
                "primary_action": "php scripts/ingest_ban_geocode.php",
                "fallback_action": "masquer les distances/cartes si geocodage faible"
            },
            "policy_source_family": "third_party_api",
            "evidence_required": "adresse normalisee, score geocodage, source BAN",
            "fallback_action": "masquer les distances/cartes si geocodage faible",
            "stale_after_days": 45,
            "critical_after_days": 90,
            "source_value_score": 73.9,
            "source_value_label": "à connecter vite",
            "source_value_action": "Définir un connecteur ou une procédure semi-manuelle d’import.",
            "source_value_dimensions": {
                "use_case": 91,
                "trust": 90,
                "priority": 78,
                "status": 68,
                "local_readiness": 35,
                "health": 60,
                "freshness": 55,
                "governance": 90
            },
            "governance": {
                "source_family": "open_data_licence_ouverte",
                "reuse_status": "cite_with_attribution",
                "attribution_required": true,
                "commercial_reuse": "allowed_with_attribution",
                "redistribution_risk": "low",
                "review_required": false,
                "citation_requirements": [
                    "producer",
                    "source_name",
                    "license",
                    "source_url",
                    "source_year_or_observed_on",
                    "caveat"
                ],
                "attribution_text": "Source : IGN / Base Adresse Nationale, Géocodage BAN / IGN, Open data public, selon service IGN/BAN — https://geoservices.ign.fr/documentation/services/services-geoplateforme/geocodage",
                "warning": "Citation autorisée avec producteur, licence, URL et millésime/date de mise à jour."
            },
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "recommended_cadence": "mensuel",
            "cadence_days": 45,
            "due_level": "due",
            "due_reason": "fraîcheur obsolète",
            "age_days": 0,
            "next_command": "php scripts/ingest_ban_geocode.php"
        }
    ],
    "onboarding_cards": [
        {
            "source_key": "inao_denominations",
            "name": "Dénominations viticoles INAO",
            "score": 88.2,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/seed_communes.php, scripts/seed_appellations.php",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport territoire, rapport appellation, rapport château, rapport opportunité."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : Dénominations viticoles INAO\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport territoire, rapport appellation, rapport château, rapport opportunité\nGouvernance : review_before_export · risque medium\nImport : php scripts/seed_communes.php, scripts/seed_appellations.php\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport territoire, rapport appellation, rapport château, rapport opportunité."
        },
        {
            "source_key": "comagri_ao_2025",
            "name": "COMAGRI aires AO 2025",
            "score": 87.2,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/seed_comagri.php",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport appellation, rapport territoire, contrôle qualité INAO."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : COMAGRI aires AO 2025\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport appellation, rapport territoire, contrôle qualité INAO\nGouvernance : review_before_export · risque medium\nImport : php scripts/seed_comagri.php\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport appellation, rapport territoire, contrôle qualité INAO."
        },
        {
            "source_key": "agence_bio",
            "name": "Professionnels engagés en bio",
            "score": 86.2,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/ingest_bio.php",
            "evidence_required": "date API, numero bio, SIRET, statut certificat",
            "fallback_action": "ne pas presenter comme preuve parcellaire",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : date API, numero bio, SIRET, statut certificat.",
                "Relier au moins un usage KPI/rapport : rapport bio, rapport territoire, rapport sourcing durable."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : Professionnels engagés en bio\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport bio, rapport territoire, rapport sourcing durable\nGouvernance : cite_with_attribution · risque low\nImport : php scripts/ingest_bio.php\nPreuve attendue : date API, numero bio, SIRET, statut certificat\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : date API, numero bio, SIRET, statut certificat. | Relier au moins un usage KPI/rapport : rapport bio, rapport territoire, rapport sourcing durable."
        },
        {
            "source_key": "local_wine_catalog",
            "name": "Catalogue vins local",
            "score": 85.7,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/ingest_import_profiles.php",
            "evidence_required": "provenance amont, nombre lignes, date import",
            "fallback_action": "garder les chiffres comme signal Winerix interne",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : provenance amont, nombre lignes, date import.",
                "Relier au moins un usage KPI/rapport : rapport château, rapport appellation, rapport millésime, rapport catalogue."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : Catalogue vins local\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport château, rapport appellation, rapport millésime, rapport catalogue\nGouvernance : internal_only · risque high\nImport : php scripts/ingest_import_profiles.php\nPreuve attendue : provenance amont, nombre lignes, date import\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : provenance amont, nombre lignes, date import. | Relier au moins un usage KPI/rapport : rapport château, rapport appellation, rapport millésime, rapport catalogue."
        },
        {
            "source_key": "datatourisme",
            "name": "DATAtourisme",
            "score": 85.2,
            "label": "à industrialiser",
            "status": "candidate",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "due",
            "next_command": "php scripts/ingest_datatourisme.php",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Charger un premier échantillon et contrôler le nombre de lignes.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport œnotourisme, score B2B logistique, rapport territoire."
            ],
            "blockers": [
                "fraîcheur obsolète"
            ],
            "ticket_text": "Source : DATAtourisme\nObjectif : Lancer un premier import d’échantillon puis évaluer la couverture.\nUsage KPI : rapport œnotourisme, score B2B logistique, rapport territoire\nGouvernance : review_before_export · risque medium\nImport : php scripts/ingest_datatourisme.php\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Charger un premier échantillon et contrôler le nombre de lignes. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport œnotourisme, score B2B logistique, rapport territoire."
        },
        {
            "source_key": "open_meteo_archive",
            "name": "Historique météo Open-Meteo",
            "score": 84.9,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/ingest_climate_grid.php",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport millésime, rapport risque climatique, rapport territoire."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : Historique météo Open-Meteo\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport millésime, rapport risque climatique, rapport territoire\nGouvernance : review_before_export · risque medium\nImport : php scripts/ingest_climate_grid.php\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport millésime, rapport risque climatique, rapport territoire."
        },
        {
            "source_key": "local_business_profiles",
            "name": "Profils business domaines",
            "score": 83.6,
            "label": "à industrialiser",
            "status": "active",
            "reuse_status": "internal_only",
            "redistribution_risk": "high",
            "review_required": false,
            "due_level": "critical",
            "next_command": "php scripts/ingest_import_profiles.php",
            "evidence_required": "provenance, champs enrichis, date import",
            "fallback_action": "ne pas exposer les attributs non gouvernes",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : provenance, champs enrichis, date import.",
                "Relier au moins un usage KPI/rapport : rapport château, rapport œnotourisme, rapport prospection B2B."
            ],
            "blockers": [
                "donnée locale absente"
            ],
            "ticket_text": "Source : Profils business domaines\nObjectif : Ajouter cette source aux rapports et surveiller sa fraîcheur.\nUsage KPI : rapport château, rapport œnotourisme, rapport prospection B2B\nGouvernance : internal_only · risque high\nImport : php scripts/ingest_import_profiles.php\nPreuve attendue : provenance, champs enrichis, date import\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : provenance, champs enrichis, date import. | Relier au moins un usage KPI/rapport : rapport château, rapport œnotourisme, rapport prospection B2B."
        },
        {
            "source_key": "sirene_insee",
            "name": "Base Sirene",
            "score": 76.7,
            "label": "à connecter vite",
            "status": "candidate",
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "review_required": false,
            "due_level": "due",
            "next_command": "php scripts/ingest_sirene_insee.php",
            "evidence_required": "SIREN/SIRET, date unite legale, adresse",
            "fallback_action": "laisser les rattachements entreprise en revue",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Définir une procédure d’import ou un connecteur semi-manuel.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : SIREN/SIRET, date unite legale, adresse.",
                "Relier au moins un usage KPI/rapport : fiabilisation domaines, rapport prospection, contrôle bio, scoring activité."
            ],
            "blockers": [
                "fraîcheur obsolète",
                "procédure d’import absente"
            ],
            "ticket_text": "Source : Base Sirene\nObjectif : Définir un connecteur ou une procédure semi-manuelle d’import.\nUsage KPI : fiabilisation domaines, rapport prospection, contrôle bio, scoring activité\nGouvernance : cite_with_attribution · risque low\nImport : php scripts/ingest_sirene_insee.php\nPreuve attendue : SIREN/SIRET, date unite legale, adresse\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : SIREN/SIRET, date unite legale, adresse. | Relier au moins un usage KPI/rapport : fiabilisation domaines, rapport prospection, contrôle bio, scoring activité."
        },
        {
            "source_key": "douanes_trade",
            "name": "Commerce extérieur des vins",
            "score": 75.3,
            "label": "à connecter vite",
            "status": "candidate",
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "review_required": false,
            "due_level": "due",
            "next_command": "Définir une procédure d’import avant industrialisation.",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Définir une procédure d’import ou un connecteur semi-manuel.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport export, opportunité pays, benchmark macro."
            ],
            "blockers": [
                "fraîcheur obsolète",
                "procédure d’import absente"
            ],
            "ticket_text": "Source : Commerce extérieur des vins\nObjectif : Définir un connecteur ou une procédure semi-manuelle d’import.\nUsage KPI : rapport export, opportunité pays, benchmark macro\nGouvernance : cite_with_attribution · risque low\nImport : Définir une procédure d’import avant industrialisation.\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport export, opportunité pays, benchmark macro."
        },
        {
            "source_key": "eambrosia_gi",
            "name": "eAmbrosia GI Register",
            "score": 74.8,
            "label": "à connecter vite",
            "status": "candidate",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "due",
            "next_command": "php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv",
            "evidence_required": "snapshot registre, statut GI, URL cahier des charges",
            "fallback_action": "exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Définir une procédure d’import ou un connecteur semi-manuel.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : snapshot registre, statut GI, URL cahier des charges.",
                "Relier au moins un usage KPI/rapport : rapport appellation, preuve réglementaire, cahiers des charges."
            ],
            "blockers": [
                "fraîcheur obsolète",
                "procédure d’import absente"
            ],
            "ticket_text": "Source : eAmbrosia GI Register\nObjectif : Définir un connecteur ou une procédure semi-manuelle d’import.\nUsage KPI : rapport appellation, preuve réglementaire, cahiers des charges\nGouvernance : review_before_export · risque medium\nImport : php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv\nPreuve attendue : snapshot registre, statut GI, URL cahier des charges\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : snapshot registre, statut GI, URL cahier des charges. | Relier au moins un usage KPI/rapport : rapport appellation, preuve réglementaire, cahiers des charges."
        },
        {
            "source_key": "weather_reference_api",
            "name": "API météo consolidée Winerix",
            "score": 74.6,
            "label": "à connecter vite",
            "status": "active",
            "reuse_status": "review_before_export",
            "redistribution_risk": "medium",
            "review_required": false,
            "due_level": "critical",
            "next_command": "app/includes/site_engine.php",
            "evidence_required": "",
            "fallback_action": "",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Exécuter et documenter la commande d’import proposée.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Relier au moins un usage KPI/rapport : rapport millésime, cartographie météo, comparaison territoire."
            ],
            "blockers": [
                "blocage ou erreur santé source"
            ],
            "ticket_text": "Source : API météo consolidée Winerix\nObjectif : Résoudre le blocage avant de publier les KPI associés.\nUsage KPI : rapport millésime, cartographie météo, comparaison territoire\nGouvernance : review_before_export · risque medium\nImport : app/includes/site_engine.php\nPreuve attendue : \nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport millésime, cartographie météo, comparaison territoire."
        },
        {
            "source_key": "ban_ign_geocoding",
            "name": "Géocodage BAN / IGN",
            "score": 73.9,
            "label": "à connecter vite",
            "status": "candidate",
            "reuse_status": "cite_with_attribution",
            "redistribution_risk": "low",
            "review_required": false,
            "due_level": "due",
            "next_command": "php scripts/ingest_ban_geocode.php",
            "evidence_required": "adresse normalisee, score geocodage, source BAN",
            "fallback_action": "masquer les distances/cartes si geocodage faible",
            "activation_criteria": [
                "Couverture locale vérifiée ou source macro sans table locale dédiée.",
                "Définir une procédure d’import ou un connecteur semi-manuel.",
                "Conserver attribution source, URL, licence et millésime avec chaque citation.",
                "Preuve attendue : adresse normalisee, score geocodage, source BAN.",
                "Relier au moins un usage KPI/rapport : fiabilisation géographique, distance œnotourisme, cartographie."
            ],
            "blockers": [
                "fraîcheur obsolète",
                "procédure d’import absente"
            ],
            "ticket_text": "Source : Géocodage BAN / IGN\nObjectif : Définir un connecteur ou une procédure semi-manuelle d’import.\nUsage KPI : fiabilisation géographique, distance œnotourisme, cartographie\nGouvernance : cite_with_attribution · risque low\nImport : php scripts/ingest_ban_geocode.php\nPreuve attendue : adresse normalisee, score geocodage, source BAN\nCritères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : adresse normalisee, score geocodage, source BAN. | Relier au moins un usage KPI/rapport : fiabilisation géographique, distance œnotourisme, cartographie."
        }
    ],
    "refresh_policy_count": 148,
    "copy_summary": "Roadmap sources Winerix : 12 priorités ressortent au-dessus de 50/100, dont 7 à industrialiser et 9 à connecter vite. La file de fidélisation contient 17 source(s) à vérifier ou corriger.",
    "markdown": "# Winerix Source Roadmap\nGénéré le 2026-07-06T16:59:44+02:00\n\n## Synthèse\n- Sources analysées: 12\n- À industrialiser: 7\n- À connecter vite: 9\n- À qualifier: 1\n- À surveiller: 0\n- Suivi critique/dû: 17\n\n## Priorités source\n1. Dénominations viticoles INAO — 88.2/100 (à industrialiser)\n   - Usage KPI: rapport territoire, rapport appellation, rapport château, rapport opportunité\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: critical · donnée locale absente · cadence quotidien\n   - Import: php scripts/seed_communes.php, scripts/seed_appellations.php\n2. COMAGRI aires AO 2025 — 87.2/100 (à industrialiser)\n   - Usage KPI: rapport appellation, rapport territoire, contrôle qualité INAO\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: critical · donnée locale absente · cadence semestriel\n   - Import: php scripts/seed_comagri.php\n3. Professionnels engagés en bio — 86.2/100 (à industrialiser)\n   - Usage KPI: rapport bio, rapport territoire, rapport sourcing durable\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: cite_with_attribution · risque redistribution low\n   - Suivi: critical · donnée locale absente · cadence mensuel\n   - Preuve attendue: date API, numero bio, SIRET, statut certificat\n   - Import: php scripts/ingest_bio.php\n4. Catalogue vins local — 85.7/100 (à industrialiser)\n   - Usage KPI: rapport château, rapport appellation, rapport millésime, rapport catalogue\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: internal_only · risque redistribution high\n   - Suivi: critical · donnée locale absente · cadence mensuel\n   - Preuve attendue: provenance amont, nombre lignes, date import\n   - Import: php scripts/ingest_import_profiles.php\n5. DATAtourisme — 85.2/100 (à industrialiser)\n   - Usage KPI: rapport œnotourisme, score B2B logistique, rapport territoire\n   - Action: Lancer un premier import d’échantillon puis évaluer la couverture.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: due · fraîcheur obsolète · cadence trimestriel\n   - Import: php scripts/ingest_datatourisme.php\n6. Historique météo Open-Meteo — 84.9/100 (à industrialiser)\n   - Usage KPI: rapport millésime, rapport risque climatique, rapport territoire\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: critical · donnée locale absente · cadence annuel\n   - Import: php scripts/ingest_climate_grid.php\n7. Profils business domaines — 83.6/100 (à industrialiser)\n   - Usage KPI: rapport château, rapport œnotourisme, rapport prospection B2B\n   - Action: Ajouter cette source aux rapports et surveiller sa fraîcheur.\n   - Gouvernance: internal_only · risque redistribution high\n   - Suivi: critical · donnée locale absente · cadence mensuel\n   - Preuve attendue: provenance, champs enrichis, date import\n   - Import: php scripts/ingest_import_profiles.php\n8. Base Sirene — 76.7/100 (à connecter vite)\n   - Usage KPI: fiabilisation domaines, rapport prospection, contrôle bio, scoring activité\n   - Action: Définir un connecteur ou une procédure semi-manuelle d’import.\n   - Gouvernance: cite_with_attribution · risque redistribution low\n   - Suivi: due · fraîcheur obsolète · cadence mensuel\n   - Preuve attendue: SIREN/SIRET, date unite legale, adresse\n   - Import: php scripts/ingest_sirene_insee.php\n9. Commerce extérieur des vins — 75.3/100 (à connecter vite)\n   - Usage KPI: rapport export, opportunité pays, benchmark macro\n   - Action: Définir un connecteur ou une procédure semi-manuelle d’import.\n   - Gouvernance: cite_with_attribution · risque redistribution low\n   - Suivi: due · fraîcheur obsolète · cadence mensuel\n   - Import: Définir une procédure d’import avant industrialisation.\n10. eAmbrosia GI Register — 74.8/100 (à connecter vite)\n   - Usage KPI: rapport appellation, preuve réglementaire, cahiers des charges\n   - Action: Définir un connecteur ou une procédure semi-manuelle d’import.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: due · fraîcheur obsolète · cadence mensuel\n   - Preuve attendue: snapshot registre, statut GI, URL cahier des charges\n   - Import: php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv\n11. API météo consolidée Winerix — 74.6/100 (à connecter vite)\n   - Usage KPI: rapport millésime, cartographie météo, comparaison territoire\n   - Action: Résoudre le blocage avant de publier les KPI associés.\n   - Gouvernance: review_before_export · risque redistribution medium\n   - Suivi: critical · blocage ou erreur santé source · cadence quotidien\n   - Import: app/includes/site_engine.php\n12. Géocodage BAN / IGN — 73.9/100 (à connecter vite)\n   - Usage KPI: fiabilisation géographique, distance œnotourisme, cartographie\n   - Action: Définir un connecteur ou une procédure semi-manuelle d’import.\n   - Gouvernance: cite_with_attribution · risque redistribution low\n   - Suivi: due · fraîcheur obsolète · cadence mensuel\n   - Preuve attendue: adresse normalisee, score geocodage, source BAN\n   - Import: php scripts/ingest_ban_geocode.php\n\n## File de fidélisation\n- Dénominations viticoles INAO: critical · donnée locale absente · prochaine étape: Ajouter une date de millésime de source et un contrôle de dérive avec COMAGRI/eAmbrosia.\n- COMAGRI aires AO 2025: critical · donnée locale absente · prochaine étape: Comparer les libellés avec denominations.csv et marquer les divergences par appellation.\n- Professionnels engagés en bio: critical · donnée locale absente · prochaine étape: Ajouter un rapprochement SIRENE et distinguer producteurs viticoles, négociants et autres opérateurs.\n  - Preuve attendue: date API, numero bio, SIRET, statut certificat\n  - Fallback: ne pas presenter comme preuve parcellaire\n- Catalogue vins local: critical · donnée locale absente · prochaine étape: Documenter la provenance exacte du catalogue et créer un score de complétude par domaine.\n  - Preuve attendue: provenance amont, nombre lignes, date import\n  - Fallback: garder les chiffres comme signal Winerix interne\n- Historique météo Open-Meteo: critical · donnée locale absente · prochaine étape: Créer des normales 10 ans et anomalies par région/appellation.\n- Profils business domaines: critical · donnée locale absente · prochaine étape: Ajouter des indicateurs de fraîcheur et séparer les preuves observées des inférences de score.\n  - Preuve attendue: provenance, champs enrichis, date import\n  - Fallback: ne pas exposer les attributs non gouvernes\n- API météo consolidée Winerix: critical · blocage ou erreur santé source · prochaine étape: Ajouter une page interne de statut API et figer les sources météo incluses dans chaque snapshot de rapport.\n- DATAtourisme: due · fraîcheur obsolète · prochaine étape: Obtenir/paramétrer l’accès diffuseur puis remplacer le script prototype par une ingestion paginée réelle.\n- Base Sirene: due · fraîcheur obsolète · prochaine étape: Créer un enrichissement SIRET/SIREN par domaine et par opérateur bio.\n  - Preuve attendue: SIREN/SIRET, date unite legale, adresse\n  - Fallback: laisser les rattachements entreprise en revue\n- Commerce extérieur des vins: due · fraîcheur obsolète · prochaine étape: Définir les codes douaniers vin à suivre et créer une table mensuelle agrégée.\n- eAmbrosia GI Register: due · fraîcheur obsolète · prochaine étape: Tester l’extraction des fiches GI françaises et stocker les liens de cahier des charges.\n  - Preuve attendue: snapshot registre, statut GI, URL cahier des charges\n  - Fallback: exporter la file de revue via api/reference_export.php?type=appellation_regulatory_gaps\n- Géocodage BAN / IGN: due · fraîcheur obsolète · prochaine étape: Créer une file de géocodage pour les domaines sans coordonnées fiables ou matches faibles.\n  - Preuve attendue: adresse normalisee, score geocodage, source BAN\n  - Fallback: masquer les distances/cartes si geocodage faible\n\n## Cartes d’onboarding source\n### Dénominations viticoles INAO\n- Score: 88.2/100 · à industrialiser\n- Gouvernance: review_before_export · risque medium\n- Import: php scripts/seed_communes.php, scripts/seed_appellations.php\n- Blocages: donnée locale absente\n- Ticket: Source : Dénominations viticoles INAO / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport territoire, rapport appellation, rapport château, rapport opportunité / Gouvernance : review_before_export · risque medium / Import : php scripts/seed_communes.php, scripts/seed_appellations.php / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport territoire, rapport appellation, rapport château, rapport opportunité.\n### COMAGRI aires AO 2025\n- Score: 87.2/100 · à industrialiser\n- Gouvernance: review_before_export · risque medium\n- Import: php scripts/seed_comagri.php\n- Blocages: donnée locale absente\n- Ticket: Source : COMAGRI aires AO 2025 / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport appellation, rapport territoire, contrôle qualité INAO / Gouvernance : review_before_export · risque medium / Import : php scripts/seed_comagri.php / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport appellation, rapport territoire, contrôle qualité INAO.\n### Professionnels engagés en bio\n- Score: 86.2/100 · à industrialiser\n- Gouvernance: cite_with_attribution · risque low\n- Import: php scripts/ingest_bio.php\n- Blocages: donnée locale absente\n- Ticket: Source : Professionnels engagés en bio / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport bio, rapport territoire, rapport sourcing durable / Gouvernance : cite_with_attribution · risque low / Import : php scripts/ingest_bio.php / Preuve attendue : date API, numero bio, SIRET, statut certificat / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : date API, numero bio, SIRET, statut certificat. | Relier au moins un usage KPI/rapport : rapport bio, rapport territoire, rapport sourcing durable.\n### Catalogue vins local\n- Score: 85.7/100 · à industrialiser\n- Gouvernance: internal_only · risque high\n- Import: php scripts/ingest_import_profiles.php\n- Blocages: donnée locale absente\n- Ticket: Source : Catalogue vins local / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport château, rapport appellation, rapport millésime, rapport catalogue / Gouvernance : internal_only · risque high / Import : php scripts/ingest_import_profiles.php / Preuve attendue : provenance amont, nombre lignes, date import / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : provenance amont, nombre lignes, date import. | Relier au moins un usage KPI/rapport : rapport château, rapport appellation, rapport millésime, rapport catalogue.\n### DATAtourisme\n- Score: 85.2/100 · à industrialiser\n- Gouvernance: review_before_export · risque medium\n- Import: php scripts/ingest_datatourisme.php\n- Blocages: fraîcheur obsolète\n- Ticket: Source : DATAtourisme / Objectif : Lancer un premier import d’échantillon puis évaluer la couverture. / Usage KPI : rapport œnotourisme, score B2B logistique, rapport territoire / Gouvernance : review_before_export · risque medium / Import : php scripts/ingest_datatourisme.php / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Charger un premier échantillon et contrôler le nombre de lignes. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport œnotourisme, score B2B logistique, rapport territoire.\n### Historique météo Open-Meteo\n- Score: 84.9/100 · à industrialiser\n- Gouvernance: review_before_export · risque medium\n- Import: php scripts/ingest_climate_grid.php\n- Blocages: donnée locale absente\n- Ticket: Source : Historique météo Open-Meteo / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport millésime, rapport risque climatique, rapport territoire / Gouvernance : review_before_export · risque medium / Import : php scripts/ingest_climate_grid.php / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport millésime, rapport risque climatique, rapport territoire.\n### Profils business domaines\n- Score: 83.6/100 · à industrialiser\n- Gouvernance: internal_only · risque high\n- Import: php scripts/ingest_import_profiles.php\n- Blocages: donnée locale absente\n- Ticket: Source : Profils business domaines / Objectif : Ajouter cette source aux rapports et surveiller sa fraîcheur. / Usage KPI : rapport château, rapport œnotourisme, rapport prospection B2B / Gouvernance : internal_only · risque high / Import : php scripts/ingest_import_profiles.php / Preuve attendue : provenance, champs enrichis, date import / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : provenance, champs enrichis, date import. | Relier au moins un usage KPI/rapport : rapport château, rapport œnotourisme, rapport prospection B2B.\n### Base Sirene\n- Score: 76.7/100 · à connecter vite\n- Gouvernance: cite_with_attribution · risque low\n- Import: php scripts/ingest_sirene_insee.php\n- Blocages: fraîcheur obsolète, procédure d’import absente\n- Ticket: Source : Base Sirene / Objectif : Définir un connecteur ou une procédure semi-manuelle d’import. / Usage KPI : fiabilisation domaines, rapport prospection, contrôle bio, scoring activité / Gouvernance : cite_with_attribution · risque low / Import : php scripts/ingest_sirene_insee.php / Preuve attendue : SIREN/SIRET, date unite legale, adresse / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : SIREN/SIRET, date unite legale, adresse. | Relier au moins un usage KPI/rapport : fiabilisation domaines, rapport prospection, contrôle bio, scoring activité.\n### Commerce extérieur des vins\n- Score: 75.3/100 · à connecter vite\n- Gouvernance: cite_with_attribution · risque low\n- Import: Définir une procédure d’import avant industrialisation.\n- Blocages: fraîcheur obsolète, procédure d’import absente\n- Ticket: Source : Commerce extérieur des vins / Objectif : Définir un connecteur ou une procédure semi-manuelle d’import. / Usage KPI : rapport export, opportunité pays, benchmark macro / Gouvernance : cite_with_attribution · risque low / Import : Définir une procédure d’import avant industrialisation. / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport export, opportunité pays, benchmark macro.\n### eAmbrosia GI Register\n- Score: 74.8/100 · à connecter vite\n- Gouvernance: review_before_export · risque medium\n- Import: php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv\n- Blocages: fraîcheur obsolète, procédure d’import absente\n- Ticket: Source : eAmbrosia GI Register / Objectif : Définir un connecteur ou une procédure semi-manuelle d’import. / Usage KPI : rapport appellation, preuve réglementaire, cahiers des charges / Gouvernance : review_before_export · risque medium / Import : php scripts/ingest_eambrosia_gi.php file=sources/eambrosia-gi.csv / Preuve attendue : snapshot registre, statut GI, URL cahier des charges / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : snapshot registre, statut GI, URL cahier des charges. | Relier au moins un usage KPI/rapport : rapport appellation, preuve réglementaire, cahiers des charges.\n### API météo consolidée Winerix\n- Score: 74.6/100 · à connecter vite\n- Gouvernance: review_before_export · risque medium\n- Import: app/includes/site_engine.php\n- Blocages: blocage ou erreur santé source\n- Ticket: Source : API météo consolidée Winerix / Objectif : Résoudre le blocage avant de publier les KPI associés. / Usage KPI : rapport millésime, cartographie météo, comparaison territoire / Gouvernance : review_before_export · risque medium / Import : app/includes/site_engine.php / Preuve attendue :  / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Exécuter et documenter la commande d’import proposée. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Relier au moins un usage KPI/rapport : rapport millésime, cartographie météo, comparaison territoire.\n### Géocodage BAN / IGN\n- Score: 73.9/100 · à connecter vite\n- Gouvernance: cite_with_attribution · risque low\n- Import: php scripts/ingest_ban_geocode.php\n- Blocages: fraîcheur obsolète, procédure d’import absente\n- Ticket: Source : Géocodage BAN / IGN / Objectif : Définir un connecteur ou une procédure semi-manuelle d’import. / Usage KPI : fiabilisation géographique, distance œnotourisme, cartographie / Gouvernance : cite_with_attribution · risque low / Import : php scripts/ingest_ban_geocode.php / Preuve attendue : adresse normalisee, score geocodage, source BAN / Critères : Couverture locale vérifiée ou source macro sans table locale dédiée. | Définir une procédure d’import ou un connecteur semi-manuel. | Conserver attribution source, URL, licence et millésime avec chaque citation. | Preuve attendue : adresse normalisee, score geocodage, source BAN. | Relier au moins un usage KPI/rapport : fiabilisation géographique, distance œnotourisme, cartographie.\n\n## Phrase copiable\nRoadmap sources Winerix : 12 priorités ressortent au-dessus de 50/100, dont 7 à industrialiser et 9 à connecter vite. La file de fidélisation contient 17 source(s) à vérifier ou corriger.\n"
}