Aller au contenu

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.status doit être différent de verified et waitingForVerifier — sinon 403 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

{
  "investorForm": { "...": "formulaire fusionné" }
}

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

{ "url": "https://onboarding.lemonway.fr/..." }

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 lemonway rattaché (onboardingVersion=v2).

Response

{
  "investorIdentityStatus": "verified",
  "lemonwayStatus": "VERIFIED"
}

investorIdentityStatusincomplete | 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