You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implémente l'étape 4 du funnel repeq : récap + publication + transmission. Sections <h3> (N°39), liens "Modifier" explicites (N°40), 1 seul bouton primaire "Transmettre" (N°14bis), date/modalités de publication intégrées au récap (N°16), date pré-remplie à aujourd'hui (décision design 2). Issue parent #3287. Dépend de #TICKET_ROUTER, #TICKET_STEP2, #TICKET_STEP3.
Le gating "submitted + deadline dépassée → lecture seule / redirect" doit utiliser la deadline dédiée repeq repeqModificationDeadline (cf. #3288 pour la colonne DB et #3289 pour le helper getRepeqModificationDeadline), pas la deadline rémunération.
Fichiers impactés
packages/app/src/app/representation-equilibree/etape/[step]/page.tsx (modification — passer modificationDeadline: repeqModificationDeadline à la page client via shouldRedirectSubmittedToRecap)
packages/app/src/modules/representation-equilibree/shared/ReviewSection.tsx (création — une section de récap avec titre, lien "Modifier X" explicite, <dl>)
<input type="date" name="publishDate"> avec hint "Pré-remplie à la date du jour. Vous pouvez la modifier.", defaultValue= date du jour (ISO).
Radio hasWebsite: "yes" | "no".
Si yes : <input type="url" name="publishUrl">.
Si no : <textarea name="publishModalities">.
fr-alert--info rappelant les obligations CSE + publication.
<div className="fr-btns-group fr-btns-group--inline-md"> avec UN SEUL fr-btn primaire "Transmettre la déclaration" + un fr-btn--secondary "Précédent" (href /etape/3). Aucun autre bouton primaire sur la page (N°14bis).
À la soumission :
Appelle api.representationEquilibree.updateStep4.useMutation pour persister la publication.
Puis api.representationEquilibree.submit.useMutation.
En succès, router.push(\/representation-equilibree/transmise/${declarationYear}`)`.
4 sections <h3> avec liens "Modifier X" explicites vers les bonnes étapes
Publication (date + radio + URL/modalités) intégrée au récap, pas d'exergue séparée
1 seul bouton primaire "Transmettre la déclaration"
Date de publication pré-remplie à la date du jour
Gating server-side : utilise getRepeqModificationDeadline(campaignDeadlines, year) (pas de date hardcodée, pas de réutilisation de decl1ModificationDeadline)
Toutes les fr-alert présentes sur la page récap ont un fr-alert__title conforme DSFR (RGAA N°33)
Contexte
Implémente l'étape 4 du funnel repeq : récap + publication + transmission. Sections
<h3>(N°39), liens "Modifier" explicites (N°40), 1 seul bouton primaire "Transmettre" (N°14bis), date/modalités de publication intégrées au récap (N°16), date pré-remplie à aujourd'hui (décision design 2). Issue parent #3287. Dépend de #TICKET_ROUTER, #TICKET_STEP2, #TICKET_STEP3.Le gating "submitted + deadline dépassée → lecture seule / redirect" doit utiliser la deadline dédiée repeq
repeqModificationDeadline(cf. #3288 pour la colonne DB et #3289 pour le helpergetRepeqModificationDeadline), pas la deadline rémunération.Fichiers impactés
packages/app/src/app/representation-equilibree/etape/[step]/page.tsx(modification — passermodificationDeadline: repeqModificationDeadlineà la page client viashouldRedirectSubmittedToRecap)packages/app/src/modules/representation-equilibree/steps/Step4Review.tsx(création)packages/app/src/modules/representation-equilibree/shared/ReviewSection.tsx(création — une section de récap avec titre, lien "Modifier X" explicite,<dl>)packages/app/src/modules/representation-equilibree/steps/__tests__/Step4Review.test.tsx(création)packages/app/src/modules/representation-equilibree/StepPageClient.tsx(modification)packages/app/src/modules/representation-equilibree/index.ts(modification — exports)Changement attendu
ReviewSection: composant réutilisable{ title: string, editHref: string, editLabel: string, children: ReactNode }.<section><div class="fr-grid-row fr-grid-row--middle"><h3>{title}</h3><a href={editHref}>{editLabel}</a></div>{children}</section>.editLabeldoit être contextualisé ("Modifier la période de référence", "Modifier les écarts des cadres dirigeants", etc.) — N°40.Step4Review(client component) :{ declaration: RepeqDeclarationFull }(full data depuisgetOrCreate)./etape/1)./etape/2) — affiche soit les % (cas calculable), soit le libellé du motif choisi./etape/3) — idem.useZodForm+updatePublicationSchema:<input type="date" name="publishDate">avec hint "Pré-remplie à la date du jour. Vous pouvez la modifier.",defaultValue=date du jour (ISO).hasWebsite: "yes" | "no".yes:<input type="url" name="publishUrl">.no:<textarea name="publishModalities">.fr-alert--inforappelant les obligations CSE + publication.<div className="fr-btns-group fr-btns-group--inline-md">avec UN SEULfr-btnprimaire "Transmettre la déclaration" + unfr-btn--secondary"Précédent" (href/etape/3). Aucun autre bouton primaire sur la page (N°14bis).api.representationEquilibree.updateStep4.useMutationpour persister la publication.api.representationEquilibree.submit.useMutation.router.push(\/representation-equilibree/transmise/${declarationYear}`)`.src/app/representation-equilibree/etape/[step]/page.tsx, utiliseshouldRedirectSubmittedToRecap({ ..., modificationDeadline: getRepeqModificationDeadline(campaignDeadlines, declaration.year) })(helper du ticket [V2 Repeq] Domain: constantes, helpers année/deadline, règle d'assujettissement #3289, lit la colonne du ticket [V2 Repeq] DB: table representation_equilibree_declarations + schéma Drizzle #3288). Si une déclaration estsubmittedet que la deadline repeq est dépassée, redirect vers la page de consultation/representation-equilibree/{siren}/{year}(pattern cohérent avec la rémunération).<h1>(dans layout) →<h2>"Vérifier votre déclaration" (dans Step4Review) →<h3>pour chaque section (N°39, pas de saut).Step4Review.test.tsx:hasWebsite: true+ URL valide → mutations appelées dans l'ordre + navigation.hasWebsite: false+ modalités vides → erreur Zod affichée.<Step4Review declaration={...} />àcase 4:.Scénarios de test
<h3>pour les sections./transmise/[year].repeqModificationDeadline: submitted + deadline future → récap accessible, submitted + deadline passée → redirect/consultation.fr-btnnon secondaire sur la page.Références visuelles
Desktop

Mobile

Annexe pipeline (lecture locale par code-dev / design-validator) :
/tmp/egapro-mocks/epic-3287/screenshots/step-4-recap-desktop.png/tmp/egapro-mocks/epic-3287/screenshots/step-4-recap-mobile.pngCritères d'acceptation
<h3>avec liens "Modifier X" explicites vers les bonnes étapesgetRepeqModificationDeadline(campaignDeadlines, year)(pas de date hardcodée, pas de réutilisation dedecl1ModificationDeadline)fr-alertprésentes sur la page récap ont unfr-alert__titleconforme DSFR (RGAA N°33)pnpm typecheck+pnpm lint:check+pnpm format:check+pnpm testvertsstep-4-recap-*.png