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é
dateEnvisage date (nullable) Date envisagée
schoolDepartment varchar(255) (nullable) Département de l'établissement
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 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

Valeurs de status (DraftStatus) : active, finalized.

Les CTA des landing pages mentorat pointent vers /inscription/jeune?kb=lp_mentorat (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: 'lp_mentorat' à la création du draft (readOriginFromLocalStorage), puis comparé à LP_MENTORAT_ORIGIN (back/src/inscription/inscription.types.ts) pour poser jeune.sourceMentoratLp = true à la finalisation.

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.