# Phase 5G — Ingestion du contenu des parcs

Version : **0.19.0**

## Objectif

Passer de l'enrichissement de la fiche Parc à la découverte contrôlée de son contenu : attractions, spectacles et POI.

Le premier flux réel utilise ThemeParks.wiki et son endpoint stable :

`GET /v1/entity/{parkId}/children`

La réponse est uniquement transformée en candidats d'ingestion. Aucune attraction ni aucun POI n'est créé sans décision explicite de l'administrateur.

## Flux

1. Le parc Coaster World doit être lié à un identifiant ThemeParks.wiki.
2. L'administrateur ouvre **Parc > Importer le contenu**.
3. DATA interroge l'endpoint `/children` du parc.
4. Les entités reconnues sont normalisées puis préparées dans un lot `park_content`.
5. Les candidats restent dans le workflow **Associer / Créer / Ignorer**.
6. Après association ou création, les champs reçus deviennent des observations sourcées.
7. Les nouvelles valeurs ou conflits sont traités dans **À vérifier** avant d'être canoniques.

## Mapping initial

- `ATTRACTION` → Attraction, `kind=ride` ;
- `SHOW` → Attraction, `kind=show` ;
- `RESTAURANT` → POI, `type=restaurant` ;
- les types futurs `SHOP`, `ENTRANCE`, `HOTEL`, `SERVICE` sont acceptés de manière additive vers les POI appropriés ;
- les autres types sont ignorés et comptabilisés dans le rapport technique.

## Coasters

ThemeParks.wiki expose les montagnes russes sous le type générique `ATTRACTION`. La Phase 5G ne déduit donc jamais qu'une attraction est un coaster à partir de son nom.

La classification Coaster sera une étape distincte, basée sur des preuves issues de sources structurées (Wikidata, OSM, futurs fournisseurs spécialisés). Le modèle actuel permet alors d'ajouter une fiche `coasters` comme extension technique de l'Attraction existante sans recréer l'objet ni changer son identifiant fournisseur.

## Sécurité et qualité

- validation de l'identité du parc renvoyé par ThemeParks.wiki ;
- respect de l'activation du fournisseur et de la capacité Attractions ;
- respect de la portée globale ou par parc du fournisseur ;
- limite configurable du nombre d'éléments par lot ;
- aucun doublon si un identifiant externe est déjà lié ;
- aucun doublon si un candidat avec le même identifiant est encore en attente ;
- source dédiée `Entities API` créée au premier usage pour conserver une provenance claire ;
- conservation de la réponse brute sur chaque candidat ;
- aucune modification canonique automatique.

## Configuration

`.env` :

`CW_DATA_TPW_MAX_CONTENT_ITEMS_PER_BATCH=250`

## Suite prévue

La phase suivante enrichira/classifiera les attractions créées avec plusieurs sources afin de reconnaître notamment les coasters et de compléter leurs données techniques sans heuristique fragile.
