{
    "ok": true,
    "generated_at": "2026-07-06T17:55:17+00:00",
    "summary": "Runbook central pour executer les normalisations sources Winerix dans le bon ordre, avec commandes copiables, fichiers cibles, gates et caveats.",
    "step_count": 11,
    "phases": [
        {
            "key": "geo_business_first",
            "label": "Activer geographie + business",
            "steps": [
                "sirene_wine_establishments",
                "ban_address_reference",
                "qualite_tourisme_establishments",
                "hve_certified_estates",
                "agencebio_organic_wine",
                "agencebio_organic_viticulture_surfaces"
            ],
            "why": "Debloque les cartes, les scores business/durabilite bio et les rapprochements nominaux prudents."
        },
        {
            "key": "market_context_second",
            "label": "Ajouter contexte marche et offre",
            "steps": [
                "franceagrimer_bulk_prices",
                "dgddi_vitivinicole_stocks_harvests",
                "agreste_vineyard_land_values"
            ],
            "why": "Ajoute prix, production, stocks et foncier pour enrichir les pages territoire sans surpromesse."
        },
        {
            "key": "publish_gate_last",
            "label": "Passer Publication Gate",
            "steps": [
                "reference_territory_score_calculator",
                "reference_publication_gate",
                "territory_reference_page"
            ],
            "why": "Publier seulement les scores hydrates, caveates et traçables."
        }
    ],
    "steps": [
        {
            "key": "sirene_wine_establishments",
            "priority": 1,
            "label": "Sirene etablissements vin",
            "input_file": "sources/sirene-stock-etablissements.csv",
            "output_file": "sources/sirene-wine-establishments-normalized.csv",
            "schema_file": "sources/sirene-wine-establishments-normalized.schema.csv",
            "command": "php scripts/normalize_sirene_wine_establishments.php",
            "blocks_until_ready": [
                "wine_business_density_score",
                "map_publication_readiness",
                "hve_matching"
            ],
            "unlocks": "Densite business vin, agregats par commune/NAF, rapprochements BAN/HVE.",
            "gate": "Stock Sirene present localement ; publier agregats avant tout nominatif.",
            "caveat": "Donnees nominatives : RGPD/metier avant listing public."
        },
        {
            "key": "ban_address_reference",
            "priority": 2,
            "label": "BAN qualite adresse",
            "input_file": "sources/ban-address-quality-input.csv",
            "output_file": "sources/ban-address-quality.csv",
            "schema_file": "sources/ban-address-quality.schema.csv",
            "command": "php scripts/normalize_ban_address_quality.php",
            "blocks_until_ready": [
                "map_publication_readiness",
                "address_quality_score",
                "public_place_geocoding"
            ],
            "unlocks": "Cartes fiables, score adresse, isolation des lieux a relire.",
            "gate": "Export lieux Winerix rempli avec adresses, communes, coordonnees ou scores BAN.",
            "caveat": "Adresse geocodee ne prouve pas ouverture au public ni frequentation."
        },
        {
            "key": "insee_tourism_occupancy",
            "priority": 3,
            "label": "Insee frequentation hebergements touristiques",
            "input_file": "sources/insee-tourism-occupancy.zip",
            "output_file": "sources/insee-tourism-occupancy-normalized.csv",
            "schema_file": "sources/insee-tourism-occupancy.schema.csv",
            "command": "php scripts/normalize_insee_tourism_occupancy.php",
            "blocks_until_ready": [
                "tourism_demand_signal",
                "oenotourism_readiness_score"
            ],
            "unlocks": "Demande touristique officielle, benchmarks offre/demande, contexte nuitees/arrivees/occupation.",
            "gate": "Archive Insee presente ; respecter niveaux geo, unites et confidentialite.",
            "caveat": "Demande hebergements generale, pas attribution oenotouristique directe."
        },
        {
            "key": "qualite_tourisme_establishments",
            "priority": 3,
            "label": "Qualite Tourisme etablissements",
            "input_file": "sources/qualite-tourisme-establishments.csv",
            "output_file": "sources/qualite-tourisme-establishments-normalized.csv",
            "schema_file": "sources/qualite-tourisme-establishments.schema.csv",
            "command": "php scripts/normalize_qualite_tourisme_establishments.php",
            "blocks_until_ready": [
                "quality_reception_signal",
                "oenotourism_readiness_score"
            ],
            "unlocks": "Signal qualite accueil, carte qualite, rapprochements DATAtourisme/V&D.",
            "gate": "CSV officiel present ; lien vin a relire ou a deduire par rapprochement source.",
            "caveat": "Label accueil/prestations, pas frequentation ni preuve oenotouristique directe."
        },
        {
            "key": "hve_certified_estates",
            "priority": 3,
            "label": "Exploitations certifiees HVE",
            "input_file": "sources/hve-certified-estates.csv",
            "output_file": "sources/hve-certified-estates-normalized.csv",
            "schema_file": "sources/hve-certified-estates-normalized.schema.csv",
            "command": "php scripts/normalize_hve_certified_estates.php",
            "blocks_until_ready": [
                "sustainable_wine_signal",
                "territory_sustainability_card"
            ],
            "unlocks": "Signal durabilite territorial, rapprochements domaines/Sirene/BAN.",
            "gate": "CSV officiel HVE present ; relire le filtrage vin textuel avant publication forte.",
            "caveat": "Annuaire volontaire : absence du fichier ne prouve pas absence de certification."
        },
        {
            "key": "bnsc_bike_parking",
            "priority": 4,
            "label": "BNSC stationnement cyclable",
            "input_file": "sources/bnsc-bike-parking.zip",
            "output_file": "sources/bnsc-bike-parking-normalized.csv",
            "schema_file": "sources/bnsc-bike-parking.schema.csv",
            "command": "php scripts/normalize_bnsc_bike_parking.php",
            "blocks_until_ready": [
                "bike_access_signal",
                "oenotourism_readiness_score"
            ],
            "unlocks": "Mobilite douce par commune, capacite stationnement velo, carte accessibilite velo caveatee.",
            "gate": "ZIP BNSC present ; respecter attribution OSM/ODbL et signal non exhaustif.",
            "caveat": "Source OSM contributive : ne pas presenter comme label Accueil Velo ni frequentation."
        },
        {
            "key": "agencebio_organic_wine",
            "priority": 4,
            "label": "Agence Bio operateurs bio vin",
            "input_file": "sources/agencebio-professionnels-bio.csv",
            "output_file": "sources/agencebio-organic-wine-operators-normalized.csv",
            "schema_file": "sources/agencebio-organic-wine.schema.csv",
            "command": "php scripts/normalize_agencebio_organic_wine.php",
            "blocks_until_ready": [
                "organic_wine_sustainability_score",
                "sustainable_wine_signal",
                "territory_sustainability_card"
            ],
            "unlocks": "Signal bio vin officiel, agregats par territoire, rapprochements SIRET/Sirene/BAN.",
            "gate": "CSV operateurs bio present ; filtrage vin textuel et publication en agregat avant nominatif.",
            "caveat": "Annuaire declaratif valide par certificateurs ; groupe culture VI requis pour les surfaces bio viticoles."
        },
        {
            "key": "agencebio_organic_viticulture_surfaces",
            "priority": 5,
            "label": "Agence Bio surfaces viticoles bio communales",
            "input_file": "https://www.data.gouv.fr/api/1/datasets/r/801d6a5a-bca8-4048-a559-e052e8f288aa",
            "output_file": "sources/agencebio-organic-viticulture-surfaces-normalized.csv",
            "schema_file": "sources/agencebio-organic-viticulture-surfaces.schema.csv",
            "command": "php scripts/normalize_agencebio_organic_viticulture_surfaces.php",
            "blocks_until_ready": [
                "organic_wine_sustainability_score",
                "organic_viticulture_surface_context"
            ],
            "unlocks": "Surfaces viticoles bio/conversion par commune, agregats territoire, score bio vin plus robuste.",
            "gate": "Flux CSV Agence Bio surfaces production accessible ; filtrer code_groupe=VI et publier en agregat.",
            "caveat": "VI correspond a la viticulture et inclut une faible part de raisin de table."
        },
        {
            "key": "franceagrimer_bulk_prices",
            "priority": 6,
            "label": "FranceAgriMer prix vrac",
            "input_file": "sources/franceagrimer-prices-input.csv",
            "output_file": "sources/franceagrimer-prices.csv",
            "schema_file": "sources/franceagrimer-prices.schema.csv",
            "command": "php scripts/normalize_franceagrimer_bulk_prices.php",
            "blocks_until_ready": [
                "bulk_price_trend",
                "supply_market_context_score"
            ],
            "unlocks": "Contexte prix marche, mini tendances, cartes marche caveatees.",
            "gate": "Export manuel Visionet rempli et prix controles.",
            "caveat": "Prix France/segment large, pas prix appellation/local par defaut."
        },
        {
            "key": "dgddi_vitivinicole_stocks_harvests",
            "priority": 7,
            "label": "DGDDI recoltes et stocks",
            "input_file": "sources/dgddi-vitivinicole-stocks-harvests-input.csv",
            "output_file": "sources/dgddi-vitivinicole-stocks-harvests.csv",
            "schema_file": "sources/dgddi-vitivinicole-stocks-harvests.schema.csv",
            "command": "php scripts/normalize_dgddi_vitivinicole_supply.php",
            "blocks_until_ready": [
                "production_context",
                "stock_to_production_ratio",
                "supply_market_context_score"
            ],
            "unlocks": "Contexte offre vitivinicole, surfaces, recoltes, stocks, declarations.",
            "gate": "XLS historiques convertis/remplis dans le template ; verifier DataDouane pour donnees recentes.",
            "caveat": "Jeu historique : ne pas publier comme conjoncture recente sans controle."
        },
        {
            "key": "agreste_vineyard_land_values",
            "priority": 8,
            "label": "Agreste valeur venale vignes",
            "input_file": "sources/agreste-vineyard-land-values-input.csv",
            "output_file": "sources/agreste-vineyard-land-values.csv",
            "schema_file": "sources/agreste-vineyard-land-values.schema.csv",
            "command": "php scripts/normalize_agreste_vineyard_land_values.php",
            "blocks_until_ready": [
                "vineyard_land_value_eur_ha",
                "investment_context_card"
            ],
            "unlocks": "Contexte foncier, rarete, attractivite, slide investisseur.",
            "gate": "Lignes vignes isolees et prix moyen/min/max EUR/ha relus.",
            "caveat": "Valeurs SAFER lissees : pas transaction brute ni expertise fonciere."
        }
    ],
    "copy_markdown": "# Reference Normalization Runbook\n\nRunbook central pour executer les normalisations sources Winerix dans le bon ordre, avec commandes copiables, fichiers cibles, gates et caveats.\n\n## Phases\n\n### Activer geographie + business\n- Etapes : sirene_wine_establishments -> ban_address_reference -> qualite_tourisme_establishments -> hve_certified_estates -> agencebio_organic_wine -> agencebio_organic_viticulture_surfaces\n- Pourquoi : Debloque les cartes, les scores business/durabilite bio et les rapprochements nominaux prudents.\n\n### Ajouter contexte marche et offre\n- Etapes : franceagrimer_bulk_prices -> dgddi_vitivinicole_stocks_harvests -> agreste_vineyard_land_values\n- Pourquoi : Ajoute prix, production, stocks et foncier pour enrichir les pages territoire sans surpromesse.\n\n### Passer Publication Gate\n- Etapes : reference_territory_score_calculator -> reference_publication_gate -> territory_reference_page\n- Pourquoi : Publier seulement les scores hydrates, caveates et traçables.\n\n## Commandes\n\n### P1 - Sirene etablissements vin\n- Cle : `sirene_wine_establishments`\n- Input : `sources/sirene-stock-etablissements.csv`\n- Output : `sources/sirene-wine-establishments-normalized.csv`\n- Schema : `sources/sirene-wine-establishments-normalized.schema.csv`\n- Commande : `php scripts/normalize_sirene_wine_establishments.php`\n- Debloque : Densite business vin, agregats par commune/NAF, rapprochements BAN/HVE.\n- Gate : Stock Sirene present localement ; publier agregats avant tout nominatif.\n- Caveat : Donnees nominatives : RGPD/metier avant listing public.\n\n### P2 - BAN qualite adresse\n- Cle : `ban_address_reference`\n- Input : `sources/ban-address-quality-input.csv`\n- Output : `sources/ban-address-quality.csv`\n- Schema : `sources/ban-address-quality.schema.csv`\n- Commande : `php scripts/normalize_ban_address_quality.php`\n- Debloque : Cartes fiables, score adresse, isolation des lieux a relire.\n- Gate : Export lieux Winerix rempli avec adresses, communes, coordonnees ou scores BAN.\n- Caveat : Adresse geocodee ne prouve pas ouverture au public ni frequentation.\n\n### P3 - Insee frequentation hebergements touristiques\n- Cle : `insee_tourism_occupancy`\n- Input : `sources/insee-tourism-occupancy.zip`\n- Output : `sources/insee-tourism-occupancy-normalized.csv`\n- Schema : `sources/insee-tourism-occupancy.schema.csv`\n- Commande : `php scripts/normalize_insee_tourism_occupancy.php`\n- Debloque : Demande touristique officielle, benchmarks offre/demande, contexte nuitees/arrivees/occupation.\n- Gate : Archive Insee presente ; respecter niveaux geo, unites et confidentialite.\n- Caveat : Demande hebergements generale, pas attribution oenotouristique directe.\n\n### P3 - Qualite Tourisme etablissements\n- Cle : `qualite_tourisme_establishments`\n- Input : `sources/qualite-tourisme-establishments.csv`\n- Output : `sources/qualite-tourisme-establishments-normalized.csv`\n- Schema : `sources/qualite-tourisme-establishments.schema.csv`\n- Commande : `php scripts/normalize_qualite_tourisme_establishments.php`\n- Debloque : Signal qualite accueil, carte qualite, rapprochements DATAtourisme/V&D.\n- Gate : CSV officiel present ; lien vin a relire ou a deduire par rapprochement source.\n- Caveat : Label accueil/prestations, pas frequentation ni preuve oenotouristique directe.\n\n### P3 - Exploitations certifiees HVE\n- Cle : `hve_certified_estates`\n- Input : `sources/hve-certified-estates.csv`\n- Output : `sources/hve-certified-estates-normalized.csv`\n- Schema : `sources/hve-certified-estates-normalized.schema.csv`\n- Commande : `php scripts/normalize_hve_certified_estates.php`\n- Debloque : Signal durabilite territorial, rapprochements domaines/Sirene/BAN.\n- Gate : CSV officiel HVE present ; relire le filtrage vin textuel avant publication forte.\n- Caveat : Annuaire volontaire : absence du fichier ne prouve pas absence de certification.\n\n### P4 - BNSC stationnement cyclable\n- Cle : `bnsc_bike_parking`\n- Input : `sources/bnsc-bike-parking.zip`\n- Output : `sources/bnsc-bike-parking-normalized.csv`\n- Schema : `sources/bnsc-bike-parking.schema.csv`\n- Commande : `php scripts/normalize_bnsc_bike_parking.php`\n- Debloque : Mobilite douce par commune, capacite stationnement velo, carte accessibilite velo caveatee.\n- Gate : ZIP BNSC present ; respecter attribution OSM/ODbL et signal non exhaustif.\n- Caveat : Source OSM contributive : ne pas presenter comme label Accueil Velo ni frequentation.\n\n### P4 - Agence Bio operateurs bio vin\n- Cle : `agencebio_organic_wine`\n- Input : `sources/agencebio-professionnels-bio.csv`\n- Output : `sources/agencebio-organic-wine-operators-normalized.csv`\n- Schema : `sources/agencebio-organic-wine.schema.csv`\n- Commande : `php scripts/normalize_agencebio_organic_wine.php`\n- Debloque : Signal bio vin officiel, agregats par territoire, rapprochements SIRET/Sirene/BAN.\n- Gate : CSV operateurs bio present ; filtrage vin textuel et publication en agregat avant nominatif.\n- Caveat : Annuaire declaratif valide par certificateurs ; groupe culture VI requis pour les surfaces bio viticoles.\n\n### P5 - Agence Bio surfaces viticoles bio communales\n- Cle : `agencebio_organic_viticulture_surfaces`\n- Input : `https://www.data.gouv.fr/api/1/datasets/r/801d6a5a-bca8-4048-a559-e052e8f288aa`\n- Output : `sources/agencebio-organic-viticulture-surfaces-normalized.csv`\n- Schema : `sources/agencebio-organic-viticulture-surfaces.schema.csv`\n- Commande : `php scripts/normalize_agencebio_organic_viticulture_surfaces.php`\n- Debloque : Surfaces viticoles bio/conversion par commune, agregats territoire, score bio vin plus robuste.\n- Gate : Flux CSV Agence Bio surfaces production accessible ; filtrer code_groupe=VI et publier en agregat.\n- Caveat : VI correspond a la viticulture et inclut une faible part de raisin de table.\n\n### P6 - FranceAgriMer prix vrac\n- Cle : `franceagrimer_bulk_prices`\n- Input : `sources/franceagrimer-prices-input.csv`\n- Output : `sources/franceagrimer-prices.csv`\n- Schema : `sources/franceagrimer-prices.schema.csv`\n- Commande : `php scripts/normalize_franceagrimer_bulk_prices.php`\n- Debloque : Contexte prix marche, mini tendances, cartes marche caveatees.\n- Gate : Export manuel Visionet rempli et prix controles.\n- Caveat : Prix France/segment large, pas prix appellation/local par defaut.\n\n### P7 - DGDDI recoltes et stocks\n- Cle : `dgddi_vitivinicole_stocks_harvests`\n- Input : `sources/dgddi-vitivinicole-stocks-harvests-input.csv`\n- Output : `sources/dgddi-vitivinicole-stocks-harvests.csv`\n- Schema : `sources/dgddi-vitivinicole-stocks-harvests.schema.csv`\n- Commande : `php scripts/normalize_dgddi_vitivinicole_supply.php`\n- Debloque : Contexte offre vitivinicole, surfaces, recoltes, stocks, declarations.\n- Gate : XLS historiques convertis/remplis dans le template ; verifier DataDouane pour donnees recentes.\n- Caveat : Jeu historique : ne pas publier comme conjoncture recente sans controle.\n\n### P8 - Agreste valeur venale vignes\n- Cle : `agreste_vineyard_land_values`\n- Input : `sources/agreste-vineyard-land-values-input.csv`\n- Output : `sources/agreste-vineyard-land-values.csv`\n- Schema : `sources/agreste-vineyard-land-values.schema.csv`\n- Commande : `php scripts/normalize_agreste_vineyard_land_values.php`\n- Debloque : Contexte foncier, rarete, attractivite, slide investisseur.\n- Gate : Lignes vignes isolees et prix moyen/min/max EUR/ha relus.\n- Caveat : Valeurs SAFER lissees : pas transaction brute ni expertise fonciere.\n\n## Script batch manuel\n\n```bash\n# Sirene etablissements vin\nphp scripts/normalize_sirene_wine_establishments.php\n\n# BAN qualite adresse\nphp scripts/normalize_ban_address_quality.php\n\n# Insee frequentation hebergements touristiques\nphp scripts/normalize_insee_tourism_occupancy.php\n\n# Qualite Tourisme etablissements\nphp scripts/normalize_qualite_tourisme_establishments.php\n\n# Exploitations certifiees HVE\nphp scripts/normalize_hve_certified_estates.php\n\n# BNSC stationnement cyclable\nphp scripts/normalize_bnsc_bike_parking.php\n\n# Agence Bio operateurs bio vin\nphp scripts/normalize_agencebio_organic_wine.php\n\n# Agence Bio surfaces viticoles bio communales\nphp scripts/normalize_agencebio_organic_viticulture_surfaces.php\n\n# FranceAgriMer prix vrac\nphp scripts/normalize_franceagrimer_bulk_prices.php\n\n# DGDDI recoltes et stocks\nphp scripts/normalize_dgddi_vitivinicole_supply.php\n\n# Agreste valeur venale vignes\nphp scripts/normalize_agreste_vineyard_land_values.php\n\n```\n"
}