# Préparer les données et la pile

> **En bref :**
> Corriger les deux anomalies des fichiers d'annuaire de démonstration, puis démarrer un socle minimal : le graphe (Neo4j), le bus de messages (RabbitMQ), le moteur qui construit le graphe (IKG) et l'API de lecture (Apollo).
> **Inutile pour le POC de novembre**, qui part d'un [extrait fourni par la DiBISO](/01-cadrage-saclay/02-scenarios/03-extrait-et-comparatif-du-poc). Statut : **Non exécuté** ; les anomalies ont été relevées par un script.

## Pourquoi ce tutoriel

Ce parcours sert à refaire la chaîne CRISalid sur un environnement isolé, sans toucher à l'instance de la DiBISO. Il faut deux choses : des données et une pile qui tourne. Les données sont les jeux de démonstration des dépôts officiels ; tels quels, ils ne se chargent pas.

Étape 1 sur 4. Les scripts `scripts/…` sont dans le dépôt de l'audit ([où les trouver](/03-crisalid/04-tutoriels/00-par-ou-commencer)).

## Avant de commencer

- Les copies des dépôts `crisalid-directory-bridge`, `crisalid-ikg` et `crisalid-deployment` dans `official-crisalid`.
- Python 3, Docker et Docker Compose.

## Étapes

### Étape 1 — Repérer les jeux de démonstration

**Pourquoi :** savoir quel fichier alimente quelle brique évite de chercher des données qui n'existent pas.

| Domaine | Fichier | Brique |
| --- | --- | --- |
| Structures | `crisalid-directory-bridge/data/structures.csv` (10 structures) | Directory Bridge |
| Personnes | `crisalid-directory-bridge/data/people.csv` (1 chercheur) | Directory Bridge |
| Notices HAL, OpenAlex, scanR, IdRef | `crisalid-ikg/tests/data/source_records/*.json` | Tests d'IKG seulement, sans passer par le bus |

### Étape 2 — Corriger `structures.csv`

**Pourquoi :** tel qu'il est fourni, le fichier est rejeté par le validateur du dépôt (8 erreurs) : des virgules en trop décalent des colonnes et laissent `local_id` vide.

Corriger les lignes décalées, puis relancer jusqu'à 0 erreur :

```bash
cd official-crisalid/crisalid-directory-bridge
python .claude/commands/check_structures.py data/structures.csv
```

### Étape 3 — Réaligner `people.csv`

**Pourquoi :** le chercheur déclare la structure `U01`, absente de `structures.csv` ; IKG créerait la personne sans rattachement.

Remplacer `main_research_structure` par un `local_id` présent dans `structures.csv`. Puis, depuis le dépôt de l'audit :

```bash
python3 scripts/check-crisalid-tutorial-data.py   # 5 contrôles sur 5 attendus
```

### Étape 4 — Contrôler et renseigner la configuration

**Pourquoi :** repérer une incohérence avant de démarrer, et fournir aux services leurs comptes.

```bash
python3 scripts/check-crisalid-deployment-contract.py   # lecture seule : 6 tests, 15 modules Compose
cd official-crisalid/crisalid-deployment/docker && cp .env.sample .env
```

Renseigner au minimum `CRISALID_BUS_USER`, `CRISALID_BUS_PASSWORD`, `NEO4J_PASSWORD` (le compte est obligatoirement `neo4j`, administrateur) et `SOVISUPLUS_GRAPHQL_API_KEY`, transmise à Apollo. Pour l'étape suivante : `AIRFLOW_ADMIN_USERNAME` et `AIRFLOW_ADMIN_PASSWORD`.

### Étape 5 — Démarrer le socle minimal

**Pourquoi :** ces quatre profils suffisent à construire et lire un graphe.

```bash
./configure_crisalid_bus.sh   # produit les définitions du bus
./configure_cdb.sh dev        # prépare Directory Bridge pour l'étape suivante
docker compose -f docker-compose.yaml -f docker-compose.dev.yaml \
  --profile neo4j --profile crisalid-bus --profile ikg --profile apollo up -d
```

Profils ajoutés plus loin : `cdb` et `cdb-db` (Airflow), `harvester` et `harvester-db`, `sovisuplus` et `sovisuplus-db`. Pour arrêter : remplacer `up -d` par `down`.

## Ce que vous devez obtenir

- `structures.csv` accepté avec 0 erreur, et `people.csv` qui vise une structure existante.
- Les services des quatre profils à l'état `healthy` (`docker compose ps`).
- Les échanges `graph`, `directory`, `publications` et leurs files de rebut déclarés dans RabbitMQ.
- Une connexion à Neo4j sur un graphe vide, et une réponse de `/health` d'Apollo.

## Limites

- **Non exécuté** : aucun conteneur n'a été démarré ; comportements au démarrage **à confirmer**.
- Les contrôles des étapes 3 et 4 lisent des fichiers : ils ne prouvent pas que la pile démarre.
- Des jeux de démonstration ne disent rien des données réelles ([données observées](/03-crisalid/06-instance-saclay/01-donnees-observees)).
- Déploiement et sauvegarde : [exploitation et gouvernance](/03-crisalid/03-fonctionnement-transversal/exploitation-et-gouvernance).

## Et ensuite

Étape 2 sur 4 : [charger structures et personnes](./charger-structures-et-personnes).

Révision lue : `crisalid-deployment` `10e0e710`, `crisalid-directory-bridge` `95be05d7`.
