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étier — isPrioritaire, 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).