# Contrôler le lot avant le dashboard

Atelier local fictif, sans données client et sans connexion à un outil BI.

## Exécuter

Python 3.9 ou plus récent, avec la base de fuseaux IANA du système :

```bash
python3 controle_fraicheur.py > resultat.json
```

Le script ne lit ni n'écrit aucune donnée distante. La sortie JSON contient huit scénarios ; dix contrôles déterministes incluent l'attente avant échéance et le refus d'un horodatage sans fuseau. L'instant d'évaluation est fixé au 2 novembre 2026 à 9 h Europe/Paris pour rendre la sortie reproductible.

## Contrat de l'exercice

- Trois magasins attendus, ventes du 1er novembre, borne de couverture exclusive au 2 novembre à minuit Paris.
- Absence ou incohérence alertable à partir de 8 h 30, snapshot BI strictement de moins de 15 minutes à 9 h. Ce sont des choix fictifs, pas des seuils universels.
- Un manifeste source déclare lot, magasin, borne exclusive, état et nombre de lignes attendu. Un snapshot déclare les lots qu'il contient.
- `ready` décrit la disponibilité au moment du contrôle ; `awaiting` signale une preuve manquante avant l'heure d'alerte, `not_ready` une preuve manquante ou incohérente à partir de cette heure. Un état réparé peut revenir à `ready`, sans effacer un retard antérieur.

Le script ne mesure pas le respect historique d'une livraison à 8 h 30 : `delivery_deadline_met` reste `null`. Pour le mesurer, il faudrait conserver les heures de fin des lots ou l'historique des contrôles. Les scénarios à 9 h peuvent contenir des ingestions à 8 h 55 ; ils ne prouvent donc pas une arrivée complète à 8 h 30. Le cas `awaiting` utilise une fixture séparée à 8 h, sans ligne ni snapshot futur.

Les données sources, les manifestes et les lots BI sont simulés. Le contrôle suppose que leur producteur les publie de façon cohérente avec les données, que les identifiants de lot sont uniques et que le nombre attendu vient d'une réconciliation source. Un compteur calculé uniquement sur la cible ne prouverait pas sa complétude. Un même nombre de lignes ne prouve ni la justesse des montants ni l'absence de doublons.

Pour une intégration réelle : adapter calendrier métier, partitions, granularité, publication atomique du manifeste, gestion des reprises et preuve de propagation BI. Vérifier les droits de lecture et mesurer le coût des requêtes dans son entrepôt. Cet atelier ne teste ni dbt, ni Dagster, ni un rafraîchissement BI réel.
