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.

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 (PERSONAL puis PROFESSIONAL) ; 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_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 les scenario_key natural_phenomenon, none_cause, works_no_do, works_do_full, works_do_partial, works_do_none, works_gpa, works_gpa_none, neighbor, me_to_third et theft (cambriolage), croisés avec un phase_key dynamique parmi default, 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 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 :

{
  "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 — step 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.