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 d57a963..eb00579 100644 Binary files a/backend/app/mecenat/cerfa-mecenat-particuliers.pdf and b/backend/app/mecenat/cerfa-mecenat-particuliers.pdf differ 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.",