# Territory Data Spine

Spine territoriale pour agreger proprement les sources vin et oenotourisme par maille, cle, periode et caveat.

## Mailles canoniques
- **Commune** (`insee_code`) : Maille pivot pour normaliser OpenAgenda, BNLC, Merimee, BPE, Agence Bio, DATAtourisme et adresses.
- **Destination / territoire touristique** (`destination_key`) : Page territoire publique, comparaison destination, storytelling oenotourisme.
- **Appellation / zone vin** (`appellation_key`) : Croiser les donnees vin reglementaires, parcelles, communes AOC/AOP et signaux touristiques.
- **Departement** (`department_code`) : Lecture macro, comparaison robuste quand la maille communale est insuffisante.
- **Region** (`region_code`) : Suivi source, couverture DATAtourisme, comparaisons nationales et analyses de marche.

## Mapping sources
### DATAtourisme
- Cle preferee : insee_code_or_coordinates
- Fallback : geocode address if needed, then map to commune
- KPI : offer_signal, tourism_poi_density, source_freshness
- Politique conflit : Deduplicate POI by stable identifier, URL, title and coordinates before aggregation.

### Insee BPE
- Cle preferee : GEO + GEO_OBJECT
- Fallback : use published aggregate grain directly when commune is unavailable
- KPI : tourism_service_density, territory_readiness_score, access_equipment_signal
- Politique conflit : Never mix commune and department values in the same comparison column.

### OpenAgenda wine events
- Cle preferee : location_insee
- Fallback : coordinates to commune, then event URL/title for deduplication
- KPI : wine_event_signal, territory_activation_score, tourism_demand_context
- Politique conflit : Count events by occurrence window and agenda; do not infer attendance.

### BNLC covoiturage
- Cle preferee : insee
- Fallback : coordinates to commune when INSEE missing
- KPI : carpool_access_signal, low_carbon_access_score
- Politique conflit : Use open places only for strong access signal; keep unknown status as weak context.

### Merimee monuments
- Cle preferee : COG_Insee_lors_de_la_protection
- Fallback : coordinates to commune, then commune label with caution
- KPI : heritage_pull_signal, culture_wine_context_score
- Politique conflit : Deduplicate by monument reference; do not merge with BPE culture unless explicitly mapped.

### Agence Bio
- Cle preferee : insee_code + year
- Fallback : commune label + department only for internal review
- KPI : organic_wine_signal, organic_viticulture_surface_signal
- Politique conflit : Keep operators and surfaces separate unless the source explicitly supports the merge.

### Insee tourism occupancy
- Cle preferee : published statistical territory + time_period
- Fallback : do not downscale to commune without a documented allocation rule
- KPI : tourism_demand_signal, demand_offer_balance
- Politique conflit : Do not compare demand values against commune-level offer without a visible caveat.

## Regles aggregation
- **Comptes sommer, scores recalculer** : Sommer les counts sources, mais recalculer les scores composites a la maille cible.
- **Fraicheur minimale visible** : Le score public d un KPI multi-source doit exposer la source la plus ancienne ou la plus fragile.
- **Pas de melange de mailles** : Ne pas comparer deux territoires si les KPI ne partagent pas une maille ou une regle de remontée compatible.
- **Dedupliquer avant de compter** : Les POI, monuments, evenements et lieux doivent etre dedupliques avant aggregation.
- **Union des caveats** : Le caveat public d un KPI composite doit inclure les limites des sources contribuant au score.
- **Confiance ponderee par source** : Le score de confiance doit penaliser les jointures faibles, les mailles impropres et les dates absentes.

## Sorties attendues
- **Table faits source territoire** : Stocker les valeurs normalisees avant scoring composite. Grain : territory_key + source_key + time_period.
- **Table scores KPI territoire** : Publier des KPI recalcules, comparables et copiables. Grain : territory_key + kpi_key + time_period.
- **Contexte publication territoire** : Assembler sources, KPI, caveats et prochaines actions pour les pages publiques. Grain : territory_key.

_Genere le 2026-07-06T15:04:57+00:00._
