# Rapport v1.7.1 — Le contrat laisse la place aux cachets

L'exploitant a fourni un contrat revenu légalisé (réf. CONTRAT/2026-106/2026-03,
signé le 05/08/2026, légalisé le 13/08/2026). Il montrait exactement ce qui
n'allait pas : les cachets de la commune posés **sur l'article 3** et **sur le
pied de page** — les cases de signature de 90 points étaient trop petites, les
agents tamponnaient où ils pouvaient. Et la signature électronique (plateforme
Wraq, lois n° 43-20 et 53-05) ajoute d'office un bandeau bas de page, une
colonne de référence sur la tranche droite et un QR code en bas à droite — tout
ça par-dessus le pied et le paraphe. Le lot donne **un cadre à chaque chose** :
la signature de chaque partie, la légalisation de chaque partie, la couche
électronique — sans que rien ne se superpose jamais au texte.

**Recette** : 857 tests, 4 321 assertions, tout au vert (855 avant le lot).
`./vendor/bin/pint` passé, `npm run build` relancé. **Aucune migration**, aucun
changement de cron ni de `.env`, aucune dépendance ajoutée : le déploiement est
un simple remplacement de fichiers suivi des quatre `artisan *:cache`. Le corps
des actes vit en base (`document_templates`) et n'a pas bougé — tout se joue
dans l'enveloppe `resources/views/documents/layout.blade.php`.

---

## 1. Les marges portent les servitudes du document signé

- **Marge droite portée à 2,2 cm** : la colonne de référence verticale de la
  signature électronique s'y pose sans toucher le texte.
- **Marge basse portée à 3,4 cm, en deux étages** : le paraphe et le pied de
  page remontent dans le haut de la marge ; les **12 derniers millimètres
  restent vides** sur toute la largeur — la réserve du bandeau électronique.
- **Le numéro de page quitte le centre-bas** : posé à gauche, au niveau du
  pied (`DocumentGenerator::numeroterLesPages()`), il ne croise ni le bandeau
  ni le QR.
- **Le coin bas-droit de la dernière page (~4 × 4 cm) reste net** pour le QR
  code : la rangée « signature électronique » s'arrête avant (cellule de
  réserve de 4,2 cm), le paraphe s'arrête à 2 cm du bord du cadre, et le filet
  du pied s'écarte d'autant des deux côtés.

A4 portrait, DejaVu Sans, et les règles de coupe existantes (orphelines,
clause financière insécable, chute soudée aux signatures) sont conservées.

## 2. Le bloc final refondu — un cadre pour chaque chose

Après « Fait à …, le …, en deux (02) exemplaires originaux » :

- **Rangée A — les signatures** (4,5 cm) : « Le domiciliataire — STE MOBDIE
  PRIVÉ » (cachet de société quand l'option est active, ligne du gérant sous le
  cadre) et « Le domicilié — {nom} », « Signature précédée de la mention
  "lu et approuvé" ».
- **Rangée B — la légalisation réelle** (5,5 cm, un cadre par partie) :
  « Cadre réservé à la légalisation de la signature », sous-titre « (commune /
  autorité compétente) », amorces grisées « N° : … » et « Date : … » — l'agent
  a la place de tamponner et d'écrire.
- **Rangée C — la couche électronique** (2,8 cm, pleine largeur moins la
  réserve du QR) : « Espace réservé à la signature électronique et à son
  cachet de vérification (loi n° 43-20 — loi n° 53-05) ».

Bordures fines grises, intitulés en petites capitales violettes comme les
rôles des parties, chaque rangée insécable. **Les quatre actes suivent le même
moule** : contrat, avenant et résiliation portent les deux colonnes ;
l'attestation (le domicilié ne signe pas) ne porte que la colonne du
domiciliataire en rangées A et B — en demi-largeur, une cellule vide tenant la
géométrie — et garde la rangée C.

Le contrat de référence passe de deux à **trois pages** : le coût en hauteur
des cadres est assumé, le test le plafonne à trois — l'inflation silencieuse
reste interdite.

## 3. Le bogue mis au jour et réparé : la « chute » était le corps entier

L'insécabilité posée sur le bloc final a révélé un défaut **latent depuis la
v1.3.7** : la regex de `DocumentGenerator::detacherLaChute()` (départ non
ancré, quantificateur paresseux tiré jusqu'à la fin) ne détachait pas le
dernier bloc du corps — elle capturait **du premier bloc jusqu'à la fin**. Le
bloc final contenait donc tout le contrat, sans que rien ne le montre :
`.corps` et `.bloc-final` stylent titres et paragraphes à l'identique, et le
bloc final se coupait alors librement. Avec quinze centimètres de cadres en
plus, DomPDF, à court de points de coupe autorisés, tranchait au milieu de la
clause financière.

La regex porte désormais un garde-fou intérieur `(?:(?!…).)*` : le bloc capturé
ne peut pas contenir une autre balise de son propre type, seul le véritable
dernier bloc satisfait l'ancre de fin. Conséquence assumée sur un test : la
chute de la résiliation étant sa formule de clôture (« pour valoir et servir ce
que de droit »), le vocabulaire du test « jamais une page de signatures
seules » a été élargi à cette formule — l'esprit du test (du texte contractuel
au-dessus des cadres, toujours) est inchangé et vérifié sur les quatre actes.

## 4. Les tests disent la nouvelle vérité

- « tient le contrat de référence sur **trois pages au plus** » (deux avant) ;
- « ne termine aucun document à signature sur une page de signatures seules » —
  toujours vrai, chute soudée au bloc final ;
- « ne coupe jamais la clause financière en deux » — toujours vrai ;
- **nouveau** : les intitulés des cadres figurent dans le rendu des quatre
  actes — deux cadres de légalisation pour contrat, avenant et résiliation, un
  seul pour l'attestation, la rangée électronique partout ;
- **nouveau** : le devis et la facture ne portent **aucun** de ces cadres (ils
  ne se légalisent pas ; la facture ne fait plus signer le client, acquis
  v1.3.7).

## Le nouveau bloc final, tel qu'il sort (page 3 du contrat de référence)

```
ARTICLE 7 — ÉLECTION DE DOMICILE            ← la chute du corps, toujours là
Fait à Fès, le …, en deux (02) exemplaires originaux.

┌─ LE DOMICILIATAIRE ─────────┐  ┌─ LE DOMICILIÉ ──────────────┐
│  STE MOBDIE PRIVÉ           │  │  {raison sociale}           │   4,5 cm
│  [cachet de société]        │  │                             │
└─────────────────────────────┘  └─────────────────────────────┘
 Mr … — gérant, agissant…         Signature précédée de « lu et approuvé »

┌─ CADRE RÉSERVÉ À LA ────────┐  ┌─ CADRE RÉSERVÉ À LA ────────┐
│  LÉGALISATION DE LA SIGNATURE│ │  LÉGALISATION DE LA SIGNATURE│  5,5 cm
│  (commune / autorité…)      │  │  (commune / autorité…)      │
│  N° : ………   Date : ………      │  │  N° : ………   Date : ………      │
└─────────────────────────────┘  └─────────────────────────────┘

┌─ ESPACE RÉSERVÉ À LA SIGNATURE ÉLECTRONIQUE… ─────┐ ┌────────┐
│  (loi n° 43-20 — loi n° 53-05)            2,8 cm  │ │ réserve│
└───────────────────────────────────────────────────┘ │   QR   │
                                                      └────────┘
Paraphe domiciliataire : …        Paraphe domicilié : …   ← remontés
        ────────── pied de page (filet rétréci) ──────────
Page 3 / 3                    [ 12 mm vides : bandeau électronique ]
```

## Ce qu'il faut vérifier après déploiement

1. Générer un contrat depuis un dossier réel : trois zones réservées visibles
   (tranche droite, bas de page, coin QR de la dernière page), clause
   financière entière sur une seule page.
2. Générer une attestation : une seule colonne (domiciliataire) en rangées A
   et B, rangée C présente.
3. Un devis et une facture : aucun cadre de légalisation, une page.
