Onboarding¶
Contrôleur HTTP du flux d'onboarding investisseur (création de profil, formulaire investisseur, engagements, KYC Lemonway v2). Source : onboarding.controller.ts.
Tous les endpoints requièrent un JWT investisseur valide (JwtAuthGuard) et le rôle CUSTOMER (UserRoleGuard).
PUT /onboarding/profile¶
Crée ou met à jour le CustomerProfile (identité civile, adresse, type d'investisseur). Si le profil devient complet (validation registrationProfile), la sous-étape forms.information du investorIdentityStatus passe à completed. Le résultat est mis en cache Redis 60 s sous la clé getMe-customerProfile-<customerId>. Source : onboarding.controller.ts#L42.
Pré-conditions¶
investorIdentityStatus.statusdoit être différent deverifiedetwaitingForVerifier— sinon403 Forbidden.
Request body¶
Validé par customerProfilePatchValidator (cf. investorOnboarding-new.ts). Patch partiel : tous les champs sont optionnels et fusionnés avec le profil existant.
Response¶
{
"investorIdentityStatus": { "status": "incomplete", "forms": { "information": "completed", "documents": "incomplete", "businessDocuments": "incomplete" } },
"customerProfile": { "...": "profil fusionné" }
}
Type partagé : UpdateCustomerProfileResponse (updateCustomerProfile.endpoint.ts).
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (vide) | 403 | investorIdentityStatus est verified ou waitingForVerifier |
investor.not-found |
400 | Investisseur introuvable en base |
PUT /onboarding/investor-form¶
Crée ou met à jour partiellement le InvestorForm (revenus, patrimoine, expérience). Le service vérifie d'abord la cohérence entre le customerType (individual/business) et les champs envoyés, puis fusionne avec le formulaire existant. Source : onboarding.controller.ts#L68.
Request body¶
Validé par investorFormPartialValidator. Patch partiel.
Response¶
Type partagé : UpdateInvestorFormResponse (updateInvestorForm.endpoint.ts).
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
investor.not-found |
400 | Investisseur introuvable |
investor.profile.not-found |
400 | CustomerProfile introuvable (type non déterminable) |
investor.must-be-individual |
400 | Champs business envoyés mais customerType=individual |
investor.must-be-business |
400 | Champs individual envoyés mais customerType=business |
| (autre) | 500 | Erreur d'upsert du formulaire |
POST /onboarding/investor-commitment¶
Enregistre les engagements de l'investisseur (cases à cocher de risque, certification d'informations). Vérifie au préalable que le InvestorForm est complet et cohérent avec le customerType. Si le formulaire n'avait pas encore de date de complétion, investorFormCompletedAt est positionné à now. Source : onboarding.controller.ts#L93.
Request body¶
Validé par investorCommitment (investorCommitmentForms.ts) — toutes les cases doivent valoir true :
{
"awareOfRisks": true,
"ableToFaceTheRisks": true,
"certifyProvidedInformation": true,
"acknowledgeRegisterWithoutFinancialApproach": true
}
Response¶
Retourne le payload getMe de l'investisseur (CustomerProfileService.getMe avec ignoreCache=true).
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
onboarding.commitments.customer-profile.not-found |
403 | CustomerProfile introuvable |
onboarding.commitments.investor-form.not-found |
403 | InvestorForm introuvable |
onboarding.commitments.investor-form-not-complete |
403 | InvestorForm incomplet |
onboarding.commitments.investor-type-not-matching-investor-form |
403 | Type investisseur incompatible avec le formulaire |
POST /onboarding/v2/start-onboarding¶
Démarre (ou reprend) le parcours d'onboarding KYC v2 chez Lemonway. Crée si nécessaire le compte Lemonway, vérifie qu'il n'est pas déjà rattaché à un autre compte Bricks, puis :
- Si un onboarding est déjà en cours côté Lemonway → appelle
resumeOnboarding - Sinon → appelle
startOnboardingAtLemonway
Retourne l'URL hébergée Lemonway sur laquelle le front redirige l'utilisateur. Source : onboarding.controller.ts#L124.
Response¶
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
onboarding.investor-onboarding-already-completed |
400 | KYC déjà verified ou waitingForVerifier |
onboarding.investor-already-has-bricks-account |
400 | Le compte Lemonway est déjà utilisé par un autre compte Bricks |
investor-not-found |
500 | Investisseur introuvable |
investor-profile-not-found |
500 | Profil introuvable |
onboarding.investor-has-v1-onboarding |
500 | L'investisseur a un onboarding v1, v2 incompatible |
onboarding.create-account-provider-error |
500 | Erreur Lemonway lors de la création du compte |
onboarding.resume-onboarding-provider-error |
500 | Erreur Lemonway lors de la reprise |
onboarding.start-onboarding-provider-error |
500 | Erreur Lemonway lors du démarrage |
GET /onboarding/v2/profile-status¶
Endpoint poll-friendly utilisé par le front pendant l'onboarding Lemonway pour détecter la fin du parcours (les callbacks Lemonway n'étant pas fiables). Whitelistée sur Cloudflare pour ne pas être rate-limitée. Récupère le statut courant côté Lemonway, déclenche un syncInvestorKycStatus si désynchronisation détectée, puis retourne l'état consolidé. Source : onboarding.controller.ts#L152.
Pré-conditions¶
- L'investisseur doit avoir un
lemonwayrattaché (onboardingVersion=v2).
Response¶
investorIdentityStatus ∈ incomplete | waitingForVerifier | incorrect | verified (cf. investorIdentityStatusKind dans investorIdentityStatus.ts).
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
onboarding.investor-lemonway-not-found |
404 | Pas de compte Lemonway rattaché |
onboarding.investor-lemonway-onboarding-version-not-supported |
400 | Onboarding non v2 |
investor-not-found / investor-profile-not-found |
400 | Sync KYC : ressource introuvable |
| (autres erreurs sync) | 500 | Erreur Lemonway pendant le sync |
Liens¶
- Service :
investor-onboarding.service.ts - Service profile (
getMe) :customer-profile.service.ts - Service Lemonway KYC :
investor-kyc-update-lemonway-form.service.ts