# ADR 013 : Liste officielle par l'annuaire, parseur d'annuaire générique

## Statut

**Accepté** (25/10/2026)

## Contexte

- La « liste officielle des laboratoires » de Paris-Saclay est tenue dans **BiblioLabs**. BiblioLabs n'est pas joignable depuis l'extérieur, mais l'annuaire public du site (`/laboratoires`, 248 fiches) indique que ses données en sont extraites.
- Le RNSR (309 structures sous tutelle Paris-Saclay) et scanR (410) ne disent pas quelles structures l'établissement veut montrer.
- Le premier parseur d'annuaire était écrit pour le gabarit de Paris-Saclay. Une autre université (Paris 1 : une page de 37 cartes) n'aurait pas pu l'utiliser.

## Décision

- **Parseur générique** (`scripts/data/extract/directory.ts`), configuré dans `perimeter.directory` de chaque instance :
  - mode `pages` : une page par structure, découvertes par le sitemap XML (index récursif, `http`/`https`, avec ou sans `www`) puis par la pagination ; les champs sont lus après des intitulés configurables (`labels`) ;
  - mode `cards` : une page liste, découpée sur un marqueur de carte (`cardMarker`) ;
  - dans les deux cas, des heuristiques communes : `og:`, JSON-LD, lien externe vers le site du laboratoire (réseaux sociaux exclus), numéro RNSR, lien scanR et code d'unité (UMR, UR, UAR…).
- **Liste maître configurable** (`perimeter.masterList`) :
  - `rnsr` : les structures dont l'établissement est tutelle ;
  - `directory` : l'annuaire officiel, rapproché du RNSR et de scanR dans cet ordre : numéro RNSR ou scanR, code d'unité, nom, sigle.

  Les deux instances livrées utilisent `directory`.

- **Écarts publiés** dans `data/coverage/<instance>/qualite.md` : structures du RNSR absentes de l'annuaire (retirées de la vitrine) et entrées d'annuaire sans correspondance (publiées avec leurs seules données d'annuaire).

## Conséquences

- La vitrine affiche la liste que l'établissement publie déjà ; les écarts avec le RNSR deviennent une question précise pour la Direction de la recherche.
- Une nouvelle instance se branche sur son annuaire par configuration, sans code, tant que le site suit l'un des deux gabarits.
- Le rattachement aux Graduate Schools n'est publié nulle part, ni dans l'annuaire ni dans BiblioLabs côté public : il reste calculé ([ADR 011](/decisions/rattachement-par-domaines)) en attendant l'export BiblioLabs ou une liste de la Direction de la recherche.
