# ADR 008 : Chaîne de données sur sources ouvertes, brut conservé

## Statut

**Accepté** (24/10/2026). La suite, du branchement de l'instance CRISalid de Paris-Saclay au premier test sur ses données, est suivie dans [Projection](/projection).

## Contexte

L'accès à CRISalid pour Paris-Saclay n'est pas encore ouvert. Les sources publiques (RNSR, scanR, HAL, ROR, OpenAlex…) couvrent déjà l'essentiel des structures, personnes et projets. Il faut pouvoir rejouer les traitements sans reinterroger les sources.

## Décision

- **Extraire** : chaque source a un moissonneur (`scripts/data/extract/sources.ts`) qui écrit la réponse **brute, sans transformation**, en NDJSON dans `data/raw/<instance>/<source>/<entité>.ndjson`, avec un manifeste (date, requête, volumes, erreur). Écriture dans un fichier temporaire, renommé seulement si la moisson aboutit.
- **Publier** : `scripts/data/build.ts` lit le brut en flux, fusionne par identifiant pérenne (RNSR pour les structures, IdHAL/ORCID/IdRef pour les personnes, numéro de convention pour les projets) et écrit `data/public/<instance>/` : `structures.json`, `persons.json`, `projects.json`, `stats.json` et une fiche Markdown par entité.
- **Priorité des champs** : annuaire de l'établissement > RNSR > scanR > Wikidata > ROR pour les textes et sites web ; chaque champ éditorial garde sa source, affichée sur la fiche.
- **Volumes non republiés** : les publications HAL sont moissonnées complètement (sans résumés) pour calculer compteurs, domaines et activité, mais pas republiées. Les publications scanR et les travaux OpenAlex ne sont pas moissonnés : HAL suffit et le budget OpenAlex gratuit ne le permet pas.
- `data/raw/` et `data/public/` sont exclus de Git (volumes, noms de personnes). Ils se régénèrent par `pnpm data:extract` et `pnpm data:build`.

## Conséquences

- Le site se construit sans réseau une fois la moisson faite, et la fusion peut être rejouée et testée hors ligne.
- Environ 2 Go de brut pour Paris-Saclay (dont 1,1 Go pour les personnes scanR, qui embarquent leurs structures dénormalisées).
- Quand CRISalid sera accessible, il devient une source `master` de plus : son moissonneur alimente le même brut, et la fusion lui donne la priorité 0.
- Le proxy Elasticsearch de scanR n'est pas une API documentée : usage à faire valider (voir [questions ouvertes](/projet/questions-ouvertes)).
