Référentiel Établissements — API

Doc de consommation du référentiel des établissements exposé par A1Connect. Pour la façon dont les données sont synchronisées depuis ONISEP, voir construction.md.


Authentification

GET /v1/etablissements et GET /v1/etablissements/:codeUai acceptent deux modes d'authentification (JwtOrApiKeyAuthGuard) :

Mode Header Usage
JWT Authorization: Bearer Front admin A1C
API Key X-API-KEY Appel service-to-service depuis Dema1n / Inspire / JobReady (DEMA1N_API_KEY, INSPIRE_API_KEY, JOBREADY_API_KEY)

Filtres

GetEtablissementsQueryDto : q, departement, type, ministere, niveauEnseignement, formation, formationType, zrr, qpv, hasIps, hasIel, estEncorde, selectif, page, limit.

q recherche sur nom et sigle (OR, contains insensible à la casse).

Format de réponse

GET /v1/etablissements :

{
  "data": [ /* Etablissement[] */ ],
  "total": 1234,
  "page": 1,
  "limit": 20
}

GET /v1/etablissements/:codeUai renvoie un objet Etablissement unique (404 si absent).

Objet Etablissement

Champ Type Description
id uuid
codeUai string Identifiant unique de l'établissement.
nom string Nom officiel ONISEP.
nomUsage string? Nom d'usage, éditable en admin.
sigle string? Sigle (ex: "Ensimag", "MFR"). Synchronisé depuis ONISEP, éditable/surchargeable en admin.
typeEtablissement string? Nature UAI (ex: "LYCEE GENERAL ET TECHNOLOGIQUE").
statutEtab string? "PUBLIC" | "PRIVE SOUS CONTRAT" ...
adresse, codePostal, ville string?
codeDepartement, departement string? ex: "75", "Paris".
codeAcademie string? Toujours null (non fourni par ONISEP, cf. Notes et limites).
academie, region string?
latitude, longitude decimal?
universiteRattachement string? Renseigné pour le supérieur uniquement.
ministere string? Tutelle ONISEP.
telephone string?
idOnisep string? Identifiant ONISEP (ENS.xxxxx).
niveauEnseignement enum? SECONDAIRE \| SUPERIEUR \| MIXTE.
formations string[] Intitulés précis des formations proposées par l'établissement (ex: "BTS gestion de la PME", "CPGE ECG"). Cf. construction.md#formations pour la source.
formationsTypes string[] Catégories brutes des formations (ex: "brevet de technicien supérieur"), non détaillées. Même source que formations.
codeInseeCommune string? Code INSEE commune (5 chars). Peut valoir "NOT_FOUND" — cf. construction.md#résolution-code-insee.
zrr boolean? Zone France Ruralités Revitalisation (ex-ZRR). true/false si la commune est trouvée dans la liste FRR (classée ou non), null si absente de la liste ou pas encore résolue — cf. construction.md#zrr--source-et-signification-de-null.
qpv boolean? Quartier Prioritaire de la Ville. null si commune non résolue.
ips decimal? Indice de Position Sociale (DEPP) — niveau socio-éco moyen des élèves. Lycées uniquement.
iel decimal? Indice d'Éloignement des Lycées (Éducation Nationale) — score ~0–100+. Lycées uniquement.
flagsSyncedAt datetime? Date du dernier calcul des flags ZRR/QPV/IPS/IEL.
selectif boolean? Grande école sélective (liste statique côté A1C, jamais de false explicite, comme zrr).
isPrioritaire boolean Calculé (QPV ou ZRR ou IEL ou IPS renseigné ou MVLS partenaire), déclenché manuellement en admin. Exception au principe "flags métier hors A1C" (cf. Notes) : transverse, donc porté par le référentiel central.
teteDeCordeeId uuid? Établissement "tête de cordée" dont celui-ci dépend, si encordé.
teteDeCordee { nom, codeUai } \| null Relation résolue.
idStructureParente uuid? Rattachement administratif libre, éditable en admin (ex: annexe → établissement principal).
isMVLSPartenaire boolean Établissement partenaire MVLS, éditable en admin. Exception au principe "flags métier hors A1C" (cf. Notes) : transverse, donc porté par le référentiel central.
structureParente { nom, codeUai } \| null Relation résolue. Absent sur GET /:codeUai.
_count.etablissementsEncordes number Nombre d'établissements rattachés en tant que tête de cordée.
syncedAt datetime? Date du dernier sync structure (ONISEP).
createdAt, updatedAt datetime

Exemple consommateur service-to-service : A1ConnectClient.getEtablissements() côté Dema1n (dema1n/back/src/inscription/a1connect.client.ts).

Endpoints admin

/admin/etablissements/* (guard JwtAdminGuard, réservés au front admin A1C) : filter-options (facettes pour les filtres), déclenchement manuel des syncs, PATCH /admin/etablissements/:id (édition nomUsage / sigle / idStructureParente / isMVLSPartenaire).

Notes

Flags métier — isPartenaire est de la logique métier Article1, pas des données ONISEP. Il reste dans chaque plateforme, pas dans A1C. A1C expose uniquement le référentiel brut + les indicateurs territoriaux/socio-éco (ZRR, QPV, IPS, IEL). Exceptions, transverses à plusieurs plateformes donc portées par le référentiel central plutôt que dupliquées dans chacune : isMVLSPartenaire (éditable en admin) et isPrioritaire (calculé : QPV ou ZRR ou IEL ou IPS renseigné ou MVLS partenaire, recalcul déclenché manuellement en admin — bouton "Prioritaire" du menu Actions).