Aller au contenu

Étape courante du parcours (current_step)

Le champ current_step sur un sinistre indique l'étape précise sur laquelle l'utilisateur s'est arrêté. Il est persisté côté backend (colonne claims.current_step, valeur de l'enum ClaimStep) et retourné par toutes les routes qui exposent un claim. Il sert au mobile et au web pour rouvrir un brouillon exactement là où l'utilisateur l'a laissé — sans avoir à inférer la position depuis les champs remplis (logique qui diverge fatalement à terme dès qu'un champ devient facultatif).

Source de vérité

  • L'enum App\Enums\Claim\ClaimStep côté backend est la source.
  • Le mobile et le web exposent un enum miroir qui reprend les mêmes valeurs string ('FUNNEL_PROPERTY_TYPE', 'COMMON_TRUNK_INJURIES', etc.).
  • Tout ajout ou renommage côté backend doit être propagé dans :
    1. l'enum ClaimStep (PHP),
    2. ce tableau ci-dessous,
    3. les enums miroirs mobile et web.

Qui met à jour le champ ?

Acteur Quand Comment
CreateDraftClaimAction À la création du brouillon current_step = FUNNEL_PROPERTY_TYPE
Chaque Save…Action du tronc commun Après le save métier d'une étape bumpe à l'étape que l'utilisateur était en train de remplir (pas la suivante — c'est le mobile/web qui décide où il va)
ValidateCommonTrunkAction Après le POST /common-trunk/validate réussi bumpe à COMMON_TRUNK_VALIDATED
PATCH /api/v1/claims/{id}/current-step Quand le front a besoin de mémoriser une navigation pure (pas de champ métier modifié) bumpe à la valeur fournie

Les claims créés avant la migration n'ont pas de current_step (valeur null) ; le mobile retombe alors sur son inférence en fallback.

Enum

Enum value EP backend EP mobile Route mobile Route web (TBD) Description
FUNNEL_PROPERTY_TYPE EP-BACK-06 EP-MOB-03 (Q1) /funnel/property-type à définir Type de bien sinistré (Habitation / Auto)
FUNNEL_CLAIM_TYPE EP-BACK-06 EP-MOB-03 (Q2) /funnel/claim-type à définir Type de sinistre (DDE / Incendie / Vol / Cat-Nat / Autre)
FUNNEL_IMPACT EP-BACK-06 EP-MOB-03 (Q3) /funnel/impact à définir Qui est impacté (chez moi / tiers vers moi / moi vers tiers)
COMMON_TRUNK_CONTEXT EP-BACK-07 (Q1+Q2+Q3) EP-MOB-04 /common-trunk/context à définir Type de logement, adresse, qualité du déclarant
COMMON_TRUNK_INJURIES EP-BACK-07 (Q4) EP-MOB-04 /common-trunk/injuries à définir Déclaration de blessures + sous-formulaire
COMMON_TRUNK_OBSERVATION_DATE EP-BACK-07 (Q5) EP-MOB-04 /common-trunk/observation-date à définir Date de constatation des dégâts
COMMON_TRUNK_LOCATION EP-BACK-07 (Q6) EP-MOB-04 /common-trunk/location à définir Pièces sinistrées, parties touchées, dommages
COMMON_TRUNK_VALIDATED EP-BACK-07 EP-MOB-04 /common-trunk/recap à définir Tronc commun validé — l'utilisateur a franchi le récap
OWN_PROPERTY_CAUSE EP-BACK-09 EP-MOB-07 /own-property/cause à définir Cause du sinistre (Travaux / Phénomène naturel / Aucune)
OWN_PROPERTY_PHENOMENON_TYPE EP-BACK-10 EP-MOB-09 /own-property/phenomenon/type à définir Type de phénomène naturel (modal 6 options + champ Préciser pour "Autre")
OWN_PROPERTY_PHENOMENON_DECREE EP-BACK-10 EP-MOB-09 /own-property/phenomenon/decree à définir Question arrêté CatNat préfectoral (Oui/Non/Sais pas + date facultative) — rend le même écran progressif que OWN_PROPERTY_PHENOMENON_TYPE
OWN_PROPERTY_HOME_INSURANCE EP-BACK-10 EP-MOB-09 /own-property/home-insurance à définir Coordonnées multirisques habitation — 3 variantes UI (occupant / PNO / locataire) résolues côté front via declarant_role + owner_situation
COMMON_TRUNK_SINISTER_TYPE EP-BACK-09 EP-MOB-08 /common-trunk/sinister-type à définir « Précisez le type de sinistre » — 10 options techniques (fuite tuyau, infiltration toit…). Commun à toutes les causes du parcours WATER_DAMAGE.
OWN_PROPERTY_WORKS_AGE_BUCKET EP-BACK-09 EP-MOB-08 /own-property/works/age-bucket à définir « Précisez la nature des travaux » — 4 buckets : < 10 ans / > 10 ans / non réceptionné / date inconnue. < 10 ans s'arrête au loader (downstream V1 pas livré).
OWN_PROPERTY_WORKS_RECEPTION_DATE EP-BACK-09 EP-MOB-08 /own-property/works/reception-date à définir Date de réception du chantier + date de livraison du bien (au moins une, demandée pour buckets < 10 ans et > 10 ans uniquement).
OWN_PROPERTY_WORKS_RC_KNOWLEDGE EP-BACK-09 EP-MOB-08 /own-property/works/rc-knowledge à définir Question « Connaissez-vous les coordonnées de l'assureur RC Pro et/ou RC Décennale de l'entreprise ? » (Oui / Non). Pilote l'affichage du form coords RC en aval.
OWN_PROPERTY_WORKS_CONTRACTOR EP-BACK-09 EP-MOB-08 /own-property/works/contractor à définir Form coordonnées de l'entreprise responsable des travaux (Contact role WorksContractor — pas un assureur).
OWN_PROPERTY_WORKS_RC_INSURANCE EP-BACK-09 EP-MOB-08 /own-property/works/rc-insurance à définir Form coordonnées assureur RC Pro et/ou RC Décennale de l'entreprise (InsurancePolicy type WorksContractorLiability — un seul row).
OWN_PROPERTY_WORKS_HOME_INSURANCE EP-BACK-09 EP-MOB-08 /own-property/works/home-insurance à définir Form coordonnées multirisques (propriétaire occupant). Réuse SaveClaimHomeInsuranceAction avec nextStep paramétrable.
OWN_PROPERTY_WORKS_HOME_INSURANCE_PNO EP-BACK-09 EP-MOB-08 /own-property/works/home-insurance-pno à définir Form coordonnées multirisques PNO (propriétaire non occupant). Réuse SaveClaimHomeInsuranceAction avec nextStep paramétrable.
OWN_PROPERTY_WORKS_RECAP EP-BACK-09 EP-MOB-08 /own-property/works/recap à définir Écran récap fin de branche Travaux (encart info conditionnel selon works_age_bucket).
FORMAL_NOTICE_PREVIEW EP-BACK-15 EP-MOB-15 /formal-notice/preview à définir Aperçu de la mise en demeure (FormalNoticeDraft pré-rempli — sections Identification du désordre / Photos / Coordonnées du constructeur + CTA « Signer »).
FORMAL_NOTICE_PDF_PREVIEW EP-BACK-15 EP-MOB-15 /formal-notice/pdf-preview à définir Aperçu PDF généré côté backend (Blade + Spatie\LaravelPdf) avant signature.
FORMAL_NOTICE_SIGNATURE EP-BACK-15 EP-MOB-15 /formal-notice/signature à définir Canvas de signature dédié à la MED (distinct du constat — package signature côté mobile). Embarque la signature dans le PDF côté backend.
FORMAL_NOTICE_DISPATCH EP-BACK-15 EP-MOB-15 /formal-notice/dispatch à définir Tunnel d'envoi de la MED signée (PaymentIntent AR24 + LRE). Déclenche le cron DetectUnsuccessfulFormalNoticeJob à J+8.
FINALIZATION_CONTACT_SUPPORT EP-BACK-20bis EP-MOB-18 /finalization/contact-support à définir Formulaire « Une question ? Contactez l'équipe HomyExpert » (sujet + message). Renommé depuis FINALIZATION_VOE_CHAT le 2026-06-29 (migration 2026_06_29_151517_rename_voe_chat_to_contact_support). La step FINALIZATION_VOE_CHAT n'existe plus dans l'enum — toute valeur historique est migrée en data réelle.

Phases dynamiques de l'écran Suivi de l'envoi : la step FINALIZATION_DISPATCH_TRACKING ne dépend pas seulement de current_step — son rendu est piloté par GET /api/v1/claims/{id}/dispatch-tracking, dont la logique vit dans le service App\Services\Claim\ClaimDispatchScenarioResolver. Le résolveur expose 8 scenario_key exhaustifs (natural_phenomenon, none_cause, works_no_do, works_do_full, works_do_partial, works_do_none, works_gpa, neighbor) croisés avec un phase_key dynamique parmi default, awaiting_med, med_overdue, awaiting_do, do_overdue, escalated, do_acknowledged, declarant_only, with_third_party. La matrice scénario × phases vit dans config/claim_dispatch_tracking.php. Le mobile rend purement le payload retourné — toute évolution du flow d'envoi se fait côté backend.

Réponse API

current_step apparaît dans toutes les représentations sérialisées d'un claim (création, détail, liste, mises à jour). Exemple :

json { "id": "01krbqccrq6bsq6redx7x22nzq", "case_number": "HE-2026-0001", "workflow_status": "DRAFT", "current_step": "COMMON_TRUNK_INJURIES", "type": "WATER_DAMAGE", "property_type": "HOUSING", "origin": "OWN_PROPERTY", "...": "..." }

L'endpoint dédié pour bumper l'étape :

```http PATCH /api/v1/claims/{id}/current-step Content-Type: application/json Authorization: Bearer

{ "step": "COMMON_TRUNK_INJURIES" } ```

Réponse : la représentation complète du claim, avec current_step mis à jour. Réponses d'erreur :

  • 404 — le sinistre n'appartient pas à l'appelant (ou n'existe pas).
  • 422step manquant ou valeur inconnue de l'enum.

Évolution

L'enum est destiné à grossir au fur et à mesure des EPs livrés : étapes Cause du sinistre (EP-BACK-09+), Phénomène naturel, Tiers, finalisation, etc. Tout ajout doit être propagé :

  1. Dans App\Enums\Claim\ClaimStep (backend, source de vérité).
  2. Dans le tableau ci-dessus.
  3. Dans les enums miroirs côté mobile et web.

Le contrat front ↔ back reste la valeur string (snake-shouting). Pas de validation sémantique entre étapes côté backend pour l'instant : l'enum se contente d'accepter une valeur connue ; c'est le front qui orchestre la transition.