From c60bc11795f0eae90442713a6ebf369dfaf4795e Mon Sep 17 00:00:00 2001 From: AdamThomas Date: Sat, 3 Oct 2026 16:34:22 +0200 Subject: [PATCH] =?UTF-8?q?Cerfa=20m=C3=A9c=C3=A9nat=20:=20mode=20de=20ver?= =?UTF-8?q?sement=20coch=C3=A9=20et=20dates=20repositionn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - nouveau modèle PDF du cerfa - case « Virement, prélèvement, carte bancaire » cochée (paiement SumUp) - date du versement et date de signature repositionnées - message de confirmation du paiement : annonce l'email de confirmation et le reçu fiscal pour le mécénat Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 1 + .../mecenat/cerfa-mecenat-particuliers.pdf | Bin 214815 -> 248255 bytes backend/app/mecenat/pdf.py | 6 ++++-- frontend/src/i18n/locales/fr.json | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f549657..86163bc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -851,6 +851,7 @@ Aucune dépendance locale requise hors Docker. | 34 | Numéro d'ordre unique sur chaque reçu fiscal mécénat (`Volunteer.mecenat_receipt_number`, `202600001`…, migration `0020`), attribué au paiement ou au premier export puis figé | à valider | | 35 | Type de paiement à montant libre (`FormPaymentOption.free_amount`, migration `0021`) : case « Montant libre » sur l'écran Inscriptions, montant configuré = minimum, saisie du montant sur le formulaire public (validée côté client et serveur, 10 000 € max) — pensé pour le mécénat | à valider | | 36 | Écran Inscriptions : état « Actif / Inactif » des types de paiement (`SumUpStatus`, `FormBuilderPage.tsx`) — sans identifiants SumUp ou sans type de paiement, le formulaire public n'affiche qu'une case « cotisation » (ni choix du type, ni étape mécénat, ni paiement en ligne), ce que rien ne signalait | à valider | +| 37 | Cerfa mécénat : nouveau modèle PDF, date du versement repositionnée, date de signature remplie (date du paiement), case « Virement, prélèvement, carte bancaire » cochée (paiement SumUp) ; message de confirmation du paiement annonçant l'email et le reçu fiscal | à valider | **Reste hors périmètre** (modèle prêt à les accueillir) : SMS, constructeur de formulaire, pointage sur site, IA. Frontend : squelette + 6 écrans + diff --git a/backend/app/mecenat/cerfa-mecenat-particuliers.pdf b/backend/app/mecenat/cerfa-mecenat-particuliers.pdf index d57a96301f0f748902154039dd6ea6dde68d3b84..eb005796797dae919be072824faa7afd966fa828 100644 GIT binary patch delta 15909 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 diff --git a/backend/app/mecenat/pdf.py b/backend/app/mecenat/pdf.py index da03eef..ae75e96 100644 --- a/backend/app/mecenat/pdf.py +++ b/backend/app/mecenat/pdf.py @@ -54,11 +54,12 @@ _CITY = _Field(x=232, bottom=295.5, max_width=310, font_size=9) _COUNTRY = _Field(x=67, bottom=310.5, max_width=125, font_size=9) _AMOUNT = _Field(x=44, bottom=365.2, max_width=110, font_size=9) _AMOUNT_IN_WORDS = _Field(x=356, bottom=363.1, max_width=190, font_size=8) -_PAYMENT_DATE = _Field(x=184, bottom=385, max_width=76, font_size=9) +_PAYMENT_DATE = _Field(x=264, bottom=385, max_width=76, font_size=9) # Page 1 : case « Numéro d'ordre du reçu » (x 418,7 → 566,8, haut 111 → bas # 128,2), texte centré dedans (`x` = centre de la case). _RECEIPT_NUMBER = _Field(x=492.75, bottom=124.0, max_width=140, font_size=11, bold=True) -_CERFA_DATE = _Field(x=320, bottom=640, max_width=76, font_size=9) +_CERFA_DATE = _Field(x=320, bottom=630, max_width=76, font_size=9) +_CHECK_VIRMENT = _Field(x=291.8, bottom=592.1, max_width=10, font_size=8) @dataclass(frozen=True) @@ -136,6 +137,7 @@ def _overlay_page(receipt: MecenatReceipt) -> PageObject: _draw(c, amount_in_words(receipt.amount), _AMOUNT_IN_WORDS) _draw(c, receipt.payment_date.strftime("%d/%m/%Y"), _PAYMENT_DATE) _draw(c, receipt.payment_date.strftime("%d/%m/%Y"), _CERFA_DATE) + _draw(c, "X", _CHECK_VIRMENT) return _finish(c, buffer) diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 85efa0f..57c7adc 100644 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -467,7 +467,7 @@ "publicForm.confirmation.title": "Confirmation du paiement", "publicForm.confirmation.pending": "Vérification du paiement en cours…", - "publicForm.confirmation.paid": "Merci ! Cotisation « {label} » de {amount} € payée. Ton inscription est enregistrée.", + "publicForm.confirmation.paid": "Merci ! Cotisation « {label} » de {amount} € payée. Ton inscription est enregistrée. Tu vas recevoir un mail de confirmation de ton inscription et ton reçu fiscal si tu as choisi le mécénat.", "publicForm.confirmation.failed": "Le paiement n'a pas abouti (refusé ou expiré).", "form.closed": "Les inscriptions sont actuellement fermées.", "form.captcha_failed": "Vérification anti-robot invalide, réessaie.",