Entités — module inscription
InscriptionDraft
Table : inscription_draft
Description : Brouillon d'inscription jeune (funnel v2). Remplace l'ancien champ JSON data par des colonnes typées calquées sur Jeune/User. Une ligne par inscription en cours, identifiée par un token.
| Champ | Type | Description |
|---|---|---|
id |
bigint |
Identifiant unique |
token |
varchar(64) |
Token unique du brouillon (identifie la session d'inscription côté front) |
state |
varchar(32) (défaut: BESOINS) |
Étape courante du funnel — voir valeurs FunnelState ci-dessous |
status |
varchar(16) (défaut: active) |
active (en cours) ou finalized (inscription terminée) |
existsInSso |
boolean (nullable) |
true si l'email correspond déjà à un compte A1Connect |
enabledInSso |
boolean (nullable) |
true si ce compte A1Connect est actif |
userId |
varchar (nullable) |
ID utilisateur une fois le compte créé/lié |
besoins |
json (nullable) |
Besoins/sous-besoins choisis ({ slug, subs }[]) |
objectifs |
varchar(255) (nullable) |
Objectif renseigné |
sectors |
json (nullable) |
Secteurs visés |
posteEnvisage |
varchar(255) (nullable) |
Poste envisagé |
localisationEnvisage |
varchar(255) (nullable) |
Localisation envisagée |
diplomeOuConcoursEnvisage |
varchar(255) (nullable) |
Diplôme ou concours envisagé. Pour l'objectif study reussir-annee, le front compose niveau — cursus (ex. Bac+2 — Licence, le niveau pouvant valoir Autre). Si le cursus est Autre, une précision libre est exigée et stockée à la place (Bac+2 — Formation continue). |
schoolClass |
varchar(255) (nullable) |
Année / niveau d'études actuel pour l'objectif reussir-annee (même valeur que le select du formulaire). Recopié sur Jeune.schoolClass à la finalisation. |
schoolCursus |
varchar(255) (nullable) |
Cursus actuel pour l'objectif reussir-annee. Recopié sur Jeune.schoolCursus à la finalisation. Si la valeur est Autre, la précision libre (dans diplomeOuConcoursEnvisage) est recopiée sur Jeune.cursusAutre. |
filiere |
varchar(255) (nullable) |
Filière actuelle pour l'objectif reussir-annee. Recopiée sur Jeune.filieres (tableau d'un élément) à la finalisation. |
dateEnvisage |
date (nullable) |
Date envisagée |
schoolDepartment |
varchar(255) (nullable) |
Département de l'établissement. À la finalisation, Jeune.schoolRegion et Jeune.academy en sont dérivés (nom, code, ou format 75 - Paris). |
boursier |
varchar(255) (nullable) |
Statut boursier |
etudiantEtranger |
boolean (nullable) |
Étudiant étranger |
streetName |
varchar(255) (nullable) |
Nom de rue (adresse) |
streetNumber |
varchar(255) (nullable) |
Numéro de rue (adresse) |
cityCode |
varchar(255) (nullable) |
Code commune |
cityName |
varchar(255) (nullable) |
Nom de la ville |
email |
varchar(127) (nullable) |
Email du candidat |
origin |
varchar(255) (nullable) |
Slug technique d'origine (kb en localStorage, cf. TrackedKnownByLists.origin), capturé dès la création du draft — permet d'analyser l'origine des inscriptions abandonnées avant finalisation. Même sémantique que User.origin (voir docs/schema-valeurs-usuelles-metier.md). Vaut lp_mentorat, lp_mentorat_stage, lp_mentorat_boursier ou lp_mentorat_mob_locale pour les inscriptions venues d'une LP mentorat (voir plus bas) — pas de colonne sourceMentoratLp dédiée sur le draft, jeune.sourceMentoratLp est dérivé de cette valeur à la finalisation |
sourceMentoratBesoin |
boolean (nullable) |
Marqueur dérivé du besoin courant (true pour le besoin lost, remis à false si le besoin change) |
createdAt |
timestamp |
Date de création (auto) |
updatedAt |
timestamp |
Date de dernière mise à jour (auto) |
Valeurs de state (FunnelState) :
| Valeur | Route front associée |
|---|---|
BESOINS |
/inscription/jeune/besoins |
OBJECTIFS |
/inscription/jeune/objectifs |
BLOCAGES |
/inscription/jeune/blocages |
PERSONALISATION |
/inscription/jeune/personnalisation |
INFOS |
/inscription/jeune/infos |
COMPLETED |
/inscription/jeune/fin |
À la finalisation v2, jeune.minor est calculé depuis la date de naissance (true si une date est connue et l’âge < 18 ans). Un mineur suit le même funnel qu’un majeur : pas d’étape parents, pas de coordonnées de représentant légal. Après activation mail, le statut reste INSCRIT (pas d’onboarding mentorat).
Valeurs de status (DraftStatus) : active, finalized.
Les CTA des landing pages mentorat pointent vers /inscription/jeune?kb=<origin> (lp_mentorat, lp_mentorat_stage, lp_mentorat_boursier, lp_mentorat_mob_locale) (même mécanisme de tracking kb que les autres campagnes, alias lp_mentorat déclaré dans front/static/model/TrackedKnownByLists.js). Le paramètre est capturé en localStorage par middleware/queryparams.js, résolu en origin à la création du draft (readOriginFromLocalStorage), puis comparé à MENTORAT_ORIGINS (back/src/inscription/inscription.types.ts) pour poser jeune.sourceMentoratLp = true à la finalisation.
À la finalisation du funnel v2, le jeune passe HORS_PROGRAMME uniquement s’il n’étudie pas en France (schoolDepartment = 00 - À l'étranger) et qu’il n’a pas la nationalité française (etudiantEtranger === true). Un étudiant étranger scolarisé en France reste dans le pipeline d’inscription. Cette règle ne s’applique pas au funnel legacy.
Pas de relation TypeORM déclarée (userId est un simple champ, pas de @ManyToOne). Détails du funnel : voir la doc dédiée (si présente) ou back/src/inscription/inscription.types.ts.