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.