É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\ClaimStepcô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 :
- l'enum
ClaimStep(PHP), - ce tableau ci-dessous,
- les enums miroirs mobile et web.
- l'enum
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_TRACKINGne dépend pas seulement decurrent_step— son rendu est piloté parGET /api/v1/claims/{id}/dispatch-tracking, dont la logique vit dans le serviceApp\Services\Claim\ClaimDispatchScenarioResolver. Le résolveur expose 8scenario_keyexhaustifs (natural_phenomenon,none_cause,works_no_do,works_do_full,works_do_partial,works_do_none,works_gpa,neighbor) croisés avec unphase_keydynamique parmidefault,awaiting_med,med_overdue,awaiting_do,do_overdue,escalated,do_acknowledged,declarant_only,with_third_party. La matrice scénario × phases vit dansconfig/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).422—stepmanquant 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é :
- Dans
App\Enums\Claim\ClaimStep(backend, source de vérité). - Dans le tableau ci-dessus.
- 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.