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). Vaut true si la commune est en FRR, null sinon (jamais de false explicite). null aussi si commune non résolue.
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).
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).
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).

Notes

Flags métierisPrioritaire, isPartenaire sont de la logique métier Article1, pas des données ONISEP. Ils restent dans chaque plateforme, pas dans A1C. A1C expose uniquement le référentiel brut + les indicateurs territoriaux/socio-éco (ZRR, QPV, IPS, IEL).