É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. |
Sinistres habitation hors dégât des eaux¶
Les types Catastrophe naturelle, Construction, Cambriolage, Bris de glace et Incendie (EP-BACK-37 → 43) réutilisent le tronc commun, la branche Travaux et la finalisation. Ce qui varie d'un type à l'autre (cause implicite, tiers, pièces obligatoires, heure obligatoire, document signé, délai de déclaration) vient de config/claim_types.php, exposé par GET /api/v1/reference/claim-types. C'est le graphe forward mobile / web qui insère les étapes ci-dessous dans le parcours de chaque type.
Modules de déclaration partagés (EP-BACK-38)¶
Un écran = un endpoint = une step. Réutilisés par plusieurs types ; le wording peut varier (secours / forces de l'ordre), pas la step.
| Enum value | EP backend | EP mobile | Endpoint | Description |
|---|---|---|---|---|
DECLARATION_DAMAGED_GOODS |
EP-BACK-38 | EP-MOB-32 | PUT /claims/{id}/goods/damaged |
Biens endommagés (catégories, valeur, justificatif) ou « je n'ai pas connaissance » |
DECLARATION_STOLEN_PERSONAL_ITEMS |
EP-BACK-38 | EP-MOB-32 | PUT /claims/{id}/goods/stolen-personal |
Des biens personnels ont-ils été volés ? + liste |
DECLARATION_STOLEN_PROFESSIONAL_ITEMS |
EP-BACK-38 | EP-MOB-32 | PUT /claims/{id}/goods/stolen-professional |
Des biens professionnels ont-ils été volés ? + liste |
DECLARATION_HABITABILITY |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/habitability |
Logement habitable ? pièces / m² inexploitables, relogement |
DECLARATION_SECURING |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/securing |
Logement sécurisé ? mesures prises |
DECLARATION_ADDITIONAL_COSTS |
EP-BACK-38 | EP-MOB-32 | PUT /claims/{id}/additional-costs |
Frais annexes (hébergement, nettoyage, gardiennage…) |
DECLARATION_EMERGENCY_SERVICES |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/emergency-services |
Secours / forces de l'ordre intervenus, n° de rapport |
DECLARATION_WITNESSES |
EP-BACK-38 | EP-MOB-32 | PUT /claims/{id}/witnesses |
Témoins (nombre, coordonnées facultatives) |
DECLARATION_POLICE_COMPLAINT |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/police-complaint |
Dépôt de plainte (déposée / prévue / non déposée), n°, récépissé |
DECLARATION_OTHER_DAMAGES |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/other-damages |
Autres dommages possibles, une précision par réponse |
DECLARATION_SECURITY_EQUIPMENT |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/security-equipment |
Équipements de sécurité (+ alarme déclenchée ?) |
DECLARATION_DEADLINE |
EP-BACK-38 | EP-MOB-32 | PATCH /claims/{id}/deadline-reminder |
Date limite de déclaration + rappel (opt-in) |
Catastrophe naturelle (EP-BACK-39)¶
Le phénomène se pose après la date de constatation, avant les pièces. La cause (phénomène ou travaux) est demandée en fin de parcours via OWN_PROPERTY_CAUSE ; arrêté et branche Travaux réutilisent les steps existantes.
| Enum value | EP backend | EP mobile | Endpoint | Description |
|---|---|---|---|---|
NATURAL_DISASTER_PHENOMENON |
EP-BACK-39 | EP-MOB-33 | PATCH /claims/{id}/natural-disaster/phenomenon |
Phénomène naturel à l'origine du sinistre (7 options + précision) |
NATURAL_DISASTER_GROUND_DAMAGES |
EP-BACK-39 | EP-MOB-33 | PATCH /claims/{id}/natural-disaster/ground-damages |
Dommages constatés (mouvement de terrain / sécheresse) |
NATURAL_DISASTER_DAMAGE_ONSET |
EP-BACK-39 | EP-MOB-33 | PATCH /claims/{id}/natural-disaster/damage-onset |
Dommages apparus immédiatement ? |
Construction (EP-BACK-40)¶
Propriétaire uniquement, cause CONSTRUCTION_WORK implicite (ni COMMON_TRUNK_SINISTER_TYPE ni OWN_PROPERTY_CAUSE). Le parcours se termine sur la branche Travaux existante (OWN_PROPERTY_WORKS_AGE_BUCKET → GPA / DO).
| Enum value | EP backend | EP mobile | Endpoint | Description |
|---|---|---|---|---|
CONSTRUCTION_WORKS_KIND |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/works-kind |
Travaux à l'origine du sinistre (16 options + précision) |
CONSTRUCTION_WORKS_COMPLETED |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/works-completed |
Travaux terminés ? (en cours → réception « non réceptionné ») |
CONSTRUCTION_NEW_WORKS |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/new-works |
Nouveaux travaux depuis le désordre ? + objectif (même écran) |
CONSTRUCTION_WORKS_DOCUMENTS |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/documents |
Documents relatifs aux travaux (médias CONSTRUCTION_DOCUMENT typés) ou « aucun » |
CONSTRUCTION_DISORDER_NATURE |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/disorder-nature |
Nature du désordre (choix multiple) |
CONSTRUCTION_DISORDER_STATUS |
EP-BACK-40 | EP-MOB-34 | PATCH /claims/{id}/construction/disorder-status |
Apparu après les travaux ? toujours présent ? évolue encore ? (3 questions, un écran) |
Cambriolage / vol (EP-BACK-41)¶
Pas de pièces (le lieu d'intrusion les remplace), heure de constatation obligatoire, cause NONE implicite. L'assureur destinataire dépend d'abord des objets volés : perso + pros → double déclaration ; seuls des objets pros → multirisques pro ; seuls des objets perso → multirisques habitation. Le type de logement du tronc commun (dwelling_type = OFFICE / COMMERCIAL_PREMISES) ne compte que si aucun objet n'a été volé : bureau ou local commercial → multirisques pro. Sécurisation, biens volés, équipements, forces de l'ordre, témoins et plainte sont les modules partagés ci-dessus.
| Enum value | EP backend | EP mobile | Endpoint | Description |
|---|---|---|---|---|
THEFT_INCIDENT_KIND |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/incident-kind |
Dommages constatés (avec / sans objet volé, tentative…) — seul « avec objets volés » ouvre les écrans des biens volés |
THEFT_OCCUPIED |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/occupied |
Logement occupé ? (non → blessures « non », écran blessures sauté) |
THEFT_ENTRY_LOCATION |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/entry-location |
Lieu de l'intrusion (libellé de pièce + précision) |
THEFT_VISIBLE_DAMAGE |
EP-BACK-41 | EP-MOB-35 | PUT /claims/{id}/theft/damages |
Dégâts visibles ? + liste des dégâts d'effraction avec photos typées (vue large / précise / autres éléments) |
THEFT_LOCKED |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/locked |
Logement fermé à clé ? |
THEFT_LOSS_ESTIMATE |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/loss-estimate |
Estimation du préjudice : automatique (somme des biens volés, seulement s'il y en a de valorisés), fourchette, montant, pas encore connu |
THEFT_FOOTAGE |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/theft/footage |
Images / vidéos du cambriolage (seulement si caméras, médias THEFT_FOOTAGE) |
THEFT_PROFESSIONAL_DECLARATION |
EP-BACK-41 | EP-MOB-35 | PATCH /claims/{id}/current-step |
Sentinelle d'entrée du 2ème parcours (objets perso ET pros volés) — gating Premium (402) comme OWN_PROPERTY_WORKS_DO_PARTIAL_DECLARATION_2 |
THEFT_PROFESSIONAL_INSURANCE |
EP-BACK-41 | EP-MOB-35 | PUT /claims/{id}/insurance-policies/professional-insurance |
Coordonnées de la multirisques professionnelle (2ème déclaration) |
Double déclaration cambriolage : objets personnels ET professionnels volés → deux envois sur le même sinistre. Chaque dispatch porte un
goods_scope(PERSONALpuisPROFESSIONAL) ; déclaration, rapport et estimation ne reprennent que les biens de son périmètre. L'envoi personnel part vers la multirisques habitation ; une fois parti, l'envoi suivant cible la multirisques pro.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 lesscenario_keynatural_phenomenon,none_cause,works_no_do,works_do_full,works_do_partial,works_do_none,works_gpa,works_gpa_none,neighbor,me_to_thirdettheft(cambriolage), croisés avec unphase_keydynamique parmidefault,awaiting_med,med_overdue,awaiting_do,do_overdue,escalated,escalated_without_med,do_acknowledged,second_declaration,declarant_only,with_third_party,with_third_party_and_med,awaiting_police_complaint. 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 :
{
"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 :
PATCH /api/v1/claims/{id}/current-step
Content-Type: application/json
Authorization: Bearer <token>
{ "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.