Skip to content

[V2 Repeq] Page de consultation /representation-equilibree/[siren]/[year] #3301

@Viczei

Description

@Viczei

Contexte

Crée la page de consultation en lecture seule /representation-equilibree/[siren]/[year] : récap complet de la déclaration, bouton téléchargement PDF, accessible à l'utilisateur connecté propriétaire du SIREN. La recherche publique est hors scope. Issue parent #3287. Dépend de #TICKET_ROUTER, #TICKET_PDF.

Fichiers impactés

  • packages/app/src/app/representation-equilibree/[siren]/[year]/page.tsx (création)
  • packages/app/src/modules/representation-equilibree/ConsultationPage.tsx (création)
  • packages/app/src/modules/representation-equilibree/__tests__/ConsultationPage.test.tsx (création)

Changement attendu

  1. Route [siren]/[year]/page.tsx : server component.
    • params: Promise<{ siren: string, year: string }>.
    • Vérifie via api.representationEquilibree.getBySirenAndYear (router côté utilisateur authentifié — lève si non propriétaire). Si non trouvée ou non submittednotFound().
    • Passe la déclaration + company au composant ConsultationPage.
  2. ConsultationPage :
    • Bannière CompanyBanner.
    • En-tête avec <h1> "Représentation équilibrée {year}" et bouton <DownloadRepeqPdfButton year={year} /> aligné à droite.
    • Si deadline dépassée : fr-alert--info "Cette déclaration ne peut plus être modifiée (deadline du {date} dépassée)."
    • 5 sections <h2> en lecture seule, chacune avec une liste de définition <dl> DSFR :
      • Période de référence : date de fin.
      • Écarts cadres dirigeants : soit les 2 %, soit le libellé du motif.
      • Écarts instances dirigeantes : idem.
      • Publication : date + URL (avec <NewTabNotice /> N°30) ou modalités.
      • Transmission : date de soumission, ID de transmission.
    • Bouton "Retour à mon espace" en pied de page.
  3. Tests :
    • Rendu déclaration calculable : affichage des 2 %.
    • Rendu déclaration non calculable : affichage du motif.
    • Présence du <NewTabNotice /> si URL de publication.
    • Deadline dépassée : affichage de l'alerte info.
    • Accès refusé (non propriétaire) : le router lève une erreur — tester via un mock que le composant ne rend pas (404).

Scénarios de test

  • S13 — Utilisateur connecté propriétaire accède à /representation-equilibree/[siren]/{year} → récap lecture seule + bouton PDF.
  • RGAA N°30 — NewTabNotice présent si URL publication.

Références visuelles

Desktop
Page consultation desktop

Mobile
Page consultation mobile

Annexe pipeline (lecture locale par code-dev / design-validator) :

  • /tmp/egapro-mocks/epic-3287/screenshots/consultation-desktop.png
  • /tmp/egapro-mocks/epic-3287/screenshots/consultation-mobile.png

Critères d'acceptation

  • Route /representation-equilibree/[siren]/[year] accessible à l'utilisateur propriétaire connecté
  • 5 sections <h2> avec <dl> en lecture seule
  • Bouton "Télécharger le PDF" fonctionnel
  • NewTabNotice sur le lien externe URL publication
  • Toute fr-alert affichée sur la page de consultation possède un fr-alert__title conforme DSFR (RGAA N°33)
  • Tests verts (≥ 4 cas)
  • pnpm typecheck + pnpm lint:check + pnpm format:check + pnpm test verts
  • RGAA (rgaa-auditor) — N°30 résolu
  • Validation visuelle (design-validator) PASS sur consultation-*.png

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    To Do

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions