Architecture

Chaîne de données

En bref

data:extract copie les sources telles quelles dans data/raw/, data:build les fusionne et publie des fiches JSON + Markdown dans data/public/, le site se génère statiquement à partir de ces fiches. Décision : ADR 008.

Chaîne de données

Fichiers

ÉtapeCodeSortie
Moissonnerscripts/data/extract.ts, extract/sources.ts (un moissonneur par source), extract/directory.ts (annuaire générique)data/raw/<instance>/<source>/<entité>.ndjson, manifest.json
Mesurerscripts/data/probe.ts, sources/*.ts, model.ts (modèle cible), report.tsdata/coverage/<instance>/latest.md, latest.json, <date>.json
Publierscripts/data/build.ts, build/markdown.tsdata/public/<instance>/*.json, markdown/{structures,persons,projects}/<id>.md
Liresrc/server/data/publicData.ts (validation Zod src/contracts/public.ts)Pages Next.js

Règles de fusion

EntitéCléListe maîtreEnrichissements, par priorité
StructureNuméro RNSRAnnuaire officiel de l'établissement si masterList: directory (rapproché par RNSR, code d'unité, nom, sigle), sinon RNSR ∪ structures de recherche actives de scanRPrésentation : annuaire > scanR > Wikidata (≥ 80 caractères). Site : annuaire > RNSR > scanR > Wikidata > ROR. ROR : scanR > Wikidata > AureHAL. Publications : HAL via AureHAL (par RNSR)
PersonneIdentifiant scanRscanR, filtré (ADR 010)IdHAL et ORCID pour l'appariement HAL ; expertise = domaines scanR
ProjetNuméro de conventionscanR (participants du périmètre)OpenAIRE pour les projets européens absents de scanR

Chaque fiche porte la liste de ses sources et, pour la présentation et le site web, la source exacte du champ.

Volumes et temps (24/10/2026)

Paris-SaclayParis 1
Moisson≈ 15 min, 1,7 Go≈ 5 min, 347 Mo
Publication (data:build)10 s, 67 Mo2 s, 12 Mo
Fiches248 structures, 7 766 personnes, 3 647 projets37, 1 931, 383

Le fichier le plus lourd est scanr/persons.ndjson (1,26 Go) : chaque affiliation embarque la fiche complète de sa structure. build.ts le lit en flux.

Ajouter une source

  1. Écrire son moissonneur dans extract/sources.ts (fonction run(config, out)), l'ajouter à EXTRACTORS.
  2. Écrire sa sonde dans sources/<source>.ts (correspondance vers le modèle cible), l'ajouter à PROBES.
  3. Déclarer la source dans SOURCE_IDS (src/config/schema.ts) et dans sources de chaque instance.
  4. L'utiliser dans build.ts en respectant la priorité des champs ; ajouter son libellé dans SOURCE_LABELS (src/contracts/public.ts).

Déploiement

Les pages étant statiques, le serveur n'a besoin de data/public/<instance>/ que pour /api/metrics (volumes publiés). Un déploiement standalone copie .next-<instance>/standalone, .next-<instance>/static, public/ et data/public/<instance>/.