Project

General

Profile

Actions

Feature #1110

closed
RA

Feature #82: Améliorer la génération de PDF pour les contrats avec design professionnel et signatures configurables

Améliorer le format/design du PDF de contrat (polish visuel, champs vides, identité Le Bijou)

Feature #1110: Améliorer le format/design du PDF de contrat (polish visuel, champs vides, identité Le Bijou)

Added by Redmine Admin about 2 months ago. Updated about 1 month ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/15/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:

## Spec — Polish visuel du PDF de contrat (#1110)

Moteur cible inchangé : Chromium/Paged.js via le builder PUR `server/src/application/functions/contract-html.builder.ts` + print CSS. Enrichissement CSS/structure uniquement, aucune nouvelle dépendance ni plomberie de données.

### Portée (builder pur, testable)
1. **Blocs de signature en encarts légers bordés** : fond #f9fafb, bordure #d1d5db, coins arrondis, padding ; aux 3 placements (left/right/side_by_side). Référence design #82.
2. **Champs société vides masqués** : un <p> ne contenant qu'un libellé « … : » sans valeur (ex. « N° SIRET : », « Code APE : », « Adresse du siege social : ») est RETIRE du rendu. Un champ renseigne (« N° SIRET : 123 ») est conserve. Les titres (h1/h2/h3) ne sont JAMAIS retires (helper pur borne, conservateur).
3. **Hygiene de substitution** : p/li devenus totalement vides (residus de balises blanchies, ex. <p>{{signature}}</p>) masques via CSS :empty.
4. **Polish typographique & identite** : corps justifie + cesure, titres d'article (h2/h3) stylises (filet d'accent), tableaux (en-tete trame, bordures fines), controle veuves/orphelines + pas de titre seul en bas de page (break-after: avoid).

### Hors scope
- Refonte des templates auteur (les encarts EXPLOITANT/destinataire vivent dans le HTML auteur) ; pas de page de garde ; pas de changement de moteur.

### Criteres d'acceptation
- Blocs de signature rendus en encarts bordes (#f9fafb / #d1d5db) aux 3 placements.
- <p> « label : » sans valeur retire ; <p> « label : valeur » conserve ; h1/h2/h3 jamais retires.
- Corps HTML preserve verbatim (hors lignes de champ vide) — non-regression des tests builder existants.
- Corps justifie ; titres d'article stylises ; en-tete/pied/pagination/signatures inchanges fonctionnellement.
- Tests builder (TDD) + e2e contrat verts ; lint/typecheck/test:unit verts ; preuve visuelle avant/apres.

### Portee : un seul lot backend (contract-html.builder.ts + tests). Route : backend (NestJS server/). Clot le dernier sous-ticket de l'epopee #82.

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
deployed
preprod_url:
https://preprod-scobby.omdev.tech
deployed_at:
06/23/2026
branch:
feat/1110-contract-pdf-polish
pr_url:
https://github.com/Scobby-organisation/scobby/pull/58
security_key:
severity:
paused:

Description

**Suivi de #82/#377.** La pagination et le rendu serveur (Chromium/Paged.js) sont corrects et déployés en préprod ; il reste à **enrichir la mise en forme** du document.

### Pistes identifiées (à spécifier)
- **Polish typographique & visuel** : polices/tailles affinées, parties (EXPLOITANT/destinataire) dans un encart léger bordé (cf. design #82, fond `#f9fafb`/bordure `#d1d5db`), espacements, titres d'articles stylés, filet de séparation.
- **Champs vides** : les lignes « N° SIRET : », « Code APE : », « Adresse du siège social : » s'affichent vides quand la donnée manque (rendu « inachevé ») → masquer les champs vides ou afficher un placeholder discret.
- **Identité Le Bijou** : accents/couleurs de marque, éventuelle bande d'en-tête ou page de garde, mentions légales en pied stylées.
- **En-tête/pied & structure** : logo sur chaque page, pied enrichi (SIRET/licence + pagination), numérotation des sections, page de garde optionnelle.

### À faire à la session suivante
- Passer par le flux design (mockups HTML before/after) + validation avant implémentation.
- Le rendu cible reste Chromium/Paged.js (builder `contract-html.builder.ts` + print CSS) — enrichissement du CSS/structure, pas de changement de moteur.

## Acceptance criteria
- [ ] À définir en spec/design (cf. pistes ci-dessus).


Files

QA-proof-1110-avant-apres.png (496 KB) QA-proof-1110-avant-apres.png Redmine Admin, 06/23/2026 09:12 AM
1110-apres-contrat-rendu.png (284 KB) 1110-apres-contrat-rendu.png Redmine Admin, 06/23/2026 09:12 AM
QA-proof-1110.txt (1.53 KB) QA-proof-1110.txt Redmine Admin, 06/23/2026 09:12 AM
QA-proof-1110-avant-apres.png
1110-apres-contrat-rendu.png
Actions

Also available in: PDF Atom