From 87302c742596816394f6720c69830cdd9ecf5a2f Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sat, 3 Oct 2026 19:30:21 +0200 Subject: [PATCH 01/18] =?UTF-8?q?docs(25-6-b):=20fiche=20cr=C3=A9=C3=A9e?= =?UTF-8?q?=20=E2=80=94=20le=20PDF=20d'une=20facture=20est=20fig=C3=A9=20(?= =?UTF-8?q?refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md new file mode 100644 index 00000000..c8b67017 --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -0,0 +1,179 @@ +# Story 25.6-b : Le PDF d'une facture est figé — une pièce émise ne change plus + +Status: ready-for-dev + +**Issue : [#387]**, que cette story **ferme** : la PR porte `closes #387` dans le **titre ET le corps**. Branche +`story/25-6-b-pdf-facture-archive`, partie de `main` (`d7c74f02`). Seconde moitié de la 25-6 (la 25-6-a a traité #388 et +#389). + +## Arbitrages (Guy, 2026-10-03, « ok » aux six recommandations) + +1. **Quand figer** : au **premier rendu après validation** (premier téléchargement OU premier envoi par e-mail) — pas + dans la transaction de validation. Les factures déjà validées sont figées à leur prochain rendu, avec les données du + moment (leurs PDF passés n'ont jamais été conservés). +2. **Langue** : celle du **client** (`resolve_language` : `contact.language`, sinon la langue d'instance), la règle de + l'e-mail. Le téléchargement rend désormais **le document envoyé**. +3. **Stockage** : des **colonnes nullables sur `invoices`**, pas de nouvelle table (une table neuve rendrait toutes les + sauvegardes existantes non importables, `post_restore.rs:20-36`). +4. **Dévalidation** : le PDF figé est **détaché** ; son empreinte va au journal d'audit. (Elle reste refusée pour une + facture envoyée par e-mail — inchangé.) +5. **Facture annulée par un avoir** : son PDF figé, s'il existe, reste servi. +6. **Empreinte** SHA-256 au journal d'audit au gel, **vérifiée à chaque lecture**. + +**Hors périmètre, en CR** : figer les PDF d'avoir et de rappel ([#502]) ; emporter les fichiers dans `.keshbackup` +([#503]). + +## Story + +En tant que **personne qui émet des factures dans Kesh**, +je veux que **le PDF d'une facture, une fois émis, ne change plus** — même si je modifie ensuite mes coordonnées, celles +du client ou la mise en page, +afin de **pouvoir produire, dans cinq ans, la copie exacte de la facture envoyée**, ce qu'un contrôle demande. + +## Les faits, vérifiés dans le code (cartographie du 2026-10-03) + +- **Régénéré à chaque demande** : `GET /api/v1/invoices/{id}/pdf` (`crates/kesh-api/src/routes/invoice_pdf.rs:23-56`) + appelle `invoice_pdf_service::render(…, state.config.locale, …)` ; `render` (`invoice_pdf_service.rs:177-269`) relit + **en direct** la facture, le contact (nom, adresse, `client_number`), le compte bancaire principal, la société, les + textes i18n. Il exige le statut `validated` (`:211-213`). +- **Deux langues** : le téléchargement rend dans la langue de l'**installation** ; l'envoi par e-mail + (`invoice_email.rs:732`, rendu `:785-787`, pièce jointe `:797-801`) dans celle du **client** (`resolve_language`, + `:69-71`). Aujourd'hui, le PDF téléchargé n'est donc pas forcément celui qui a été envoyé. +- **Non reproductible** : `kesh-qrbill` inscrit `now_utc()` comme date de création (`crates/kesh-qrbill/src/pdf.rs:28-35`, + `:78-83`) et printpdf 0.7 un `/ID` aléatoire. Deux rendus identiques n'ont pas le même SHA-256 : **seul un fichier figé + une fois fait preuve**. +- **Le stockage réutilisable** : `crates/kesh-api/src/document_storage.rs` — `store_document(dir, bytes, ext, + original_filename, mime_type) -> io::Result` (`:84-143`), nommage `{sha256}.{ext}`, écriture atomique + (temporaire + `sync_all` + `rename`), refus d'un contenu vide, extension contrôlée ; `read_document(dir, storage_path)` + (`:154-167`) contrôle le chemin et distingue `NotFound` / `InvalidPath` / `Io`. Répertoire : `KESH_DOCUMENTS_DIR` + (`config.rs:253-255`, défaut `/data/documents`). Patron de service HTTP : `serve_document` + (`routes/imported_supplier_invoices.rs:415-445`) — fichier absent → **410** `SourceDocumentGone` (`errors.rs:914`). +- **Cycle de vie** : validation `validate_invoice` (`kesh-db/src/repositories/invoices.rs:1836`, commit `:2205-2208`) — + dans **kesh-db**, alors que le rendu est dans **kesh-api** ; dévalidation `unvalidate` (`invoices.rs:1441`, refus si + envoyée par e-mail `:1529-1541`, `UPDATE … status='draft'` `:1576-1578`, audit `:1602`) ; l'avoir passe la facture en + `cancelled` (`credit_notes.rs:583-586`) — **son PDF n'est plus servi** (`render` refuse). +- **Frontend** : bouton PDF de la fiche facture affiché seulement si `validated` (`invoices/[id]/+page.svelte:756-767`, + `downloadPdf` `:671-675`). +- **Migrations** : 70 sur `main`. ⚠️ La chaîne 25-4 (non mergée) en ajoute quatre, datées `20261001000001`–`…04` : la + migration de cette story est datée **`20261003000001`** pour s'ordonner après elles ; les compteurs (`upgrade_path`, + audit d'idempotence) se recomposeront au merge. + +## Acceptance Criteria + +**AC 1 — Le schéma.** Migration `20261003000001_invoices_frozen_pdf.sql` : `ALTER TABLE invoices ADD COLUMN` +`pdf_storage_path VARCHAR(512) NULL`, `pdf_sha256 CHAR(64) NULL`, `pdf_frozen_at DATETIME(3) NULL`, +`pdf_language CHAR(2) NULL`, et une contrainte **tout-ou-rien** (`CHECK` : les quatre nuls, ou les quatre renseignés avec +`CHAR_LENGTH(pdf_sha256) = 64`). DDL pur, **non breaking** (`ADD COLUMN` nullable — P1/P3, pas de bump de +`kesh_version_min_required`). Squash de test (`crates/kesh-db/test-schema/`) et `test_schema_guard` à jour ; ligne au +tableau `docs/migrations-idempotence-audit.md` et compteurs **recomptés depuis la source** (P5) ; sites positionnels +inspectés (P6, `grep -rn "migrations.len()\|apply_migrations_up_to" crates/`) ; pas d'écriture de données (P7 sans +objet). + +**AC 2 — Figer au premier rendu.** Un service unique `kesh-api` (ex. `issued_invoice_pdf::get_or_freeze`) est le **seul** +chemin vers le PDF d'une facture, pour le téléchargement **et** pour l'e-mail : +- facture **déjà figée** → relit le fichier, **vérifie** son SHA-256 contre `pdf_sha256`, rend ces octets ; +- facture `validated` **non figée** → rend le PDF dans la **langue du client** (`resolve_language`), l'écrit par + `store_document` (`ext = "pdf"`), puis pose les quatre colonnes par un `UPDATE … WHERE id = ? AND company_id = ? AND + pdf_storage_path IS NULL` ; **si zéro ligne** (un rendu concurrent a figé avant), relit et rend le PDF figé par + l'autre — jamais deux documents pour une même facture ; journal d'audit `invoice.pdf_frozen` avec l'empreinte et la + langue ; +- facture `cancelled` **figée** → rend le PDF figé ; `cancelled` **non figée** ou `draft` → refus inchangé + (`InvoiceNotValidated`). + +Le rendu, la validation des préconditions (adresse, banque principale, nombre de lignes) et leurs codes d'erreur sont +**inchangés** : `render` reste la fonction de rendu, le service ne fait que l'encadrer. + +**AC 3 — L'intégrité.** Fichier figé **absent** → **410**, code dédié (`INVOICE_PDF_GONE`, sur le patron de +`SourceDocumentGone`) — jamais une régénération silencieuse, qui produirait un autre document. Empreinte **différente** → +**500** + `tracing::error!` (le fichier a été altéré) — jamais servi. + +**AC 4 — L'e-mail joint le document figé.** `send_invoice_email` passe par le service : la pièce jointe est **octet pour +octet** celle du téléchargement. Le premier envoi d'une facture non figée la fige. Les rappels sont **inchangés** +(document distinct, [#502]). + +**AC 5 — La dévalidation détache.** `unvalidate` remet les quatre colonnes à `NULL` dans sa transaction ; l'audit de +dévalidation porte l'empreinte détachée. Le fichier reste sur le disque (nommé par son empreinte, il peut être partagé ; +le supprimer n'est pas nécessaire). À la revalidation, le premier rendu fige un **nouveau** document. + +**AC 6 — L'écran.** Le DTO de la facture expose `pdfFrozenAt` (et la langue) ; la fiche facture affiche le bouton PDF +pour une facture `validated` **ou** `cancelled` **figée**, et une mention discrète « Document figé le … » quand il l'est. +Libellés dans les 4 locales. + +**AC 7 — Tests.** Chacun aurait échoué avant le patch : +- deux téléchargements successifs rendent **les mêmes octets** (aujourd'hui, non : date et `/ID`) ; +- le PDF est dans la **langue du client** (contact en allemand, installation en français) ; +- l'e-mail joint **les octets du téléchargement** (et le premier envoi fige) ; +- changer l'adresse du client **après** le gel ne change pas le PDF ; +- deux premiers rendus **concurrents** ne figent qu'un document ; +- fichier supprimé → 410 `INVOICE_PDF_GONE` ; fichier altéré → 500, rien servi ; +- dévalidation → colonnes nulles, audit portant l'empreinte ; revalidation → nouveau document ; +- facture annulée par un avoir **après** gel → PDF servi ; **sans** gel → refus ; +- isolation : un PDF figé d'une autre société n'est jamais servi (IDOR) ; +- la contrainte tout-ou-rien rejette un état partiel ; +- Vitest de la fiche : bouton pour `cancelled` figée, absent pour `cancelled` non figée ; mention « figé le » ; +- E2E : télécharger deux fois une facture rend le même fichier ; une facture annulée par un avoir garde son PDF. + +**AC 8 — Le manuel et le CHANGELOG.** `user-manual.tex`, section des factures : le PDF est **figé** au premier +téléchargement ou envoi, dans la langue du client ; il ne suit plus les modifications ultérieures ; une facture +dévalidée puis revalidée reçoit un nouveau document ; une facture annulée garde le sien. Le manuel admin +(`admin-manual.tex`) : `KESH_DOCUMENTS_DIR` porte aussi les PDF figés et **doit être sauvegardé à part** tant que [#503] +n'est pas livrée. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le +téléchargement rend la langue du client). + +## Tasks / Subtasks + +- [ ] **T1 — migration** (AC 1) : SQL, squash, garde de schéma, audit d'idempotence, P6. +- [ ] **T2 — le service de gel** (AC 2, 3) : `kesh-db` (lecture/pose/détachement des colonnes, `UPDATE` conditionnel), + `kesh-api` (service, code d'erreur 410, i18n de l'erreur). +- [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. +- [ ] **T4 — la dévalidation** (AC 5). +- [ ] **T5 — l'écran** (AC 6). +- [ ] **T6 — tests** (AC 7). +- [ ] **T7 — manuels, CHANGELOG** (AC 8). +- [ ] **T8 — gates** : backend complet, frontend complet, **E2E complet**. + +## Dev Notes + +### Ce qu'il ne faut pas faire + +- **Ne jamais régénérer** un PDF figé introuvable : c'est fabriquer une pièce qui n'a pas été émise. 410, et le dire. +- **Ne pas** figer dans la transaction de validation (arbitrage 1) : la validation ne doit pas dépendre du rendu. +- **Ne pas** créer de table (arbitrage 3). +- **Ne pas** toucher aux rappels ni aux avoirs ([#502]). +- **Ne pas** recopier `serve_document` : en extraire la partie commune si besoin (DRY). + +### Limites assumées + +- Une facture validée **avant** cette version est figée à son prochain rendu, avec les données du moment : son PDF + d'origine n'a jamais été conservé. +- Les fichiers figés ne sont pas dans la sauvegarde `.keshbackup` ([#503]) : après une restauration sans + `KESH_DOCUMENTS_DIR`, ils répondent 410. +- Une facture annulée **jamais rendue** n'a pas de PDF (refus inchangé). + +### Modules + +`kesh-db` (migration, colonnes, dévalidation), `kesh-api` (service, routes PDF et e-mail, erreur), `kesh-i18n`, +`frontend` (fiche facture) — **quatre modules de code**, sous le seuil (+ `docs`, `CHANGELOG`). + +### References + +- Issue [#387] ; audit du 2026-08-26 (fiscaliste § II.4) ; CR [#502], [#503]. +- Cartographie du 2026-10-03 (agent d'exploration, lecture seule) — références reprises ci-dessus. + +## Dev Agent Record + +### Agent Model Used + +### Debug Log References + +### Completion Notes List + +### File List + +## Change Log + +- **2026-10-03** — Créée (Guy : « ok » aux six recommandations et aux deux CR, #502 et #503). + +[#387]: https://github.com/guycorbaz/kesh/issues/387 +[#502]: https://github.com/guycorbaz/kesh/issues/502 +[#503]: https://github.com/guycorbaz/kesh/issues/503 From 9048d8e8b98d5a6dbba70ea4d20020a6e072f775 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sat, 3 Oct 2026 19:30:32 +0200 Subject: [PATCH 02/18] =?UTF-8?q?docs(25-6-b):=20registre=20=E2=80=94=20d?= =?UTF-8?q?=C3=A9coupage=20de=20la=2025-6=20report=C3=A9=20sur=20cette=20b?= =?UTF-8?q?ranche=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- _bmad-output/implementation-artifacts/sprint-status.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_bmad-output/implementation-artifacts/sprint-status.yaml b/_bmad-output/implementation-artifacts/sprint-status.yaml index 7f684779..ffd005fe 100644 --- a/_bmad-output/implementation-artifacts/sprint-status.yaml +++ b/_bmad-output/implementation-artifacts/sprint-status.yaml @@ -370,7 +370,9 @@ development_status: 25-5-a-export-souverainete: done # 2026-09-26 **MERGEE (PR #452, #386 fermee) SANS REVUE DE CODE** ; revue a posteriori CLOSE en 3 passes sur `story/25-5-a-revue-code` (4 HIGH P1, 1 HIGH orchestrateur P2 — colonnes manquantes, garde de colonnes —, P3 ciblee test seul) ; gates 2466/2466, E2E 221/8/19 sans regression ; reports #465, #466. # 2026-09-23 **SPECIFIEE et VALIDEE en 1 passe** (0 CRITICAL, 4 HIGH, 3 MEDIUM, 3 LOW, tous corriges). [#386] — issue du DECOUPAGE de la 25-5 (arbitrage de Guy) : #385 (Balance vs Bilan) et #386 n'ont en commun que le mot « etat », et touchent des modules disjoints. ⛔ **Trois faits qui corrigent l'issue** : 21 tables absentes et non 10 ; le trou s'est CREUSE depuis son ecriture (`invoice_settlements`, Epic 24) ; et SIX repositories sur huit n'ont aucune lecture exhaustive — le vrai cout, absent de l'issue. Arbitrage de Guy : l'export CSV ne porte que les donnees COMPTABLES (11 dedans), les backups portent tout ; 10 exclusions AVEC motif ecrit, dont 3 tables de SECRETS. Les justificatifs (fichiers) partent en story separee sur la SAUVEGARDE. ⛔ La vraie livraison est la GARDE D'EXHAUSTIVITE (patron D4-ter + P7), non les 11 exports : trois epics ont rouvert le trou en silence. ⚠️ Pieges releves par la validation : le nombre 19 code en dur a SEPT endroits dont deux `debug_assert_eq!` qui PANIQUENT ; `audit_log` n'a AUCUN dump exhaustif (ses fonctions sont bornees, la route rejette au-dela de 10 000 lignes) ; `csv_sanitize` existe et n'est pas employee par cet export ; deux sites de manuel DEJA faux (un dossier `reports/` invente, un « 38 » pour 39). 25-5-b-balance-solde-ouverture: done # 2026-10-03 CREEE, validee (3 passes), implementee, revue close en 2 passes (P1 1 MED -> P2 0) (partie de main). ouverture + mouvements + cloture, ligne calculee du resultat reporte, closes #385. [#385] — la **Balance des comptes ne concorde pas avec le Bilan**, il manque la colonne « solde d'ouverture » (III.4). Detachee de la 25-5 le 2026-09-23 : voir 25-5-a. 25-5-etats-et-export: split # [#385] [#386] — la **Balance des comptes ne concorde pas avec le Bilan**, il manque la colonne « solde d'ouverture » (III.4) ; et **l'export de souverainete omet les achats, les avoirs, les projets et la piste d'audit** (V.6) — *il promet plus qu'il ne tient*. - 25-6-tableau-de-bord-et-dettes: backlog # [#388] [#389] [#387] (#384 ramenee en 25-4-d le 2026-09-27) — la tuile « Dernieres ecritures » **n'appelle rien** et affiche toujours « Aucune ecriture » (*une tuile qui est un decor*) ; le « solde bancaire » est le solde COMPTABLE, donc faux ; imputer l'ECART d'un reglement partiel (escompte, frais bancaires, perte sur debiteur) ; et **le PDF d'une facture n'est jamais archive**, il est regenere a la volee (IV.9) — *un document reemis n'est pas le document envoye*. + 25-6-tableau-de-bord-et-dettes: split # 2026-10-03 DECOUPEE en 25-6-a (#388 #389) et 25-6-b (#387). [#388] [#389] [#387] (#384 ramenee en 25-4-d le 2026-09-27) — la tuile « Dernieres ecritures » **n'appelle rien** et affiche toujours « Aucune ecriture » (*une tuile qui est un decor*) ; le « solde bancaire » est le solde COMPTABLE, donc faux ; imputer l'ECART d'un reglement partiel (escompte, frais bancaires, perte sur debiteur) ; et **le PDF d'une facture n'est jamais archive**, il est regenere a la volee (IV.9) — *un document reemis n'est pas le document envoye*. + 25-6-a-tableau-de-bord: done # 2026-10-03 — sur sa branche, PR #501 (closes #388 #389). + 25-6-b-pdf-facture-archive: ready-for-dev # 2026-10-03 CREEE (partie de main) ; arbitrages de Guy (gel au premier rendu, langue du client, colonnes sur invoices) ; CR #502 #503. epic-16: done # 2026-08-11 (nuit) MERGÉ — dernière story 16-3b via PR #296 (squash `593bb845`). #152, #144 et #151 fermées. v0.9.0 prête à taguer. # 2026-07-26 KICKOFF (rétro Epic 14, décision D-D ; GO Guy après publication de v0.8.0). Branche `story/16-1-compte-produit-par-ligne` créée sur main `ef6cdf52`. Séquence : 16-1 (#152 socle par ligne) → 16-2 (#144 défaut catalogue) → 16-3 (#151 reliquat PDF). # ÉLU PROCHAIN EPIC — kickoff dès le merge de la PR groupée Epic 14. Reste #144 (compte produit au catalogue) + #152 (compte produit par ligne) ; #151 (récap TVA facture) déjà mergé hors-bande via PR #267 (bb3c8d64, partiel : coord. émetteur / n° client restants). Capte aussi les CR utilisateurs #265/#266/#268. # Facturation avancée (#144/#152/#151) — Epic dédié acté 2026-06-04 # 2026-07-26 ORDRE INVERSÉ au kickoff (#152 avant #144). Motif ground-truth : `invoice_lines` ne # porte AUCUNE colonne de compte ET ne référence même pas `products` (pas de `product_id` — cf. From cd4a327558b072481a9f973dae778af60a435cde Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sat, 3 Oct 2026 19:31:02 +0200 Subject: [PATCH 03/18] docs(25-6-b): prompt de validation P1 (refs #387) Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-validate-prompt-p1.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-validate-prompt-p1.md diff --git a/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p1.md b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p1.md new file mode 100644 index 00000000..a84e73ea --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p1.md @@ -0,0 +1,49 @@ +# Prompt — validation P1, Story 25-6-b (le PDF d'une facture est figé) + +*Versionné le 2026-10-03. Trois lentilles (Sonnet), contexte frais chacune.* + +Dépôt `/home/gcorbaz/devel/kesh`, branche `story/25-6-b-pdf-facture-archive`. **Fiche :** +`_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md` (tête `9048d8e8`). Issue : `gh issue view 387` ; CR +`gh issue view 502`, `503`. Règles : `CLAUDE.md` (en particulier la § *Migration breaking policy*, P1 à P8). La fiche +décrit du travail **à faire**, et ses six **arbitrages** sont rendus par le Project Lead : un finding qui les conteste +doit dire pourquoi ils seraient faux, pas seulement qu'un autre choix existe. + +## Lentilles + +- **A — Justesse et intégrité.** Le mécanisme garantit-il vraiment « un seul document par facture » ? L'ordre « écrire le + fichier, puis `UPDATE … WHERE pdf_storage_path IS NULL` » : que se passe-t-il si l'`UPDATE` échoue après l'écriture, si + deux rendus concurrents écrivent deux fichiers (noms différents, non reproductibles), si le serveur meurt entre les deux ? + Le perdant d'une course relit-il le bon document ? La vérification d'empreinte à la lecture et le 410 sont-ils + cohérents avec un fichier partagé ? La langue figée (`pdf_language`) : que devient-elle si le client change de langue + après le gel ? L'envoi par e-mail d'une facture **déjà figée** dans une autre langue que celle du client actuel ? La + dévalidation qui détache : un PDF déjà **téléchargé** (et transmis hors Kesh) puis détaché — la fiche le dit-elle ? + RBAC : qui peut déclencher le gel (un Consultation qui télécharge le premier fige le document — est-ce un problème) ? +- **B — Faisabilité dans le code.** Chaque référence `fichier:ligne` existe-t-elle et dit-elle ce que la fiche affirme + (`grep -nF`, `sed -n`) ? `document_storage::store_document` est-il appelable depuis le service (synchrone, chemins, + `DocumentMeta`) ? `invoice_pdf_service::render` exige `validated` : comment le service rend-il une facture `cancelled` + figée sans le modifier ? Le DTO de la facture (`routes/invoices.rs`) et les `SELECT` de `kesh-db` qui lisent les + colonnes de `invoices` (inventaire : `grep -rn "FROM invoices" crates/kesh-db/src`) — un `SELECT *` ou un mapping + `FromRow` casserait-il avec quatre colonnes de plus ? La sauvegarde (`crates/kesh-db/src/backup.rs`, `post_restore.rs` + `check_schema_compat`) et l'export de souveraineté (`crates/kesh-api/src/exports/global.rs`) traitent-ils les colonnes + neuves sans changement, ou faut-il les inscrire quelque part ? La migration datée `20261003000001` est-elle compatible + avec les gardes de `crates/kesh-db/tests/migrations_upgrade_path.rs` ? Le périmètre (quatre modules) est-il exact ? +- **C — Complétude et tests.** Chaque AC est-il testable, et le test prévu aurait-il échoué avant le patch ? Cas + manquants : facture validée puis contact **supprimé ou archivé** ; société qui change de langue d'instance ; envoi + e-mail qui **échoue** après le gel (le document est-il figé quand même ?) ; `KESH_DOCUMENTS_DIR` non inscriptible au + moment du gel ; facture à 0 ligne ou limites de `render`. Les E2E prévus sont-ils réalisables (comparer les octets de + deux téléchargements dans Playwright) ? Le manuel : relis `docs/manual/fr/user-manual.tex` (section des factures, PDF, + envoi par e-mail, dévalidation) et `admin-manual.tex` (`KESH_DOCUMENTS_DIR`, sauvegarde) **et les PDF aplatis** + (`pdftotext … | tr '\n' ' ' | tr -s ' '` vers `target/gate-logs/`) : la fiche nomme-t-elle tous les sites que le patch + rendra faux ? Pars du symptôme : `grep -rn "régénér\|PDF de la facture\|langue de l'installation\|KESH_DOCUMENTS_DIR" docs`. + +## Ce que tu rends + +Findings avec sévérité (CRITICAL/HIGH/MEDIUM/LOW), endroit, **preuve** (commande ET sortie, `grep -nF` pour toute +présence ou absence), correction proposée. ⛔ La liste des axes exercés ET non exercés. + +## Interdits + +⛔ N'écris aucun fichier du dépôt hors `target/gate-logs/` ; aucune commande qui écrit dans le dépôt ou dans une base : +`scripts/*` (dont `scripts/prepare-release.sh`), `make`, `latexmk`, `git commit`/`add`/`checkout`, `sqlx`, +`cargo test`/`nextest`, `npm run`, `npx`, `gh issue create`/`comment`/`edit`. Autorisés : lecture, `grep`, `sed`, +`git log`/`show`/`diff`, `gh issue view`, `pdftotext` vers `target/gate-logs/`. From 84cc3c0b1bc7be40d1963df35c50b827bca8358b Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sat, 3 Oct 2026 19:33:35 +0200 Subject: [PATCH 04/18] =?UTF-8?q?docs(25-6-b):=20validation=20P1=20?= =?UTF-8?q?=E2=80=94=20garde=20de=20statut=20au=20gel,=20colonnes=20en=20u?= =?UTF-8?q?ne=20constante,=20sites=20du=20manuel,=20cas=20limites=20(refs?= =?UTF-8?q?=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 105 ++++++++++++++---- 1 file changed, 85 insertions(+), 20 deletions(-) diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index c8b67017..80049da9 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -33,7 +33,7 @@ afin de **pouvoir produire, dans cinq ans, la copie exacte de la facture envoyé ## Les faits, vérifiés dans le code (cartographie du 2026-10-03) - **Régénéré à chaque demande** : `GET /api/v1/invoices/{id}/pdf` (`crates/kesh-api/src/routes/invoice_pdf.rs:23-56`) - appelle `invoice_pdf_service::render(…, state.config.locale, …)` ; `render` (`invoice_pdf_service.rs:177-269`) relit + appelle `invoice_pdf_service::render(…, state.config.locale, …)` ; `render` (`crates/kesh-api/src/routes/invoice_pdf_service.rs:177-269`) relit **en direct** la facture, le contact (nom, adresse, `client_number`), le compte bancaire principal, la société, les textes i18n. Il exige le statut `validated` (`:211-213`). - **Deux langues** : le téléchargement rend dans la langue de l'**installation** ; l'envoi par e-mail @@ -64,19 +64,39 @@ afin de **pouvoir produire, dans cinq ans, la copie exacte de la facture envoyé `pdf_storage_path VARCHAR(512) NULL`, `pdf_sha256 CHAR(64) NULL`, `pdf_frozen_at DATETIME(3) NULL`, `pdf_language CHAR(2) NULL`, et une contrainte **tout-ou-rien** (`CHECK` : les quatre nuls, ou les quatre renseignés avec `CHAR_LENGTH(pdf_sha256) = 64`). DDL pur, **non breaking** (`ADD COLUMN` nullable — P1/P3, pas de bump de -`kesh_version_min_required`). Squash de test (`crates/kesh-db/test-schema/`) et `test_schema_guard` à jour ; ligne au +`kesh_version_min_required`). Squash de test **régénéré par `scripts/regen-test-schema.sh`**, jamais édité à la main +(`crates/kesh-db/test-schema/README.md`) — sans quoi `the_real_migrator_matches_the_migrations_directory` +(`test_schema_guard.rs:497`) rougit ; `migrations_upgrade_path.rs:100-104` (`assert_eq!(total, 70)`, fenêtre positionnelle +`total - 36`, `:38`, `:57`) relevé — **70 → 71** sur cette branche, **74 → 75** si la chaîne 25-4 est mergée d'abord ; ligne au tableau `docs/migrations-idempotence-audit.md` et compteurs **recomptés depuis la source** (P5) ; sites positionnels inspectés (P6, `grep -rn "migrations.len()\|apply_migrations_up_to" crates/`) ; pas d'écriture de données (P7 sans objet). +**AC 1-bis — L'entité et ses colonnes (validation P1, B1).** `Invoice` (`entities/invoice.rs:15`, `FromRow`) gagne les +quatre champs. Ses colonnes sont aujourd'hui **énumérées en dur à six endroits** — `FIND_INVOICE_SCOPED_SQL` +(`invoices.rs:52-56`), les `SELECT` de `invoices.rs:1304-1308` et `:2511-2516`, `INVOICE_COLUMNS` +(`reconciliation.rs:49-51`) — et un oubli échoue **à l'exécution**, pas à la compilation (`invoices.rs:277`). Ces listes +sont ramenées à **une seule constante** de colonnes (DRY), et les littéraux `Invoice { … }` des tests complétés +(`invoice_email.rs:1452`, `exports/csv_tables.rs:1665`, `invoice_pdf_service.rs:633`, `grep -rn "dunning_paused_note:" +crates`). `invoice_snapshot_json` (`invoices.rs:58`) porte l'empreinte. + **AC 2 — Figer au premier rendu.** Un service unique `kesh-api` (ex. `issued_invoice_pdf::get_or_freeze`) est le **seul** chemin vers le PDF d'une facture, pour le téléchargement **et** pour l'e-mail : - facture **déjà figée** → relit le fichier, **vérifie** son SHA-256 contre `pdf_sha256`, rend ces octets ; - facture `validated` **non figée** → rend le PDF dans la **langue du client** (`resolve_language`), l'écrit par - `store_document` (`ext = "pdf"`), puis pose les quatre colonnes par un `UPDATE … WHERE id = ? AND company_id = ? AND - pdf_storage_path IS NULL` ; **si zéro ligne** (un rendu concurrent a figé avant), relit et rend le PDF figé par - l'autre — jamais deux documents pour une même facture ; journal d'audit `invoice.pdf_frozen` avec l'empreinte et la - langue ; + `store_document` (`ext = "pdf"`), puis pose les quatre colonnes par une fonction `kesh-db` qui fait, **dans une seule + transaction**, l'`UPDATE … WHERE id = ? AND company_id = ? AND pdf_storage_path IS NULL AND status = 'validated'` et + l'audit `invoice.pdf_frozen` (empreinte, langue, **acteur** — utilisateur ou clé d'API) — l'empreinte n'existe jamais + sans sa trace. ⚠️ **La garde `status = 'validated'` est indispensable** (validation P1, A1) : sans elle, une dévalidation + intercalée entre le rendu et l'`UPDATE` laisserait un PDF figé sur un brouillon, servi comme émis à la revalidation. + Le gel **ne touche pas `version`** (B2 : sinon une dévalidation ou un avoir lancés depuis une fiche ouverte avant le + téléchargement tomberaient en 409) ; `updated_at` bouge (`ON UPDATE`). `store_document` est synchrone et fait `fsync` : + appelé par `spawn_blocking` (B3) ; +- **si zéro ligne** : relire la facture. Colonnes renseignées (un rendu concurrent a figé) → vérifier l'empreinte et + servir **le document de l'autre**, jamais son propre rendu ; colonnes nulles (la facture a été dévalidée, ou n'est plus + `validated`) → `InvoiceNotValidated`, **sans nouvelle tentative** (A2) ; +- **échec d'écriture du fichier** (`KESH_DOCUMENTS_DIR` non inscriptible) → **500**, rien n'est servi — jamais un rendu + non figé présenté comme le document (C-F6) ; - facture `cancelled` **figée** → rend le PDF figé ; `cancelled` **non figée** ou `draft` → refus inchangé (`InvoiceNotValidated`). @@ -84,17 +104,29 @@ Le rendu, la validation des préconditions (adresse, banque principale, nombre d **inchangés** : `render` reste la fonction de rendu, le service ne fait que l'encadrer. **AC 3 — L'intégrité.** Fichier figé **absent** → **410**, code dédié (`INVOICE_PDF_GONE`, sur le patron de -`SourceDocumentGone`) — jamais une régénération silencieuse, qui produirait un autre document. Empreinte **différente** → +`SourceDocumentGone`) — jamais une régénération silencieuse, qui produirait un autre document. Son message **nomme la +cause et le remède** : le fichier `{empreinte}.pdf` manque sous `KESH_DOCUMENTS_DIR`, à restaurer depuis la sauvegarde de ce +répertoire. Empreinte **différente** → **500** + `tracing::error!` (le fichier a été altéré) — jamais servi. **AC 4 — L'e-mail joint le document figé.** `send_invoice_email` passe par le service : la pièce jointe est **octet pour -octet** celle du téléchargement. Le premier envoi d'une facture non figée la fige. Les rappels sont **inchangés** +octet** celle du téléchargement. Le premier envoi d'une facture non figée la fige — **et le gel survit à un échec SMTP** +(le document a été produit ; la facture n'est simplement pas marquée envoyée, C-F3). Le corps du message reste rédigé dans +la langue **actuelle** du client ; si celle-ci a changé depuis le gel, la pièce jointe reste dans la langue **figée** +(limite assumée, A4). Un client **archivé** : l'envoi reste refusé (`ContactArchived`, inchangé) ; le téléchargement, lui, +fige avec les données du client archivé (C-F5). Les rappels sont **inchangés** (document distinct, [#502]). **AC 5 — La dévalidation détache.** `unvalidate` remet les quatre colonnes à `NULL` dans sa transaction ; l'audit de dévalidation porte l'empreinte détachée. Le fichier reste sur le disque (nommé par son empreinte, il peut être partagé ; le supprimer n'est pas nécessaire). À la revalidation, le premier rendu fige un **nouveau** document. +**AC 5-bis — L'export de souveraineté.** `serialize_invoices_csv` (`exports/csv_tables.rs:495-521`) exporte +`pdf_sha256` et `pdf_frozen_at` (la preuve d'émission appartient aux données de l'utilisateur ; précédent #262), et son +test d'en-tête (`:1696-1705`) est mis à jour. Les fichiers eux-mêmes ne sont pas dans l'export (CSV). La sauvegarde +`.keshbackup` lit les colonnes dans `INFORMATION_SCHEMA` : rien à faire, les colonnes nullables sont couvertes, et une +sauvegarde antérieure reste importable (`check_schema_compat`, colonnes nullables non requises). + **AC 6 — L'écran.** Le DTO de la facture expose `pdfFrozenAt` (et la langue) ; la fiche facture affiche le bouton PDF pour une facture `validated` **ou** `cancelled` **figée**, et une mention discrète « Document figé le … » quand il l'est. Libellés dans les 4 locales. @@ -104,33 +136,61 @@ Libellés dans les 4 locales. - le PDF est dans la **langue du client** (contact en allemand, installation en français) ; - l'e-mail joint **les octets du téléchargement** (et le premier envoi fige) ; - changer l'adresse du client **après** le gel ne change pas le PDF ; -- deux premiers rendus **concurrents** ne figent qu'un document ; +- **l'`UPDATE` conditionnel, de façon déterministe** : colonnes pré-posées par une autre voie, puis pose → zéro ligne, + et le service relit et sert le document déjà posé ; mutation « garde `pdf_storage_path IS NULL` retirée » tuée (un + `tokio::join!` passerait aussi sans la garde, C-F7) ; +- **la garde de statut** : facture dévalidée entre le rendu et la pose (simulée en appelant la pose après la + dévalidation) → zéro ligne, rien de figé sur le brouillon ; mutation « garde `status` retirée » tuée (A1) ; +- le gel **ne change pas `version`** ; +- l'audit `invoice.pdf_frozen` nomme l'acteur, et partage la transaction de la pose ; +- un envoi e-mail en **échec SMTP** laisse la facture figée, et le téléchargement suivant rend les mêmes octets ; +- changer la **langue** du client après le gel ne change pas le PDF ; +- une facture à **10 lignes** : erreur inchangée, rien de figé ; +- `KESH_DOCUMENTS_DIR` non inscriptible → 500, colonnes nulles ; +- l'export CSV porte `pdf_sha256` et `pdf_frozen_at` ; - fichier supprimé → 410 `INVOICE_PDF_GONE` ; fichier altéré → 500, rien servi ; - dévalidation → colonnes nulles, audit portant l'empreinte ; revalidation → nouveau document ; - facture annulée par un avoir **après** gel → PDF servi ; **sans** gel → refus ; - isolation : un PDF figé d'une autre société n'est jamais servi (IDOR) ; - la contrainte tout-ou-rien rejette un état partiel ; - Vitest de la fiche : bouton pour `cancelled` figée, absent pour `cancelled` non figée ; mention « figé le » ; -- E2E : télécharger deux fois une facture rend le même fichier ; une facture annulée par un avoir garde son PDF. - -**AC 8 — Le manuel et le CHANGELOG.** `user-manual.tex`, section des factures : le PDF est **figé** au premier -téléchargement ou envoi, dans la langue du client ; il ne suit plus les modifications ultérieures ; une facture -dévalidée puis revalidée reçoit un nouveau document ; une facture annulée garde le sien. Le manuel admin -(`admin-manual.tex`) : `KESH_DOCUMENTS_DIR` porte aussi les PDF figés et **doit être sauvegardé à part** tant que [#503] -n'est pas livrée. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le +- E2E (`authedApiContext`, `pdfRes.body()`) : télécharger deux fois une facture rend le même fichier ; une facture + annulée par un avoir garde son PDF. Chaque test crée **sa propre** facture : les fichiers figés persistent sous + `/tmp/kesh-e2e/documents` d'une exécution à l'autre. + +**AC 8 — Le manuel et le CHANGELOG.** Sites que le patch rend faux, **nommés** (validation P1, C-F2) — +`grep -nE "génère le PDF|PDF QR Bill généré|téléchargeable depuis|PDF joint|ne laisse aucune trace" docs/manual/fr/user-manual.tex` : +- `user-manual.tex:769` (« À la validation, Kesh … génère le PDF QR Bill ») et `:780` (« Validée : … PDF QR Bill + généré ») : le PDF est **figé au premier téléchargement ou envoi** ; +- `:855` (« téléchargeable depuis la facture validée … pour l'archiver ») : figé, identique d'un téléchargement à + l'autre, et servi aussi pour une facture **annulée** qui l'a été ; un PDF figé avant l'avoir ne porte pas de mention + d'annulation (A8) ; +- `:928` (« Langue de correspondance … détermine la langue de l'e-mail et du PDF joint ») : aussi du téléchargement, et + figée au premier rendu ; +- `:1136` (« un PDF téléchargé puis transmis à la main ne laisse aucune trace ») : il laisse désormais une trace (audit + `invoice.pdf_frozen`, empreinte) ; la dévalidation reste possible tant que la facture n'a pas été envoyée **par Kesh**, + et détache le document — un PDF déjà transmis par vous reste valable mais n'est plus celui que Kesh conserve (A7) ; +- `:1011` et suivantes : le **rappel**, lui, est toujours régénéré ([#502]). + +Manuel admin : `admin-manual.tex:741`, `:790` (`KESH_DOCUMENTS_HOST_DIR`), `:811` et la § 5.1.1 — `KESH_DOCUMENTS_DIR` +porte aussi les **PDF de factures émises**, pièces à conserver ; il **doit être sauvegardé à part** tant que [#503] n'est +pas livrée ; un 410 `INVOICE_PDF_GONE` se répare en restaurant le fichier `{empreinte}.pdf` dans ce répertoire. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le téléchargement rend la langue du client). ## Tasks / Subtasks - [ ] **T1 — migration** (AC 1) : SQL, squash, garde de schéma, audit d'idempotence, P6. -- [ ] **T2 — le service de gel** (AC 2, 3) : `kesh-db` (lecture/pose/détachement des colonnes, `UPDATE` conditionnel), - `kesh-api` (service, code d'erreur 410, i18n de l'erreur). +- [ ] **T2 — le service de gel** (AC 1-bis, 2, 3) : `kesh-db` (entité `Invoice` et **constante unique** de colonnes, + pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`, code d'erreur + 410, i18n de l'erreur). - [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. - [ ] **T4 — la dévalidation** (AC 5). - [ ] **T5 — l'écran** (AC 6). - [ ] **T6 — tests** (AC 7). +- [ ] **T6-bis — export de souveraineté** (AC 5-bis). - [ ] **T7 — manuels, CHANGELOG** (AC 8). -- [ ] **T8 — gates** : backend complet, frontend complet, **E2E complet**. +- [ ] **T8 — gates** : backend complet, frontend complet, **E2E complet** — le backend E2E doit avoir + `KESH_DOCUMENTS_DIR` inscriptible (`docs/testing.md:167`, `:197`) : sans lui, tout téléchargement de PDF répondra 500. ## Dev Notes @@ -149,10 +209,15 @@ téléchargement rend la langue du client). - Les fichiers figés ne sont pas dans la sauvegarde `.keshbackup` ([#503]) : après une restauration sans `KESH_DOCUMENTS_DIR`, ils répondent 410. - Une facture annulée **jamais rendue** n'a pas de PDF (refus inchangé). +- **Fichiers orphelins** : deux premiers rendus concurrents, ou un arrêt entre l'écriture et la pose, laissent un fichier + jamais référencé (les rendus ne sont pas reproductibles, donc nommés différemment). Inoffensif — nommé par son + empreinte, jamais servi — et non nettoyé. +- **Langue** : le corps d'un e-mail suit la langue actuelle du client, la pièce jointe la langue figée. ### Modules -`kesh-db` (migration, colonnes, dévalidation), `kesh-api` (service, routes PDF et e-mail, erreur), `kesh-i18n`, +`kesh-db` (migration, entité et colonnes, pose et dévalidation), `kesh-api` (service, routes PDF et e-mail, erreur, +export CSV), `kesh-i18n`, `frontend` (fiche facture) — **quatre modules de code**, sous le seuil (+ `docs`, `CHANGELOG`). ### References From 5ed8d6324ef400ae887239bd8c7b1fb2e0c4ebdc Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sun, 4 Oct 2026 12:10:16 +0200 Subject: [PATCH 05/18] =?UTF-8?q?docs(25-6-b):=20arbitrages=20de=20Guy=20?= =?UTF-8?q?=E2=80=94=20refiger=20(Admin)=20et=20gel=20par=20tout=20r=C3=B4?= =?UTF-8?q?le=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 80049da9..045221a4 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -20,6 +20,14 @@ Status: ready-for-dev 5. **Facture annulée par un avoir** : son PDF figé, s'il existe, reste servi. 6. **Empreinte** SHA-256 au journal d'audit au gel, **vérifiée à chaque lecture**. +7. **(2026-10-04, validation P1)** **Refiger, geste d'administrateur** : un PDF figé dont le fichier a disparu (le cas + de toute restauration tant que [#503] n'est pas livrée) peut être **refigé** par un administrateur — nouveau document, + ancienne et nouvelle empreinte au journal d'audit. Sans ce geste, une facture envoyée dont le fichier manque serait + sans issue : la dévalidation est refusée, et rien ne refige. +8. **(2026-10-04, validation P1)** **Le gel par tout rôle** : le premier téléchargement fige, que l'acteur soit + Consultation ou une clé d'API en lecture — une pièce sortie de Kesh est figée, qui que ce soit qui l'ait fait sortir ; + l'audit nomme l'acteur. + **Hors périmètre, en CR** : figer les PDF d'avoir et de rappel ([#502]) ; emporter les fichiers dans `.keshbackup` ([#503]). @@ -109,6 +117,21 @@ cause et le remède** : le fichier `{empreinte}.pdf` manque sous `KESH_DOCUMENTS répertoire. Empreinte **différente** → **500** + `tracing::error!` (le fichier a été altéré) — jamais servi. +**AC 3-bis — Refiger (arbitrage 7).** `POST /api/v1/invoices/{id}/pdf/refreeze`, **Administrateur seulement** (bloc des +routes d'administration, donc refusé aux clés d'API — `require_not_pat`), **sans corps** : +- **accepté seulement si** la facture est figée **et** que son fichier est **absent** (le cas du 410) ; fichier présent → + **409** `INVOICE_PDF_PRESENT` (on ne remplace pas un document qui existe) ; facture non figée → **409** + `INVOICE_PDF_NOT_FROZEN` (le prochain rendu la figera) ; fichier présent mais **altéré** → refusé aussi (le 500 + d'intégrité se diagnostique, il ne se recouvre pas d'un nouveau document) ; +- rend un nouveau document par le même chemin que le gel (langue du client **actuelle**, données du moment), l'écrit, + et remplace les quatre colonnes **dans une transaction** avec l'audit `invoice.pdf_refrozen` portant l'**ancienne** et + la **nouvelle** empreinte et l'acteur ; garde `pdf_sha256 = ` sur l'`UPDATE` (deux refigeages + concurrents : un seul réussit, l'autre reçoit 409) ; +- une facture **`cancelled`** dont le fichier manque **ne peut pas** être refigée — `render` refuse ce statut : limite + assumée, écrite au manuel ; +- à l'écran, la fiche facture d'un administrateur affiche, quand le téléchargement répond 410, un bouton **« Refiger le + document »** avec une confirmation qui dit ce que le geste fait (un nouveau document, pas l'original ; tracé). + **AC 4 — L'e-mail joint le document figé.** `send_invoice_email` passe par le service : la pièce jointe est **octet pour octet** celle du téléchargement. Le premier envoi d'une facture non figée la fige — **et le gel survit à un échec SMTP** (le document a été produit ; la facture n'est simplement pas marquée envoyée, C-F3). Le corps du message reste rédigé dans @@ -154,6 +177,10 @@ Libellés dans les 4 locales. - isolation : un PDF figé d'une autre société n'est jamais servi (IDOR) ; - la contrainte tout-ou-rien rejette un état partiel ; - Vitest de la fiche : bouton pour `cancelled` figée, absent pour `cancelled` non figée ; mention « figé le » ; +- **refiger** : fichier supprimé → 410 → refigeage par un Admin → 200, nouveau document, audit avec les deux + empreintes ; refusé pour un Comptable (403), une clé d'API, une facture non figée (409), un fichier présent (409), une + facture `cancelled` ; deux refigeages concurrents → un seul ; +- **le gel par un rôle Consultation** : le premier téléchargement d'un Consultation fige, et l'audit le nomme ; - E2E (`authedApiContext`, `pdfRes.body()`) : télécharger deux fois une facture rend le même fichier ; une facture annulée par un avoir garde son PDF. Chaque test crée **sa propre** facture : les fichiers figés persistent sous `/tmp/kesh-e2e/documents` d'une exécution à l'autre. @@ -174,7 +201,9 @@ Libellés dans les 4 locales. Manuel admin : `admin-manual.tex:741`, `:790` (`KESH_DOCUMENTS_HOST_DIR`), `:811` et la § 5.1.1 — `KESH_DOCUMENTS_DIR` porte aussi les **PDF de factures émises**, pièces à conserver ; il **doit être sauvegardé à part** tant que [#503] n'est -pas livrée ; un 410 `INVOICE_PDF_GONE` se répare en restaurant le fichier `{empreinte}.pdf` dans ce répertoire. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le +pas livrée ; un 410 `INVOICE_PDF_GONE` se répare **de préférence** en restaurant le fichier `{empreinte}.pdf` dans ce répertoire — +c'est le seul moyen de retrouver le document **original** ; à défaut, un administrateur peut **refiger** la facture +(nouveau document, réémission tracée au journal d'audit) — sauf une facture annulée. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le téléchargement rend la langue du client). ## Tasks / Subtasks @@ -184,6 +213,7 @@ téléchargement rend la langue du client). pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`, code d'erreur 410, i18n de l'erreur). - [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. +- [ ] **T3-bis — refiger** (AC 3-bis) : route d'administration, deux codes 409, audit, bouton et confirmation à l'écran. - [ ] **T4 — la dévalidation** (AC 5). - [ ] **T5 — l'écran** (AC 6). - [ ] **T6 — tests** (AC 7). @@ -237,6 +267,29 @@ export CSV), `kesh-i18n`, ## Change Log +- **2026-10-04** — Validation P1 (Sonnet ×3, prompt `25-6-b-validate-prompt-p1.md`) : **4 HIGH, ~15 MED**, LOW. + - **HIGH retenus** : + - **A1** : un gel pouvait atterrir sur un **brouillon**, si une dévalidation s'intercalait entre le rendu et la pose. + La garde `status = 'validated'` est ajoutée à l'`UPDATE` ; + - **B1** : les colonnes d'`Invoice`, écrites en dur à six endroits, sont ramenées à une constante unique ; + - **C-F1** : le 410 sur un fichier figé perdu était une impasse. Le geste « refiger » a été soumis à Guy et retenu + (arbitrage 7) ; + - **C-F2** : six sites du manuel sont désormais nommés. + - **MEDIUM retenus** : + - le cas « zéro ligne » défini ; + - l'audit dans la transaction de la pose, avec l'acteur ; + - le gel par Consultation, soumis à Guy et accepté (arbitrage 8) ; + - le gel ne touche pas `version` ; + - `spawn_blocking` ; + - le squash régénéré par script, et les compteurs de `migrations_upgrade_path` ; + - l'export de souveraineté ; + - l'échec SMTP après le gel, et le changement de langue ; + - le client archivé ; + - l'écriture de fichier impossible ; + - un test déterministe de l'`UPDATE` conditionnel ; + - le PDF transmis hors de Kesh, puis détaché. + - **LOW** : les références (répertoire `routes/`), l'E2E et `KESH_DOCUMENTS_DIR`, la facture à 10 lignes, les fichiers + orphelins. - **2026-10-03** — Créée (Guy : « ok » aux six recommandations et aux deux CR, #502 et #503). [#387]: https://github.com/guycorbaz/kesh/issues/387 From ac125b292b973b83ebada7869aa0aa1daf6f0f87 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sun, 4 Oct 2026 12:10:38 +0200 Subject: [PATCH 06/18] docs(25-6-b): prompt de validation P2 (refs #387) Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-validate-prompt-p2.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-validate-prompt-p2.md diff --git a/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p2.md b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p2.md new file mode 100644 index 00000000..f124613b --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p2.md @@ -0,0 +1,46 @@ +# Prompt — validation P2, Story 25-6-b (le PDF d'une facture est figé) + +*Versionné le 2026-10-04. Une passe (Opus), contexte frais, les trois lentilles. Trend : P1 4 HIGH / ~15 MED (Sonnet ×3). +La remédiation ajoute une route (refiger) et réécrit plusieurs AC : protocole complet, attention particulière au diff.* + +Dépôt `/home/gcorbaz/devel/kesh`, branche `story/25-6-b-pdf-facture-archive`. **Fiche :** +`_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md` (tête `5ed8d632`). Remédiation de P1 : +`git diff cd4a3275 5ed8d632`. Issue `gh issue view 387` ; CR `502`, `503`. Règles : `CLAUDE.md` (§ *Migration breaking +policy* P1 à P8 ; § *Pattern batch* sans objet). Les **huit arbitrages** sont rendus par Guy : un finding qui en conteste +un doit dire pourquoi il serait faux, pas qu'un autre choix existe. + +## Ce que tu vérifies + +1. **La remédiation de P1** : + - la garde `status = 'validated'` sur la pose : ferme-t-elle vraiment la course gel/dévalidation (lis `unvalidate`, + `crates/kesh-db/src/repositories/invoices.rs:1441-1610`, et l'avoir, `credit_notes.rs:583`) ? Et la course + gel/**avoir** — un avoir qui passe la facture en `cancelled` entre le rendu et la pose : le document n'est-il alors + jamais figé, et est-ce le bon comportement ? + - **refiger (AC 3-bis)** : la route dans le bloc d'administration (`crates/kesh-api/src/lib.rs`, marqueur + `KESH-ADMIN-ROUTES-END`, `require_admin_role`, `require_not_pat`) ; ses conditions (fichier absent / présent / + altéré / non figé / `cancelled`) sont-elles complètes et sans contradiction avec AC 2, AC 3 ? La garde + `pdf_sha256 = ` ; le registre des routes d'audit (`crates/kesh-api/tests/audit_route_registry.rs`) impose-t-il + d'y inscrire la route ? Le refigeage d'une facture dont le **client a changé de langue** ; + - l'audit dans la transaction de la pose (`audit_log::insert_in_tx`) et l'acteur « clé d'API » : l'audit sait-il + nommer une clé d'API aujourd'hui (`grep -rn "api_key_id" crates/kesh-db/src/repositories/audit_log.rs`) ? + - la constante unique de colonnes (AC 1-bis) : réalisable sans casser `INVOICE_COLUMNS` de `reconciliation.rs`, qui + préfixe peut-être par un alias de table ? + - l'export CSV (AC 5-bis) et son test d'en-tête. +2. **Cohérence interne** : la fiche dit-elle la même chose partout (arbitrages, AC, tâches, limites, *Modules*, Change + Log) ? En particulier « jamais régénérer » (Dev Notes) contre « refiger » (arbitrage 7). +3. **Le manuel** : les sites nommés à l'AC 8 existent-ils et disent-ils ce que la fiche affirme (`sed -n` sur + `docs/manual/fr/user-manual.tex` et `admin-manual.tex`) ? En manque-t-il (`grep -rn "PDF" docs/manual/fr/user-manual.tex`) ? +4. **Périmètre** : toujours quatre modules de code ? Le signal de découpage (§ *Règle de splitting préventif*) est-il + atteint par l'ajout de la route ? + +## Ce que tu rends + +Findings avec sévérité (CRITICAL/HIGH/MEDIUM/LOW), endroit, **preuve** (commande ET sortie, `grep -nF` pour toute +présence ou absence), correction proposée. ⛔ La liste des axes exercés ET non exercés. + +## Interdits + +⛔ N'écris aucun fichier du dépôt hors `target/gate-logs/` ; aucune commande qui écrit dans le dépôt ou dans une base : +`scripts/*` (dont `scripts/prepare-release.sh`), `make`, `latexmk`, `git commit`/`add`/`checkout`, `sqlx`, +`cargo test`/`nextest`, `npm run`, `npx`, `gh issue create`/`comment`/`edit`. Autorisés : lecture, `grep`, `sed`, +`git log`/`show`/`diff`, `gh issue view`, `pdftotext` vers `target/gate-logs/`. From 2d858b0b0c4d309c4b9ac243819df0ef96700fc0 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Sun, 4 Oct 2026 12:18:34 +0200 Subject: [PATCH 07/18] =?UTF-8?q?docs(25-6-b):=20validation=20P2=20?= =?UTF-8?q?=E2=80=94=20garde=20de=20version=20au=20gel,=20chapitre=20sauve?= =?UTF-8?q?garde=20du=20manuel=20admin,=20gardes=20structurelles=20(refs?= =?UTF-8?q?=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 112 ++++++++++++++---- 1 file changed, 91 insertions(+), 21 deletions(-) diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 045221a4..991d687e 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -6,7 +6,7 @@ Status: ready-for-dev `story/25-6-b-pdf-facture-archive`, partie de `main` (`d7c74f02`). Seconde moitié de la 25-6 (la 25-6-a a traité #388 et #389). -## Arbitrages (Guy, 2026-10-03, « ok » aux six recommandations) +## Arbitrages (Guy — 1 à 6 le 2026-10-03, 7 et 8 le 2026-10-04) 1. **Quand figer** : au **premier rendu après validation** (premier téléchargement OU premier envoi par e-mail) — pas dans la transaction de validation. Les factures déjà validées sont figées à leur prochain rendu, avec les données du @@ -62,6 +62,11 @@ afin de **pouvoir produire, dans cinq ans, la copie exacte de la facture envoyé `cancelled` (`credit_notes.rs:583-586`) — **son PDF n'est plus servi** (`render` refuse). - **Frontend** : bouton PDF de la fiche facture affiché seulement si `validated` (`invoices/[id]/+page.svelte:756-767`, `downloadPdf` `:671-675`). +- ⚠️ **La chaîne 25-4 (non mergée) touche les mêmes lignes** (validation P2, M6) : elle ajoute `rounding_amount` à + `Invoice`, à `INVOICE_COLUMNS`, à `FIND_INVOICE_SCOPED_SQL`, aux `SELECT` en dur de `invoices.rs`, à l'en-tête CSV et + à son test, et modifie l'`UPDATE` de `unvalidate`. Conflits textuels attendus au merge ; la constante unique de + colonnes (AC 1-bis) inclura `rounding_amount` si la chaîne est mergée la première, et les références de lignes + ci-dessous se décaleront. - **Migrations** : 70 sur `main`. ⚠️ La chaîne 25-4 (non mergée) en ajoute quatre, datées `20261001000001`–`…04` : la migration de cette story est datée **`20261003000001`** pour s'ordonner après elles ; les compteurs (`upgrade_path`, audit d'idempotence) se recomposeront au merge. @@ -81,10 +86,11 @@ inspectés (P6, `grep -rn "migrations.len()\|apply_migrations_up_to" crates/`) ; objet). **AC 1-bis — L'entité et ses colonnes (validation P1, B1).** `Invoice` (`entities/invoice.rs:15`, `FromRow`) gagne les -quatre champs. Ses colonnes sont aujourd'hui **énumérées en dur à six endroits** — `FIND_INVOICE_SCOPED_SQL` +quatre champs. Ses colonnes sont aujourd'hui **énumérées en dur** — `FIND_INVOICE_SCOPED_SQL` (`invoices.rs:52-56`), les `SELECT` de `invoices.rs:1304-1308` et `:2511-2516`, `INVOICE_COLUMNS` -(`reconciliation.rs:49-51`) — et un oubli échoue **à l'exécution**, pas à la compilation (`invoices.rs:277`). Ces listes -sont ramenées à **une seule constante** de colonnes (DRY), et les littéraux `Invoice { … }` des tests complétés +(`reconciliation.rs:49-51`) — et un oubli échoue **à l'exécution**, pas à la compilation (`invoices.rs:277`). Ces listes — +**quatre** sites : `invoices.rs:54`, `:1306`, `:2513`, `reconciliation.rs:50` (`grep -rnE "emailed_at, *emailed_to" crates`) +— sont ramenées à **une seule constante** de colonnes (DRY), et les littéraux `Invoice { … }` des tests complétés (`invoice_email.rs:1452`, `exports/csv_tables.rs:1665`, `invoice_pdf_service.rs:633`, `grep -rn "dunning_paused_note:" crates`). `invoice_snapshot_json` (`invoices.rs:58`) porte l'empreinte. @@ -93,16 +99,22 @@ chemin vers le PDF d'une facture, pour le téléchargement **et** pour l'e-mail - facture **déjà figée** → relit le fichier, **vérifie** son SHA-256 contre `pdf_sha256`, rend ces octets ; - facture `validated` **non figée** → rend le PDF dans la **langue du client** (`resolve_language`), l'écrit par `store_document` (`ext = "pdf"`), puis pose les quatre colonnes par une fonction `kesh-db` qui fait, **dans une seule - transaction**, l'`UPDATE … WHERE id = ? AND company_id = ? AND pdf_storage_path IS NULL AND status = 'validated'` et + transaction**, l'`UPDATE … WHERE id = ? AND company_id = ? AND pdf_storage_path IS NULL AND status = 'validated' AND version = ?` + (la **version lue au rendu** — `render` en expose une variante qui la rend, validation P2, M1) et l'audit `invoice.pdf_frozen` (empreinte, langue, **acteur** — utilisateur ou clé d'API) — l'empreinte n'existe jamais sans sa trace. ⚠️ **La garde `status = 'validated'` est indispensable** (validation P1, A1) : sans elle, une dévalidation intercalée entre le rendu et l'`UPDATE` laisserait un PDF figé sur un brouillon, servi comme émis à la revalidation. + ⚠️ **Et la garde `version` aussi** : une séquence dévalidation → modification → revalidation tenant dans la fenêtre + passerait la seule garde de statut et figerait un PDF rendu sur les **anciennes** lignes (le numéro est conservé). Le gel **ne touche pas `version`** (B2 : sinon une dévalidation ou un avoir lancés depuis une fiche ouverte avant le téléchargement tomberaient en 409) ; `updated_at` bouge (`ON UPDATE`). `store_document` est synchrone et fait `fsync` : appelé par `spawn_blocking` (B3) ; - **si zéro ligne** : relire la facture. Colonnes renseignées (un rendu concurrent a figé) → vérifier l'empreinte et - servir **le document de l'autre**, jamais son propre rendu ; colonnes nulles (la facture a été dévalidée, ou n'est plus - `validated`) → `InvoiceNotValidated`, **sans nouvelle tentative** (A2) ; + servir **le document de l'autre**, jamais son propre rendu ; colonnes nulles et facture plus `validated` (dévalidée, ou + **annulée par un avoir** intercalé) → `InvoiceNotValidated` (ou `InvoiceCancelled` pour une annulée — un code qui dit + vrai, P2 L5), **sans nouvelle tentative** ; colonnes nulles et facture **`validated` à une autre version** (elle a + changé pendant le rendu) → **une seule** nouvelle tentative (rendu + pose), puis **409** `INVOICE_CHANGED` si la + course se répète ; - **échec d'écriture du fichier** (`KESH_DOCUMENTS_DIR` non inscriptible) → **500**, rien n'est servi — jamais un rendu non figé présenté comme le document (C-F6) ; - facture `cancelled` **figée** → rend le PDF figé ; `cancelled` **non figée** ou `draft` → refus inchangé @@ -121,16 +133,25 @@ répertoire. Empreinte **différente** → routes d'administration, donc refusé aux clés d'API — `require_not_pat`), **sans corps** : - **accepté seulement si** la facture est figée **et** que son fichier est **absent** (le cas du 410) ; fichier présent → **409** `INVOICE_PDF_PRESENT` (on ne remplace pas un document qui existe) ; facture non figée → **409** - `INVOICE_PDF_NOT_FROZEN` (le prochain rendu la figera) ; fichier présent mais **altéré** → refusé aussi (le 500 - d'intégrité se diagnostique, il ne se recouvre pas d'un nouveau document) ; + `INVOICE_PDF_NOT_FROZEN` (le prochain rendu la figera) ; fichier présent mais **altéré** → **409** + `INVOICE_PDF_INTEGRITY` (le 500 d'intégrité se diagnostique, il ne se recouvre pas d'un nouveau document) ; le manuel + admin dit la procédure : restaurer `{empreinte}.pdf` depuis la sauvegarde ; à défaut, **écarter** le fichier altéré + (le déplacer hors du répertoire), ce qui ramène au cas 410, puis refiger (P2, M7) ; - rend un nouveau document par le même chemin que le gel (langue du client **actuelle**, données du moment), l'écrit, et remplace les quatre colonnes **dans une transaction** avec l'audit `invoice.pdf_refrozen` portant l'**ancienne** et - la **nouvelle** empreinte et l'acteur ; garde `pdf_sha256 = ` sur l'`UPDATE` (deux refigeages - concurrents : un seul réussit, l'autre reçoit 409) ; + la **nouvelle** empreinte et l'acteur ; gardes `pdf_sha256 = ` **et `status = 'validated'`** sur + l'`UPDATE` (deux refigeages concurrents : un seul réussit ; un avoir intercalé : refusé — P2 L4) ; - une facture **`cancelled`** dont le fichier manque **ne peut pas** être refigée — `render` refuse ce statut : limite assumée, écrite au manuel ; - à l'écran, la fiche facture d'un administrateur affiche, quand le téléchargement répond 410, un bouton **« Refiger le - document »** avec une confirmation qui dit ce que le geste fait (un nouveau document, pas l'original ; tracé). + document »** avec une confirmation qui dit ce que le geste fait — un nouveau document, **pas l'original**, tracé — et + qui **conseille de restaurer d'abord** le fichier (un volume de documents mal monté après une mise à jour produirait + des 410 en série ; refiger remplacerait définitivement des originaux qui existent encore ailleurs, P2 L6) ; +- ⚠️ **gardes structurelles** que la route fait rougir (P2, M3) : le compte des constructeurs du bloc d'administration + (`lib.rs:186`, **25 → 26**) et `admin_pat_denied_e2e.rs` (`:46`, `:757`, `ADMIN_COUPLES`) ; le registre des routes + d'audit (`audit_route_registry.rs`, `LIB_ROUTES` : `("post", "…refreeze…", Traced)`) ; le registre des libellés + (`audit_label_registry.rs` : `invoice.pdf_frozen` et `invoice.pdf_refrozen` dans `audit_labels::ACTIONS`, libellé dans + les 4 `.ftl` ; si l'action est un paramètre d'une fonction commune, le site entre dans `SITES_INDIRECTS`). **AC 4 — L'e-mail joint le document figé.** `send_invoice_email` passe par le service : la pièce jointe est **octet pour octet** celle du téléchargement. Le premier envoi d'une facture non figée la fige — **et le gel survit à un échec SMTP** @@ -145,7 +166,9 @@ dévalidation porte l'empreinte détachée. Le fichier reste sur le disque (nomm le supprimer n'est pas nécessaire). À la revalidation, le premier rendu fige un **nouveau** document. **AC 5-bis — L'export de souveraineté.** `serialize_invoices_csv` (`exports/csv_tables.rs:495-521`) exporte -`pdf_sha256` et `pdf_frozen_at` (la preuve d'émission appartient aux données de l'utilisateur ; précédent #262), et son +`pdf_sha256`, `pdf_frozen_at` **et `pdf_language`** (un fait du document émis) ; `pdf_storage_path` est **exempté +explicitement**, dérivable de l'empreinte, et le doc-comment de la garde d'en-tête (`:1690-1691`, « exactement les +colonnes de la struct `Invoice` ») est réécrit avec cette exception (P2, M5) (la preuve d'émission appartient aux données de l'utilisateur ; précédent #262), et son test d'en-tête (`:1696-1705`) est mis à jour. Les fichiers eux-mêmes ne sont pas dans l'export (CSV). La sauvegarde `.keshbackup` lit les colonnes dans `INFORMATION_SCHEMA` : rien à faire, les colonnes nullables sont couvertes, et une sauvegarde antérieure reste importable (`check_schema_compat`, colonnes nullables non requises). @@ -185,10 +208,14 @@ Libellés dans les 4 locales. annulée par un avoir garde son PDF. Chaque test crée **sa propre** facture : les fichiers figés persistent sous `/tmp/kesh-e2e/documents` d'une exécution à l'autre. -**AC 8 — Le manuel et le CHANGELOG.** Sites que le patch rend faux, **nommés** (validation P1, C-F2) — +**AC 8 — Le manuel et le CHANGELOG.** Sites que le patch rend faux, **nommés** (validation P1, C-F2 ; P2, H1 et M2) — `grep -nE "génère le PDF|PDF QR Bill généré|téléchargeable depuis|PDF joint|ne laisse aucune trace" docs/manual/fr/user-manual.tex` : -- `user-manual.tex:769` (« À la validation, Kesh … génère le PDF QR Bill ») et `:780` (« Validée : … PDF QR Bill - généré ») : le PDF est **figé au premier téléchargement ou envoi** ; +- `user-manual.tex:769` (« À la validation, Kesh … génère le PDF QR Bill »), `:780` (« Validée : … PDF QR Bill + généré ») et `:846` (« À la validation, Kesh génère un PDF conforme… ») : le PDF est **figé au premier téléchargement + ou envoi** ; +- `:789`, `:797` (coordonnées de l'émetteur « apparaissent sur le PDF ») et `:815` (le numéro de client « apparaît + ensuite sur toutes les factures ») : **sur les factures non encore figées** — un PDF figé ne change plus ; +- le bouton **« Refiger le document »** et le message du 410, visibles à l'écran (côté administrateur) ; - `:855` (« téléchargeable depuis la facture validée … pour l'archiver ») : figé, identique d'un téléchargement à l'autre, et servi aussi pour une facture **annulée** qui l'a été ; un PDF figé avant l'avoir ne porte pas de mention d'annulation (A8) ; @@ -201,7 +228,18 @@ Libellés dans les 4 locales. Manuel admin : `admin-manual.tex:741`, `:790` (`KESH_DOCUMENTS_HOST_DIR`), `:811` et la § 5.1.1 — `KESH_DOCUMENTS_DIR` porte aussi les **PDF de factures émises**, pièces à conserver ; il **doit être sauvegardé à part** tant que [#503] n'est -pas livrée ; un 410 `INVOICE_PDF_GONE` se répare **de préférence** en restaurant le fichier `{empreinte}.pdf` dans ce répertoire — +pas livrée. ⚠️ **Le chapitre « Sauvegarde et restauration » le rend faux, et c'est le site le plus cher** (P2, H1) — un +administrateur qui suit la procédure documentée perd tous les PDF émis à la première restauration : +- `:1376-1381` (« Stratégie recommandée » : `mariadb-dump`, volume `kesh_db_data`, export ZIP) : **ajouter + `KESH_DOCUMENTS_DIR`** ; +- `:1444` (restauration) et `:1480` et suivantes (Hyper Backup) : **sauvegarder et restaurer le volume des documents avec + la base** ; +- `:1583` (le `.keshbackup` contient « toutes les données d'installation ») et le tableau `:1648-1654` (« Installation + Kesh complète ») : **sauf les fichiers** ([#503]) ; +- `:1353` (rôle Consultation, « aucune mutation ») et `:1774` (portée `read` d'une clé d'API, « GET/HEAD/OPTIONS ») : un + premier téléchargement **fige** le document et écrit au journal d'audit (arbitrage 8). + +Pour la suite : un 410 `INVOICE_PDF_GONE` se répare **de préférence** en restaurant le fichier `{empreinte}.pdf` dans ce répertoire — c'est le seul moyen de retrouver le document **original** ; à défaut, un administrateur peut **refiger** la facture (nouveau document, réémission tracée au journal d'audit) — sauf une facture annulée. PDF régénérés, contrôlés **aplatis**. CHANGELOG `[0.12.1]` : `Fixed` (#387), `Changed` (le téléchargement rend la langue du client). @@ -213,7 +251,8 @@ téléchargement rend la langue du client). pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`, code d'erreur 410, i18n de l'erreur). - [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. -- [ ] **T3-bis — refiger** (AC 3-bis) : route d'administration, deux codes 409, audit, bouton et confirmation à l'écran. +- [ ] **T3-bis — refiger** (AC 3-bis) : route d'administration, trois codes 409, audit, bouton et confirmation à l'écran, + et les gardes structurelles (compte du bloc d'administration, `admin_pat_denied_e2e`, registres d'audit et de libellés). - [ ] **T4 — la dévalidation** (AC 5). - [ ] **T5 — l'écran** (AC 6). - [ ] **T6 — tests** (AC 7). @@ -226,7 +265,9 @@ téléchargement rend la langue du client). ### Ce qu'il ne faut pas faire -- **Ne jamais régénérer** un PDF figé introuvable : c'est fabriquer une pièce qui n'a pas été émise. 410, et le dire. +- **Ne jamais régénérer automatiquement ni silencieusement** un PDF figé introuvable : c'est fabriquer une pièce qui + n'a pas été émise. 410, et le dire. **Seul le refigeage explicite d'un administrateur**, tracé avec les deux + empreintes (arbitrage 7), produit un nouveau document. - **Ne pas** figer dans la transaction de validation (arbitrage 1) : la validation ne doit pas dépendre du rendu. - **Ne pas** créer de table (arbitrage 3). - **Ne pas** toucher aux rappels ni aux avoirs ([#502]). @@ -243,6 +284,18 @@ téléchargement rend la langue du client). jamais référencé (les rendus ne sont pas reproductibles, donc nommés différemment). Inoffensif — nommé par son empreinte, jamais servi — et non nettoyé. - **Langue** : le corps d'un e-mail suit la langue actuelle du client, la pièce jointe la langue figée. +- Une facture **annulée** dont le fichier figé manque ne peut pas être refigée (`render` refuse ce statut) : seule la + restauration du fichier la répare. +- Le **refigeage est irréversible** : il remplace la référence au document d'origine ; l'empreinte d'origine ne reste + qu'au journal d'audit. +- **`GET /api/v1/invoices/{id}/pdf` écrit** désormais (gel, audit) — et `HEAD` aussi, axum le servant par le handler + `get`. Le registre des routes d'audit (`audit_route_registry.rs:186`) ne balaie que les méthodes d'écriture : cette + route mutante lui échappe. **Angle mort assumé**, écrit dans le registre par un commentaire nommant la route. +- `store_document` fait `sync_all` puis `rename`, sans `fsync` du répertoire parent : après un arrêt brutal, le nom peut + se perdre alors que la base a commité la pose — un 410, réparable par refigeage (P2, L7). +- Tests : les cas qui suppriment ou altèrent un fichier utilisent **leur propre** `documents_dir` (patron + `inbox_import_e2e.rs:78`), pas le répertoire partagé `/tmp/kesh-documents-test` ; la contrainte de l'AC 1 borne aussi + `pdf_language` à `FR`, `DE`, `IT`, `EN` (P2, L8). ### Modules @@ -267,7 +320,24 @@ export CSV), `kesh-i18n`, ## Change Log -- **2026-10-04** — Validation P1 (Sonnet ×3, prompt `25-6-b-validate-prompt-p1.md`) : **4 HIGH, ~15 MED**, LOW. +- **2026-10-04** — Validation P2 (Opus, prompt `25-6-b-validate-prompt-p2.md`) : **1 HIGH, 7 MED, 8 LOW**, retenus. + - **H1** : le chapitre « Sauvegarde et restauration » du manuel admin n'était pas nommé, alors que c'est lui qui fait + perdre les PDF émis à la première restauration. Six sites sont ajoutés à l'AC 8. + - **M1** : la garde de statut ne fermait pas la séquence dévalidation → modification → revalidation. La pose est aussi + gardée par la version lue au rendu, avec une seule nouvelle tentative, puis `INVOICE_CHANGED`. + - **M2** : six autres sites du manuel, dont « Consultation : aucune mutation » et la portée `read` des clés d'API. + - **M3** : les gardes structurelles de la nouvelle route, et le `GET` mutant hors registre (angle mort écrit). + - **M4** : Dev Notes réconciliées avec l'arbitrage 7. + - **M5** : `pdf_language` exporté, `pdf_storage_path` exempté explicitement. + - **M6** : la chaîne 25-4 touche les mêmes lignes. + - **M7** : refigeage refusé pour un fichier altéré, avec code et procédure. + - **LOW** : quatre sites et non six ; « ~15 » recompté à douze ; titre des arbitrages ; course avoir/refigeage ; code + vrai pour une facture annulée ; impasse et irréversibilité en limites ; `fsync` du répertoire ; répertoire de tests + dédié ; `pdf_language` borné. + - ⚠️ **Signal de découpage** : HIGH → HIGH (P1 → P2), formellement atteint. Le HIGH de P2 est un site de manuel non + nommé, pas un défaut de conception ; aucun défaut recyclé ; toujours quatre modules. **Arbitrage à Guy**, + recommandation : ne pas découper. +- **2026-10-04** — Validation P1 (Sonnet ×3, prompt `25-6-b-validate-prompt-p1.md`) : **4 HIGH, 12 MED**, LOW. - **HIGH retenus** : - **A1** : un gel pouvait atterrir sur un **brouillon**, si une dévalidation s'intercalait entre le rendu et la pose. La garde `status = 'validated'` est ajoutée à l'`UPDATE` ; @@ -275,7 +345,7 @@ export CSV), `kesh-i18n`, - **C-F1** : le 410 sur un fichier figé perdu était une impasse. Le geste « refiger » a été soumis à Guy et retenu (arbitrage 7) ; - **C-F2** : six sites du manuel sont désormais nommés. - - **MEDIUM retenus** : + - **MEDIUM retenus** (douze) : - le cas « zéro ligne » défini ; - l'audit dans la transaction de la pose, avec l'acteur ; - le gel par Consultation, soumis à Guy et accepté (arbitrage 8) ; From 0725de522f1aaa3e9b172e36a9e2ca65ee3d0504 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:00:26 +0200 Subject: [PATCH 08/18] =?UTF-8?q?docs(25-6-b):=20arbitrage=20de=20Guy=20(p?= =?UTF-8?q?as=20de=20d=C3=A9coupage)=20et=20prompt=20de=20validation=20P3?= =?UTF-8?q?=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 1 + .../25-6-b-validate-prompt-p3.md | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-validate-prompt-p3.md diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 991d687e..a131a8b0 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -320,6 +320,7 @@ export CSV), `kesh-i18n`, ## Change Log +- **2026-10-05** — Arbitrage de Guy (« d'accord avec tes recommandations ») : **pas de découpage**. - **2026-10-04** — Validation P2 (Opus, prompt `25-6-b-validate-prompt-p2.md`) : **1 HIGH, 7 MED, 8 LOW**, retenus. - **H1** : le chapitre « Sauvegarde et restauration » du manuel admin n'était pas nommé, alors que c'est lui qui fait perdre les PDF émis à la première restauration. Six sites sont ajoutés à l'AC 8. diff --git a/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p3.md b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p3.md new file mode 100644 index 00000000..f1db8370 --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p3.md @@ -0,0 +1,40 @@ +# Prompt — validation P3, Story 25-6-b (le PDF d'une facture est figé) + +*Versionné le 2026-10-05. Une passe (Sonnet), contexte frais. Trend : P1 4H/12M (Sonnet ×3) → P2 1H/7M/8L (Opus) ; pas de +découpage (Guy). La remédiation de P2 change une règle de concurrence (garde `version`) et ajoute des sites de manuel : +fiche entière, attention particulière au diff.* + +Dépôt `/home/gcorbaz/devel/kesh`, branche `story/25-6-b-pdf-facture-archive`. **Fiche :** +`_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md`. Remédiation de P2 : `git diff ac125b29 HEAD`. +Règles : `CLAUDE.md`. Les huit arbitrages sont rendus par Guy. + +## Ce que tu vérifies + +1. **La garde `version` (AC 2)** : `render` peut-il exposer la version **lue** sans changer son comportement pour ses + autres appelants (`grep -rn "invoice_pdf_service::render\|render_document" crates`) ? La règle « une seule nouvelle + tentative, puis 409 `INVOICE_CHANGED` » est-elle cohérente avec les trois cas « zéro ligne » ? Le gel ne touche pas + `version` : la garde `version = ?` reste-t-elle juste si **un autre** chemin incrémente `version` sans changer le + contenu rendu (envoi par e-mail `mark_emailed`, pause des rappels, règlement — `grep -n "version = version + 1" + crates/kesh-db/src/repositories/invoices.rs`) ? Faut-il alors une nouvelle tentative fréquente, voire un 409 en usage + normal ? +2. **Les sites de manuel ajoutés** (AC 8) : chacun existe-t-il et dit-il ce que la fiche affirme ? `sed -n` sur + `docs/manual/fr/admin-manual.tex` (`:1353`, `:1376-1381`, `:1444`, `:1480`, `:1583`, `:1648-1654`, `:1774`) et + `user-manual.tex` (`:789`, `:797`, `:815`, `:846`). +3. **Les gardes structurelles** (AC 3-bis) : le compte `lib.rs:186` (25), `admin_pat_denied_e2e.rs:46`, `:757`, + `audit_route_registry.rs` (`LIB_ROUTES`, `extract_counted` `:186`), `audit_label_registry.rs` — existent-ils tels que + la fiche les décrit ? +4. **Cohérence interne** : arbitrages, AC, tâches, limites, *Modules*, Change Log — y a-t-il une phrase qui contredit une + autre depuis la remédiation (par exemple « jamais régénérer » contre refiger ; codes HTTP de la même situation écrits + deux fois différemment ; « six » contre « quatre » sites) ? `grep -nE "409|410|500" `. + +## Ce que tu rends + +Findings avec sévérité (CRITICAL/HIGH/MEDIUM/LOW), endroit, **preuve** (commande ET sortie, `grep -nF` pour toute +présence ou absence), correction proposée. ⛔ La liste des axes exercés ET non exercés. + +## Interdits + +⛔ N'écris aucun fichier du dépôt hors `target/gate-logs/` ; aucune commande qui écrit dans le dépôt ou dans une base : +`scripts/*` (dont `scripts/prepare-release.sh`), `make`, `latexmk`, `git commit`/`add`/`checkout`, `sqlx`, +`cargo test`/`nextest`, `npm run`, `npx`, `gh issue create`/`comment`/`edit`. Autorisés : lecture, `grep`, `sed`, +`git log`/`show`/`diff`, `gh issue view`. From 543375533d635a1bf86b84b5899515531d601a8c Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:02:13 +0200 Subject: [PATCH 09/18] =?UTF-8?q?docs(25-6-b):=20validation=20P3=20?= =?UTF-8?q?=E2=80=94=20totaux=20du=20registre,=20tests=20de=20la=20garde?= =?UTF-8?q?=20version,=20six=20erreurs=20nomm=C3=A9es=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-pdf-facture-archive.md | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index a131a8b0..28aadf46 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -100,7 +100,8 @@ chemin vers le PDF d'une facture, pour le téléchargement **et** pour l'e-mail - facture `validated` **non figée** → rend le PDF dans la **langue du client** (`resolve_language`), l'écrit par `store_document` (`ext = "pdf"`), puis pose les quatre colonnes par une fonction `kesh-db` qui fait, **dans une seule transaction**, l'`UPDATE … WHERE id = ? AND company_id = ? AND pdf_storage_path IS NULL AND status = 'validated' AND version = ?` - (la **version lue au rendu** — `render` en expose une variante qui la rend, validation P2, M1) et + (la **version lue au rendu** — c'est `render_document`, qui charge la facture (`invoice_pdf_service.rs:198-215`), qui + la rend ; ses appelants « rappel » (`invoice_email.rs:557`, `:1239`) l'ignorent ; validation P2, M1) et l'audit `invoice.pdf_frozen` (empreinte, langue, **acteur** — utilisateur ou clé d'API) — l'empreinte n'existe jamais sans sa trace. ⚠️ **La garde `status = 'validated'` est indispensable** (validation P1, A1) : sans elle, une dévalidation intercalée entre le rendu et l'`UPDATE` laisserait un PDF figé sur un brouillon, servi comme émis à la revalidation. @@ -114,7 +115,9 @@ chemin vers le PDF d'une facture, pour le téléchargement **et** pour l'e-mail **annulée par un avoir** intercalé) → `InvoiceNotValidated` (ou `InvoiceCancelled` pour une annulée — un code qui dit vrai, P2 L5), **sans nouvelle tentative** ; colonnes nulles et facture **`validated` à une autre version** (elle a changé pendant le rendu) → **une seule** nouvelle tentative (rendu + pose), puis **409** `INVOICE_CHANGED` si la - course se répète ; + course se répète. En pratique : une pause des rappels, un règlement ou un avoir **concurrents**, dans la seconde du + rendu, déclenchent la nouvelle tentative ; un envoi par e-mail non (`mark_emailed` ne touche pas `version`) — pas de + 409 en usage normal (P3, L2) ; - **échec d'écriture du fichier** (`KESH_DOCUMENTS_DIR` non inscriptible) → **500**, rien n'est servi — jamais un rendu non figé présenté comme le document (C-F6) ; - facture `cancelled` **figée** → rend le PDF figé ; `cancelled` **non figée** ou `draft` → refus inchangé @@ -149,7 +152,9 @@ routes d'administration, donc refusé aux clés d'API — `require_not_pat`), ** des 410 en série ; refiger remplacerait définitivement des originaux qui existent encore ailleurs, P2 L6) ; - ⚠️ **gardes structurelles** que la route fait rougir (P2, M3) : le compte des constructeurs du bloc d'administration (`lib.rs:186`, **25 → 26**) et `admin_pat_denied_e2e.rs` (`:46`, `:757`, `ADMIN_COUPLES`) ; le registre des routes - d'audit (`audit_route_registry.rs`, `LIB_ROUTES` : `("post", "…refreeze…", Traced)`) ; le registre des libellés + d'audit (`audit_route_registry.rs`, `LIB_ROUTES` : `("post", "…refreeze…", Traced)`) **et ses trois totaux** + (`:436-470`) — `LIB_ROUTES.len()` **109 → 110**, routes tracées **91 → 92** (message de l'assertion réécrit), + `LIB_ROUTES.len() + TEST_ENDPOINT_ROUTES.len()` **112 → 113** ; le registre des libellés (`audit_label_registry.rs` : `invoice.pdf_frozen` et `invoice.pdf_refrozen` dans `audit_labels::ACTIONS`, libellé dans les 4 `.ftl` ; si l'action est un paramètre d'une fonction commune, le site entre dans `SITES_INDIRECTS`). @@ -188,6 +193,9 @@ Libellés dans les 4 locales. - **la garde de statut** : facture dévalidée entre le rendu et la pose (simulée en appelant la pose après la dévalidation) → zéro ligne, rien de figé sur le brouillon ; mutation « garde `status` retirée » tuée (A1) ; - le gel **ne change pas `version`** ; +- **la garde `version`** (P3, M2) : dévalidation → modification → revalidation, puis pose avec l'**ancienne** version → + zéro ligne, la nouvelle tentative rend et fige les **nouvelles** lignes ; une course qui se répète → 409 + `INVOICE_CHANGED` ; mutation « garde `version` retirée » tuée ; - l'audit `invoice.pdf_frozen` nomme l'acteur, et partage la transaction de la pose ; - un envoi e-mail en **échec SMTP** laisse la facture figée, et le téléchargement suivant rend les mêmes octets ; - changer la **langue** du client après le gel ne change pas le PDF ; @@ -201,8 +209,8 @@ Libellés dans les 4 locales. - la contrainte tout-ou-rien rejette un état partiel ; - Vitest de la fiche : bouton pour `cancelled` figée, absent pour `cancelled` non figée ; mention « figé le » ; - **refiger** : fichier supprimé → 410 → refigeage par un Admin → 200, nouveau document, audit avec les deux - empreintes ; refusé pour un Comptable (403), une clé d'API, une facture non figée (409), un fichier présent (409), une - facture `cancelled` ; deux refigeages concurrents → un seul ; + empreintes ; refusé pour un Comptable (403), une clé d'API, une facture non figée (409), un fichier présent (409), un + fichier **altéré** (409 `INVOICE_PDF_INTEGRITY`), une facture `cancelled` ; deux refigeages concurrents → un seul ; - **le gel par un rôle Consultation** : le premier téléchargement d'un Consultation fige, et l'audit le nomme ; - E2E (`authedApiContext`, `pdfRes.body()`) : télécharger deux fois une facture rend le même fichier ; une facture annulée par un avoir garde son PDF. Chaque test crée **sa propre** facture : les fichiers figés persistent sous @@ -219,6 +227,8 @@ Libellés dans les 4 locales. - `:855` (« téléchargeable depuis la facture validée … pour l'archiver ») : figé, identique d'un téléchargement à l'autre, et servi aussi pour une facture **annulée** qui l'a été ; un PDF figé avant l'avoir ne porte pas de mention d'annulation (A8) ; +- `:879` (« Pièce jointe : la QR-facture PDF, attachée ») : c'est le PDF **figé**, octet pour octet celui du + téléchargement ; - `:928` (« Langue de correspondance … détermine la langue de l'e-mail et du PDF joint ») : aussi du téléchargement, et figée au premier rendu ; - `:1136` (« un PDF téléchargé puis transmis à la main ne laisse aucune trace ») : il laisse désormais une trace (audit @@ -248,8 +258,12 @@ téléchargement rend la langue du client). - [ ] **T1 — migration** (AC 1) : SQL, squash, garde de schéma, audit d'idempotence, P6. - [ ] **T2 — le service de gel** (AC 1-bis, 2, 3) : `kesh-db` (entité `Invoice` et **constante unique** de colonnes, - pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`, code d'erreur - 410, i18n de l'erreur). + pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`) et **six variantes d'erreur neuves** (P3, M3 — aucune n'existe ; seule + `InvoiceNotValidated` existe, `errors.rs:338`), chacune avec statut HTTP, code JSON et message dans les 4 locales : + `InvoicePdfGone` (410 `INVOICE_PDF_GONE`), `InvoiceChanged` (409 `INVOICE_CHANGED`), `InvoicePdfPresent` (409 + `INVOICE_PDF_PRESENT`), `InvoicePdfNotFrozen` (409 `INVOICE_PDF_NOT_FROZEN`), `InvoicePdfIntegrity` (409 + `INVOICE_PDF_INTEGRITY`, au refigeage ; 500 à la lecture), `InvoiceCancelled` (code à fixer sur le patron + d'`InvoiceNotValidated`). - [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. - [ ] **T3-bis — refiger** (AC 3-bis) : route d'administration, trois codes 409, audit, bouton et confirmation à l'écran, et les gardes structurelles (compte du bloc d'administration, `admin_pat_denied_e2e`, registres d'audit et de libellés). @@ -320,10 +334,22 @@ export CSV), `kesh-i18n`, ## Change Log +- **2026-10-05** — Validation P3 (Sonnet, prompt `25-6-b-validate-prompt-p3.md`) : **0 CRITICAL/HIGH, 3 MED, 4 LOW**, + retenus. + - **MED** : + - les trois totaux du registre des routes d'audit (109, 91, 112), que la route fera rougir (M1) ; + - les tests de la garde `version` et du refigeage d'un fichier altéré (M2) ; + - les six variantes d'erreur à créer, nommées à la T2 (M3). + - **LOW** : + - « cinq » sites et non « six » pour H1 de P2 ; + - la fenêtre de la garde `version` écrite — pas de 409 en usage normal, `mark_emailed` ne touche pas `version` ; + - `render_document` porte la version ; + - le site `:879` (pièce jointe). + - La P3 a vérifié chaque site de manuel cité et chaque garde structurelle. Trend : P1 4H/12M → P2 1H/7M → P3 3M. - **2026-10-05** — Arbitrage de Guy (« d'accord avec tes recommandations ») : **pas de découpage**. - **2026-10-04** — Validation P2 (Opus, prompt `25-6-b-validate-prompt-p2.md`) : **1 HIGH, 7 MED, 8 LOW**, retenus. - **H1** : le chapitre « Sauvegarde et restauration » du manuel admin n'était pas nommé, alors que c'est lui qui fait - perdre les PDF émis à la première restauration. Six sites sont ajoutés à l'AC 8. + perdre les PDF émis à la première restauration. Cinq sites sont ajoutés à l'AC 8. - **M1** : la garde de statut ne fermait pas la séquence dévalidation → modification → revalidation. La pose est aussi gardée par la version lue au rendu, avec une seule nouvelle tentative, puis `INVOICE_CHANGED`. - **M2** : six autres sites du manuel, dont « Consultation : aucune mutation » et la portée `read` des clés d'API. From b8e91892320020cfe06a058a5473e665db92cb01 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:02:28 +0200 Subject: [PATCH 10/18] =?UTF-8?q?docs(25-6-b):=20prompt=20de=20validation?= =?UTF-8?q?=20P4=20cibl=C3=A9e=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../25-6-b-validate-prompt-p4.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-validate-prompt-p4.md diff --git a/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p4.md b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p4.md new file mode 100644 index 00000000..3ec37ad2 --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-validate-prompt-p4.md @@ -0,0 +1,32 @@ +# Prompt — validation P4 ciblée, Story 25-6-b + +*Versionné le 2026-10-05. **Une lentille** (Haiku), contexte frais — passe ciblée sur la remédiation de P3. Trend : +P1 4H/12M → P2 1H/7M → P3 3M/4L.* + +Dépôt `/home/gcorbaz/devel/kesh`, branche `story/25-6-b-pdf-facture-archive`. **Diff à relire, un seul commit, aplati : +`git show 54337553`** (la fiche `_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md`). La fiche décrit du +travail **à faire** : un finding qui reproche au code de ne pas encore le porter sera rejeté. + +## Lentille — regression hunter + +1. **Les trois totaux du registre** : `sed -n 430,475p crates/kesh-api/tests/audit_route_registry.rs` — les valeurs 109, + 91, 112 y sont-elles, et la fiche les porte-t-elle à 110, 92, 113 ? +2. **Les six variantes d'erreur** : chacune est-elle employée de façon cohérente dans les AC (`grep -nE + "INVOICE_PDF_GONE|INVOICE_CHANGED|INVOICE_PDF_PRESENT|INVOICE_PDF_NOT_FROZEN|INVOICE_PDF_INTEGRITY|InvoiceCancelled" `) + — même statut HTTP partout où la même situation est décrite ? `InvoicePdfIntegrity` est dite « 409 au refigeage, 500 à + la lecture » : l'AC 3 dit-elle bien 500 pour la lecture ? +3. **`render_document` porte la version** : `sed -n 195,220p crates/kesh-api/src/routes/invoice_pdf_service.rs` — + charge-t-il bien la facture ? Ses appelants « rappel » (`grep -n "render_document" crates/kesh-api/src/routes/invoice_email.rs`) + existent-ils aux lignes citées ? +4. **Résidus** : la fiche dit-elle encore « six sites » pour H1 de P2 ? `grep -n "Six sites\|six sites" `. + +## Ce que tu rends + +Findings avec sévérité, endroit, **preuve obligatoire : la commande ET sa sortie** — un finding sans sortie sera rejeté, +un « 0 finding » sans les sorties des quatre vérifications aussi. ⛔ La liste des axes exercés ET non exercés. + +## Interdits + +⛔ N'écris aucun fichier du dépôt ; aucune commande qui écrit dans le dépôt ou dans une base (`scripts/*` dont +`scripts/prepare-release.sh`, `make`, `latexmk`, `git commit`/`add`/`checkout`, `sqlx`, `cargo test`/`nextest`, +`npm run`, `npx`, `gh issue create`/`comment`/`edit`). Autorisés : lecture, `grep`, `sed`, `git log`/`show`/`diff`. From 7375a80061d7a3536d30eb822a89b8c45e000f8d Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:04:04 +0200 Subject: [PATCH 11/18] =?UTF-8?q?docs(25-6-b):=20validation=20P4=20cibl?= =?UTF-8?q?=C3=A9e=20=E2=80=94=200=20finding,=20boucle=20close=20;=20dev?= =?UTF-8?q?=20en=20cours=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../implementation-artifacts/25-6-b-pdf-facture-archive.md | 6 +++++- _bmad-output/implementation-artifacts/sprint-status.yaml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 28aadf46..45e89283 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -1,6 +1,6 @@ # Story 25.6-b : Le PDF d'une facture est figé — une pièce émise ne change plus -Status: ready-for-dev +Status: in-progress **Issue : [#387]**, que cette story **ferme** : la PR porte `closes #387` dans le **titre ET le corps**. Branche `story/25-6-b-pdf-facture-archive`, partie de `main` (`d7c74f02`). Seconde moitié de la 25-6 (la 25-6-a a traité #388 et @@ -334,6 +334,10 @@ export CSV), `kesh-i18n`, ## Change Log +- **2026-10-05** — Validation P4 ciblée (Haiku, prompt `25-6-b-validate-prompt-p4.md`) : **0 finding**. Sa première + vérification résumait sa sortie au lieu de la citer : **reprise par l'orchestrateur** (`audit_route_registry.rs` porte + bien 109, 91 et 112) ; le « six sites » restant est celui de P1, exact. **Boucle close** : P1 4H/12M (Sonnet ×3) → P2 + 1H/7M (Opus) → P3 3M (Sonnet) → P4 0 (Haiku). - **2026-10-05** — Validation P3 (Sonnet, prompt `25-6-b-validate-prompt-p3.md`) : **0 CRITICAL/HIGH, 3 MED, 4 LOW**, retenus. - **MED** : diff --git a/_bmad-output/implementation-artifacts/sprint-status.yaml b/_bmad-output/implementation-artifacts/sprint-status.yaml index ffd005fe..1110f75e 100644 --- a/_bmad-output/implementation-artifacts/sprint-status.yaml +++ b/_bmad-output/implementation-artifacts/sprint-status.yaml @@ -372,7 +372,7 @@ development_status: 25-5-etats-et-export: split # [#385] [#386] — la **Balance des comptes ne concorde pas avec le Bilan**, il manque la colonne « solde d'ouverture » (III.4) ; et **l'export de souverainete omet les achats, les avoirs, les projets et la piste d'audit** (V.6) — *il promet plus qu'il ne tient*. 25-6-tableau-de-bord-et-dettes: split # 2026-10-03 DECOUPEE en 25-6-a (#388 #389) et 25-6-b (#387). [#388] [#389] [#387] (#384 ramenee en 25-4-d le 2026-09-27) — la tuile « Dernieres ecritures » **n'appelle rien** et affiche toujours « Aucune ecriture » (*une tuile qui est un decor*) ; le « solde bancaire » est le solde COMPTABLE, donc faux ; imputer l'ECART d'un reglement partiel (escompte, frais bancaires, perte sur debiteur) ; et **le PDF d'une facture n'est jamais archive**, il est regenere a la volee (IV.9) — *un document reemis n'est pas le document envoye*. 25-6-a-tableau-de-bord: done # 2026-10-03 — sur sa branche, PR #501 (closes #388 #389). - 25-6-b-pdf-facture-archive: ready-for-dev # 2026-10-03 CREEE (partie de main) ; arbitrages de Guy (gel au premier rendu, langue du client, colonnes sur invoices) ; CR #502 #503. + 25-6-b-pdf-facture-archive: in-progress # 2026-10-03 CREEE (partie de main), validee (4 passes) ; arbitrages de Guy (gel au premier rendu, langue du client, colonnes sur invoices) ; CR #502 #503. epic-16: done # 2026-08-11 (nuit) MERGÉ — dernière story 16-3b via PR #296 (squash `593bb845`). #152, #144 et #151 fermées. v0.9.0 prête à taguer. # 2026-07-26 KICKOFF (rétro Epic 14, décision D-D ; GO Guy après publication de v0.8.0). Branche `story/16-1-compte-produit-par-ligne` créée sur main `ef6cdf52`. Séquence : 16-1 (#152 socle par ligne) → 16-2 (#144 défaut catalogue) → 16-3 (#151 reliquat PDF). # ÉLU PROCHAIN EPIC — kickoff dès le merge de la PR groupée Epic 14. Reste #144 (compte produit au catalogue) + #152 (compte produit par ligne) ; #151 (récap TVA facture) déjà mergé hors-bande via PR #267 (bb3c8d64, partiel : coord. émetteur / n° client restants). Capte aussi les CR utilisateurs #265/#266/#268. # Facturation avancée (#144/#152/#151) — Epic dédié acté 2026-06-04 # 2026-07-26 ORDRE INVERSÉ au kickoff (#152 avant #144). Motif ground-truth : `invoice_lines` ne # porte AUCUNE colonne de compte ET ne référence même pas `products` (pas de `product_id` — cf. From 51d1696f424a1ae7ccc1cab565a6fbe12389c3d0 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:06:06 +0200 Subject: [PATCH 12/18] =?UTF-8?q?feat(25-6-b):=20migration=20=E2=80=94=20q?= =?UTF-8?q?uatre=20colonnes=20du=20PDF=20fig=C3=A9=20sur=20invoices=20(ref?= =?UTF-8?q?s=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- crates/kesh-db/migrations.sha384 | 1 + .../20261003000001_invoices_frozen_pdf.sql | 35 +++++++++++++++++++ .../test-schema/0001_schema_squash.sql | 9 +++-- .../kesh-db/tests/migrations_upgrade_path.rs | 32 +++++++++-------- docs/migrations-idempotence-audit.md | 7 ++-- 5 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 crates/kesh-db/migrations/20261003000001_invoices_frozen_pdf.sql diff --git a/crates/kesh-db/migrations.sha384 b/crates/kesh-db/migrations.sha384 index 04dda8d2..0222e05f 100644 --- a/crates/kesh-db/migrations.sha384 +++ b/crates/kesh-db/migrations.sha384 @@ -83,3 +83,4 @@ 20260915000001 7cf8f78b3d9af607fcd2b52bb54f0190880c65df4062d3ce67a62f81bbdf5ef884a42533c579b1184684deaf75259d2b 20260917000001 ca59103a2ff33cde3ae613f14f6a1a54291315e9c91040ee4a393dee9180307d1b4b2a695f0ffa2f4ed28e5b40d0f023 20260930000001 9fb2d6d97dd32fa924ed44cc9660d02a7b5c059704a6605f4b61f0a2e507e8ef8dfe977b5d3dfef5cd3df3e3ef7d07ac +20261003000001 38638a4c36c2c823d6c149fa1ab21e2a4d4b44412b5d8796b9c5f65ce59aefa144f3ad9e690e63652730b9dab1073678 diff --git a/crates/kesh-db/migrations/20261003000001_invoices_frozen_pdf.sql b/crates/kesh-db/migrations/20261003000001_invoices_frozen_pdf.sql new file mode 100644 index 00000000..d0c8d0a9 --- /dev/null +++ b/crates/kesh-db/migrations/20261003000001_invoices_frozen_pdf.sql @@ -0,0 +1,35 @@ +-- Story 25-6-b (#387) — le PDF d'une facture est FIGÉ. +-- +-- Le PDF d'une facture était régénéré à chaque demande : une facture +-- réimprimée dans cinq ans n'aurait pas été celle remise au client. Il est +-- désormais figé au premier rendu après validation (téléchargement ou envoi), +-- dans la langue du client, et conservé sous `KESH_DOCUMENTS_DIR` sous le nom +-- de son empreinte SHA-256. Ces quatre colonnes le désignent. +-- +-- Arbitrage du Project Lead (2026-10-03) : des COLONNES sur `invoices`, pas une +-- table — une table neuve rendrait toutes les sauvegardes existantes non +-- importables (`post_restore.rs`, inventaire des tables), une colonne nullable +-- non (`check_schema_compat` n'exige que les colonnes NOT NULL sans défaut). +-- +-- Contrainte TOUT-OU-RIEN : les quatre colonnes sont nulles (facture non +-- figée), ou toutes renseignées, l'empreinte faisant 64 caractères et la langue +-- étant l'une des quatre de l'instance. +-- +-- DDL seul, AUCUNE donnée écrite : les factures existantes sont figées à leur +-- prochain rendu (triage P7 sans objet). Non-breaking (`ADD COLUMN` nullable, +-- ignoré par les anciens binaires, qui listent leurs colonnes) → PAS de bump +-- `kesh_version_min_required`. Ligne ajoutée à +-- `docs/migrations-idempotence-audit.md` (politique P5). + +ALTER TABLE invoices + ADD COLUMN pdf_storage_path VARCHAR(512) NULL, + ADD COLUMN pdf_sha256 CHAR(64) NULL, + ADD COLUMN pdf_frozen_at DATETIME(3) NULL, + ADD COLUMN pdf_language CHAR(2) NULL, + ADD CONSTRAINT chk_invoices_frozen_pdf CHECK ( + (pdf_storage_path IS NULL AND pdf_sha256 IS NULL AND pdf_frozen_at IS NULL AND pdf_language IS NULL) + OR (pdf_storage_path IS NOT NULL AND pdf_sha256 IS NOT NULL AND pdf_frozen_at IS NOT NULL + AND pdf_language IS NOT NULL + AND CHAR_LENGTH(pdf_sha256) = 64 + AND BINARY pdf_language IN (BINARY 'FR', BINARY 'DE', BINARY 'IT', BINARY 'EN')) + ); diff --git a/crates/kesh-db/test-schema/0001_schema_squash.sql b/crates/kesh-db/test-schema/0001_schema_squash.sql index 014a18cc..e61ccb75 100644 --- a/crates/kesh-db/test-schema/0001_schema_squash.sql +++ b/crates/kesh-db/test-schema/0001_schema_squash.sql @@ -1,6 +1,6 @@ -- SQUASH DU SCHÉMA DE TEST — Story 22-5 (#251). GÉNÉRÉ, NE PAS ÉDITER. -- Régénérer : scripts/regen-test-schema.sh --- Équivalent des 70 migrations de crates/kesh-db/migrations/, +-- Équivalent des 71 migrations de crates/kesh-db/migrations/, -- rejouées en UN batch DDL par base éphémère de test. -- -- Le garde-fou crates/kesh-db/tests/test_schema_guard.rs compare ce schéma @@ -711,6 +711,10 @@ CREATE TABLE `invoices` ( `emailed_to` varchar(320) DEFAULT NULL, `dunning_paused_at` datetime(6) DEFAULT NULL, `dunning_paused_note` varchar(500) DEFAULT NULL, + `pdf_storage_path` varchar(512) DEFAULT NULL, + `pdf_sha256` char(64) DEFAULT NULL, + `pdf_frozen_at` datetime(3) DEFAULT NULL, + `pdf_language` char(2) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uq_invoices_number` (`company_id`,`invoice_number`), KEY `idx_invoices_company_status` (`company_id`,`status`), @@ -729,7 +733,8 @@ CREATE TABLE `invoices` ( CONSTRAINT `chk_invoices_total_non_negative` CHECK (`total_amount` >= 0), CONSTRAINT `chk_invoices_validated_has_je` CHECK (`status` <> 'validated' or `journal_entry_id` is not null), CONSTRAINT `chk_invoices_paid_at_validated` CHECK (`paid_at` is null or `status` in ('validated','cancelled')), - CONSTRAINT `chk_invoices_paid_at_after_date` CHECK (`paid_at` is null or cast(`paid_at` as date) >= `date` - interval 1 day) + CONSTRAINT `chk_invoices_paid_at_after_date` CHECK (`paid_at` is null or cast(`paid_at` as date) >= `date` - interval 1 day), + CONSTRAINT `chk_invoices_frozen_pdf` CHECK (`pdf_storage_path` is null and `pdf_sha256` is null and `pdf_frozen_at` is null and `pdf_language` is null or `pdf_storage_path` is not null and `pdf_sha256` is not null and `pdf_frozen_at` is not null and `pdf_language` is not null and char_length(`pdf_sha256`) = 64 and cast(`pdf_language` as char charset binary) in (cast('FR' as char charset binary),cast('DE' as char charset binary),cast('IT' as char charset binary),cast('EN' as char charset binary))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `journal_entries`; diff --git a/crates/kesh-db/tests/migrations_upgrade_path.rs b/crates/kesh-db/tests/migrations_upgrade_path.rs index 6908f5ec..c223a780 100644 --- a/crates/kesh-db/tests/migrations_upgrade_path.rs +++ b/crates/kesh-db/tests/migrations_upgrade_path.rs @@ -35,9 +35,9 @@ async fn apply_migrations_up_to( assert!( n <= all.len(), "apply_migrations_up_to: n={} > total={} — vérifier que le calcul \ - `total - 36` (fenêtre d'upgrade, FRONTIÈRE figée à 34) reste \ + `total - 37` (fenêtre d'upgrade, FRONTIÈRE figée à 34) reste \ cohérent avec l'ajout de migrations futures. Si une migration a été ajoutée à \ - la branche, l'assertion `total == 70` du test upgrade_path_preserves_data \ + la branche, l'assertion `total == 71` du test upgrade_path_preserves_data \ doit également échouer, c'est son rôle : elle signale qu'il faut décider \ explicitement si la fenêtre s'élargit (bumper `total` seul) ou si la \ frontière doit rester à 34 (bumper `total` ET la fenêtre). Cf. garde-fou \ @@ -54,8 +54,8 @@ async fn apply_migrations_up_to( sub.run(pool).await } -/// AC #15a — cas générique upgrade path : `total - 36` migrations appliquées -/// (**34** à ce jour) + seed + `MIGRATOR.run()` final, qui applique les **36** +/// AC #15a — cas générique upgrade path : `total - 37` migrations appliquées +/// (**34** à ce jour) + seed + `MIGRATOR.run()` final, qui applique les **37** /// dernières. Assertion : seed préservé à travers la fenêtre d'upgrade. /// /// ⚠️ Les nombres ci-dessus se recomptent, ils ne se relisent pas — cf. le @@ -96,14 +96,15 @@ async fn upgrade_path_preserves_data(pool: MySqlPool) { // + audit_log_actor_label (Story 25-1a, #376) = 67, // + audit_log_company_id (Story 25-1c-zero, refs #378) = 68, // + journal_entry_number_sequences (Story 25-2-c, refs #381) = 69, - // + invoice_settings_rounding_account (Story 25-4-c3-a1, refs #476) = 70. + // + invoice_settings_rounding_account (Story 25-4-c3-a1, refs #476) = 70, + // + invoices_frozen_pdf (Story 25-6-b, refs #387) = 71. let total = kesh_db::MIGRATOR.migrations.len(); assert_eq!( - total, 70, - "70 migrations attendues (69 précédentes + Story 25-4-c3-a1 : invoice_settings_rounding_account)" + total, 71, + "71 migrations attendues (70 précédentes + Story 25-6-b : invoices_frozen_pdf)" ); - // Étape 1 : applique toutes les migrations sauf les 36 dernières. La + // Étape 1 : applique toutes les migrations sauf les 37 dernières. La // fenêtre d'upgrade démarre donc à la 35ᵉ, `20260614000001_vat_accounts_config` // (Story 18-1a), et court jusqu'à la dernière du dépôt. Ne pas ré-énumérer // ici les migrations de la fenêtre : une liste nominative se périme à chaque @@ -111,17 +112,17 @@ async fn upgrade_path_preserves_data(pool: MySqlPool) { // plus bas. Le seul nombre qui fait foi est celui du `total - N` ci-dessous. // // Note `total - N` : expression relative à la longueur totale, tandis que - // l'assertion `total == 70` ci-dessus est INTENTIONNELLEMENT codée en dur + // l'assertion `total == 71` ci-dessus est INTENTIONNELLEMENT codée en dur // pour fail-loud sur toute évolution non revue. À chaque migration ajoutée, // le mainteneur doit (1) bumper ce compte (2) incrémenter `N` du même pas, // de sorte que `total - N` — la frontière — reste **constant**. // // Frontière actuelle : **34**. Le test applique donc les 34 premières // migrations (jusqu'à `20260613000001_vat_rates_crud` incluse), seede des - // données, puis joue les 36 restantes comme « fenêtre d’upgrade ». + // données, puis joue les 37 restantes comme « fenêtre d’upgrade ». // - // ⚠️ `N` DOIT être incrémenté en même temps que `total`. Le laisser à 35 - // avec `total = 70` porterait la frontière à 35 : le test continuerait de + // ⚠️ `N` DOIT être incrémenté en même temps que `total`. Le laisser à 36 + // avec `total = 71` porterait la frontière à 35 : le test continuerait de // passer en testant une fenêtre plus étroite d'une migration. // Story 16-1a : 21 → 22, frontière inchangée (56 - 22 = 55 - 21 = 34). // Story 16-1a-bis : 22 → 23, frontière inchangée (57 - 23 = 34). @@ -167,16 +168,17 @@ async fn upgrade_path_preserves_data(pool: MySqlPool) { // voulu : « depuis un socle figé, jusqu'à la dernière du dépôt ». // Story 25-2-c : 34 → 35, frontière inchangée (69 - 35 = 34). // Story 25-4-c3-a1 : 35 → 36, frontière inchangée (70 - 36 = 34). + // Story 25-6-b : 36 → 37, frontière inchangée (71 - 37 = 34). // // ⚠️ J'ai d'abord porté `total` à 69 SANS toucher à ce soustracteur : le socle // est alors passé de 34 à 35 migrations, la fenêtre a glissé d'un cran, et le // test a rougi non plus sur son compteur mais sur `COUNT(accounts) : expected // 4, got 2` — un échec qui ne ressemble en rien à sa cause. *Les deux nombres // se bougent du même pas, et le commentaire ci-dessus le disait.* - let n_before_upgrade_window = total - 36; + let n_before_upgrade_window = total - 37; apply_migrations_up_to(&pool, n_before_upgrade_window) .await - .expect("apply_migrations_up_to(total - 36) failed"); + .expect("apply_migrations_up_to(total - 37) failed"); // Étape 2 : seed 1 company + 1 user + 2 accounts + 1 invoice + 1 contact. let company_id: i64 = sqlx::query_scalar( @@ -245,7 +247,7 @@ async fn upgrade_path_preserves_data(pool: MySqlPool) { .await .expect("INSERT invoice failed"); - // Étape 3 : appliquer les 36 migrations restantes via MIGRATOR.run(). + // Étape 3 : appliquer les 37 migrations restantes via MIGRATOR.run(). kesh_db::MIGRATOR .run(&pool) .await diff --git a/docs/migrations-idempotence-audit.md b/docs/migrations-idempotence-audit.md index 72874a56..874fb598 100644 --- a/docs/migrations-idempotence-audit.md +++ b/docs/migrations-idempotence-audit.md @@ -14,7 +14,7 @@ Cet audit est **purement informationnel** : les fichiers `.sql` historiques ne s - **`tracked-by-sqlx`** — l'idempotence est garantie uniquement par le tracking `_sqlx_migrations`. Re-exécution manuelle hors sqlx échouerait avec un code d'erreur MariaDB précisé en justification (1050 table exists, 1060 duplicate column, 1061 duplicate key, 1091 index not found, etc.). - **`no`** — re-exécution échouerait toujours (non utilisé sur le repo actuel). -## Table d'audit (70 migrations) +## Table d'audit (71 migrations) > Une ligne par fichier de `crates/kesh-db/migrations/`, **triée par version croissante**. Toute nouvelle migration s'ajoute **à l'intérieur de ce tableau**, jamais en fin de fichier — cf. la note de la section « Maintenance future ». @@ -90,12 +90,13 @@ Cet audit est **purement informationnel** : les fichiers `.sql` historiques ne s | `20260915000001_audit_log_company_id.sql` | yes | `ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS company_id BIGINT NULL, ADD INDEX IF NOT EXISTS idx_audit_log_company_date (company_id, created_at)` + un `UPDATE … JOIN users` de backfill gardé `company_id IS NULL`. **Verdict `yes`** : le DDL est conditionnel — rejoué, il rend les notes 1060 et 1061 sans erreur — et le backfill est gardé, donc une re-exécution manuelle hors sqlx est **sans effet**. ⚠️ **ELLE ÉCRIT DES DONNÉES** ⇒ triée en **`EXEMPT_MIGRATIONS`** (garde-fou P7) avec `ExemptionBasis::PerishableSince(20260827000001)` : fondement de **parc** et non de fenêtre — aucune version publiée dans `[20260827000001 .. 20260915000001)`. **Pas** au registre de rejeu, par arbitrage du 2026-09-11 : ni `COALESCE` ni rejeu, `NULL` signifiant « société indéterminable », état permanent. `company_id` est un **pointeur logique sans FK**, rempli pour les entrées futures par sous-SELECT dans `insert_in_tx` ; elle prépare la consultation par société de la Story 25-1c (#378). **Non-breaking** (`ADD COLUMN` nullable + `ADD INDEX`) → pas de bump `kesh_version_min_required`, donc pas de bump de version Cargo (P1/P2/P2-bis) — Story 25-1c-zero, refs #378. | | `20260917000001_journal_entry_number_sequences.sql` | tracked-by-sqlx | `CREATE TABLE journal_entry_number_sequences` sans `IF NOT EXISTS` ; re-exécution hors sqlx échouerait erreur 1050. ⚠️ *C'est le DDL qui porte le verdict : l'`INSERT … SELECT` d'amorçage qui le suit n'est atteignable qu'une fois la table créée, donc jamais rejouable seul — à la différence de `20260909000001`, où un `UPDATE` nu et gardé décide du verdict `yes`.* **Le `MAX(entry_number) + 1` des écritures était l'EXCEPTION du dépôt** : `invoice_number_sequences` (20260417000001) et `credit_note_number_sequences` sont déjà des compteurs persistants de portée `(company_id, fiscal_year_id)` — exactement celle d'`entry_number`. Ferme la **réattribution** d'un numéro d'écriture (supprimer la dernière libérait son numéro pour une écriture au contenu différent — symptôme **muet**) ; le **trou** subsiste et reste explicable, assumé par un critère de la story. ⚠️ **ELLE ÉCRIT DES DONNÉES** (amorçage depuis l'existant, sans lequel le compteur repartirait de 1 et heurterait aussitôt l'`UNIQUE`) ⇒ triée en **`EXEMPT_MIGRATIONS`** (garde-fou P7), fondement **couverture** (`ExemptionBasis::Durable`) — et **non** `Hors fenêtre`, que le contrôle symétrique a refusé : cette migration *est* la fenêtre, et le marqueur est réservé à un fait de chronologie. La migration crée elle-même la table, donc un backup dépourvu de ses lignes est un backup dépourvu de la table — refusé au contrôle de couverture de `parse_and_verify`. Même motif que `20260428000001` (vat_rates). ⛔ **Sa création de table REFERME la fenêtre d'importabilité** et périme les deux entrées alors au registre (`20260828000001`, `20260910000001`), déplacées vers `RETIRED_BACKFILLS` et exemptées — le module annonçait ce cas : *« toute nouvelle table applicative aura le même effet »*. **Non-breaking** (`CREATE TABLE` d'une table qu'un binaire antérieur ignore, continuant de servir son `MAX + 1`) → pas de bump `kesh_version_min_required` ni de version Cargo (P1/P2/P2-bis) — Story 25-2-c, refs #381. | | `20260930000001_invoice_settings_rounding_account.sql` | tracked-by-sqlx | `ALTER TABLE company_invoice_settings ADD COLUMN default_rounding_account_id BIGINT NULL` + FK `fk_cis_rounding` (`ON DELETE RESTRICT`), sans `IF NOT EXISTS` ; re-exécution hors sqlx échouerait erreur 1060. **DDL seul, aucune donnée écrite** : les sociétés existantes désignent leur compte de différences d'arrondi dans *Paramètres → Facturation* (arbitrage du 2026-09-30) — triage P7 sans objet. Patron des comptes TVA (`20260614000001`). **Non-breaking** (`ADD COLUMN` nullable ignoré par un binaire antérieur, qui liste ses colonnes) → pas de bump `kesh_version_min_required` ni de version Cargo (P1/P2/P2-bis) — Story 25-4-c3-a1, refs #476. | +| `20261003000001_invoices_frozen_pdf.sql` | tracked-by-sqlx | `ALTER TABLE invoices ADD COLUMN pdf_storage_path`, `pdf_sha256`, `pdf_frozen_at`, `pdf_language` (nullables) + `ADD CONSTRAINT chk_invoices_frozen_pdf` (tout-ou-rien) sans `IF NOT EXISTS` ; re-exécution hors sqlx échouerait erreur 1060 (colonne dupliquée). DDL seul, aucune donnée écrite (Story 25-6-b, #387). | ## Statistiques -- **Total** : 70 migrations (26 historiques + 1 Story 10-2 + 1 Story v011-2 + 1 Story v014-1 + 2 Story 17-2a + 2 Story 17-4a + 1 Story 11-1 + 1 Story 18-1a + 1 Story 12-1 + 1 Story 12-2 + 1 Story 12-3 + 1 Story 12-5b + 1 Story 19-1 + 1 Story 19-3 + 1 Story 19-4 + 1 Story 19-5 + 3 #213 + 1 Story 20-1 + 3 Story 20-3b1 + 1 Story 21-1 + 2 Story 21-3 + 1 Story 21-5a + 1 Story 14-3a + 1 Story 16-1a + 1 Story 16-1a-bis + 1 Story 16-2a + 1 Story 16-3a + 1 Story 16-3b + 1 Story 22-1 + 1 Story 24-2 + 1 Story 24-3 + 1 Story 24-4a + 1 Story 24-4c + 1 Story 24-5 + 1 Story 25-1a + 1 Story 25-1c-zero + 1 Story 25-2-c + 1 Story 25-4-c3-a1). +- **Total** : 71 migrations (26 historiques + 1 Story 10-2 + 1 Story v011-2 + 1 Story v014-1 + 2 Story 17-2a + 2 Story 17-4a + 1 Story 11-1 + 1 Story 18-1a + 1 Story 12-1 + 1 Story 12-2 + 1 Story 12-3 + 1 Story 12-5b + 1 Story 19-1 + 1 Story 19-3 + 1 Story 19-4 + 1 Story 19-5 + 3 #213 + 1 Story 20-1 + 3 Story 20-3b1 + 1 Story 21-1 + 2 Story 21-3 + 1 Story 21-5a + 1 Story 14-3a + 1 Story 16-1a + 1 Story 16-1a-bis + 1 Story 16-2a + 1 Story 16-3a + 1 Story 16-3b + 1 Story 22-1 + 1 Story 24-2 + 1 Story 24-3 + 1 Story 24-4a + 1 Story 24-4c + 1 Story 24-5 + 1 Story 25-1a + 1 Story 25-1c-zero + 1 Story 25-2-c + 1 Story 25-4-c3-a1 + 1 Story 25-6-b). - **Idempotence `yes`** : 8 (`country_code`, `invoice_paid_at`, `bank_imports_relax_hash_unique`, `users_email`, `invoice_lines_revenue_account_backfill`, `closing_accounts_not_postable`, `audit_log_actor_label`, `audit_log_company_id`). -- **Idempotence `tracked-by-sqlx`** : 62 (toutes les autres). +- **Idempotence `tracked-by-sqlx`** : 63 (toutes les autres). - **Idempotence `no`** : 0. > Ces compteurs se **recomptent depuis le tableau**, ils ne s'incrémentent pas de confiance. Précédent : jusqu'à la Story 16-1a (2026-07-28), `tracked-by-sqlx` annonçait 45 pour 52 réelles — 11 lignes de migration des Epics 20/21 avaient été ajoutées **sous** la section « Maintenance future » au lieu du tableau, où elles ne se rendaient même pas en markdown et échappaient à tout comptage. Sept passes de `validate` avaient « re-vérifié » ce compteur sans le recompter. Lignes remontées et compteurs rétablis en revue de code de la 16-1a. From bd753fdcd2f7c131db4d853fd03ae24d8474e404 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:33:00 +0200 Subject: [PATCH 13/18] =?UTF-8?q?feat(25-6-b):=20le=20PDF=20d'une=20factur?= =?UTF-8?q?e=20est=20fig=C3=A9=20au=20premier=20rendu=20(refs=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Service unique issued_invoice_pdf (téléchargement et e-mail) : facture figée → fichier relu et empreinte vérifiée ; validée non figée → rendu dans la langue du client, écrit sous KESH_DOCUMENTS_DIR, posé par un UPDATE conditionnel (pdf_storage_path IS NULL, status, version) avec l'audit invoice.pdf_frozen dans la même transaction. Fichier absent → 410 INVOICE_PDF_GONE ; altéré → 500. Refigeage Admin (POST /invoices/{id}/pdf/refreeze, audit invoice.pdf_refrozen). La dévalidation détache. Liste unique des colonnes d'Invoice. Export CSV (pdf_sha256, pdf_frozen_at, pdf_language). Fiche facture : bouton PDF pour une annulée figée, mention du gel, refigeage après un 410. Co-Authored-By: Claude Opus 5.5 --- crates/kesh-api/src/audit_labels.rs | 2 + crates/kesh-api/src/errors.rs | 86 ++ crates/kesh-api/src/exports/csv_tables.rs | 43 +- crates/kesh-api/src/lib.rs | 9 +- crates/kesh-api/src/mail/mod.rs | 7 + crates/kesh-api/src/routes/invoice_email.rs | 29 +- crates/kesh-api/src/routes/invoice_pdf.rs | 55 +- .../src/routes/invoice_pdf_service.rs | 48 +- crates/kesh-api/src/routes/invoices.rs | 7 + .../kesh-api/src/routes/issued_invoice_pdf.rs | 449 ++++++++++ crates/kesh-api/src/routes/mod.rs | 1 + crates/kesh-api/tests/admin_pat_denied_e2e.rs | 19 +- crates/kesh-api/tests/audit_route_registry.rs | 25 +- .../kesh-api/tests/invoice_frozen_pdf_e2e.rs | 846 ++++++++++++++++++ crates/kesh-db/src/entities/invoice.rs | 8 + crates/kesh-db/src/repositories/invoices.rs | 242 ++++- .../src/repositories/reconciliation.rs | 7 +- crates/kesh-db/tests/invoice_frozen_pdf.rs | 471 ++++++++++ crates/kesh-i18n/locales/de-CH/messages.ftl | 14 + crates/kesh-i18n/locales/en-CH/messages.ftl | 14 + crates/kesh-i18n/locales/fr-CH/messages.ftl | 14 + crates/kesh-i18n/locales/it-CH/messages.ftl | 14 + crates/kesh-reconciliation/src/matching.rs | 4 + .../src/lib/features/invoices/invoices.api.ts | 8 + .../lib/features/invoices/invoices.types.ts | 7 + frontend/src/lib/shared/i18n-keys.test.ts | 10 +- .../routes/(app)/invoices/[id]/+page.svelte | 147 ++- .../invoices/[id]/invoice-pdf-page.test.ts | 238 +++++ .../[id]/invoice-settlements-page.test.ts | 2 + frontend/tests/e2e/invoice-frozen-pdf.spec.ts | 100 +++ 30 files changed, 2823 insertions(+), 103 deletions(-) create mode 100644 crates/kesh-api/src/routes/issued_invoice_pdf.rs create mode 100644 crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs create mode 100644 crates/kesh-db/tests/invoice_frozen_pdf.rs create mode 100644 frontend/src/routes/(app)/invoices/[id]/invoice-pdf-page.test.ts create mode 100644 frontend/tests/e2e/invoice-frozen-pdf.spec.ts diff --git a/crates/kesh-api/src/audit_labels.rs b/crates/kesh-api/src/audit_labels.rs index f08a6cfc..dbf9754f 100644 --- a/crates/kesh-api/src/audit_labels.rs +++ b/crates/kesh-api/src/audit_labels.rs @@ -118,6 +118,8 @@ pub const ACTIONS: &[&str] = &[ "invoice.emailed", "invoice.paid", "invoice.partially_settled", + "invoice.pdf_frozen", + "invoice.pdf_refrozen", "invoice.reminder_cancelled", "invoice.reminder_sent", "invoice.settlement_cancelled", diff --git a/crates/kesh-api/src/errors.rs b/crates/kesh-api/src/errors.rs index 2ae3314c..27affd9b 100644 --- a/crates/kesh-api/src/errors.rs +++ b/crates/kesh-api/src/errors.rs @@ -337,6 +337,41 @@ pub enum AppError { #[error("Facture non validée")] InvoiceNotValidated, + // --- Story 25-6-b (#387) — le PDF figé --- + /// La facture a été annulée par un avoir pendant le rendu de son PDF — + /// rien n'a été figé (400, sur le patron d'[`Self::InvoiceNotValidated`]). + #[error("Facture annulée")] + InvoiceCancelled, + + /// Le PDF figé est référencé mais son fichier manque sous + /// `KESH_DOCUMENTS_DIR` (410). Jamais régénéré en silence : ce serait + /// fabriquer une pièce qui n'a pas été émise. Porte l'empreinte, que le + /// message nomme. + #[error("PDF figé introuvable : {0}.pdf")] + InvoicePdfGone(String), + + /// La facture a changé deux fois de suite pendant le rendu de son PDF + /// (409) : rien n'a été figé, l'utilisateur réessaie. + #[error("Facture modifiée pendant le rendu du PDF")] + InvoiceChanged, + + /// Refigeage refusé : le fichier du PDF figé est présent (409) — on ne + /// remplace pas un document qui existe. + #[error("PDF figé présent")] + InvoicePdfPresent, + + /// Refigeage refusé : la facture n'a pas de PDF figé (409) — son + /// prochain rendu la figera. + #[error("PDF non figé")] + InvoicePdfNotFrozen, + + /// Refigeage refusé : le fichier est présent mais son empreinte ne + /// correspond plus (409). Un fichier altéré se diagnostique, il ne se + /// recouvre pas d'un nouveau document. À la **lecture**, la même + /// altération répond 500 (`Internal`), rien n'est servi. + #[error("PDF figé altéré")] + InvoicePdfIntegrity, + /// Un pré-requis applicatif manque pour générer le PDF : adresse contact, /// compte bancaire primary, IBAN invalide, etc. Le `String` contient la /// description i18n renvoyée au client. @@ -1429,6 +1464,57 @@ impl IntoResponse for AppError { AppError::InvoiceNotPdfReady(msg) => { build_response(StatusCode::BAD_REQUEST, "INVOICE_NOT_PDF_READY", &msg) } + + // Story 25-6-b (#387) — le PDF figé. + AppError::InvoiceCancelled => build_response( + StatusCode::BAD_REQUEST, + "INVOICE_CANCELLED", + &t( + "error-invoice-cancelled", + "La facture a été annulée par un avoir pendant la préparation de son PDF — aucun document n'a été figé.", + ), + ), + AppError::InvoicePdfGone(sha256) => { + let fallback = format!( + "Le PDF émis de cette facture est introuvable : le fichier {sha256}.pdf manque dans le répertoire des documents (KESH_DOCUMENTS_DIR). Restaurez-le depuis la sauvegarde de ce répertoire ; à défaut, un administrateur peut refiger la facture." + ); + let mut args = FluentArgs::new(); + args.set("sha256", sha256); + let msg = t_args("error-invoice-pdf-gone", &fallback, &args); + build_response(StatusCode::GONE, "INVOICE_PDF_GONE", &msg) + } + AppError::InvoiceChanged => build_response( + StatusCode::CONFLICT, + "INVOICE_CHANGED", + &t( + "error-invoice-changed", + "La facture a été modifiée pendant la préparation de son PDF. Réessayez.", + ), + ), + AppError::InvoicePdfPresent => build_response( + StatusCode::CONFLICT, + "INVOICE_PDF_PRESENT", + &t( + "error-invoice-pdf-present", + "Le PDF émis de cette facture est présent : il n'y a rien à refiger.", + ), + ), + AppError::InvoicePdfNotFrozen => build_response( + StatusCode::CONFLICT, + "INVOICE_PDF_NOT_FROZEN", + &t( + "error-invoice-pdf-not-frozen", + "Cette facture n'a pas encore de PDF figé : son prochain téléchargement le figera.", + ), + ), + AppError::InvoicePdfIntegrity => build_response( + StatusCode::CONFLICT, + "INVOICE_PDF_INTEGRITY", + &t( + "error-invoice-pdf-integrity", + "Le fichier du PDF émis a été altéré : son empreinte ne correspond plus. Restaurez-le depuis la sauvegarde, ou écartez-le du répertoire des documents avant de refiger.", + ), + ), AppError::InvoiceTooManyLinesForPdf(n) => { // #151 code-review : le cap n'est plus un nombre fixe (il dépend du // récap TVA et du type de document), donc message sans « max ». diff --git a/crates/kesh-api/src/exports/csv_tables.rs b/crates/kesh-api/src/exports/csv_tables.rs index 6f74932d..7c647fe8 100644 --- a/crates/kesh-api/src/exports/csv_tables.rs +++ b/crates/kesh-api/src/exports/csv_tables.rs @@ -515,6 +515,13 @@ pub fn serialize_invoices_csv(rows: &[Invoice], writer: W) -> Result<( // #262 : suspension de relance (Story 21-5a) — idem, désormais exportée. "dunning_paused_at", "dunning_paused_note", + // Story 25-6-b (#387) : la preuve d'émission appartient aux données de + // l'utilisateur. `pdf_storage_path` n'est PAS exporté : il se dérive de + // l'empreinte (`{pdf_sha256}.pdf`) et ne désigne qu'un fichier du + // serveur — les fichiers eux-mêmes ne sont pas dans ce CSV. + "pdf_sha256", + "pdf_frozen_at", + "pdf_language", "version", "created_at", "updated_at", @@ -541,6 +548,10 @@ pub fn serialize_invoices_csv(rows: &[Invoice], writer: W) -> Result<( // Suspension de relance débiteur (Story 21-5a). fmt_opt_dt(i.dunning_paused_at), fmt_opt_str(&i.dunning_paused_note), + // PDF émis figé (Story 25-6-b). + fmt_opt_str(&i.pdf_sha256), + fmt_opt_dt(i.pdf_frozen_at), + fmt_opt_str(&i.pdf_language), i.version.to_string(), fmt_dt(i.created_at), fmt_dt(i.updated_at), @@ -1679,6 +1690,10 @@ mod tests { project_id: None, dunning_paused_at: Some(naive_dt(2026, 6, 15, 14, 0, 0)), dunning_paused_note: Some("litige; \"en cours\"".into()), // RFC 4180 escape + pdf_storage_path: Some(format!("{}.pdf", "ab".repeat(32))), + pdf_sha256: Some("ab".repeat(32)), + pdf_frozen_at: Some(naive_dt(2026, 6, 2, 9, 29, 0)), + pdf_language: Some("DE".into()), version: 3, created_at: naive_dt(2026, 6, 1, 8, 0, 0), updated_at: naive_dt(2026, 6, 15, 14, 0, 0), @@ -1687,8 +1702,10 @@ mod tests { // ----- #262 — invoices serializer : complétude des colonnes souveraineté ----- - /// Garde anti-dérive (#262) : le header DOIT lister exactement les 19 colonnes - /// de la struct `Invoice`, dans l'ordre. Tout `ADD COLUMN` répercuté dans la + /// Garde anti-dérive (#262) : le header DOIT lister les colonnes de la struct + /// `Invoice`, dans l'ordre — **toutes sauf une** : `pdf_storage_path` + /// (Story 25-6-b), exemptée parce qu'elle se dérive de `pdf_sha256` et ne + /// désigne qu'un fichier du serveur. 22 colonnes sur 23. Tout `ADD COLUMN` répercuté dans la /// struct force la mise à jour de l'export ET de ce test — symétrique de la /// discipline P5 (audit idempotence). Empêche qu'un champ (comme `emailed_*` / /// `dunning_paused_*`, jadis oubliés) manque silencieusement de l'export. @@ -1702,7 +1719,8 @@ mod tests { header, "id;company_id;contact_id;invoice_number;status;date;due_date;\ payment_terms;total_amount;journal_entry_id;paid_at;emailed_at;emailed_to;\ - project_id;dunning_paused_at;dunning_paused_note;version;created_at;updated_at" + project_id;dunning_paused_at;dunning_paused_note;pdf_sha256;pdf_frozen_at;\ + pdf_language;version;created_at;updated_at" ); } @@ -1732,6 +1750,25 @@ mod tests { ); } + /// Story 25-6-b (#387, AC 5-bis) : l'empreinte, l'instant et la langue du + /// PDF émis sont exportés ; le chemin de stockage ne l'est pas. + #[test] + fn serialize_invoices_csv_porte_le_pdf_fige() { + let mut buf = Vec::new(); + serialize_invoices_csv(&[sample_invoice()], &mut buf).expect("serialize ok"); + let text = String::from_utf8(buf).expect("utf8"); + let row = text.lines().nth(1).expect("ligne de données"); + let sha = "ab".repeat(32); + assert!( + row.contains(&format!(";{sha};2026-06-02T09:29:00Z;DE;")), + "pdf_sha256 / pdf_frozen_at / pdf_language manquants: {row}" + ); + assert!( + !row.contains(&format!("{sha}.pdf")), + "pdf_storage_path ne doit pas sortir: {row}" + ); + } + // ----- AC #30(a) — accounts serializer ----- #[test] diff --git a/crates/kesh-api/src/lib.rs b/crates/kesh-api/src/lib.rs index c6e3202d..808eac2b 100644 --- a/crates/kesh-api/src/lib.rs +++ b/crates/kesh-api/src/lib.rs @@ -183,7 +183,7 @@ pub fn build_router(state: AppState, static_dir: String) -> Router { // KESH-ADMIN-ROUTES-BEGIN // ⚠️ Bloc borné — Story 22-4a (#167). Le test `admin_pat_denied_e2e` lit CE // fichier par `include_str!`, compte les constructeurs de méthode entre les - // deux marqueurs, et exige exactement 25. Toute route ajoutée ici sans son + // deux marqueurs, et exige exactement 28. Toute route ajoutée ici sans son // couple dans la liste du test fait ROUGIR le test : c'est le rappel qui // manquait, et qui a laissé 16 routes sur 19 sans garde anti-PAT. // Ne pas déplacer ni reformuler les marqueurs sans ajuster le test. @@ -310,6 +310,13 @@ pub fn build_router(state: AppState, static_dir: String) -> Router { // Elle efface `audit_log` (`kesh-seed`, `DELETE` non scopé) : c'était le // second des trois chemins par lesquels la piste de contrôle se perdait. .route("/api/v1/onboarding/reset", post(routes::onboarding::reset)) + // Story 25-6-b (#387, arbitrage 7) : REFIGER le PDF d'une facture dont + // le fichier a disparu. Admin uniquement, refusé aux clés d'API : le + // geste remplace définitivement la référence au document d'origine. + .route( + "/api/v1/invoices/{id}/pdf/refreeze", + post(routes::invoice_pdf::refreeze_invoice_pdf), + ) // ⚠️⚠️ TOUTE ROUTE S'AJOUTE AU-DESSUS DE CETTE LIGNE. ⚠️⚠️ // // `route_layer` n'enveloppe que les routes DÉJÀ enregistrées au moment diff --git a/crates/kesh-api/src/mail/mod.rs b/crates/kesh-api/src/mail/mod.rs index 5b960df8..c322275a 100644 --- a/crates/kesh-api/src/mail/mod.rs +++ b/crates/kesh-api/src/mail/mod.rs @@ -139,6 +139,9 @@ pub struct CapturedEmail { pub attachment_filename: Option, pub attachment_content_type: Option, pub attachment_size: usize, + /// Story 25-6-b (#387) — les octets de la pièce jointe, pour prouver qu'elle + /// est celle du téléchargement (le PDF émis, figé), pas un autre rendu. + pub attachment_bytes: Vec, } #[derive(Debug, Default, Clone)] @@ -225,6 +228,10 @@ impl Mailer for MockMailer { attachment_filename: email.attachment.as_ref().map(|a| a.filename.clone()), attachment_content_type: email.attachment.as_ref().map(|a| a.content_type.clone()), attachment_size: email.attachment.as_ref().map_or(0, |a| a.bytes.len()), + attachment_bytes: email + .attachment + .as_ref() + .map_or_else(Vec::new, |a| a.bytes.clone()), }; let fail = self.fail; Box::pin(async move { diff --git a/crates/kesh-api/src/routes/invoice_email.rs b/crates/kesh-api/src/routes/invoice_email.rs index 5b5c852c..a25ce7c3 100644 --- a/crates/kesh-api/src/routes/invoice_email.rs +++ b/crates/kesh-api/src/routes/invoice_email.rs @@ -7,7 +7,7 @@ //! nécessaire car les routes templates (20-1) sont Admin-only alors que //! l'expéditeur est Comptable+. //! - `POST /api/v1/invoices/{id}/send-email` — envoie la facture (PDF -//! QR-facture joint via `invoice_pdf_service::render`) au **destinataire +//! QR-facture joint via `issued_invoice_pdf::get_or_freeze`, le PDF émis) au **destinataire //! verrouillé** `contacts.email` (décision #13 epic-20 — seuls objet et //! corps sont éditables), puis marque `invoices.emailed_at`/`emailed_to` //! et audite `invoice.emailed`. Le texte envoyé est celui du body de la @@ -37,6 +37,7 @@ use crate::mail::{EmailAttachment, OutgoingEmail}; use crate::middleware::auth::CurrentUser; use crate::routes::invoice_pdf_service; use crate::routes::invoices::InvoiceResponse; +use crate::routes::issued_invoice_pdf::{self, PdfContext}; /// Réponse de `GET /api/v1/invoices/{id}/email-preview`. #[derive(Debug, Serialize)] @@ -778,13 +779,21 @@ pub async fn send_invoice_email( return Err(AppError::InvoiceEmailEmptyContent); } - // Rendu PDF dans la langue du contact (le corps ET la pièce jointe - // partagent la même locale — décision #11 epic-20). Erreurs héritées - // 20-3a inchangées (validated, ≤ 9 lignes, adresse, banque primary). - let language = resolve_language(&contact, &company); - let locale = kesh_i18n::Locale::from(language.as_str()); - let rendered = - invoice_pdf_service::render(&state.pool, &state.i18n, locale, &company, id).await?; + // Story 25-6-b (#387) : la pièce jointe est le PDF ÉMIS — octet pour + // octet celui du téléchargement. Le premier envoi d'une facture non + // figée la fige, et le gel survit à un échec SMTP : le document a été + // produit, la facture n'est simplement pas marquée envoyée. Le corps + // suit la langue ACTUELLE du contact ; la pièce jointe, la langue figée. + // Erreurs de rendu héritées 20-3a inchangées. + let ctx = PdfContext { + pool: &state.pool, + i18n: &state.i18n, + documents_dir: std::path::Path::new(state.config.documents_dir.as_str()), + company: &company, + user_id: current_user.user_id, + actor_api_key_id: current_user.api_key_id, + }; + let rendered = issued_invoice_pdf::get_or_freeze(&ctx, id).await?; let email = OutgoingEmail { to: to.clone(), @@ -1466,6 +1475,10 @@ mod tests { project_id: None, dunning_paused_at: None, dunning_paused_note: None, + pdf_storage_path: None, + pdf_sha256: None, + pdf_frozen_at: None, + pdf_language: None, version: 1, created_at: chrono::NaiveDateTime::default(), updated_at: chrono::NaiveDateTime::default(), diff --git a/crates/kesh-api/src/routes/invoice_pdf.rs b/crates/kesh-api/src/routes/invoice_pdf.rs index 7c2adc87..47e89774 100644 --- a/crates/kesh-api/src/routes/invoice_pdf.rs +++ b/crates/kesh-api/src/routes/invoice_pdf.rs @@ -2,22 +2,27 @@ //! //! Thin wrapper HTTP depuis la Story 20.3a : la génération complète //! (chargement DB, validations, mapping, PDF) vit dans -//! `invoice_pdf_service::render`. Le handler ne garde que l'authentification +//! `invoice_pdf_service::render_document`. Le handler ne garde que l'authentification //! (`get_company_for`), le log, et la construction de la `Response` -//! (`Content-Type` + `Content-Disposition`). La langue est résolue via -//! `state.config.locale` (instance-level, pattern Story 2.1) — pas de champ -//! langue sur `CurrentUser`. +//! (`Content-Type` + `Content-Disposition`). +//! +//! Story 25-6-b (#387) : le PDF servi est le document **émis** — figé au +//! premier rendu après validation, dans la langue du **client**, puis relu à +//! l'identique (`issued_invoice_pdf`). Le premier téléchargement écrit donc +//! (fichier, colonnes, audit `invoice.pdf_frozen`), quel que soit le rôle de +//! l'acteur (arbitrage 8). ⚠️ `HEAD` aussi, axum le servant par ce handler. use crate::middleware::auth::CurrentUser; -use axum::Extension; use axum::extract::{Path, State}; use axum::http::{HeaderValue, StatusCode, header}; use axum::response::{IntoResponse, Response}; +use axum::{Extension, Json}; use crate::AppState; use crate::errors::AppError; use crate::helpers::get_company_for; -use crate::routes::invoice_pdf_service; +use crate::routes::invoices::InvoiceResponse; +use crate::routes::issued_invoice_pdf::{self, PdfContext}; /// `GET /api/v1/invoices/:id/pdf` — téléchargement PDF d'une facture validée. pub async fn get_invoice_pdf( @@ -33,9 +38,15 @@ pub async fn get_invoice_pdf( "PDF download requested" ); - let rendered = - invoice_pdf_service::render(&state.pool, &state.i18n, state.config.locale, &company, id) - .await?; + let ctx = PdfContext { + pool: &state.pool, + i18n: &state.i18n, + documents_dir: std::path::Path::new(state.config.documents_dir.as_str()), + company: &company, + user_id: current_user.user_id, + actor_api_key_id: current_user.api_key_id, + }; + let rendered = issued_invoice_pdf::get_or_freeze(&ctx, id).await?; // Content-Disposition : filename sanitizé (par le service). let disposition = format!( @@ -54,3 +65,29 @@ pub async fn get_invoice_pdf( ); Ok(resp) } + +/// `POST /api/v1/invoices/:id/pdf/refreeze` — **Admin** (arbitrage 7, Story +/// 25-6-b). Refige le PDF d'une facture figée dont le fichier a disparu : un +/// **nouveau** document, pas l'original, tracé au journal d'audit avec +/// l'ancienne et la nouvelle empreinte. Sans corps. Rend la facture à jour. +pub async fn refreeze_invoice_pdf( + State(state): State, + Extension(current_user): Extension, + Path(id): Path, +) -> Result, AppError> { + let company = get_company_for(¤t_user, &state.pool).await?; + let ctx = PdfContext { + pool: &state.pool, + i18n: &state.i18n, + documents_dir: std::path::Path::new(state.config.documents_dir.as_str()), + company: &company, + user_id: current_user.user_id, + actor_api_key_id: current_user.api_key_id, + }; + issued_invoice_pdf::refreeze(&ctx, id).await?; + let (invoice, lines) = + kesh_db::repositories::invoices::find_by_id_with_lines(&state.pool, company.id, id) + .await? + .ok_or(AppError::Database(kesh_db::errors::DbError::NotFound))?; + Ok(Json(InvoiceResponse::from_parts(invoice, lines))) +} diff --git a/crates/kesh-api/src/routes/invoice_pdf_service.rs b/crates/kesh-api/src/routes/invoice_pdf_service.rs index 04c75eae..2e20b46f 100644 --- a/crates/kesh-api/src/routes/invoice_pdf_service.rs +++ b/crates/kesh-api/src/routes/invoice_pdf_service.rs @@ -74,6 +74,10 @@ pub struct RenderedInvoicePdf { /// de son attachment). Dérivé de `invoice.invoice_number` via /// `sanitize_filename`. pub filename_base: String, + /// Story 25-6-b (#387) — la `version` de la facture **lue pour ce rendu**. + /// Le gel la pose en garde : une facture qui a changé pendant le rendu + /// n'est jamais figée sur des données périmées. + pub invoice_version: i32, } /// Le document à produire (Story 25-4-b2, #416) : la facture, ou un **rappel** @@ -161,40 +165,25 @@ pub async fn reminder_amounts( }) } -/// Génère le PDF QR-facture d'une facture **validée**, scopée à -/// `company` (anti-IDOR). +/// Génère le PDF QR-facture d'une facture **validée** — la facture ou un +/// rappel (Story 25-4-b2) —, scopée à `company` (anti-IDOR). /// /// Contrat d'autorisation : `company` DOIT provenir d'une source déjà /// autorisée pour l'utilisateur courant (typiquement `get_company_for`) — /// le service ne re-vérifie pas ce droit. Le scoping de la facture est /// garanti par `find_by_id_with_lines(pool, company.id, …)`. /// -/// Reproduit exactement la séquence historique de `get_invoice_pdf` -/// (Story 5.3) : chargement facture + lignes, validations (statut, -/// nombre de lignes, contact, compte bancaire primary), mapping -/// `kesh-qrbill`, génération. Toutes les erreurs remontent en `AppError` -/// avec les mêmes variantes que le endpoint historique. -pub async fn render( - pool: &sqlx::MySqlPool, - i18n: &kesh_i18n::I18nBundle, - locale: Locale, - company: &Company, - invoice_id: i64, -) -> Result { - render_document( - pool, - i18n, - locale, - company, - invoice_id, - PdfDocument::Invoice, - ) - .await -} - -/// [`render`], pour un document au choix : la facture, ou un rappel (Story -/// 25-4-b2). Le titre du rappel est résolu dans `locale` — celle du contact +/// Séquence : chargement facture + lignes, validations (statut, nombre de +/// lignes, contact, compte bancaire primary), mapping `kesh-qrbill`, +/// génération. Le titre du rappel est résolu dans `locale` — celle du contact /// pour un envoi —, pas dans celle de l'installation. +/// +/// ⛔ **Story 25-6-b (#387) : la facture ne se rend plus directement.** Son +/// PDF passe par `issued_invoice_pdf::get_or_freeze`, qui le fige au premier +/// rendu et le relit ensuite ; appeler ici avec [`PdfDocument::Invoice`] +/// produirait un document qui n'est pas celui émis. L'ancienne fonction +/// `render` a été retirée pour cette raison. Les rappels, eux, restent +/// régénérés (#502). pub async fn render_document( pool: &sqlx::MySqlPool, i18n: &kesh_i18n::I18nBundle, @@ -265,6 +254,7 @@ pub async fn render_document( Ok(RenderedInvoicePdf { bytes, filename_base, + invoice_version: invoice.version, }) } @@ -647,6 +637,10 @@ mod tests { project_id: None, dunning_paused_at: None, dunning_paused_note: None, + pdf_storage_path: None, + pdf_sha256: None, + pdf_frozen_at: None, + pdf_language: None, version: 1, created_at: chrono::NaiveDateTime::default(), updated_at: chrono::NaiveDateTime::default(), diff --git a/crates/kesh-api/src/routes/invoices.rs b/crates/kesh-api/src/routes/invoices.rs index c23166bb..f98ff1d5 100644 --- a/crates/kesh-api/src/routes/invoices.rs +++ b/crates/kesh-api/src/routes/invoices.rs @@ -233,6 +233,11 @@ pub struct InvoiceResponse { /// n'était jusqu'alors signalée par aucune surface de lecture. pub dunning_paused_at: Option, pub dunning_paused_note: Option, + /// Story 25-6-b (#387, AC 6) — instant et langue du PDF figé ; `None` + /// tant que la facture n'a jamais été rendue depuis sa validation. Le + /// chemin et l'empreinte ne sortent pas : ils ne servent qu'au serveur. + pub pdf_frozen_at: Option, + pub pdf_language: Option, /// P6 (review pass 2) : `is_overdue` calculé backend (source unique de /// vérité pour « aujourd'hui » — évite la désync TZ client/serveur). /// `true` ssi `status == 'validated' && paid_at IS NULL && due_date < today_utc`. @@ -317,6 +322,8 @@ impl InvoiceResponse { project_id: invoice.project_id, dunning_paused_at: invoice.dunning_paused_at, dunning_paused_note: invoice.dunning_paused_note, + pdf_frozen_at: invoice.pdf_frozen_at, + pdf_language: invoice.pdf_language, is_overdue, amount_settled: None, amount_due: None, diff --git a/crates/kesh-api/src/routes/issued_invoice_pdf.rs b/crates/kesh-api/src/routes/issued_invoice_pdf.rs new file mode 100644 index 00000000..8dbd6614 --- /dev/null +++ b/crates/kesh-api/src/routes/issued_invoice_pdf.rs @@ -0,0 +1,449 @@ +//! Story 25-6-b (#387) — le PDF **émis** d'une facture : figé au premier rendu +//! après validation, puis relu à l'identique. +//! +//! Ce module est le **seul** chemin vers le PDF d'une facture, pour le +//! téléchargement comme pour l'envoi par e-mail. Il encadre +//! [`invoice_pdf_service::render_document`], qui reste la fonction de rendu +//! (préconditions et codes d'erreur inchangés) : +//! +//! - facture **figée** → relit le fichier sous `KESH_DOCUMENTS_DIR`, vérifie +//! son SHA-256 contre `pdf_sha256`, rend ces octets — y compris pour une +//! facture annulée par un avoir après le gel ; +//! - facture `validated` **non figée** → rend dans la langue du **client**, +//! écrit le fichier, puis pose les quatre colonnes et l'audit +//! `invoice.pdf_frozen` dans une transaction (`invoices::freeze_pdf`). +//! +//! ⛔ Un PDF figé introuvable n'est **jamais** régénéré en silence : ce serait +//! fabriquer une pièce qui n'a pas été émise. Il répond 410, et seul le +//! refigeage explicite d'un administrateur ([`refreeze`]) produit un nouveau +//! document, tracé avec les deux empreintes. +//! +//! Les rendus ne sont pas reproductibles (date de création et `/ID` aléatoire +//! du PDF) : deux rendus concurrents produisent deux fichiers distincts. Celui +//! dont la pose échoue reste orphelin sur le disque — inoffensif, jamais servi. + +use std::path::{Path, PathBuf}; + +use kesh_db::entities::{Company, Invoice, Language}; +use kesh_db::errors::DbError; +use kesh_db::repositories::{contacts, invoices}; +use sha2::{Digest, Sha256}; + +use crate::document_storage::{self, ReadDocumentError}; +use crate::errors::AppError; +use crate::routes::invoice_email::resolve_language; +use crate::routes::invoice_pdf_service::{self, PdfDocument}; + +/// Ce dont le service a besoin, et **qui** agit — l'audit du gel nomme +/// l'acteur, quel que soit son rôle (arbitrage 8 : une pièce sortie de Kesh +/// est figée, qui que ce soit qui l'ait fait sortir). +pub struct PdfContext<'a> { + pub pool: &'a sqlx::MySqlPool, + pub i18n: &'a kesh_i18n::I18nBundle, + pub documents_dir: &'a Path, + /// Société **déjà autorisée** pour l'acteur (`get_company_for`) : le + /// service ne re-vérifie pas ce droit, il scope chaque lecture par elle. + pub company: &'a Company, + pub user_id: i64, + pub actor_api_key_id: Option, +} + +/// Le PDF émis d'une facture. +#[derive(Debug)] +pub struct IssuedPdf { + pub bytes: Vec, + /// Nom de fichier assaini, sans extension (cf. `RenderedInvoicePdf`). + pub filename_base: String, +} + +/// Issue d'une tentative de pose ([`pose`]). +#[derive(Debug)] +pub enum PoseOutcome { + /// La pose a eu lieu : ces octets sont désormais le document émis. + Posed(IssuedPdf), + /// Un rendu concurrent a figé avant nous : c'est **son** document qui est + /// servi, jamais le nôtre. + Adopted(IssuedPdf), + /// La facture a changé de version pendant le rendu : à rendre de nouveau. + Changed, +} + +/// Le PDF émis de la facture `invoice_id` — le figeant s'il ne l'est pas. +/// +/// # Errors +/// - les erreurs de rendu inchangées (`InvoiceNotValidated` pour un brouillon +/// ou une facture annulée **jamais** figée, préconditions du PDF, …) ; +/// - [`AppError::InvoicePdfGone`] (410) si le fichier figé manque ; +/// - `Internal` (500) si son empreinte ne correspond plus, ou si le fichier +/// ne peut pas être écrit — jamais un rendu non figé présenté comme émis ; +/// - [`AppError::InvoiceChanged`] (409) si la facture change deux fois de +/// suite pendant le rendu ; [`AppError::InvoiceCancelled`] si un avoir +/// l'annule pendant le rendu. +pub async fn get_or_freeze(ctx: &PdfContext<'_>, invoice_id: i64) -> Result { + let invoice = load(ctx, invoice_id).await?; + if is_frozen(&invoice) { + return serve_frozen(ctx, &invoice).await; + } + if invoice.status != "validated" { + return Err(AppError::InvoiceNotValidated); + } + + with_one_retry(|| render_and_pose(ctx, &invoice)).await +} + +/// Une seule nouvelle tentative : une pause des rappels, un règlement ou un +/// avoir concurrents dans la seconde du rendu la déclenchent ; une course qui +/// se répète répond 409 `INVOICE_CHANGED` plutôt que de boucler. +async fn with_one_retry(mut attempt: F) -> Result +where + F: FnMut() -> Fut, + Fut: std::future::Future>, +{ + for _ in 0..2 { + match attempt().await? { + PoseOutcome::Posed(pdf) | PoseOutcome::Adopted(pdf) => return Ok(pdf), + PoseOutcome::Changed => continue, + } + } + Err(AppError::InvoiceChanged) +} + +/// Un rendu dans la langue du client, puis sa pose. +async fn render_and_pose(ctx: &PdfContext<'_>, invoice: &Invoice) -> Result { + let language = client_language(ctx, invoice).await?; + let rendered = invoice_pdf_service::render_document( + ctx.pool, + ctx.i18n, + kesh_i18n::Locale::from(language.as_str()), + ctx.company, + invoice.id, + PdfDocument::Invoice, + ) + .await?; + pose( + ctx, + invoice.id, + rendered.invoice_version, + IssuedPdf { + bytes: rendered.bytes, + filename_base: rendered.filename_base, + }, + language, + ) + .await +} + +/// Écrit `rendered` sous `KESH_DOCUMENTS_DIR` et le pose comme document émis +/// de la facture, **si** elle est toujours `validated`, non figée, et à la +/// version `rendered_version` lue au rendu. +/// +/// Exposé pour les tests, qui y intercalent une dévalidation ou un gel +/// concurrent de façon déterministe ; le seul appelant applicatif est +/// [`get_or_freeze`]. +#[doc(hidden)] +pub async fn pose( + ctx: &PdfContext<'_>, + invoice_id: i64, + rendered_version: i32, + rendered: IssuedPdf, + language: Language, +) -> Result { + let (frozen, rendered) = store(ctx.documents_dir, rendered, language).await?; + let applied = invoices::freeze_pdf( + ctx.pool, + ctx.company.id, + invoice_id, + rendered_version, + &frozen, + ctx.user_id, + ctx.actor_api_key_id, + ) + .await?; + if applied { + tracing::info!( + company_id = ctx.company.id, + invoice_id, + pdf_sha256 = %frozen.sha256, + language = %frozen.language, + "PDF de facture figé" + ); + return Ok(PoseOutcome::Posed(rendered)); + } + + // Zéro ligne : relire pour savoir laquelle des trois gardes a refusé. + let after = load(ctx, invoice_id).await?; + if is_frozen(&after) { + return Ok(PoseOutcome::Adopted(serve_frozen(ctx, &after).await?)); + } + match after.status.as_str() { + "validated" => Ok(PoseOutcome::Changed), + "cancelled" => Err(AppError::InvoiceCancelled), + _ => Err(AppError::InvoiceNotValidated), + } +} + +/// Refige le PDF d'une facture dont le fichier a disparu — geste +/// d'administrateur (arbitrage 7). Rend un **nouveau** document (langue +/// actuelle du client, données du moment) : ce n'est pas l'original, et +/// l'audit `invoice.pdf_refrozen` garde les deux empreintes. +/// +/// # Errors +/// - [`AppError::InvoicePdfNotFrozen`] : rien à refiger, le prochain rendu figera ; +/// - [`AppError::InvoicePdfPresent`] : le fichier existe, on ne le remplace pas ; +/// - [`AppError::InvoicePdfIntegrity`] : le fichier existe mais est altéré ; +/// - [`AppError::InvoiceCancelled`] : une facture annulée ne se rend plus ; +/// - les erreurs de rendu inchangées. +pub async fn refreeze(ctx: &PdfContext<'_>, invoice_id: i64) -> Result { + let invoice = load(ctx, invoice_id).await?; + let (Some(storage_path), Some(old_sha256)) = ( + invoice.pdf_storage_path.as_deref(), + invoice.pdf_sha256.clone(), + ) else { + return Err(AppError::InvoicePdfNotFrozen); + }; + match read_checked(ctx.documents_dir, storage_path, &old_sha256).await? { + FrozenFile::Intact(_) => return Err(AppError::InvoicePdfPresent), + FrozenFile::Altered => return Err(AppError::InvoicePdfIntegrity), + FrozenFile::Missing => {} + } + if invoice.status == "cancelled" { + return Err(AppError::InvoiceCancelled); + } + + let language = client_language(ctx, &invoice).await?; + let rendered = invoice_pdf_service::render_document( + ctx.pool, + ctx.i18n, + kesh_i18n::Locale::from(language.as_str()), + ctx.company, + invoice_id, + PdfDocument::Invoice, + ) + .await?; + let (frozen, rendered) = store( + ctx.documents_dir, + IssuedPdf { + bytes: rendered.bytes, + filename_base: rendered.filename_base, + }, + language, + ) + .await?; + let applied = invoices::refreeze_pdf( + ctx.pool, + ctx.company.id, + invoice_id, + &old_sha256, + &frozen, + ctx.user_id, + ctx.actor_api_key_id, + ) + .await?; + if applied { + tracing::warn!( + company_id = ctx.company.id, + invoice_id, + old_pdf_sha256 = %old_sha256, + pdf_sha256 = %frozen.sha256, + "PDF de facture refigé — nouveau document, l'original est perdu" + ); + return Ok(rendered); + } + + // Refusé : un avoir intercalé, ou un refigeage concurrent qui a gagné. + let after = load(ctx, invoice_id).await?; + if after.status == "cancelled" { + Err(AppError::InvoiceCancelled) + } else if after.pdf_sha256.as_deref() != Some(old_sha256.as_str()) { + Err(AppError::InvoicePdfPresent) + } else { + Err(AppError::InvoiceChanged) + } +} + +/// `true` si la facture porte un PDF figé (les quatre colonnes vont ensemble, +/// CHECK `chk_invoices_frozen_pdf`). +fn is_frozen(invoice: &Invoice) -> bool { + invoice.pdf_storage_path.is_some() +} + +async fn load(ctx: &PdfContext<'_>, invoice_id: i64) -> Result { + invoices::find_by_id(ctx.pool, ctx.company.id, invoice_id) + .await? + .ok_or(AppError::Database(DbError::NotFound)) +} + +/// La langue du client, sinon celle de l'installation — la règle de l'e-mail +/// (arbitrage 2). Un contact introuvable laisse `render_document` produire son +/// erreur habituelle : on rend alors dans la langue de l'installation. +async fn client_language(ctx: &PdfContext<'_>, invoice: &Invoice) -> Result { + Ok( + match contacts::find_by_id(ctx.pool, invoice.contact_id).await? { + Some(contact) => resolve_language(&contact, ctx.company), + None => ctx.company.instance_language, + }, + ) +} + +/// Sert le document figé, après en avoir vérifié l'empreinte. +async fn serve_frozen(ctx: &PdfContext<'_>, invoice: &Invoice) -> Result { + let (Some(storage_path), Some(sha256)) = ( + invoice.pdf_storage_path.as_deref(), + invoice.pdf_sha256.as_deref(), + ) else { + return Err(AppError::Internal(format!( + "facture {} : PDF figé incomplet", + invoice.id + ))); + }; + match read_checked(ctx.documents_dir, storage_path, sha256).await? { + FrozenFile::Intact(bytes) => Ok(IssuedPdf { + bytes, + filename_base: invoice_pdf_service::sanitize_filename( + invoice.invoice_number.as_deref().unwrap_or("facture"), + ), + }), + FrozenFile::Missing => Err(AppError::InvoicePdfGone(sha256.to_string())), + FrozenFile::Altered => { + tracing::error!( + company_id = ctx.company.id, + invoice_id = invoice.id, + storage_path, + expected_sha256 = sha256, + "PDF de facture figé ALTÉRÉ — empreinte différente, document non servi" + ); + Err(AppError::Internal(format!( + "facture {} : le PDF figé ne correspond plus à son empreinte", + invoice.id + ))) + } + } +} + +/// État du fichier d'un PDF figé. +enum FrozenFile { + Intact(Vec), + Missing, + Altered, +} + +/// Lit le fichier figé et compare son SHA-256 à `expected_sha256`. +async fn read_checked( + documents_dir: &Path, + storage_path: &str, + expected_sha256: &str, +) -> Result { + let dir: PathBuf = documents_dir.to_path_buf(); + let path = storage_path.to_string(); + let read = tokio::task::spawn_blocking(move || document_storage::read_document(&dir, &path)) + .await + .map_err(|e| AppError::Internal(format!("lecture du PDF figé : {e}")))?; + let bytes = match read { + Ok(bytes) => bytes, + Err(ReadDocumentError::NotFound) => return Ok(FrozenFile::Missing), + Err(e @ (ReadDocumentError::InvalidPath | ReadDocumentError::Io(_))) => { + return Err(AppError::Internal(format!( + "lecture du PDF figé {storage_path} : {e}" + ))); + } + }; + let actual = format!("{:x}", Sha256::digest(&bytes)); + if actual == expected_sha256 { + Ok(FrozenFile::Intact(bytes)) + } else { + Ok(FrozenFile::Altered) + } +} + +/// Écrit le rendu sous `KESH_DOCUMENTS_DIR` (`store_document` est synchrone et +/// fait `fsync` : hors du runtime). Un échec d'écriture est un 500 — rien +/// n'est servi. +async fn store( + documents_dir: &Path, + rendered: IssuedPdf, + language: Language, +) -> Result<(invoices::FrozenPdf, IssuedPdf), AppError> { + let dir = documents_dir.to_path_buf(); + let (meta, rendered) = tokio::task::spawn_blocking(move || { + let original = format!("facture-{}.pdf", rendered.filename_base); + document_storage::store_document(&dir, &rendered.bytes, "pdf", &original, "application/pdf") + .map(|meta| (meta, rendered)) + }) + .await + .map_err(|e| AppError::Internal(format!("écriture du PDF figé : {e}")))? + .map_err(|e| { + tracing::error!(error = %e, "écriture du PDF figé impossible (KESH_DOCUMENTS_DIR)"); + AppError::Internal(format!("écriture du PDF figé : {e}")) + })?; + Ok(( + invoices::FrozenPdf { + storage_path: meta.storage_path, + sha256: meta.sha256, + language: language.as_str().to_string(), + }, + rendered, + )) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn pdf(tag: u8) -> IssuedPdf { + IssuedPdf { + bytes: vec![tag], + filename_base: "F-1".into(), + } + } + + /// Une course qui se répète → 409, après exactement deux tentatives + /// (mutation : boucle sans borne, ou sans nouvelle tentative). + #[tokio::test] + async fn une_course_qui_se_repete_repond_invoice_changed() { + let mut calls = 0; + let res = with_one_retry(|| { + calls += 1; + async { Ok(PoseOutcome::Changed) } + }) + .await; + assert!(matches!(res, Err(AppError::InvoiceChanged)), "{res:?}"); + assert_eq!(calls, 2); + } + + /// Une seule course → la nouvelle tentative pose (mutation : aucune + /// nouvelle tentative, 409 dès la première). + #[tokio::test] + async fn une_course_unique_est_rattrapee_par_la_nouvelle_tentative() { + let mut calls = 0; + let res = with_one_retry(|| { + calls += 1; + let n = calls; + async move { + Ok(if n == 1 { + PoseOutcome::Changed + } else { + PoseOutcome::Posed(pdf(2)) + }) + } + }) + .await + .expect("posé à la seconde tentative"); + assert_eq!(res.bytes, vec![2]); + assert_eq!(calls, 2); + } + + /// Le document d'un rendu concurrent est servi tel quel, sans nouvelle + /// tentative. + #[tokio::test] + async fn le_document_adopte_est_servi_sans_nouvelle_tentative() { + let mut calls = 0; + let res = with_one_retry(|| { + calls += 1; + async { Ok(PoseOutcome::Adopted(pdf(7))) } + }) + .await + .expect("adopté"); + assert_eq!(res.bytes, vec![7]); + assert_eq!(calls, 1); + } +} diff --git a/crates/kesh-api/src/routes/mod.rs b/crates/kesh-api/src/routes/mod.rs index 77e33152..93c1e791 100644 --- a/crates/kesh-api/src/routes/mod.rs +++ b/crates/kesh-api/src/routes/mod.rs @@ -24,6 +24,7 @@ pub mod invoice_email; pub mod invoice_pdf; pub mod invoice_pdf_service; pub mod invoices; +pub mod issued_invoice_pdf; pub mod journal_entries; pub mod limits; pub mod onboarding; diff --git a/crates/kesh-api/tests/admin_pat_denied_e2e.rs b/crates/kesh-api/tests/admin_pat_denied_e2e.rs index 89335861..d9b631cc 100644 --- a/crates/kesh-api/tests/admin_pat_denied_e2e.rs +++ b/crates/kesh-api/tests/admin_pat_denied_e2e.rs @@ -43,7 +43,7 @@ const LIB_RS: &str = include_str!("../src/lib.rs"); const MARKER_BEGIN: &str = "KESH-ADMIN-ROUTES-BEGIN"; const MARKER_END: &str = "KESH-ADMIN-ROUTES-END"; -/// Les **25 constructeurs de méthode** du bloc `admin_routes`, un par couple +/// Les **28 constructeurs de méthode** du bloc `admin_routes`, un par couple /// (méthode, chemin). Les identifiants de chemin sont arbitraires : la couche /// répond **avant** le handler, donc aucune donnée n'a besoin d'exister. /// @@ -53,6 +53,8 @@ const MARKER_END: &str = "KESH-ADMIN-ROUTES-END"; const ADMIN_COUPLES: &[(&str, &str)] = &[ // Story 25-1a (#377) — la réinitialisation de démo rejoint le bloc admin. ("POST", "/api/v1/onboarding/reset"), + // Story 25-6-b (#387) — refiger le PDF d'une facture. + ("POST", "/api/v1/invoices/1/pdf/refreeze"), ("GET", "/api/v1/users"), ("POST", "/api/v1/users"), ("GET", "/api/v1/users/1"), @@ -308,7 +310,7 @@ fn block_uses_no_unlisted_route_constructor() { // Le compteur ne reconnaît que sept constructeurs ; `axum` en exporte // vingt-deux. Plutôt que d'énumérer les quinze autres, on asserte le // COMPLÉMENT — sinon `any(handler)` enregistrerait NEUF méthodes en - // laissant le compteur à 25 : la route serait protégée, mais absente de la + // laissant le compteur à 28 : la route serait protégée, mais absente de la // couverture, et rien ne le signalerait. let block = admin_block(); for forbidden in ["any", "on", "trace", "connect"] { @@ -367,7 +369,7 @@ fn no_route_enters_the_block_by_composition() { // assemblé — mais ses constructeurs `get(`/`post(` vivent dans un AUTRE // fichier, invisibles à `count_method_constructors`, qui ne lit que `lib.rs`. // - // Conséquence : le compteur reste à 25, `ADMIN_COUPLES` ne gagne pas le + // Conséquence : le compteur reste à 28, `ADMIN_COUPLES` ne gagne pas le // couple, et **aucun test HTTP n'exerce jamais cette route**. La protection // tient ; c'est le RAPPEL qui tombe — or c'est le rappel qui est l'objet de // cette story, et ce qui avait laissé 16 routes sur 19 sans garde. @@ -394,7 +396,7 @@ fn the_admin_guards_exist_once_each_and_live_inside_the_block() { // ⚠️ Le trou que ferme ce test a été DÉMONTRÉ : un SECOND routeur admin, // déclaré hors du bloc et mergé dans `protected` avec `require_admin_role` // mais SANS `require_not_pat`, échappe à la totalité du dispositif. Le - // compteur reste à 25, `admin_routes` apparaît toujours 2 fois, il y a + // compteur reste à 28, `admin_routes` apparaît toujours 2 fois, il y a // toujours 2 `.route_layer(` dans le bloc — et une route d'administration // redevient atteignable par un PAT. C'est **littéralement le mode d'échec // de #167**, rouvert par une autre porte. @@ -754,7 +756,7 @@ async fn error_code(resp: reqwest::Response) -> String { // Tests HTTP — le comportement // ============================================================================ -/// AC1, jambe `read-write` : les 25 couples rendent `API_KEY_ADMIN_FORBIDDEN`. +/// AC1, jambe `read-write` : les 28 couples rendent `API_KEY_ADMIN_FORBIDDEN`. /// /// ⚠️ On asserte le **code**, pas le statut. Trois gardes distinctes rendent /// `403` sur ces routes — le RBAC, le gate de portée, et la couche : un test @@ -780,9 +782,9 @@ async fn every_admin_couple_denies_a_read_write_pat(pool: MySqlPool) { /// AC1, jambe `read-only` — et elle se lit par couple, parce que le gate de /// portée répond **avant** la couche. /// -/// Les 5 `get` atteignent la couche ; les 20 méthodes mutantes sont arrêtées en +/// Les 5 `get` atteignent la couche ; les 23 méthodes mutantes sont arrêtées en /// amont par `require_auth` avec `API_KEY_READ_ONLY`, **qui existait avant cette -/// story**. Prescrire `403` partout ferait un test muet sur ces vingt-là : la +/// story**. Prescrire `403` partout ferait un test muet sur ces vingt-trois-là : la /// mutation « retirer la couche doit faire rougir » y est insatisfaisable. #[sqlx::test(migrations = "../kesh-db/test-schema")] async fn read_only_pat_is_stopped_by_the_right_guard_on_each_couple(pool: MySqlPool) { @@ -815,7 +817,8 @@ async fn read_only_pat_is_stopped_by_the_right_guard_on_each_couple(pool: MySqlP // 21 → 22 : Story 25-1a (#377) a fait entrer `POST /api/v1/onboarding/reset` // dans le bloc. Le nombre est codé en dur À DESSEIN — l'incrémenter est le // geste qui force à relire la route qu'on vient d'y ajouter. - (5, 22), + // 22 → 23 : Story 25-6-b (#387), `POST /api/v1/invoices/{id}/pdf/refreeze`. + (5, 23), "la répartition attendue entre la couche et le gate de portée a changé" ); } diff --git a/crates/kesh-api/tests/audit_route_registry.rs b/crates/kesh-api/tests/audit_route_registry.rs index 16f8ee31..4117d838 100644 --- a/crates/kesh-api/tests/audit_route_registry.rs +++ b/crates/kesh-api/tests/audit_route_registry.rs @@ -17,12 +17,12 @@ //! ⚠️ Comparer des NOMBRES ne détecterait pas une route retirée pendant qu'une //! autre est ajoutée : le compte resterait égal et la dérive invisible. Le test //! `admin_pat_denied_e2e` peut compter, lui, parce qu'il opère sur un bloc clos -//! entre marqueurs ; les 109 routes sont réparties dans tout le fichier. +//! entre marqueurs ; les 110 routes sont réparties dans tout le fichier. //! //! # Deux fichiers, deux volets //! -//! L'ensemble clos de l'INVENTAIRE est celui de `lib.rs` (109 routes) ; celui du -//! REGISTRE est plus large (112), car trois routes mutantes vivent dans +//! L'ensemble clos de l'INVENTAIRE est celui de `lib.rs` (110 routes) ; celui du +//! REGISTRE est plus large (113), car trois routes mutantes vivent dans //! `routes/test_endpoints.rs` et sont montées par un `nest()`. D'où : //! //! - volet « route absente du registre » → sur les **deux** fichiers, faute de @@ -108,6 +108,16 @@ const LIB_ROUTES: &[(&str, &str, Status)] = &[ ("post", "payment_batches::cancel_payment_batch", Traced), ("post", "invoices::validate_invoice_handler", Traced), ("post", "invoices::unvalidate_invoice_handler", Traced), + // Story 25-6-b (#387) — refiger le PDF d'une facture (audit + // `invoice.pdf_refrozen`, dans la transaction de `invoices::refreeze_pdf`). + // + // ⚠️ ANGLE MORT ASSUMÉ : `GET /api/v1/invoices/{id}/pdf` + // (`invoice_pdf::get_invoice_pdf`) ÉCRIT désormais — le premier rendu fige + // le document et trace `invoice.pdf_frozen` —, et `HEAD` aussi, axum le + // servant par le handler `get`. Ce registre ne balaie que les méthodes + // d'écriture : cette route mutante lui échappe. Son audit est tenu par + // `invoices::freeze_pdf`, qui ne pose rien sans sa trace. + ("post", "invoice_pdf::refreeze_invoice_pdf", Traced), ("post", "invoices::settle_invoice_handler", Traced), ("post", "invoices::cancel_invoice_settlement_handler", Traced), ("post", "supplier_invoices::cancel_supplier_invoice_settlement", Traced), @@ -450,13 +460,14 @@ fn the_registry_partition_is_what_the_story_declares() { .filter(|(_, _, s)| matches!(s, NoMatter(_))) .count(); - assert_eq!(LIB_ROUTES.len(), 109, "l'inventaire porte sur 109 routes"); + assert_eq!(LIB_ROUTES.len(), 110, "l'inventaire porte sur 110 routes"); assert_eq!(traced + exempt + no_matter, LIB_ROUTES.len()); assert_eq!( - traced, 91, + traced, 92, "73 tracées avant la 25-1b, plus ses 14, plus la dévalidation (25-2-b-1, #440), \ plus l'annulation d'un règlement client (25-3-a-1) et fournisseur (25-3-a-2, #414), \ - plus l'annulation d'un rapprochement (25-3-b, #418)" + plus l'annulation d'un rapprochement (25-3-b, #418), \ + plus le refigeage du PDF d'une facture (25-6-b, #387)" ); assert_eq!( exempt, 15, @@ -465,7 +476,7 @@ fn the_registry_partition_is_what_the_story_declares() { assert_eq!(no_matter, 3, "trois routes mutantes qui ne mutent rien"); assert_eq!( LIB_ROUTES.len() + TEST_ENDPOINT_ROUTES.len(), - 112, + 113, "le registre est plus large que l'inventaire, et c'est voulu" ); } diff --git a/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs b/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs new file mode 100644 index 00000000..19ec3c55 --- /dev/null +++ b/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs @@ -0,0 +1,846 @@ +//! Story 25-6-b (#387) — le PDF d'une facture est figé : une pièce émise ne +//! change plus. +//! +//! Chaque test aurait échoué avant le patch (AC 7) : deux rendus de la même +//! facture n'avaient pas les mêmes octets (date de création et `/ID` du PDF), +//! le téléchargement suivait la langue de l'installation, et une modification +//! du client changeait la pièce déjà émise. +//! +//! ⚠️ Chaque test a **son propre** `KESH_DOCUMENTS_DIR` (patron +//! `inbox_import_e2e`) : plusieurs suppriment ou altèrent un fichier figé, ce +//! qui ne doit jamais toucher le répertoire partagé d'un autre test. + +mod common; + +use std::net::SocketAddr; +use std::path::{Path, PathBuf}; +use std::sync::Arc; +use std::sync::atomic::AtomicBool; +use std::time::Duration; + +use chrono::{NaiveDate, TimeDelta}; +use kesh_api::auth::password::hash_password; +use kesh_api::config::Config; +use kesh_api::errors::AppError; +use kesh_api::mail::MockMailer; +use kesh_api::middleware::rate_limit::RateLimiter; +use kesh_api::routes::issued_invoice_pdf::{self, IssuedPdf, PdfContext, PoseOutcome}; +use kesh_api::{AppState, build_router}; +use kesh_db::entities::Language; +use kesh_db::entities::bank_account::NewBankAccount; +use kesh_db::entities::contact::{ContactType, NewContact, Salutation}; +use kesh_db::entities::credit_note::NewCreditNote; +use kesh_db::entities::invoice::{Invoice, NewInvoice, NewInvoiceLine}; +use kesh_db::entities::user::{NewUser, Role}; +use kesh_db::repositories::{bank_accounts, companies, contacts, credit_notes, invoices, users}; +use kesh_db::test_fixtures::seed_accounting_company; +use rust_decimal_macros::dec; +use serde_json::json; +use sha2::{Digest, Sha256}; +use sqlx::MySqlPool; + +const TEST_JWT_SECRET: &[u8] = b"test-secret-32-bytes-minimum-test-secret-padding"; +const TEST_ADMIN_PASSWORD: &str = "admin123"; +const ROLE_PASSWORD: &str = "role-test-password"; + +// ============================================================ +// Harness +// ============================================================ + +struct TestApp { + base_url: String, + client: reqwest::Client, + documents: PathBuf, +} + +impl TestApp { + fn url(&self, path: &str) -> String { + format!("{}{}", self.base_url, path) + } +} + +fn unique_dir(prefix: &str) -> PathBuf { + let dir = std::env::temp_dir().join(format!("kesh-{prefix}-{}", uuid::Uuid::new_v4())); + std::fs::create_dir_all(&dir).unwrap(); + dir +} + +fn load_i18n() -> Arc { + Arc::new( + kesh_i18n::I18nBundle::load( + Path::new(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("kesh-i18n/locales") + .as_path(), + ) + .expect("load test i18n"), + ) +} + +/// `documents` : le `KESH_DOCUMENTS_DIR` de ce test — un chemin de FICHIER +/// le rend non inscriptible. +async fn spawn_app(pool: MySqlPool, mailer: MockMailer, documents: PathBuf) -> TestApp { + let mut config = Config::from_fields_for_test( + "mysql://test:test@localhost:3306/test".to_string(), + "admin".to_string(), + TEST_ADMIN_PASSWORD.to_string(), + String::from_utf8(TEST_JWT_SECRET.to_vec()).unwrap(), + TimeDelta::minutes(15), + TimeDelta::days(30), + TimeDelta::minutes(15), + TimeDelta::minutes(15), + 100, + TimeDelta::minutes(30), + 12, + ); + config.documents_dir = documents.to_string_lossy().to_string(); + let rate_limiter = RateLimiter::new(&config); + let i18n = load_i18n(); + kesh_api::errors::init_error_i18n(i18n.clone(), config.locale); + + let state = AppState { + pool, + config: Arc::new(config), + rate_limiter: Arc::new(rate_limiter), + rate_limiter_recovery: Arc::new(kesh_api::build_recovery_rate_limiter()), + rate_limiter_send_email: Arc::new(RateLimiter::with_thresholds( + 100, + Duration::from_secs(15 * 60), + Duration::from_secs(15 * 60), + )), + i18n, + users_exist: Arc::new(AtomicBool::new(true)), + mailer: Arc::new(mailer), + smtp_ready: true, + test_mock_mailer: None, + }; + + let app = build_router(state, "nonexistent-static-dir".to_string()); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let addr: SocketAddr = listener.local_addr().unwrap(); + tokio::spawn(async move { + axum::serve( + listener, + app.into_make_service_with_connect_info::(), + ) + .await + .unwrap(); + }); + + TestApp { + base_url: format!("http://{addr}"), + client: reqwest::Client::new(), + documents, + } +} + +async fn login(app: &TestApp, username: &str, password: &str) -> String { + let resp = app + .client + .post(app.url("/api/v1/auth/login")) + .json(&json!({ "username": username, "password": password })) + .send() + .await + .unwrap(); + assert_eq!(resp.status(), 200, "login {username}"); + let body: serde_json::Value = resp.json().await.unwrap(); + body["accessToken"].as_str().unwrap().to_string() +} + +struct Seeded { + company_id: i64, + admin_id: i64, + contact_id: i64, +} + +/// Société comptable + banque principale + contact PDF-ready, dans la langue +/// donnée (`None` : celle de l'installation, FR). +async fn seed(pool: &MySqlPool, language: Option) -> Seeded { + let seeded = seed_accounting_company(pool).await.expect("seed"); + bank_accounts::upsert_primary( + pool, + NewBankAccount { + company_id: seeded.company_id, + bank_name: "UBS".into(), + iban: "CH9300762011623852957".into(), + qr_iban: Some("CH4431999123000889012".into()), + is_primary: true, + }, + ) + .await + .unwrap(); + let contact = contacts::create( + pool, + seeded.admin_user_id, + NewContact { + company_id: seeded.company_id, + contact_type: ContactType::Personne, + name: "Pia Rutschmann".into(), + first_name: Some("Pia".into()), + last_name: Some("Rutschmann".into()), + is_client: true, + is_supplier: false, + address: None, + address_street: Some("Marktgasse".into()), + address_building: Some("28".into()), + address_postal_code: Some("9400".into()), + address_city: Some("Rorschach".into()), + address_country: Some("CH".into()), + email: Some("pia@example.ch".into()), + phone: None, + ide_number: None, + client_number: None, + default_payment_terms: None, + default_payment_terms_days: None, + language, + salutation: Salutation::Neutre, + }, + ) + .await + .unwrap(); + Seeded { + company_id: seeded.company_id, + admin_id: seeded.admin_user_id, + contact_id: contact.id, + } +} + +async fn seed_invoice(pool: &MySqlPool, s: &Seeded, n_lines: usize) -> i64 { + let lines = (0..n_lines) + .map(|i| NewInvoiceLine { + revenue_account_id: None, + description: format!("Ligne {}", i + 1), + quantity: dec!(1), + unit_price: dec!(100.00), + vat_rate: dec!(8.10), + }) + .collect(); + let (invoice, _) = invoices::create( + pool, + s.admin_id, + NewInvoice { + company_id: s.company_id, + contact_id: s.contact_id, + date: NaiveDate::from_ymd_opt(2026, 4, 14).unwrap(), + due_date: Some(NaiveDate::from_ymd_opt(2026, 5, 14).unwrap()), + payment_terms: Some("30 jours net".into()), + lines, + project_id: None, + }, + ) + .await + .unwrap(); + invoices::validate_invoice(pool, s.company_id, invoice.id, s.admin_id) + .await + .expect("validation"); + invoice.id +} + +async fn seed_user(pool: &MySqlPool, username: &str, role: Role, company_id: i64) -> i64 { + users::create( + pool, + NewUser { + username: username.to_string(), + password_hash: hash_password(ROLE_PASSWORD).unwrap(), + role, + active: true, + company_id, + email: None, + }, + ) + .await + .unwrap() + .id +} + +async fn get_pdf(app: &TestApp, token: &str, id: i64) -> reqwest::Response { + app.client + .get(app.url(&format!("/api/v1/invoices/{id}/pdf"))) + .header("Authorization", format!("Bearer {token}")) + .send() + .await + .unwrap() +} + +async fn pdf_bytes(app: &TestApp, token: &str, id: i64) -> Vec { + let resp = get_pdf(app, token, id).await; + assert_eq!(resp.status(), 200); + resp.bytes().await.unwrap().to_vec() +} + +async fn error_code(resp: reqwest::Response) -> String { + let body: serde_json::Value = resp.json().await.unwrap(); + body["error"]["code"] + .as_str() + .unwrap_or_default() + .to_string() +} + +async fn invoice(pool: &MySqlPool, s: &Seeded, id: i64) -> Invoice { + invoices::find_by_id(pool, s.company_id, id) + .await + .unwrap() + .unwrap() +} + +fn sha256(bytes: &[u8]) -> String { + format!("{:x}", Sha256::digest(bytes)) +} + +fn frozen_file(app: &TestApp, inv: &Invoice) -> PathBuf { + app.documents.join(inv.pdf_storage_path.as_deref().unwrap()) +} + +async fn refreeze(app: &TestApp, token: &str, id: i64) -> reqwest::Response { + app.client + .post(app.url(&format!("/api/v1/invoices/{id}/pdf/refreeze"))) + .header("Authorization", format!("Bearer {token}")) + .send() + .await + .unwrap() +} + +// ============================================================ +// Le gel +// ============================================================ + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn deux_telechargements_rendent_les_memes_octets(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 2).await; + let version_avant = invoice(&pool, &s, id).await.version; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + let premier = pdf_bytes(&app, &token, id).await; + let second = pdf_bytes(&app, &token, id).await; + assert_eq!( + premier, second, + "le second téléchargement rend le document figé" + ); + + let inv = invoice(&pool, &s, id).await; + assert_eq!(inv.pdf_sha256.as_deref(), Some(sha256(&premier).as_str())); + assert_eq!(std::fs::read(frozen_file(&app, &inv)).unwrap(), premier); + assert_eq!(inv.version, version_avant, "le gel ne touche pas `version`"); + assert_eq!( + common::audit_actions(&pool, "invoice", id) + .await + .iter() + .filter(|a| *a == "invoice.pdf_frozen") + .count(), + 1, + "un seul gel, une seule trace" + ); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn le_pdf_est_dans_la_langue_du_client(pool: MySqlPool) { + let s = seed(&pool, Some(Language::De)).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + pdf_bytes(&app, &token, id).await; + // L'installation est en français ; le client, en allemand. + assert_eq!( + invoice(&pool, &s, id).await.pdf_language.as_deref(), + Some("DE") + ); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn l_email_joint_les_octets_du_telechargement_et_fige(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 2).await; + let mailer = MockMailer::new(); + let app = spawn_app(pool.clone(), mailer.clone(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + let resp = app + .client + .post(app.url(&format!("/api/v1/invoices/{id}/send-email"))) + .header("Authorization", format!("Bearer {token}")) + .json(&json!({ "subject": "Facture", "body": "Bonjour" })) + .send() + .await + .unwrap(); + assert_eq!(resp.status(), 200); + // Le premier envoi a figé. + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_some()); + + let piece_jointe = mailer.sent_emails()[0].attachment_bytes.clone(); + assert_eq!(pdf_bytes(&app, &token, id).await, piece_jointe); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn modifier_le_client_apres_le_gel_ne_change_pas_le_pdf(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + let avant = pdf_bytes(&app, &token, id).await; + + sqlx::query("UPDATE contacts SET address_city = 'St. Gallen', language = 'DE' WHERE id = ?") + .bind(s.contact_id) + .execute(&pool) + .await + .unwrap(); + + assert_eq!(pdf_bytes(&app, &token, id).await, avant); + assert_eq!( + invoice(&pool, &s, id).await.pdf_language.as_deref(), + Some("FR") + ); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_echec_smtp_laisse_la_facture_figee(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::failing(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + let resp = app + .client + .post(app.url(&format!("/api/v1/invoices/{id}/send-email"))) + .header("Authorization", format!("Bearer {token}")) + .json(&json!({ "subject": "Facture", "body": "Bonjour" })) + .send() + .await + .unwrap(); + assert_eq!(resp.status(), 500); + + let inv = invoice(&pool, &s, id).await; + assert!(inv.emailed_at.is_none(), "non marquée envoyée"); + let fige = inv + .pdf_sha256 + .clone() + .expect("le gel survit à l'échec SMTP"); + assert_eq!(sha256(&pdf_bytes(&app, &token, id).await), fige); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn une_facture_a_dix_lignes_ne_fige_rien(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 10).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + let resp = get_pdf(&app, &token, id).await; + assert_eq!(resp.status(), 400); + assert_eq!(error_code(resp).await, "INVOICE_TOO_MANY_LINES_FOR_PDF"); + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_none()); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_repertoire_non_inscriptible_repond_500_sans_rien_figer(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + // Un FICHIER à la place du répertoire : `create_dir_all` échoue. + let blocker = unique_dir("documents-blocked").join("not-a-dir"); + std::fs::write(&blocker, b"x").unwrap(); + let app = spawn_app(pool.clone(), MockMailer::new(), blocker).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + assert_eq!(get_pdf(&app, &token, id).await.status(), 500); + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_none()); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn le_premier_telechargement_d_un_consultation_fige_et_le_nomme(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let lecteur = seed_user(&pool, "lecteur", Role::Consultation, s.company_id).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "lecteur", ROLE_PASSWORD).await; + + pdf_bytes(&app, &token, id).await; + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_some()); + let (actor_type, _, user_id, _) = + common::audit_actor(&pool, "invoice", id, "invoice.pdf_frozen").await; + assert_eq!((actor_type.as_str(), user_id), ("user", lecteur)); +} + +// ============================================================ +// L'intégrité +// ============================================================ + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_fichier_fige_supprime_repond_410(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + let inv = invoice(&pool, &s, id).await; + std::fs::remove_file(frozen_file(&app, &inv)).unwrap(); + + let resp = get_pdf(&app, &token, id).await; + assert_eq!(resp.status(), 410); + let body: serde_json::Value = resp.json().await.unwrap(); + assert_eq!(body["error"]["code"], "INVOICE_PDF_GONE"); + // Le message nomme le fichier manquant. + assert!( + body["error"]["message"] + .as_str() + .unwrap() + .contains(inv.pdf_sha256.as_deref().unwrap()), + "{body}" + ); + // Jamais régénéré en silence. + assert!(!frozen_file(&app, &inv).exists()); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_fichier_fige_altere_repond_500_sans_rien_servir(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + let inv = invoice(&pool, &s, id).await; + std::fs::write(frozen_file(&app, &inv), b"%PDF-1.7 altered").unwrap(); + + let resp = get_pdf(&app, &token, id).await; + assert_eq!(resp.status(), 500); + assert!(!resp.bytes().await.unwrap().starts_with(b"%PDF")); +} + +// ============================================================ +// Le cycle de vie +// ============================================================ + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn devalider_detache_et_revalider_fige_un_nouveau_document(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + let ancien = pdf_bytes(&app, &token, id).await; + let inv = invoice(&pool, &s, id).await; + + invoices::unvalidate(&pool, s.company_id, id, s.admin_id, inv.version) + .await + .unwrap(); + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_none()); + // Le fichier reste sur le disque. + assert!(frozen_file(&app, &inv).exists()); + + invoices::validate_invoice(&pool, s.company_id, id, s.admin_id) + .await + .unwrap(); + let nouveau = pdf_bytes(&app, &token, id).await; + assert_ne!(sha256(&nouveau), sha256(&ancien), "un nouveau document"); + assert_eq!( + invoice(&pool, &s, id).await.pdf_sha256.as_deref(), + Some(sha256(&nouveau).as_str()) + ); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn une_facture_annulee_garde_son_pdf_fige(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + let emis = pdf_bytes(&app, &token, id).await; + + credit_notes::create_credit_note( + &pool, + NewCreditNote { + company_id: s.company_id, + invoice_id: id, + date: NaiveDate::from_ymd_opt(2026, 4, 20).unwrap(), + }, + s.admin_id, + ) + .await + .unwrap(); + assert_eq!(invoice(&pool, &s, id).await.status, "cancelled"); + + assert_eq!(pdf_bytes(&app, &token, id).await, emis); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn une_facture_annulee_jamais_rendue_n_a_pas_de_pdf(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + credit_notes::create_credit_note( + &pool, + NewCreditNote { + company_id: s.company_id, + invoice_id: id, + date: NaiveDate::from_ymd_opt(2026, 4, 20).unwrap(), + }, + s.admin_id, + ) + .await + .unwrap(); + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + + let resp = get_pdf(&app, &token, id).await; + assert_eq!(resp.status(), 400); + assert_eq!(error_code(resp).await, "INVOICE_NOT_VALIDATED"); +} + +// ============================================================ +// Le service, aux points de course — déterministe +// ============================================================ + +async fn ctx_parts( + pool: &MySqlPool, + s: &Seeded, +) -> (kesh_db::entities::Company, Arc) { + let company = companies::find_by_id(pool, s.company_id) + .await + .unwrap() + .unwrap(); + (company, load_i18n()) +} + +/// Un rendu concurrent a figé avant nous : c'est **son** document qui est +/// servi, jamais le nôtre (mutation tuée : garde `pdf_storage_path IS NULL`). +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn la_pose_perdante_sert_le_document_de_l_autre(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let (company, i18n) = ctx_parts(&pool, &s).await; + let documents = unique_dir("documents"); + let ctx = PdfContext { + pool: &pool, + i18n: &i18n, + documents_dir: &documents, + company: &company, + user_id: s.admin_id, + actor_api_key_id: None, + }; + let version = invoice(&pool, &s, id).await.version; + + let premier = issued_invoice_pdf::get_or_freeze(&ctx, id).await.unwrap(); + let autre = IssuedPdf { + bytes: b"%PDF-1.7 autre rendu".to_vec(), + filename_base: "x".into(), + }; + match issued_invoice_pdf::pose(&ctx, id, version, autre, Language::Fr) + .await + .unwrap() + { + PoseOutcome::Adopted(pdf) => assert_eq!(pdf.bytes, premier.bytes), + other => panic!("attendu Adopted, obtenu {other:?}"), + } +} + +/// La facture a changé pendant le rendu : la pose est refusée et annoncée +/// comme telle, puis le service fige les **nouvelles** données (mutation +/// tuée : garde `version`). +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_rendu_perime_est_refuse_puis_refait(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let (company, i18n) = ctx_parts(&pool, &s).await; + let documents = unique_dir("documents"); + let ctx = PdfContext { + pool: &pool, + i18n: &i18n, + documents_dir: &documents, + company: &company, + user_id: s.admin_id, + actor_api_key_id: None, + }; + let v_rendu = invoice(&pool, &s, id).await.version; + invoices::unvalidate(&pool, s.company_id, id, s.admin_id, v_rendu) + .await + .unwrap(); + invoices::validate_invoice(&pool, s.company_id, id, s.admin_id) + .await + .unwrap(); + + let rendu = IssuedPdf { + bytes: b"%PDF-1.7 ancien rendu".to_vec(), + filename_base: "x".into(), + }; + let outcome = issued_invoice_pdf::pose(&ctx, id, v_rendu, rendu, Language::Fr) + .await + .unwrap(); + assert!(matches!(outcome, PoseOutcome::Changed), "{outcome:?}"); + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_none()); + + let pdf = issued_invoice_pdf::get_or_freeze(&ctx, id).await.unwrap(); + assert!(pdf.bytes.starts_with(b"%PDF-1.")); + assert_ne!(pdf.bytes, b"%PDF-1.7 ancien rendu".to_vec()); +} + +/// Dévalidée entre le rendu et la pose : rien n'est figé sur le brouillon. +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn une_devalidation_intercalee_ne_laisse_rien_de_fige(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let (company, i18n) = ctx_parts(&pool, &s).await; + let documents = unique_dir("documents"); + let ctx = PdfContext { + pool: &pool, + i18n: &i18n, + documents_dir: &documents, + company: &company, + user_id: s.admin_id, + actor_api_key_id: None, + }; + let v = invoice(&pool, &s, id).await.version; + invoices::unvalidate(&pool, s.company_id, id, s.admin_id, v) + .await + .unwrap(); + + let rendu = IssuedPdf { + bytes: b"%PDF-1.7 rendu".to_vec(), + filename_base: "x".into(), + }; + let res = issued_invoice_pdf::pose(&ctx, id, v, rendu, Language::Fr).await; + assert!(matches!(res, Err(AppError::InvoiceNotValidated)), "{res:?}"); + assert!(invoice(&pool, &s, id).await.pdf_storage_path.is_none()); +} + +/// Isolation : le PDF figé d'une autre société n'est jamais servi. +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn un_pdf_fige_d_une_autre_societe_n_est_jamais_servi(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let (company, i18n) = ctx_parts(&pool, &s).await; + let documents = unique_dir("documents"); + let ctx = PdfContext { + pool: &pool, + i18n: &i18n, + documents_dir: &documents, + company: &company, + user_id: s.admin_id, + actor_api_key_id: None, + }; + issued_invoice_pdf::get_or_freeze(&ctx, id).await.unwrap(); + + let mut autre = company.clone(); + autre.id = company.id + 999; + let ctx_autre = PdfContext { + company: &autre, + ..ctx + }; + let res = issued_invoice_pdf::get_or_freeze(&ctx_autre, id).await; + assert!( + matches!( + res, + Err(AppError::Database(kesh_db::errors::DbError::NotFound)) + ), + "{res:?}" + ); +} + +// ============================================================ +// Refiger (arbitrage 7) +// ============================================================ + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_apres_un_410_produit_un_nouveau_document_trace(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + let avant = invoice(&pool, &s, id).await; + std::fs::remove_file(frozen_file(&app, &avant)).unwrap(); + assert_eq!(get_pdf(&app, &token, id).await.status(), 410); + + let resp = refreeze(&app, &token, id).await; + assert_eq!(resp.status(), 200); + let body: serde_json::Value = resp.json().await.unwrap(); + assert!(body["pdfFrozenAt"].is_string(), "{body}"); + + let apres = invoice(&pool, &s, id).await; + assert_ne!(apres.pdf_sha256, avant.pdf_sha256); + assert_eq!( + sha256(&pdf_bytes(&app, &token, id).await), + apres.pdf_sha256.clone().unwrap() + ); + let details = common::audit_details(&pool, "invoice", id, "invoice.pdf_refrozen") + .await + .unwrap(); + assert_eq!(details["oldPdfSha256"], avant.pdf_sha256.unwrap()); + assert_eq!(details["pdfSha256"], apres.pdf_sha256.unwrap()); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_est_refuse_a_un_comptable(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + seed_user(&pool, "compta", Role::Comptable, s.company_id).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "compta", ROLE_PASSWORD).await; + assert_eq!(refreeze(&app, &token, id).await.status(), 403); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_une_facture_non_figee_repond_409(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + let resp = refreeze(&app, &token, id).await; + assert_eq!(resp.status(), 409); + assert_eq!(error_code(resp).await, "INVOICE_PDF_NOT_FROZEN"); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_un_fichier_present_repond_409(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + let avant = invoice(&pool, &s, id).await.pdf_sha256; + + let resp = refreeze(&app, &token, id).await; + assert_eq!(resp.status(), 409); + assert_eq!(error_code(resp).await, "INVOICE_PDF_PRESENT"); + assert_eq!(invoice(&pool, &s, id).await.pdf_sha256, avant); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_un_fichier_altere_repond_409_integrite(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + let inv = invoice(&pool, &s, id).await; + std::fs::write(frozen_file(&app, &inv), b"%PDF-1.7 altered").unwrap(); + + let resp = refreeze(&app, &token, id).await; + assert_eq!(resp.status(), 409); + assert_eq!(error_code(resp).await, "INVOICE_PDF_INTEGRITY"); +} + +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn refiger_une_facture_annulee_est_refuse(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let app = spawn_app(pool.clone(), MockMailer::new(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + credit_notes::create_credit_note( + &pool, + NewCreditNote { + company_id: s.company_id, + invoice_id: id, + date: NaiveDate::from_ymd_opt(2026, 4, 20).unwrap(), + }, + s.admin_id, + ) + .await + .unwrap(); + let inv = invoice(&pool, &s, id).await; + std::fs::remove_file(frozen_file(&app, &inv)).unwrap(); + + let resp = refreeze(&app, &token, id).await; + assert_eq!(resp.status(), 400); + assert_eq!(error_code(resp).await, "INVOICE_CANCELLED"); +} diff --git a/crates/kesh-db/src/entities/invoice.rs b/crates/kesh-db/src/entities/invoice.rs index 737bce86..1a9720b4 100644 --- a/crates/kesh-db/src/entities/invoice.rs +++ b/crates/kesh-db/src/entities/invoice.rs @@ -47,6 +47,14 @@ pub struct Invoice { /// Note optionnelle accompagnant la suspension (posée à la pause, remise à /// NULL à la reprise). pub dunning_paused_note: Option, + /// Story 25-6-b (#387) — le PDF **figé** : chemin relatif à + /// `KESH_DOCUMENTS_DIR`, empreinte SHA-256, instant du gel et langue. Les + /// quatre sont nuls (non figée) ou tous renseignés (CHECK + /// `chk_invoices_frozen_pdf`). Le gel ne touche pas `version`. + pub pdf_storage_path: Option, + pub pdf_sha256: Option, + pub pdf_frozen_at: Option, + pub pdf_language: Option, pub version: i32, pub created_at: NaiveDateTime, pub updated_at: NaiveDateTime, diff --git a/crates/kesh-db/src/repositories/invoices.rs b/crates/kesh-db/src/repositories/invoices.rs index e131e78b..dd5bb326 100644 --- a/crates/kesh-db/src/repositories/invoices.rs +++ b/crates/kesh-db/src/repositories/invoices.rs @@ -46,14 +46,31 @@ use crate::util::search::{escape_boolean_ft, escape_like}; pub(crate) const LINE_COLUMNS: &str = "id, invoice_id, position, description, quantity, \ unit_price, vat_rate, line_total, revenue_account_id, created_at"; +/// Les colonnes de [`Invoice`], dans l'ordre de l'entité — **la seule liste** +/// (Story 25-6-b, #387). Elles étaient énumérées en dur à quatre endroits, et +/// un oubli échouait à l'exécution (`FromRow`), jamais à la compilation. Macro +/// et non `const` : `concat!` n'accepte que des littéraux, et les requêtes +/// constantes s'y composent. +macro_rules! invoice_columns { + () => { + "id, company_id, contact_id, invoice_number, status, date, due_date, payment_terms, \ + total_amount, journal_entry_id, paid_at, emailed_at, emailed_to, project_id, \ + dunning_paused_at, dunning_paused_note, pdf_storage_path, pdf_sha256, pdf_frozen_at, \ + pdf_language, version, created_at, updated_at" + }; +} + +/// [`invoice_columns!`] en `const`, pour les requêtes composées par `format!`. +pub(crate) const INVOICE_COLUMNS: &str = invoice_columns!(); + /// Toujours scopé par `company_id` (anti-IDOR multi-tenant). // pub(crate) : réutilisé par `repositories::credit_notes` (lock de la // facture d'origine) — une seule liste de colonnes à maintenir. -pub(crate) const FIND_INVOICE_SCOPED_SQL: &str = "SELECT id, company_id, contact_id, invoice_number, \ - status, date, due_date, payment_terms, total_amount, journal_entry_id, paid_at, \ - emailed_at, emailed_to, project_id, dunning_paused_at, dunning_paused_note, \ - version, created_at, updated_at \ - FROM invoices WHERE id = ? AND company_id = ?"; +pub(crate) const FIND_INVOICE_SCOPED_SQL: &str = concat!( + "SELECT ", + invoice_columns!(), + " FROM invoices WHERE id = ? AND company_id = ?" +); /// Snapshot JSON d'une facture (entête + lignes) pour l'audit log. fn invoice_snapshot_json(inv: &Invoice, lines: &[InvoiceLine]) -> serde_json::Value { @@ -93,6 +110,9 @@ fn invoice_snapshot_json(inv: &Invoice, lines: &[InvoiceLine]) -> serde_json::Va // P14 (review pass 3 A) : journal_entry_id tracé en audit pour // permettre de détecter une rupture du lien JE lors d'un mark_as_paid. "journalEntryId": inv.journal_entry_id, + // Story 25-6-b (#387) : l'empreinte du PDF figé. Au snapshot « avant » + // d'une dévalidation, c'est la trace du document détaché (AC 5). + "pdfSha256": inv.pdf_sha256, "version": inv.version, "lines": lines_json, }) @@ -779,6 +799,20 @@ pub async fn find_scoped_for_update_in_tx( .map_err(map_db_error) } +/// Retourne une facture par ID, sans ses lignes, scopée par `company_id`. +pub async fn find_by_id( + pool: &MySqlPool, + company_id: i64, + id: i64, +) -> Result, DbError> { + sqlx::query_as::<_, Invoice>(FIND_INVOICE_SCOPED_SQL) + .bind(id) + .bind(company_id) + .fetch_optional(pool) + .await + .map_err(map_db_error) +} + /// Retourne une facture par ID avec ses lignes, scopée par `company_id`. pub async fn find_by_id_with_lines( pool: &MySqlPool, @@ -1301,12 +1335,11 @@ pub async fn delete( ) -> Result<(), DbError> { let mut tx = pool.begin().await.map_err(map_db_error)?; - let current_opt = sqlx::query_as::<_, Invoice>( - "SELECT id, company_id, contact_id, invoice_number, status, date, due_date, \ - payment_terms, total_amount, journal_entry_id, paid_at, emailed_at, emailed_to, \ - project_id, dunning_paused_at, dunning_paused_note, version, created_at, updated_at \ - FROM invoices WHERE id = ? AND company_id = ? FOR UPDATE", - ) + let current_opt = sqlx::query_as::<_, Invoice>(concat!( + "SELECT ", + invoice_columns!(), + " FROM invoices WHERE id = ? AND company_id = ? FOR UPDATE" + )) .bind(id) .bind(company_id) .fetch_optional(&mut *tx) @@ -1572,9 +1605,16 @@ pub async fn unvalidate( // // ⚠️ `invoice_number` n'est PAS touché : c'est le critère du numéro // conservé. + // + // Story 25-6-b (#387, AC 5) : le PDF figé est DÉTACHÉ — les quatre + // colonnes repassent à `NULL` dans le même geste ; son empreinte reste + // au snapshot de l'audit. Le fichier, nommé par son empreinte, reste + // sur le disque. À la revalidation, le premier rendu fige un nouveau + // document. let rows = sqlx::query( "UPDATE invoices SET status = 'draft', journal_entry_id = NULL, \ - version = version + 1 \ + pdf_storage_path = NULL, pdf_sha256 = NULL, pdf_frozen_at = NULL, \ + pdf_language = NULL, version = version + 1 \ WHERE id = ? AND company_id = ? AND version = ? AND status = 'validated'", ) .bind(invoice_id) @@ -2438,6 +2478,171 @@ pub async fn mark_emailed( } } +/// Le PDF d'une facture à figer — ce que le service de `kesh-api` a écrit +/// sous `KESH_DOCUMENTS_DIR` (Story 25-6-b, #387). +#[derive(Debug, Clone)] +pub struct FrozenPdf { + /// Chemin relatif à `KESH_DOCUMENTS_DIR` (`{sha256}.pdf`). + pub storage_path: String, + /// SHA-256 hexadécimal (64 caractères) des octets écrits. + pub sha256: String, + /// Langue du rendu, `FR` / `DE` / `IT` / `EN` (CHECK `chk_invoices_frozen_pdf`). + pub language: String, +} + +/// Pose le PDF figé d'une facture **non encore figée** (Story 25-6-b, AC 2). +/// +/// Un seul `UPDATE` conditionnel, et l'audit `invoice.pdf_frozen` dans la même +/// transaction — l'empreinte n'existe jamais sans sa trace. Les trois gardes +/// sont toutes nécessaires : +/// +/// - `pdf_storage_path IS NULL` : un rendu concurrent a pu figer avant nous ; +/// on ne remplace jamais un document posé ; +/// - `status = 'validated'` : une dévalidation (ou un avoir) intercalée entre +/// le rendu et la pose laisserait sinon un PDF figé sur un brouillon ; +/// - `version = expected_version` : la version **lue au rendu** — une +/// séquence dévalidation → modification → revalidation passerait la seule +/// garde de statut et figerait des lignes périmées. +/// +/// ⚠️ Le gel **ne touche pas** `version` : une dévalidation ou un avoir lancés +/// depuis une fiche ouverte avant le téléchargement tomberaient sinon en 409. +/// +/// Retourne `true` si la pose a eu lieu, `false` si une garde l'a refusée — +/// à l'appelant de relire la facture pour savoir laquelle. +pub async fn freeze_pdf( + pool: &MySqlPool, + company_id: i64, + invoice_id: i64, + expected_version: i32, + pdf: &FrozenPdf, + user_id: i64, + actor_api_key_id: Option, +) -> Result { + let mut tx = pool.begin().await.map_err(map_db_error)?; + + let result = async { + let rows = sqlx::query( + "UPDATE invoices SET pdf_storage_path = ?, pdf_sha256 = ?, \ + pdf_frozen_at = NOW(3), pdf_language = ? \ + WHERE id = ? AND company_id = ? AND pdf_storage_path IS NULL \ + AND status = 'validated' AND version = ?", + ) + .bind(&pdf.storage_path) + .bind(&pdf.sha256) + .bind(&pdf.language) + .bind(invoice_id) + .bind(company_id) + .bind(expected_version) + .execute(&mut *tx) + .await + .map_err(map_db_error)? + .rows_affected(); + if rows != 1 { + return Ok(false); + } + + audit_log::insert_in_tx( + &mut tx, + NewAuditLogEntry::for_actor( + user_id, + actor_api_key_id, + "invoice.pdf_frozen", + "invoice", + invoice_id, + Some(serde_json::json!({ + "pdfSha256": pdf.sha256, + "pdfLanguage": pdf.language, + })), + ), + ) + .await?; + Ok(true) + } + .await; + + match result { + Ok(applied) => { + tx.commit().await.map_err(map_db_error)?; + Ok(applied) + } + Err(e) => { + let _ = tx.rollback().await; + Err(e) + } + } +} + +/// Remplace le PDF figé d'une facture dont le fichier a disparu — le geste +/// d'administrateur de l'arbitrage 7 (Story 25-6-b, AC 3-bis). +/// +/// Gardes : `pdf_sha256 = old_sha256` (deux refigeages concurrents, un seul +/// réussit) et `status = 'validated'` (un avoir intercalé refuse). L'audit +/// `invoice.pdf_refrozen` porte l'**ancienne** et la **nouvelle** empreinte, +/// dans la même transaction. Retourne `true` si le remplacement a eu lieu. +pub async fn refreeze_pdf( + pool: &MySqlPool, + company_id: i64, + invoice_id: i64, + old_sha256: &str, + pdf: &FrozenPdf, + user_id: i64, + actor_api_key_id: Option, +) -> Result { + let mut tx = pool.begin().await.map_err(map_db_error)?; + + let result = async { + let rows = sqlx::query( + "UPDATE invoices SET pdf_storage_path = ?, pdf_sha256 = ?, \ + pdf_frozen_at = NOW(3), pdf_language = ? \ + WHERE id = ? AND company_id = ? AND pdf_sha256 = ? \ + AND status = 'validated'", + ) + .bind(&pdf.storage_path) + .bind(&pdf.sha256) + .bind(&pdf.language) + .bind(invoice_id) + .bind(company_id) + .bind(old_sha256) + .execute(&mut *tx) + .await + .map_err(map_db_error)? + .rows_affected(); + if rows != 1 { + return Ok(false); + } + + audit_log::insert_in_tx( + &mut tx, + NewAuditLogEntry::for_actor( + user_id, + actor_api_key_id, + "invoice.pdf_refrozen", + "invoice", + invoice_id, + Some(serde_json::json!({ + "oldPdfSha256": old_sha256, + "pdfSha256": pdf.sha256, + "pdfLanguage": pdf.language, + })), + ), + ) + .await?; + Ok(true) + } + .await; + + match result { + Ok(applied) => { + tx.commit().await.map_err(map_db_error)?; + Ok(applied) + } + Err(e) => { + let _ = tx.rollback().await; + Err(e) + } + } +} + /// Charge jusqu'à `max_rows` factures validées filtrées (pour l'export CSV). /// /// Contrairement à [`list_by_company_paginated`], pas de LIMIT/OFFSET exposé : @@ -2508,14 +2713,11 @@ pub async fn list_all_by_company( pool: &MySqlPool, company_id: i64, ) -> Result, DbError> { - sqlx::query_as::<_, Invoice>( - "SELECT id, company_id, contact_id, invoice_number, status, date, due_date, \ - payment_terms, total_amount, journal_entry_id, paid_at, emailed_at, emailed_to, \ - project_id, dunning_paused_at, dunning_paused_note, version, created_at, updated_at \ - FROM invoices \ - WHERE company_id = ? \ - ORDER BY id", - ) + sqlx::query_as::<_, Invoice>(concat!( + "SELECT ", + invoice_columns!(), + " FROM invoices WHERE company_id = ? ORDER BY id" + )) .bind(company_id) .fetch_all(pool) .await diff --git a/crates/kesh-db/src/repositories/reconciliation.rs b/crates/kesh-db/src/repositories/reconciliation.rs index bcf9b03d..856a8ca2 100644 --- a/crates/kesh-db/src/repositories/reconciliation.rs +++ b/crates/kesh-db/src/repositories/reconciliation.rs @@ -45,10 +45,9 @@ use crate::repositories::invoice_settlements::{ INVOICE_AMOUNT_DUE_DERIVED_SQL, amount_due_derived_joins, }; -/// Colonnes Invoice pour SELECT (cohérent FIND_INVOICE_SCOPED_SQL). -const INVOICE_COLUMNS: &str = "id, company_id, contact_id, invoice_number, status, date, \ - due_date, payment_terms, total_amount, journal_entry_id, paid_at, emailed_at, emailed_to, \ - project_id, dunning_paused_at, dunning_paused_note, version, created_at, updated_at"; +// Colonnes Invoice pour SELECT — la liste unique de `repositories::invoices` +// (Story 25-6-b). +use super::invoices::INVOICE_COLUMNS; /// Facture candidate à la réconciliation, accompagnée de son **reste dû** et /// de son **TTC**. diff --git a/crates/kesh-db/tests/invoice_frozen_pdf.rs b/crates/kesh-db/tests/invoice_frozen_pdf.rs new file mode 100644 index 00000000..282c7b8f --- /dev/null +++ b/crates/kesh-db/tests/invoice_frozen_pdf.rs @@ -0,0 +1,471 @@ +//! Story 25-6-b (#387) — les gardes de la pose du PDF figé, côté base. +//! +//! Le service de `kesh-api` rend le PDF puis le pose par +//! `invoices::freeze_pdf`, un `UPDATE` conditionnel. Ses trois gardes — +//! `pdf_storage_path IS NULL`, `status = 'validated'`, `version` — ne se +//! prouvent pas par une course (`tokio::join!` passerait aussi sans elles) : +//! chaque test ici **intercale** l'événement concurrent de façon déterministe, +//! puis pose. ⚠️ Chaque test nomme la mutation qu'il tue. + +use chrono::NaiveDate; +use kesh_db::entities::contact::{ContactType, NewContact, Salutation}; +use kesh_db::entities::invoice::{NewInvoice, NewInvoiceLine}; +use kesh_db::repositories::contacts; +use kesh_db::repositories::invoices::{self, FrozenPdf}; +use kesh_db::test_fixtures::seed_accounting_company; +use rust_decimal_macros::dec; +use sqlx::MySqlPool; + +struct Seeded { + company_id: i64, + user_id: i64, + invoice_id: i64, +} + +async fn seed_validated(pool: &MySqlPool) -> Seeded { + let seeded = seed_accounting_company(pool).await.expect("seed"); + let contact = contacts::create( + pool, + seeded.admin_user_id, + NewContact { + company_id: seeded.company_id, + contact_type: ContactType::Personne, + name: "Pia Rutschmann".into(), + first_name: None, + last_name: None, + is_client: true, + is_supplier: false, + address: None, + address_street: Some("Marktgasse".into()), + address_building: Some("28".into()), + address_postal_code: Some("9400".into()), + address_city: Some("Rorschach".into()), + address_country: Some("CH".into()), + email: None, + phone: None, + ide_number: None, + client_number: None, + default_payment_terms: None, + default_payment_terms_days: None, + language: None, + salutation: Salutation::Neutre, + }, + ) + .await + .expect("contact"); + let (invoice, _) = invoices::create( + pool, + seeded.admin_user_id, + NewInvoice { + company_id: seeded.company_id, + contact_id: contact.id, + date: NaiveDate::from_ymd_opt(2026, 4, 14).unwrap(), + due_date: None, + payment_terms: None, + lines: vec![NewInvoiceLine { + revenue_account_id: None, + description: "Conseil".into(), + quantity: dec!(1), + unit_price: dec!(100.00), + vat_rate: dec!(8.10), + }], + project_id: None, + }, + ) + .await + .expect("facture"); + invoices::validate_invoice(pool, seeded.company_id, invoice.id, seeded.admin_user_id) + .await + .expect("validation"); + Seeded { + company_id: seeded.company_id, + user_id: seeded.admin_user_id, + invoice_id: invoice.id, + } +} + +fn frozen(tag: char) -> FrozenPdf { + let sha256: String = std::iter::repeat_n(tag, 64).collect(); + FrozenPdf { + storage_path: format!("{sha256}.pdf"), + sha256, + language: "FR".into(), + } +} + +async fn version_of(pool: &MySqlPool, s: &Seeded) -> i32 { + invoices::find_by_id(pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap() + .version +} + +async fn audit_count(pool: &MySqlPool, s: &Seeded, action: &str) -> i64 { + sqlx::query_scalar( + "SELECT COUNT(*) FROM audit_log WHERE entity_type = 'invoice' AND entity_id = ? AND action = ?", + ) + .bind(s.invoice_id) + .bind(action) + .fetch_one(pool) + .await + .unwrap() +} + +#[sqlx::test(migrations = "./test-schema")] +async fn la_pose_fige_sans_toucher_la_version_et_trace_l_acteur(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + + let applied = invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(applied); + + let inv = invoices::find_by_id(&pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap(); + assert_eq!(inv.pdf_sha256.as_deref(), Some("a".repeat(64).as_str())); + assert_eq!(inv.pdf_language.as_deref(), Some("FR")); + assert!(inv.pdf_frozen_at.is_some()); + // B2 : le gel ne touche pas `version` (mutation : `version = version + 1`). + assert_eq!(inv.version, v); + + let (user_id, details): (i64, Vec) = sqlx::query_as( + "SELECT user_id, details_json FROM audit_log \ + WHERE entity_type = 'invoice' AND entity_id = ? AND action = 'invoice.pdf_frozen'", + ) + .bind(s.invoice_id) + .fetch_one(&pool) + .await + .unwrap(); + assert_eq!(user_id, s.user_id); + let details: serde_json::Value = serde_json::from_slice(&details).unwrap(); + assert_eq!(details["pdfSha256"], "a".repeat(64)); + assert_eq!(details["pdfLanguage"], "FR"); +} + +/// Mutation tuée : garde `pdf_storage_path IS NULL` retirée — la seconde pose +/// remplacerait le document déjà émis. +#[sqlx::test(migrations = "./test-schema")] +async fn une_facture_deja_figee_ne_se_refige_pas(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + assert!( + invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None + ) + .await + .unwrap() + ); + + let second = invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('b'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(!second, "la seconde pose doit être refusée"); + let inv = invoices::find_by_id(&pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap(); + assert_eq!(inv.pdf_sha256.as_deref(), Some("a".repeat(64).as_str())); + // Le refus n'écrit rien au journal. + assert_eq!(audit_count(&pool, &s, "invoice.pdf_frozen").await, 1); +} + +/// Mutation tuée : garde `status = 'validated'` retirée. La facture repasse en +/// brouillon **à version égale** — un `UPDATE` brut, pour isoler cette garde de +/// celle de version (une vraie dévalidation incrémente aussi `version`). +#[sqlx::test(migrations = "./test-schema")] +async fn rien_ne_se_fige_sur_un_brouillon(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + let je: Option = sqlx::query_scalar("SELECT journal_entry_id FROM invoices WHERE id = ?") + .bind(s.invoice_id) + .fetch_one(&pool) + .await + .unwrap(); + sqlx::query("UPDATE invoices SET status = 'draft', journal_entry_id = NULL WHERE id = ?") + .bind(s.invoice_id) + .execute(&pool) + .await + .unwrap(); + assert!(je.is_some()); + assert_eq!( + version_of(&pool, &s).await, + v, + "montage : version inchangée" + ); + + let applied = invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(!applied); + let inv = invoices::find_by_id(&pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap(); + assert!(inv.pdf_storage_path.is_none()); +} + +/// Mutation tuée : garde `version` retirée. Dévalidation → modification → +/// revalidation dans la fenêtre du rendu : le statut est de nouveau +/// `validated`, seule la version dit que les lignes ont changé. +#[sqlx::test(migrations = "./test-schema")] +async fn un_rendu_perime_ne_se_fige_pas(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v_rendu = version_of(&pool, &s).await; + + let (draft, _) = invoices::unvalidate(&pool, s.company_id, s.invoice_id, s.user_id, v_rendu) + .await + .unwrap(); + sqlx::query("UPDATE invoice_lines SET description = 'Conseil (modifié)' WHERE invoice_id = ?") + .bind(s.invoice_id) + .execute(&pool) + .await + .unwrap(); + invoices::validate_invoice(&pool, s.company_id, s.invoice_id, s.user_id) + .await + .unwrap(); + assert_ne!(version_of(&pool, &s).await, v_rendu); + assert_eq!(draft.status, "draft"); + + let applied = invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v_rendu, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!( + !applied, + "un rendu de l'ancienne version ne doit pas se figer" + ); + let inv = invoices::find_by_id(&pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap(); + assert!(inv.pdf_storage_path.is_none()); +} + +/// Isolation : une pose sous une autre société ne touche rien. +#[sqlx::test(migrations = "./test-schema")] +async fn la_pose_est_scopee_par_societe(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + let applied = invoices::freeze_pdf( + &pool, + s.company_id + 999, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(!applied); +} + +/// AC 5 : la dévalidation détache, et l'audit porte l'empreinte détachée. +#[sqlx::test(migrations = "./test-schema")] +async fn la_devalidation_detache_le_pdf(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + + let (after, _) = invoices::unvalidate(&pool, s.company_id, s.invoice_id, s.user_id, v) + .await + .unwrap(); + assert!(after.pdf_storage_path.is_none()); + assert!(after.pdf_sha256.is_none()); + assert!(after.pdf_frozen_at.is_none()); + assert!(after.pdf_language.is_none()); + + let details: Vec = sqlx::query_scalar( + "SELECT details_json FROM audit_log \ + WHERE entity_type = 'invoice' AND entity_id = ? AND action = 'invoice.unvalidated'", + ) + .bind(s.invoice_id) + .fetch_one(&pool) + .await + .unwrap(); + let details: serde_json::Value = serde_json::from_slice(&details).unwrap(); + assert_eq!(details["pdfSha256"], "a".repeat(64)); +} + +/// AC 1 : la contrainte tout-ou-rien rejette un état partiel, et une langue +/// hors des quatre. +#[sqlx::test(migrations = "./test-schema")] +async fn la_contrainte_rejette_un_etat_partiel(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let partiel = sqlx::query("UPDATE invoices SET pdf_sha256 = ? WHERE id = ?") + .bind("a".repeat(64)) + .bind(s.invoice_id) + .execute(&pool) + .await; + assert!(partiel.is_err(), "empreinte sans chemin : refusé"); + + let courte = sqlx::query( + "UPDATE invoices SET pdf_storage_path = 'x.pdf', pdf_sha256 = 'abc', \ + pdf_frozen_at = NOW(3), pdf_language = 'FR' WHERE id = ?", + ) + .bind(s.invoice_id) + .execute(&pool) + .await; + assert!(courte.is_err(), "empreinte de 3 caractères : refusé"); + + let langue = sqlx::query( + "UPDATE invoices SET pdf_storage_path = 'x.pdf', pdf_sha256 = ?, \ + pdf_frozen_at = NOW(3), pdf_language = 'fr' WHERE id = ?", + ) + .bind("a".repeat(64)) + .bind(s.invoice_id) + .execute(&pool) + .await; + assert!(langue.is_err(), "langue en minuscules : refusé"); +} + +/// AC 3-bis : deux refigeages concurrents, un seul réussit ; l'audit porte +/// l'ancienne et la nouvelle empreinte. +#[sqlx::test(migrations = "./test-schema")] +async fn deux_refigeages_concurrents_un_seul_reussit(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + let old = "a".repeat(64); + + let first = invoices::refreeze_pdf( + &pool, + s.company_id, + s.invoice_id, + &old, + &frozen('b'), + s.user_id, + None, + ) + .await + .unwrap(); + let second = invoices::refreeze_pdf( + &pool, + s.company_id, + s.invoice_id, + &old, + &frozen('c'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(first); + assert!(!second, "mutation tuée : garde `pdf_sha256 = old` retirée"); + + let inv = invoices::find_by_id(&pool, s.company_id, s.invoice_id) + .await + .unwrap() + .unwrap(); + assert_eq!(inv.pdf_sha256.as_deref(), Some("b".repeat(64).as_str())); + assert_eq!(audit_count(&pool, &s, "invoice.pdf_refrozen").await, 1); + let details: Vec = sqlx::query_scalar( + "SELECT details_json FROM audit_log \ + WHERE entity_type = 'invoice' AND entity_id = ? AND action = 'invoice.pdf_refrozen'", + ) + .bind(s.invoice_id) + .fetch_one(&pool) + .await + .unwrap(); + let details: serde_json::Value = serde_json::from_slice(&details).unwrap(); + assert_eq!(details["oldPdfSha256"], old); + assert_eq!(details["pdfSha256"], "b".repeat(64)); +} + +/// AC 3-bis : un refigeage n'aboutit pas sur une facture qui n'est plus +/// validée (mutation tuée : garde `status` retirée du refigeage). +#[sqlx::test(migrations = "./test-schema")] +async fn le_refigeage_refuse_une_facture_qui_n_est_plus_validee(pool: MySqlPool) { + let s = seed_validated(&pool).await; + let v = version_of(&pool, &s).await; + invoices::freeze_pdf( + &pool, + s.company_id, + s.invoice_id, + v, + &frozen('a'), + s.user_id, + None, + ) + .await + .unwrap(); + sqlx::query("UPDATE invoices SET status = 'cancelled' WHERE id = ?") + .bind(s.invoice_id) + .execute(&pool) + .await + .unwrap(); + + let applied = invoices::refreeze_pdf( + &pool, + s.company_id, + s.invoice_id, + &"a".repeat(64), + &frozen('b'), + s.user_id, + None, + ) + .await + .unwrap(); + assert!(!applied); +} diff --git a/crates/kesh-i18n/locales/de-CH/messages.ftl b/crates/kesh-i18n/locales/de-CH/messages.ftl index 18dcf17a..d2ebfb69 100644 --- a/crates/kesh-i18n/locales/de-CH/messages.ftl +++ b/crates/kesh-i18n/locales/de-CH/messages.ftl @@ -622,6 +622,12 @@ invoice-pdf-qr-acceptance-point = Annahmestelle invoice-pdf-qr-separate-before-paying = Vor der Einzahlung abzutrennen invoice-pdf-error-invoice-not-validated = Die Rechnung muss validiert sein, bevor ein PDF erzeugt werden kann. +error-invoice-cancelled = Die Rechnung wurde während der Erstellung ihres PDF durch eine Gutschrift storniert — es wurde kein Dokument festgeschrieben. +error-invoice-pdf-gone = Das ausgestellte PDF dieser Rechnung ist nicht auffindbar: Die Datei { $sha256 }.pdf fehlt im Dokumentenverzeichnis (KESH_DOCUMENTS_DIR). Stellen Sie sie aus der Sicherung dieses Verzeichnisses wieder her; andernfalls kann ein Administrator die Rechnung neu festschreiben. +error-invoice-changed = Die Rechnung wurde während der Erstellung ihres PDF geändert. Versuchen Sie es erneut. +error-invoice-pdf-present = Das ausgestellte PDF dieser Rechnung ist vorhanden: Es gibt nichts neu festzuschreiben. +error-invoice-pdf-not-frozen = Diese Rechnung hat noch kein festgeschriebenes PDF: Der nächste Download schreibt es fest. +error-invoice-pdf-integrity = Die Datei des ausgestellten PDF wurde verändert: Ihr Fingerabdruck stimmt nicht mehr überein. Stellen Sie sie aus der Sicherung wieder her oder entfernen Sie sie aus dem Dokumentenverzeichnis, bevor Sie neu festschreiben. invoice-pdf-error-invoice-not-pdf-ready = Die Rechnung ist nicht bereit für die PDF-Erzeugung. invoice-pdf-error-pdf-generation-failed = PDF-Erzeugung fehlgeschlagen. Bitte später erneut versuchen. invoice-pdf-error-popup-blocked = Pop-up vom Browser blockiert — bitte Pop-ups für das PDF erlauben. @@ -1381,6 +1387,12 @@ invoice-send-email-confirm = E-Mail senden invoice-send-email-success = Rechnung per E-Mail gesendet invoice-send-email-error-empty = Betreff und Text der E-Mail dürfen nicht leer sein. invoice-detail-emailed-at-label = Gesendet am +invoice-detail-pdf-frozen-at-label = Dokument festgeschrieben am +invoice-pdf-refreeze-button = Dokument neu festschreiben +invoice-pdf-refreeze-title = Dokument neu festschreiben? +invoice-pdf-refreeze-body = Die Datei des ausgestellten PDF dieser Rechnung ist nicht auffindbar. Neu festschreiben erzeugt ein NEUES Dokument mit den heutigen Daten und der heutigen Sprache des Kunden: Es ist nicht das Original. Der Vorgang wird im Prüfprotokoll festgehalten, mit dem Fingerabdruck des alten und des neuen Dokuments. +invoice-pdf-refreeze-restore-first = Stellen Sie die Datei zuerst aus der Sicherung des Dokumentenverzeichnisses wieder her, falls sie dort vorhanden ist: Nur so erhalten Sie das Original zurück. Sind mehrere Rechnungen betroffen, prüfen Sie vor dem Neufestschreiben die Einbindung dieses Verzeichnisses. +invoice-pdf-refreeze-done = Dokument neu festgeschrieben. contact-form-language = Korrespondenzsprache contact-form-language-inherited = Geerbt (Sprache der Instanz) contact-form-salutation = Anrede @@ -2035,6 +2047,8 @@ audit-log-action-invoice-unvalidated = Rechnung entvalidiert audit-log-action-invoice-cancelled = Rechnung storniert audit-log-action-invoice-deleted = Rechnung gelöscht audit-log-action-invoice-emailed = Rechnung per E-Mail gesendet +audit-log-action-invoice-pdf-frozen = Rechnungs-PDF festgeschrieben +audit-log-action-invoice-pdf-refrozen = Rechnungs-PDF neu festgeschrieben audit-log-action-invoice-paid = Rechnung bezahlt audit-log-action-invoice-partially-settled = Rechnung teilweise bezahlt audit-log-action-invoice-settlement-cancelled = Zahlung storniert diff --git a/crates/kesh-i18n/locales/en-CH/messages.ftl b/crates/kesh-i18n/locales/en-CH/messages.ftl index 9ccb420e..ad36b2d3 100644 --- a/crates/kesh-i18n/locales/en-CH/messages.ftl +++ b/crates/kesh-i18n/locales/en-CH/messages.ftl @@ -622,6 +622,12 @@ invoice-pdf-qr-acceptance-point = Acceptance point invoice-pdf-qr-separate-before-paying = Separate before paying in invoice-pdf-error-invoice-not-validated = The invoice must be validated before generating a PDF. +error-invoice-cancelled = The invoice was cancelled by a credit note while its PDF was being prepared — no document was frozen. +error-invoice-pdf-gone = The issued PDF of this invoice cannot be found: the file { $sha256 }.pdf is missing from the documents directory (KESH_DOCUMENTS_DIR). Restore it from the backup of that directory; failing that, an administrator can refreeze the invoice. +error-invoice-changed = The invoice was modified while its PDF was being prepared. Please try again. +error-invoice-pdf-present = The issued PDF of this invoice is present: there is nothing to refreeze. +error-invoice-pdf-not-frozen = This invoice has no frozen PDF yet: its next download will freeze it. +error-invoice-pdf-integrity = The issued PDF file has been altered: its fingerprint no longer matches. Restore it from the backup, or move it out of the documents directory before refreezing. invoice-pdf-error-invoice-not-pdf-ready = The invoice is not ready for PDF generation. invoice-pdf-error-pdf-generation-failed = PDF generation failed. Please try again later. invoice-pdf-error-popup-blocked = Pop-up blocked by the browser — please allow pop-ups to download the PDF. @@ -1381,6 +1387,12 @@ invoice-send-email-confirm = Send the email invoice-send-email-success = Invoice sent by email invoice-send-email-error-empty = The email subject and body cannot be empty. invoice-detail-emailed-at-label = Sent on +invoice-detail-pdf-frozen-at-label = Document frozen on +invoice-pdf-refreeze-button = Refreeze the document +invoice-pdf-refreeze-title = Refreeze the document? +invoice-pdf-refreeze-body = The issued PDF file of this invoice cannot be found. Refreezing produces a NEW document, with today's data and the client's current language: it is not the original. The action is recorded in the audit log, with the fingerprint of the old document and of the new one. +invoice-pdf-refreeze-restore-first = First restore the file from the backup of the documents directory, if it is there: it is the only way to recover the original. If several invoices are affected, check how that directory is mounted before refreezing. +invoice-pdf-refreeze-done = Document refrozen. contact-form-language = Correspondence language contact-form-language-inherited = Inherited (instance language) contact-form-salutation = Salutation @@ -2041,6 +2053,8 @@ audit-log-action-invoice-unvalidated = Invoice unvalidated audit-log-action-invoice-cancelled = Invoice cancelled audit-log-action-invoice-deleted = Invoice deleted audit-log-action-invoice-emailed = Invoice sent by e-mail +audit-log-action-invoice-pdf-frozen = Invoice PDF frozen +audit-log-action-invoice-pdf-refrozen = Invoice PDF refrozen audit-log-action-invoice-paid = Invoice paid audit-log-action-invoice-partially-settled = Invoice partially paid audit-log-action-invoice-settlement-cancelled = Settlement cancelled diff --git a/crates/kesh-i18n/locales/fr-CH/messages.ftl b/crates/kesh-i18n/locales/fr-CH/messages.ftl index 1da1b3e6..8eef42da 100644 --- a/crates/kesh-i18n/locales/fr-CH/messages.ftl +++ b/crates/kesh-i18n/locales/fr-CH/messages.ftl @@ -655,6 +655,12 @@ invoice-pdf-qr-separate-before-paying = A détacher avant le versement # Messages d'erreur PDF (6 clés — codes applicatifs + causes détaillées) invoice-pdf-error-invoice-not-validated = La facture doit être validée avant de pouvoir être générée en PDF. +error-invoice-cancelled = La facture a été annulée par un avoir pendant la préparation de son PDF — aucun document n'a été figé. +error-invoice-pdf-gone = Le PDF émis de cette facture est introuvable : le fichier { $sha256 }.pdf manque dans le répertoire des documents (KESH_DOCUMENTS_DIR). Restaurez-le depuis la sauvegarde de ce répertoire ; à défaut, un administrateur peut refiger la facture. +error-invoice-changed = La facture a été modifiée pendant la préparation de son PDF. Réessayez. +error-invoice-pdf-present = Le PDF émis de cette facture est présent : il n'y a rien à refiger. +error-invoice-pdf-not-frozen = Cette facture n'a pas encore de PDF figé : son prochain téléchargement le figera. +error-invoice-pdf-integrity = Le fichier du PDF émis a été altéré : son empreinte ne correspond plus. Restaurez-le depuis la sauvegarde, ou écartez-le du répertoire des documents avant de refiger. invoice-pdf-error-invoice-not-pdf-ready = La facture n'est pas prête pour la génération PDF. invoice-pdf-error-pdf-generation-failed = Échec de la génération du PDF. Réessayez ultérieurement. invoice-pdf-error-popup-blocked = Pop-up bloqué par le navigateur — autorisez les pop-ups pour télécharger le PDF. @@ -1478,6 +1484,12 @@ invoice-send-email-confirm = Envoyer l'e-mail invoice-send-email-success = Facture envoyée par e-mail invoice-send-email-error-empty = L'objet et le corps de l'e-mail ne peuvent pas être vides. invoice-detail-emailed-at-label = Envoyée le +invoice-detail-pdf-frozen-at-label = Document figé le +invoice-pdf-refreeze-button = Refiger le document +invoice-pdf-refreeze-title = Refiger le document ? +invoice-pdf-refreeze-body = Le fichier du PDF émis de cette facture est introuvable. Refiger produit un NOUVEAU document, avec les données et la langue du client d'aujourd'hui : ce n'est pas l'original. Le geste est tracé au journal d'audit, avec l'empreinte de l'ancien document et celle du nouveau. +invoice-pdf-refreeze-restore-first = Restaurez d'abord le fichier depuis la sauvegarde du répertoire des documents, s'il y existe : c'est le seul moyen de retrouver l'original. Si plusieurs factures sont dans ce cas, vérifiez le montage de ce répertoire avant de refiger. +invoice-pdf-refreeze-done = Document refigé. contact-form-language = Langue de correspondance contact-form-language-inherited = Héritée (langue de l'instance) contact-form-salutation = Civilité @@ -2089,6 +2101,8 @@ audit-log-action-invoice-unvalidated = Facture dévalidée audit-log-action-invoice-cancelled = Facture annulée audit-log-action-invoice-deleted = Facture supprimée audit-log-action-invoice-emailed = Facture envoyée par e-mail +audit-log-action-invoice-pdf-frozen = PDF de facture figé +audit-log-action-invoice-pdf-refrozen = PDF de facture refigé audit-log-action-invoice-paid = Facture payée audit-log-action-invoice-partially-settled = Facture partiellement réglée audit-log-action-invoice-settlement-cancelled = Règlement annulé diff --git a/crates/kesh-i18n/locales/it-CH/messages.ftl b/crates/kesh-i18n/locales/it-CH/messages.ftl index 4491a46e..b0240c5a 100644 --- a/crates/kesh-i18n/locales/it-CH/messages.ftl +++ b/crates/kesh-i18n/locales/it-CH/messages.ftl @@ -622,6 +622,12 @@ invoice-pdf-qr-acceptance-point = Punto di accettazione invoice-pdf-qr-separate-before-paying = Da staccare prima del versamento invoice-pdf-error-invoice-not-validated = La fattura deve essere convalidata prima di generare il PDF. +error-invoice-cancelled = La fattura è stata annullata da una nota di credito durante la preparazione del suo PDF — nessun documento è stato fissato. +error-invoice-pdf-gone = Il PDF emesso di questa fattura è introvabile: il file { $sha256 }.pdf manca nella directory dei documenti (KESH_DOCUMENTS_DIR). Ripristinatelo dal backup di questa directory; in alternativa, un amministratore può fissare di nuovo la fattura. +error-invoice-changed = La fattura è stata modificata durante la preparazione del suo PDF. Riprovate. +error-invoice-pdf-present = Il PDF emesso di questa fattura è presente: non c'è nulla da fissare di nuovo. +error-invoice-pdf-not-frozen = Questa fattura non ha ancora un PDF fissato: il prossimo download lo fisserà. +error-invoice-pdf-integrity = Il file del PDF emesso è stato alterato: la sua impronta non corrisponde più. Ripristinatelo dal backup, oppure toglietelo dalla directory dei documenti prima di fissarlo di nuovo. invoice-pdf-error-invoice-not-pdf-ready = La fattura non è pronta per la generazione PDF. invoice-pdf-error-pdf-generation-failed = Generazione PDF fallita. Riprovare più tardi. invoice-pdf-error-popup-blocked = Pop-up bloccato dal browser — consentire i pop-up per scaricare il PDF. @@ -1381,6 +1387,12 @@ invoice-send-email-confirm = Invia l'e-mail invoice-send-email-success = Fattura inviata per e-mail invoice-send-email-error-empty = L'oggetto e il corpo dell'e-mail non possono essere vuoti. invoice-detail-emailed-at-label = Inviata il +invoice-detail-pdf-frozen-at-label = Documento fissato il +invoice-pdf-refreeze-button = Fissare di nuovo il documento +invoice-pdf-refreeze-title = Fissare di nuovo il documento? +invoice-pdf-refreeze-body = Il file del PDF emesso di questa fattura è introvabile. Fissarlo di nuovo produce un NUOVO documento, con i dati e la lingua del cliente di oggi: non è l'originale. L'operazione è registrata nel registro di controllo, con l'impronta del vecchio documento e quella del nuovo. +invoice-pdf-refreeze-restore-first = Ripristinate prima il file dal backup della directory dei documenti, se vi si trova: è l'unico modo per ritrovare l'originale. Se più fatture sono in questo caso, verificate il montaggio di questa directory prima di fissarle di nuovo. +invoice-pdf-refreeze-done = Documento fissato di nuovo. contact-form-language = Lingua di corrispondenza contact-form-language-inherited = Ereditata (lingua dell'istanza) contact-form-salutation = Titolo @@ -2036,6 +2048,8 @@ audit-log-action-invoice-unvalidated = Fattura annullata (convalida) audit-log-action-invoice-cancelled = Fattura annullata audit-log-action-invoice-deleted = Fattura eliminata audit-log-action-invoice-emailed = Fattura inviata per e-mail +audit-log-action-invoice-pdf-frozen = PDF della fattura fissato +audit-log-action-invoice-pdf-refrozen = PDF della fattura fissato di nuovo audit-log-action-invoice-paid = Fattura pagata audit-log-action-invoice-partially-settled = Fattura parzialmente pagata audit-log-action-invoice-settlement-cancelled = Pagamento annullato diff --git a/crates/kesh-reconciliation/src/matching.rs b/crates/kesh-reconciliation/src/matching.rs index aed947d0..ed0dbacb 100644 --- a/crates/kesh-reconciliation/src/matching.rs +++ b/crates/kesh-reconciliation/src/matching.rs @@ -235,6 +235,10 @@ mod tests { project_id: None, dunning_paused_at: None, dunning_paused_note: None, + pdf_storage_path: None, + pdf_sha256: None, + pdf_frozen_at: None, + pdf_language: None, version: 1, created_at: NaiveDateTime::default(), updated_at: NaiveDateTime::default(), diff --git a/frontend/src/lib/features/invoices/invoices.api.ts b/frontend/src/lib/features/invoices/invoices.api.ts index 1fca69b3..9e78a4a6 100644 --- a/frontend/src/lib/features/invoices/invoices.api.ts +++ b/frontend/src/lib/features/invoices/invoices.api.ts @@ -86,6 +86,14 @@ export async function unvalidateInvoice( return apiClient.post(`/api/v1/invoices/${id}/unvalidate`, { version }); } +/** + * Refige le PDF d'une facture dont le fichier a disparu (Story 25-6-b, #387) — + * **Admin**. Produit un nouveau document, pas l'original. Rend la facture à jour. + */ +export async function refreezeInvoicePdf(id: number): Promise { + return apiClient.post(`/api/v1/invoices/${id}/pdf/refreeze`, {}); +} + export async function getInvoiceSettings(): Promise { return apiClient.get('/api/v1/company/invoice-settings'); } diff --git a/frontend/src/lib/features/invoices/invoices.types.ts b/frontend/src/lib/features/invoices/invoices.types.ts index ad7aef1d..1bdf97db 100644 --- a/frontend/src/lib/features/invoices/invoices.types.ts +++ b/frontend/src/lib/features/invoices/invoices.types.ts @@ -81,6 +81,13 @@ export interface InvoiceResponse { /** Story 21-6a (D10) — rappels suspendus. `null` = rappels actifs. */ dunningPausedAt: string | null; dunningPausedNote: string | null; + /** + * Story 25-6-b (#387) — instant et langue (`FR`/`DE`/`IT`/`EN`) du PDF + * émis, figé au premier téléchargement ou envoi. `null` = jamais rendue + * depuis sa validation. + */ + pdfFrozenAt: string | null; + pdfLanguage: string | null; /** Calculé backend (P6 review pass 2). Source unique de vérité pour le badge « en retard ». */ isOverdue: boolean; /** diff --git a/frontend/src/lib/shared/i18n-keys.test.ts b/frontend/src/lib/shared/i18n-keys.test.ts index eb8e271e..f8bc294b 100644 --- a/frontend/src/lib/shared/i18n-keys.test.ts +++ b/frontend/src/lib/shared/i18n-keys.test.ts @@ -356,7 +356,15 @@ const ATTENDU = { // quatre catalogues), l'en-tête « Solde » remplacé par « Ouverture » et // « Clôture » (+1, deux clés neuves `reports-column-opening` / `-closing`), et // le libellé de la ligne calculée, qui réemploie les deux clés du bilan (+2). - sitesTotal: 1758, + // + // Story 25-6-b (#387) : **1758 → 1767**, recompté par ce test et par + // `grep -o "i18nMsg("` aux deux bornes de `invoices/[id]/+page.svelte` + // (69 → 78) — la mention « Document figé le », le bouton « Refiger le + // document » (deux sites : l'en-tête et le pied du dialogue), le titre, le + // corps et l'avertissement du dialogue, son « Annuler », le succès, et le + // repli générique du refus — neuf sites. Le bouton PDF, extrait dans un snippet pour servir aussi la facture + // annulée, n'ajoute aucun site : il n'est écrit qu'une fois. + sitesTotal: 1767, sitesNonResolus: 34, relais: 7, sitesGabarit: 10, diff --git a/frontend/src/routes/(app)/invoices/[id]/+page.svelte b/frontend/src/routes/(app)/invoices/[id]/+page.svelte index 57433db5..4012c261 100644 --- a/frontend/src/routes/(app)/invoices/[id]/+page.svelte +++ b/frontend/src/routes/(app)/invoices/[id]/+page.svelte @@ -20,6 +20,7 @@ deleteInvoice, validateInvoice, unvalidateInvoice, + refreezeInvoicePdf, settleInvoice, listInvoiceSettlements, cancelInvoiceSettlement, @@ -666,8 +667,43 @@ INVOICE_PDF_HEADER_OVERFLOW: 'error-invoice-pdf-header-overflow', PDF_GENERATION_FAILED: 'invoice-pdf-error-pdf-generation-failed', NOT_FOUND: 'invoice-pdf-error-not-found', + // Story 25-6-b (#387) — le PDF figé. Le message du 410 vient du serveur, + // qui nomme le fichier manquant : il est repris tel quel. + INVOICE_PDF_GONE: 'error-invoice-pdf-gone', + INVOICE_CHANGED: 'error-invoice-changed', + INVOICE_CANCELLED: 'error-invoice-cancelled', }; + // Story 25-6-b (#387, arbitrage 7) — le fichier du PDF figé a disparu (410). + // Un administrateur peut alors REFIGER : un nouveau document, pas l'original. + let pdfGone = $state(false); + let refreezeOpen = $state(false); + let refreezeSubmitting = $state(false); + let refreezeError = $state(''); + + /** Le bouton PDF : facture validée, ou annulée dont le document a été figé. */ + let canDownloadPdf = $derived( + invoice?.status === 'validated' || (invoice?.status === 'cancelled' && !!invoice.pdfFrozenAt), + ); + + async function confirmRefreeze() { + if (!invoice) return; + refreezeSubmitting = true; + refreezeError = ''; + try { + invoice = await refreezeInvoicePdf(invoice.id); + pdfGone = false; + refreezeOpen = false; + notifySuccess(i18nMsg('invoice-pdf-refreeze-done', 'Document refigé.')); + } catch (err) { + refreezeError = isApiError(err) + ? err.message + : i18nMsg('invoice-pdf-error-generic', 'Erreur lors du téléchargement du PDF'); + } finally { + refreezeSubmitting = false; + } + } + async function downloadPdf() { if (!invoice) return; pdfDownloading = true; @@ -693,6 +729,7 @@ // Revoke différé pour laisser le navigateur récupérer le blob. setTimeout(() => URL.revokeObjectURL(url), 5_000); } catch (err) { + if (isApiError(err) && err.code === 'INVOICE_PDF_GONE') pdfGone = true; if (isApiError(err)) { // Pass 2 : remappage vers les clés FTL réellement présentes — // `INVOICE_TOO_MANY_LINES_FOR_PDF` utilise la clé legacy @@ -727,6 +764,33 @@ Facture — Kesh +{#snippet pdfButtons()} + {#if invoice && canDownloadPdf} + + {#if isAdmin && pdfGone} + + {/if} + {/if} +{/snippet} +
{/if} - + {@render pdfButtons()} {#if canManage} {#if featureFlags.smtpConfigured} +
+ + {@render pdfButtons()} + +
{/if}
@@ -938,6 +996,14 @@
{invoice.paidAt.slice(0, 10)}
{/if} + {#if invoice.pdfFrozenAt} +
+
+ {i18nMsg('invoice-detail-pdf-frozen-at-label', 'Document figé le')} +
+
{invoice.pdfFrozenAt.slice(0, 10)}
+
+ {/if} {#if invoice.emailedAt}
@@ -1070,6 +1136,57 @@ {/if}
+ + { + refreezeOpen = o; + if (!o) refreezeError = ''; + }} + > + + + + {i18nMsg('invoice-pdf-refreeze-title', 'Refiger le document ?')} + + +
+

+ {i18nMsg( + 'invoice-pdf-refreeze-body', + "Le fichier du PDF émis de cette facture est introuvable. Refiger produit un NOUVEAU document, avec les données et la langue du client d'aujourd'hui : ce n'est pas l'original. Le geste est tracé au journal d'audit, avec l'empreinte de l'ancien document et celle du nouveau.", + )} +

+
+ {i18nMsg( + 'invoice-pdf-refreeze-restore-first', + "Restaurez d'abord le fichier depuis la sauvegarde du répertoire des documents, s'il y existe : c'est le seul moyen de retrouver l'original. Si plusieurs factures sont dans ce cas, vérifiez le montage de ce répertoire avant de refiger.", + )} +
+
+ {#if refreezeError} +
+ {refreezeError} +
+ {/if} + + + + +
+
+ { diff --git a/frontend/src/routes/(app)/invoices/[id]/invoice-pdf-page.test.ts b/frontend/src/routes/(app)/invoices/[id]/invoice-pdf-page.test.ts new file mode 100644 index 00000000..0b6c26ff --- /dev/null +++ b/frontend/src/routes/(app)/invoices/[id]/invoice-pdf-page.test.ts @@ -0,0 +1,238 @@ +/** + * La fiche facture, côté PDF émis — Story 25-6-b (#387). + * + * Ce que l'écran doit tenir : le bouton PDF d'une facture **annulée** n'existe + * que si son document a été figé ; la mention « Document figé le » ; et, sur un + * 410 `INVOICE_PDF_GONE`, le refigeage réservé à l'administrateur, qui + * **confirme** avant d'envoyer. + * + * ⚠️ Chaque test nomme la MUTATION qu'il attrape. Patron : + * `invoice-settlements-page.test.ts` — mocks hoistés AVANT l'import du composant. + */ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; +import { render, fireEvent, cleanup, waitFor } from "@testing-library/svelte"; +import type { InvoiceResponse } from "$lib/features/invoices/invoices.types"; + +vi.mock("$app/environment", () => ({ browser: true })); +vi.mock("$app/navigation", () => ({ goto: vi.fn() })); +vi.mock("$app/state", () => ({ + page: { params: { id: "5" }, url: new URL("http://localhost/invoices/5") }, +})); +vi.mock("$lib/shared/utils/i18n.svelte", () => ({ + i18nMsg: ( + _k: string, + fallback: string, + args?: Record, + ) => + args + ? fallback.replace(/\{\s*\$(\w+)\s*\}/g, (_, n) => String(args[n] ?? "")) + : fallback, +})); +vi.mock("$lib/shared/utils/notify", () => ({ + notifyError: vi.fn(), + notifySuccess: vi.fn(), + notifyWarning: vi.fn(), + notifyMissingFiscalYearOrFallback: vi.fn(() => false), +})); + +const auth = vi.hoisted(() => ({ + currentUser: { role: "Admin", username: "a", userId: "1" }, +})); +vi.mock("$lib/app/stores/auth.svelte", () => ({ authState: auth })); + +const getBlobMock = vi.hoisted(() => vi.fn()); +vi.mock("$lib/shared/utils/api-client", async (importOriginal) => { + const real = + await importOriginal(); + return { + ...real, + apiClient: { ...real.apiClient, getBlob: (url: string) => getBlobMock(url) }, + }; +}); + +const getInvoiceMock = vi.fn(); +const refreezeMock = vi.fn(); +vi.mock("$lib/features/invoices/invoices.api", () => ({ + getInvoice: (id: number) => getInvoiceMock(id), + refreezeInvoicePdf: (id: number) => refreezeMock(id), + listInvoiceSettlements: vi.fn(async () => []), + cancelInvoiceSettlement: vi.fn(), + deleteInvoice: vi.fn(), + validateInvoice: vi.fn(), + unvalidateInvoice: vi.fn(), + settleInvoice: vi.fn(), + getInvoiceEmailPreview: vi.fn(), + sendInvoiceEmail: vi.fn(), + getInvoiceSettings: vi.fn(async () => ({})), +})); +vi.mock("$lib/features/accounts/accounts.api", () => ({ + fetchAccounts: vi.fn(async () => []), +})); +vi.mock("$lib/features/bank-accounts/bank-accounts.api", () => ({ + listBankAccounts: vi.fn(async () => []), +})); +vi.mock("$lib/features/reminders/reminders.api", () => ({ + listReminderHistory: vi.fn(async () => []), + pauseDunning: vi.fn(), + resumeDunning: vi.fn(), +})); +vi.mock("$lib/features/projects/projects.api", () => ({ + listProjects: vi.fn(async () => []), +})); +vi.mock("$lib/features/credit-notes/credit-notes.api", () => ({ + createCreditNote: vi.fn(), +})); + +import Page from "./+page.svelte"; + +function invoice(partial: Partial = {}): InvoiceResponse { + return { + id: 5, + companyId: 1, + contactId: 1, + invoiceNumber: "F-2026-005", + status: "validated", + date: "2026-03-01", + dueDate: "2026-03-31", + paymentTerms: null, + totalAmount: "100.00", + totalTtc: "100.00", + vatBreakdown: [], + journalEntryId: 9, + paidAt: null, + emailedAt: null, + emailedTo: null, + projectId: null, + dunningPausedAt: null, + dunningPausedNote: null, + pdfFrozenAt: null, + pdfLanguage: null, + isOverdue: false, + amountSettled: "0.00", + amountDue: "100.00", + version: 3, + createdAt: "2026-03-01T00:00:00", + updatedAt: "2026-03-05T00:00:00", + lines: [], + ...partial, + }; +} + +const gone = { + code: "INVOICE_PDF_GONE", + message: "Le fichier abc.pdf manque dans le répertoire des documents.", + status: 410, +}; + +beforeEach(() => { + auth.currentUser.role = "Admin"; +}); +afterEach(() => { + cleanup(); + vi.clearAllMocks(); +}); + +describe("fiche facture — bouton PDF d'une facture annulée", () => { + it("présent si le document a été figé (mutation : condition `validated` seule)", async () => { + getInvoiceMock.mockResolvedValue( + invoice({ status: "cancelled", pdfFrozenAt: "2026-03-02T10:00:00.000" }), + ); + const { findByTestId } = render(Page); + expect(await findByTestId("invoice-download-pdf")).toBeTruthy(); + }); + + it("absent si elle n'a jamais été figée (mutation : `cancelled` sans condition de gel)", async () => { + getInvoiceMock.mockResolvedValue(invoice({ status: "cancelled" })); + const { findByTestId, queryByTestId } = render(Page); + await findByTestId("invoice-detail"); + expect(queryByTestId("invoice-download-pdf")).toBeNull(); + }); +}); + +describe("fiche facture — mention du gel", () => { + it("« Document figé le » avec la date, quand le PDF est figé", async () => { + getInvoiceMock.mockResolvedValue( + invoice({ pdfFrozenAt: "2026-03-02T10:00:00.000" }), + ); + const { findByTestId } = render(Page); + expect((await findByTestId("invoice-pdf-frozen-at")).textContent).toBe( + "2026-03-02", + ); + }); + + it("aucune mention quand il ne l'est pas", async () => { + getInvoiceMock.mockResolvedValue(invoice()); + const { findByTestId, queryByTestId } = render(Page); + await findByTestId("invoice-detail"); + expect(queryByTestId("invoice-pdf-frozen-at")).toBeNull(); + }); +}); + +describe("fiche facture — refiger après un 410", () => { + it("un admin voit le bouton après le 410, confirme, et la fiche se met à jour (mutation : envoi sans confirmation)", async () => { + getInvoiceMock.mockResolvedValue( + invoice({ pdfFrozenAt: "2026-03-02T10:00:00.000" }), + ); + getBlobMock.mockRejectedValue(gone); + refreezeMock.mockResolvedValue( + invoice({ pdfFrozenAt: "2026-04-01T08:00:00.000" }), + ); + const { findByTestId, getByTestId, queryByTestId } = render(Page); + + await fireEvent.click(await findByTestId("invoice-download-pdf")); + await fireEvent.click(await findByTestId("invoice-pdf-refreeze-button")); + // Rien n'est envoyé avant la confirmation, qui conseille de restaurer. + expect(refreezeMock).not.toHaveBeenCalled(); + expect( + getByTestId("invoice-pdf-refreeze-dialog").textContent, + ).toContain("Restaurez d'abord"); + await fireEvent.click(getByTestId("invoice-pdf-refreeze-confirm")); + + await waitFor(() => expect(refreezeMock).toHaveBeenCalledWith(5)); + await waitFor(() => + expect(getByTestId("invoice-pdf-frozen-at").textContent).toBe( + "2026-04-01", + ), + ); + await waitFor(() => + expect(queryByTestId("invoice-pdf-refreeze-button")).toBeNull(), + ); + }); + + it("pas de bouton avant le 410 (mutation : bouton toujours affiché à l'admin)", async () => { + getInvoiceMock.mockResolvedValue( + invoice({ pdfFrozenAt: "2026-03-02T10:00:00.000" }), + ); + const { findByTestId, queryByTestId } = render(Page); + await findByTestId("invoice-download-pdf"); + expect(queryByTestId("invoice-pdf-refreeze-button")).toBeNull(); + }); + + it("un Comptable ne le voit pas, même après le 410 (mutation : garde `isAdmin` retirée)", async () => { + auth.currentUser.role = "Comptable"; + getInvoiceMock.mockResolvedValue( + invoice({ pdfFrozenAt: "2026-03-02T10:00:00.000" }), + ); + getBlobMock.mockRejectedValue(gone); + const { findByTestId, queryByTestId } = render(Page); + await fireEvent.click(await findByTestId("invoice-download-pdf")); + await waitFor(() => expect(getBlobMock).toHaveBeenCalled()); + // Laisser le rejet se propager avant de conclure à l'absence. + await new Promise((r) => setTimeout(r, 0)); + expect(queryByTestId("invoice-pdf-refreeze-button")).toBeNull(); + }); + + it("un autre échec que le 410 n'ouvre pas le refigeage (mutation : tout échec pose `pdfGone`)", async () => { + getInvoiceMock.mockResolvedValue(invoice()); + getBlobMock.mockRejectedValue({ + code: "INVOICE_NOT_PDF_READY", + message: "Adresse incomplète.", + status: 400, + }); + const { findByTestId, queryByTestId } = render(Page); + await fireEvent.click(await findByTestId("invoice-download-pdf")); + await waitFor(() => expect(getBlobMock).toHaveBeenCalled()); + await new Promise((r) => setTimeout(r, 0)); + expect(queryByTestId("invoice-pdf-refreeze-button")).toBeNull(); + }); +}); diff --git a/frontend/src/routes/(app)/invoices/[id]/invoice-settlements-page.test.ts b/frontend/src/routes/(app)/invoices/[id]/invoice-settlements-page.test.ts index d707f4d2..028009bd 100644 --- a/frontend/src/routes/(app)/invoices/[id]/invoice-settlements-page.test.ts +++ b/frontend/src/routes/(app)/invoices/[id]/invoice-settlements-page.test.ts @@ -98,6 +98,8 @@ function invoice(partial: Partial = {}): InvoiceResponse { projectId: null, dunningPausedAt: null, dunningPausedNote: null, + pdfFrozenAt: null, + pdfLanguage: null, isOverdue: false, amountSettled: "100.00", amountDue: "0.00", diff --git a/frontend/tests/e2e/invoice-frozen-pdf.spec.ts b/frontend/tests/e2e/invoice-frozen-pdf.spec.ts new file mode 100644 index 00000000..e0d209d0 --- /dev/null +++ b/frontend/tests/e2e/invoice-frozen-pdf.spec.ts @@ -0,0 +1,100 @@ +import { expect, test } from '@playwright/test'; +import { + seedTestState, + clearAuthStorage, + authedApiContext, + disposeContextSafe, +} from './helpers/test-state'; +import { + createContactWithAddressViaApi, + createAndValidateInvoiceViaApi, +} from './helpers/api-fixtures'; + +/** + * Tests E2E — le PDF d'une facture est figé (Story 25-6-b, #387). + * + * Seul un E2E voit les octets traverser la frontière HTTP jusqu'au client. Les + * deux parcours : deux téléchargements rendent le même fichier ; une facture + * annulée par un avoir garde le PDF qu'elle a émis. + * + * ⚠️ Chaque test crée **sa propre** facture : les fichiers figés persistent + * sous `KESH_DOCUMENTS_DIR` (`/tmp/kesh-e2e/documents`) d'une exécution à + * l'autre, et une facture déjà figée par un run précédent ne prouverait rien. + */ + +test.beforeAll(async () => { + await seedTestState('with-company'); +}); + +test.afterEach(async ({ page }) => { + await clearAuthStorage(page); +}); + +async function login(page: import('@playwright/test').Page) { + await page.goto('/login'); + await page.fill('#username', 'admin'); + await page.fill('#password', 'admin123'); + await page.click('button[type="submit"]'); + await expect(page).toHaveURL('/'); +} + +function uniq(prefix: string): string { + return `${prefix} ${Date.now()}-${Math.floor(Math.random() * 1e6)}`; +} + +test.describe('PDF figé', () => { + test('deux téléchargements rendent le même fichier', async ({ page }) => { + await login(page); + const contactId = await createContactWithAddressViaApi(page, uniq('PDF Figé')); + const invoiceId = await createAndValidateInvoiceViaApi(page, contactId); + + const ctx = await authedApiContext(page); + try { + const premier = await ctx.get(`/api/v1/invoices/${invoiceId}/pdf`); + expect(premier.status()).toBe(200); + const second = await ctx.get(`/api/v1/invoices/${invoiceId}/pdf`); + expect(second.status()).toBe(200); + const a = await premier.body(); + const b = await second.body(); + expect(a.subarray(0, 7).toString('utf8')).toMatch(/^%PDF-1\./); + // Avant la story, la date de création et l'`/ID` du PDF changeaient. + expect(b.equals(a)).toBe(true); + } finally { + await disposeContextSafe(ctx); + } + + // La fiche dit que le document est figé. + await page.goto(`/invoices/${invoiceId}`); + await expect(page.getByTestId('invoice-pdf-frozen-at')).toBeVisible(); + }); + + test('une facture annulée par un avoir garde son PDF émis', async ({ page }) => { + await login(page); + const contactId = await createContactWithAddressViaApi(page, uniq('PDF Annulée')); + const invoiceId = await createAndValidateInvoiceViaApi(page, contactId); + + const ctx = await authedApiContext(page); + try { + const emis = await ctx.get(`/api/v1/invoices/${invoiceId}/pdf`); + expect(emis.status()).toBe(200); + const avant = await emis.body(); + + const cn = await ctx.post('/api/v1/credit-notes', { + data: { invoiceId, date: new Date().toISOString().slice(0, 10) }, + }); + expect(cn.ok(), `create credit note failed: ${cn.status()}`).toBeTruthy(); + const inv = await ctx.get(`/api/v1/invoices/${invoiceId}`); + expect((await inv.json()).status).toBe('cancelled'); + + const apres = await ctx.get(`/api/v1/invoices/${invoiceId}/pdf`); + expect(apres.status()).toBe(200); + expect((await apres.body()).equals(avant)).toBe(true); + } finally { + await disposeContextSafe(ctx); + } + + // Le bouton PDF reste sur la fiche de la facture annulée. + await page.goto(`/invoices/${invoiceId}`); + await expect(page.getByTestId('invoice-download-pdf')).toBeVisible(); + }); +}); From 9d842984cbef00854938feafaffa3c8061b0f336 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:50:19 +0200 Subject: [PATCH 14/18] =?UTF-8?q?feat(25-6-b):=20=C3=A9cran,=20export,=20m?= =?UTF-8?q?anuels=20et=20gates=20=E2=80=94=20story=20en=20revue=20(refs=20?= =?UTF-8?q?#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Garde d'export : pdf_storage_path écartée avec son motif. Spec E2E du PDF figé (montage : compte bancaire principal). Manuels FR (gel, refigeage, sauvegarde du répertoire des documents) régénérés, CHANGELOG [0.12.1], README, docs/testing.md. Gates : backend 2583/2583, frontend 853/853, E2E 227 passés + 9 échecs attendus (KF-029 x7, KF-051 x2). Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 8 ++ README.md | 2 +- .../25-6-b-pdf-facture-archive.md | 103 ++++++++++++++++-- .../sprint-status.yaml | 2 +- crates/kesh-api/src/exports/csv_tables.rs | 5 + docs/manual/fr/admin-manual.pdf | Bin 315837 -> 322375 bytes docs/manual/fr/admin-manual.tex | 41 +++++-- docs/manual/fr/user-manual.pdf | Bin 302018 -> 307759 bytes docs/manual/fr/user-manual.tex | 47 ++++++-- docs/testing.md | 6 + frontend/tests/e2e/invoice-frozen-pdf.spec.ts | 5 + 11 files changed, 187 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25986289..e18ff3d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,12 @@ Le contenu est rédigé en français à destination des **fiduciaires, PME, ind ### Fixed +- **Le PDF d'une facture changeait après son émission ([#387](https://github.com/guycorbaz/kesh/issues/387)).** Kesh le régénérait à chaque téléchargement, à partir des données du moment : modifier vos coordonnées, l'adresse du client ou la mise en page modifiait aussi les factures **déjà envoyées**, et deux téléchargements successifs ne rendaient jamais le même fichier. Impossible, dans ces conditions, de produire la copie exacte d'une pièce émise. + + **Désormais**, le PDF est **figé** au premier téléchargement ou au premier envoi par e-mail qui suit la validation. Kesh le conserve avec son empreinte et rend ensuite ce même fichier, octet pour octet — y compris pour une facture annulée par un avoir. La fiche facture affiche *Document figé le …*. La dévalidation détache le document ; la revalidation en figera un nouveau. Les factures validées avant cette version sont figées à leur prochain téléchargement, avec les données du moment. + + ⚠️ **Le répertoire des documents (`KESH_DOCUMENTS_DIR`) contient désormais des pièces à conserver, et il doit être sauvegardé et restauré avec la base** : ni le dump MariaDB ni le fichier `.keshbackup` ne les contiennent ([#503](https://github.com/guycorbaz/kesh/issues/503)). Un fichier manquant n'est jamais régénéré en silence : le téléchargement est refusé avec un message qui nomme le fichier à restaurer, et un administrateur peut, à défaut, **refiger** la facture — un nouveau document, tracé au journal d'audit avec l'ancienne et la nouvelle empreinte. Le manuel administrateur décrit la procédure. + - **La balance des comptes ne concordait pas avec le bilan ([#385](https://github.com/guycorbaz/kesh/issues/385)).** Elle ne montrait que les **mouvements** de la période : le compte « clients » de la balance 2026 ne valait pas celui du bilan 2026, qui reporte les soldes depuis l'origine. Deux rapports, un compte, deux nombres — c'est ce qu'un réviseur trouve en dix minutes. **Désormais**, chaque compte porte son **solde d'ouverture**, ses mouvements et son **solde de clôture**. Un compte de bilan reporte son solde depuis l'origine ; un compte de produits ou de charges repart de zéro au début de l'exercice. La clôture d'un compte de bilan **est** son solde au bilan ; celle d'un compte de résultat est son montant **depuis le début de l'exercice** — égal au compte de résultat quand la période commence au premier jour de l'exercice —, et ouverture comme clôture concordent toujours avec le grand livre. Une ligne **« Résultat reporté (calculé) »** porte le résultat des exercices antérieurs, qu'aucun compte ne porte faute d'écriture de clôture, et un **contrôle ✓/⚠️** vérifie que les ouvertures s'équilibrent avec elle (écrit en toutes lettres dans le PDF quand il tombe). Un compte archivé figure tant qu'il porte un solde. @@ -52,6 +58,8 @@ Le contenu est rédigé en français à destination des **fiduciaires, PME, ind ### Changed +- **Le PDF téléchargé d'une facture est dans la langue du client**, comme celui qui part par e-mail ([#387](https://github.com/guycorbaz/kesh/issues/387)). Il suivait jusqu'ici la langue de l'installation : le document téléchargé n'était donc pas forcément celui que le client avait reçu. Le premier téléchargement, quel que soit le rôle de l'utilisateur — consultation comprise —, fige le document et l'inscrit au journal d'audit. Les rappels, eux, restent produits à chaque envoi ([#502](https://github.com/guycorbaz/kesh/issues/502)). + - **La balance des comptes change de colonnes — écran, PDF et CSV ([#385](https://github.com/guycorbaz/kesh/issues/385)).** Ouverture | Débit | Crédit | Clôture : la colonne **« Solde »**, qui était le net des mouvements de la période et se prenait pour un solde de compte, disparaît de l'écran et du PDF. ⚠️ **Dans le CSV, la colonne `Solde` est remplacée** par `SoldeOuverture` (avant `TotalDebit`) et `SoldeCloture` (en dernier) : un outil qui lit ce fichier par position doit être adapté. Le CSV porte aussi la ligne du résultat reporté. *(API : `openingBalance` et `closingBalance` par compte, `retainedEarnings` et `openingBalanced` au rapport ; `balance` garde son sens — le net des mouvements.)* - **Le bouton *Créer un avoir* s'affiche aussi sur une facture payée**, et c'est voulu. Il était masqué sur une facture payée mais pas sur une facture réglée en partie : l'écran ne couvrait que la moitié de la règle. Il reste désormais visible, et Kesh explique le refus dans le dialogue — comme le bouton *Dévalider*. diff --git a/README.md b/README.md index 13ebc1ec..540cd13a 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - **Comptabilité en partie double** — plan comptable suisse, écritures validées, journal d'audit consultable à l'écran - **Carnet d'adresses & catalogue produits** — contacts, conditions de paiement, TVA -- **Facturation QR Bill 2.2** — génération PDF conforme au standard suisse, **adresses structurées (type S)** conformes à l'exigence SIX en vigueur (rue / n° / NPA / localité séparés) ✓ +- **Facturation QR Bill 2.2** — génération PDF conforme au standard suisse, **adresses structurées (type S)** conformes à l'exigence SIX en vigueur (rue / n° / NPA / localité séparés) ; le PDF émis est **figé** au premier téléchargement ou envoi, dans la langue du client, et rendu ensuite à l'identique ✓ - **Ventilation du chiffre d'affaires par ligne de facture** — chaque ligne peut porter son propre **compte de produit** (honoraires, marchandises, prestations…), sélectionnable dans le formulaire ; une ligne laissée vide suit le compte par défaut de la société, affiché explicitement. L'écriture comptable ventile le crédit sur les bons comptes dès la validation, avoirs compris — compte de résultat exploitable sans reclassement manuel ✓ - **Compte de produit sur la fiche article** — chaque article du catalogue porte **son** compte de produit, choisi une fois plutôt que ressaisi à chaque facture ; la ligne montée depuis le catalogue le **recopie** automatiquement, puis reste autonome — vidée, elle suit le compte par défaut de la société ✓ - **Coordonnées de l'émetteur sur la facture** — téléphone, e-mail et site web figurent sous votre adresse sur le PDF, saisis une fois dans les réglages ; chaque champ est facultatif et n'occupe aucune place s'il est vide ✓ diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 45e89283..47c80ba8 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -1,6 +1,6 @@ # Story 25.6-b : Le PDF d'une facture est figé — une pièce émise ne change plus -Status: in-progress +Status: review **Issue : [#387]**, que cette story **ferme** : la PR porte `closes #387` dans le **titre ET le corps**. Branche `story/25-6-b-pdf-facture-archive`, partie de `main` (`d7c74f02`). Seconde moitié de la 25-6 (la 25-6-a a traité #388 et @@ -256,23 +256,23 @@ téléchargement rend la langue du client). ## Tasks / Subtasks -- [ ] **T1 — migration** (AC 1) : SQL, squash, garde de schéma, audit d'idempotence, P6. -- [ ] **T2 — le service de gel** (AC 1-bis, 2, 3) : `kesh-db` (entité `Invoice` et **constante unique** de colonnes, +- [x] **T1 — migration** (AC 1) : SQL, squash, garde de schéma, audit d'idempotence, P6. +- [x] **T2 — le service de gel** (AC 1-bis, 2, 3) : `kesh-db` (entité `Invoice` et **constante unique** de colonnes, pose conditionnelle + audit en une transaction, détachement), `kesh-api` (service, `spawn_blocking`) et **six variantes d'erreur neuves** (P3, M3 — aucune n'existe ; seule `InvoiceNotValidated` existe, `errors.rs:338`), chacune avec statut HTTP, code JSON et message dans les 4 locales : `InvoicePdfGone` (410 `INVOICE_PDF_GONE`), `InvoiceChanged` (409 `INVOICE_CHANGED`), `InvoicePdfPresent` (409 `INVOICE_PDF_PRESENT`), `InvoicePdfNotFrozen` (409 `INVOICE_PDF_NOT_FROZEN`), `InvoicePdfIntegrity` (409 `INVOICE_PDF_INTEGRITY`, au refigeage ; 500 à la lecture), `InvoiceCancelled` (code à fixer sur le patron d'`InvoiceNotValidated`). -- [ ] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. -- [ ] **T3-bis — refiger** (AC 3-bis) : route d'administration, trois codes 409, audit, bouton et confirmation à l'écran, +- [x] **T3 — les deux consommateurs** (AC 2, 4) : route de téléchargement, envoi par e-mail. +- [x] **T3-bis — refiger** (AC 3-bis) : route d'administration, trois codes 409, audit, bouton et confirmation à l'écran, et les gardes structurelles (compte du bloc d'administration, `admin_pat_denied_e2e`, registres d'audit et de libellés). -- [ ] **T4 — la dévalidation** (AC 5). -- [ ] **T5 — l'écran** (AC 6). -- [ ] **T6 — tests** (AC 7). -- [ ] **T6-bis — export de souveraineté** (AC 5-bis). -- [ ] **T7 — manuels, CHANGELOG** (AC 8). -- [ ] **T8 — gates** : backend complet, frontend complet, **E2E complet** — le backend E2E doit avoir +- [x] **T4 — la dévalidation** (AC 5). +- [x] **T5 — l'écran** (AC 6). +- [x] **T6 — tests** (AC 7). +- [x] **T6-bis — export de souveraineté** (AC 5-bis). +- [x] **T7 — manuels, CHANGELOG** (AC 8). +- [x] **T8 — gates** : backend complet, frontend complet, **E2E complet** — le backend E2E doit avoir `KESH_DOCUMENTS_DIR` inscriptible (`docs/testing.md:167`, `:197`) : sans lui, tout téléchargement de PDF répondra 500. ## Dev Notes @@ -326,14 +326,95 @@ export CSV), `kesh-i18n`, ### Agent Model Used +Claude Opus 5.5 (`claude-opus-5-5`). + ### Debug Log References +Journaux sous `target/gate-logs/` : `25-6-b-backend.log`, `25-6-b-frontend.log`, `25-6-b-e2e.log`, +`manual-25-6-b.log`. + ### Completion Notes List +- **Service unique** `kesh-api/src/routes/issued_invoice_pdf.rs` (`get_or_freeze`, `pose`, `refreeze`) : seul chemin + vers le PDF d'une facture. L'ancienne fonction `invoice_pdf_service::render` a été **retirée** pour qu'aucun appel + ne contourne le gel ; `render_document` reste (rappels, #502) et porte désormais `invoice_version`. La nouvelle + tentative unique est extraite (`with_one_retry`) pour être testée de façon déterministe, sans course réelle. +- **`kesh-db`** : `freeze_pdf` (trois gardes + audit `invoice.pdf_frozen` dans la transaction), `refreeze_pdf` + (gardes `pdf_sha256 = old` et `status`, audit `invoice.pdf_refrozen` avec les deux empreintes), `find_by_id` + (facture sans ses lignes). `unvalidate` détache les quatre colonnes ; `invoice_snapshot_json` porte `pdfSha256`. +- **Liste unique de colonnes** (AC 1-bis) : `macro_rules! invoice_columns` + `const INVOICE_COLUMNS` dans + `repositories/invoices.rs`. Macro parce que `concat!` n'accepte que des littéraux. Les quatre sites en dur sont + remplacés. +- **Six erreurs** dans `errors.rs`, messages dans les 4 locales : `INVOICE_CANCELLED` (400), `INVOICE_PDF_GONE` + (410, nomme `{empreinte}.pdf`), `INVOICE_CHANGED`, `INVOICE_PDF_PRESENT`, `INVOICE_PDF_NOT_FROZEN`, + `INVOICE_PDF_INTEGRITY` (409). À la **lecture**, un fichier altéré répond `Internal` (500), conformément à l'AC 3. +- **Écart avec la spec, recompté depuis la source** : l'AC 3-bis annonçait le bloc d'administration à « 25 → 26 ». Il + comptait déjà **27** couples sur `main` (5 `GET` + 22 mutants) — la prose de `lib.rs` et de + `admin_pat_denied_e2e.rs` était périmée. Il passe à **28** (5 + 23) ; le test asserte `ADMIN_COUPLES.len()` et non + un littéral, il était donc vert malgré la prose. Prose et compteurs recalés. Les trois totaux du registre d'audit + sont ceux de la spec : 110 / 92 / 113. +- **Garde non anticipée par la spec** : `chaque_colonne_du_schema_est_exportee_ou_ecartee` (25-5-a) a rougi au gate + complet sur `invoices.pdf_storage_path`. La colonne est inscrite à `COLONNES_HORS_EXPORT` avec son motif. +- **Angle mort assumé** écrit dans `audit_route_registry.rs` : `GET /invoices/{id}/pdf` (et `HEAD`) écrit désormais. +- **`MockMailer`** capture les octets de la pièce jointe (`attachment_bytes`) : sans cela, « l'e-mail joint les + octets du téléchargement » n'était pas prouvable. +- **Écran** : bouton PDF extrait en snippet (facture validée, ou annulée figée), mention « Document figé le », + bouton « Refiger le document » pour un admin après un 410, avec une confirmation qui conseille de restaurer + d'abord. `sitesTotal` 1758 → 1767 (neuf sites, ventilés dans le test). +- **Tests neufs** (périmètre : `main` → ce commit) : 9 `kesh-db` (`tests/invoice_frozen_pdf.rs`), 23 `kesh-api` HTTP + et service (`tests/invoice_frozen_pdf_e2e.rs`), 3 unitaires (`with_one_retry`), 1 CSV + (`serialize_invoices_csv_porte_le_pdf_fige`), 8 Vitest (`invoice-pdf-page.test.ts`), 2 Playwright + (`invoice-frozen-pdf.spec.ts`). +- **Mutations** (chacune restaurée puis `touch`) : + - 7 sur les gardes `kesh-db`, chacune tuée par le test qui la nomme : `IS NULL`, `status` (pose), `version`, + `pdf_sha256 = old`, `status` (refigeage), détachement, empreinte au snapshot ; + - 6 sur le service : gel ignoré, langue de l'instance, empreinte non contrôlée, adoption de notre propre rendu, + refigeage d'un fichier présent, refigeage d'une annulée — toutes tuées ; + - 4 sur la fiche facture : condition de gel retirée, garde `isAdmin` retirée, tout échec pose `pdfGone`, envoi + sans confirmation — toutes tuées. + - ⚠️ « Gel ignoré » n'est tuée que par la spec de la facture annulée : sur une facture validée, la seconde pose + échoue sur `IS NULL` et le service **adopte** le document déjà figé. La conception se défend elle-même, et ce + test-là ne le distingue pas. +- **Gates**, base remise à zéro avant chacun : + - backend `scripts/test-fast.sh --ci` : **2583/2583**, 4 skipped. Un premier passage s'était arrêté sur la garde + d'export ci-dessus, corrigée avant le second ; + - frontend : `check` 0 erreur, `lint-i18n-ownership` PASS, `test:unit` **853/853**, `build` OK ; + - **E2E complet** (06:40 UTC) : 227 passés, 11 échecs, 19 skipped. Neuf sont **attendus** : KF-029 ×7, et KF-051 + ×2 (`invoices.spec.ts:415`, `:439`, avant 12:00 UTC). Les deux autres étaient **la spec neuve**, dont le montage + omettait `ensurePrimaryBankAccountViaApi` (400 `INVOICE_NOT_PDF_READY`). Corrigée, elle est **rejouée seule** : + 2/2. ⚠️ La suite complète n'a pas été relancée après cette correction, qui ne touche que le montage de la spec. +- Manuels FR régénérés (`make admin user`), 0 référence indéfinie, texte contrôlé dans les PDF aplatis. + ### File List +- `CHANGELOG.md`, `README.md`, `docs/testing.md`, `docs/migrations-idempotence-audit.md` +- `docs/manual/fr/admin-manual.tex`, `docs/manual/fr/admin-manual.pdf`, `docs/manual/fr/user-manual.tex`, + `docs/manual/fr/user-manual.pdf` +- `crates/kesh-db/migrations/20261003000001_invoices_frozen_pdf.sql` (nouveau), `crates/kesh-db/migrations.sha384`, + `crates/kesh-db/test-schema/0001_schema_squash.sql`, `crates/kesh-db/tests/migrations_upgrade_path.rs` +- `crates/kesh-db/src/entities/invoice.rs`, `crates/kesh-db/src/repositories/invoices.rs`, + `crates/kesh-db/src/repositories/reconciliation.rs`, `crates/kesh-db/tests/invoice_frozen_pdf.rs` (nouveau) +- `crates/kesh-api/src/routes/issued_invoice_pdf.rs` (nouveau), `crates/kesh-api/src/routes/mod.rs`, + `crates/kesh-api/src/routes/invoice_pdf.rs`, `crates/kesh-api/src/routes/invoice_pdf_service.rs`, + `crates/kesh-api/src/routes/invoice_email.rs`, `crates/kesh-api/src/routes/invoices.rs`, + `crates/kesh-api/src/errors.rs`, `crates/kesh-api/src/audit_labels.rs`, `crates/kesh-api/src/lib.rs`, + `crates/kesh-api/src/mail/mod.rs`, `crates/kesh-api/src/exports/csv_tables.rs` +- `crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs` (nouveau), `crates/kesh-api/tests/admin_pat_denied_e2e.rs`, + `crates/kesh-api/tests/audit_route_registry.rs` +- `crates/kesh-reconciliation/src/matching.rs` +- `crates/kesh-i18n/locales/{fr,de,it,en}-CH/messages.ftl` +- `frontend/src/lib/features/invoices/invoices.api.ts`, `frontend/src/lib/features/invoices/invoices.types.ts`, + `frontend/src/lib/shared/i18n-keys.test.ts`, `frontend/src/routes/(app)/invoices/[id]/+page.svelte`, + `frontend/src/routes/(app)/invoices/[id]/invoice-pdf-page.test.ts` (nouveau), + `frontend/src/routes/(app)/invoices/[id]/invoice-settlements-page.test.ts`, + `frontend/tests/e2e/invoice-frozen-pdf.spec.ts` (nouveau) + ## Change Log +- **2026-10-05** — Développement (dev-story) : T1 à T8. Service de gel, refigeage, détachement, export, écran, + manuels. Gates : backend 2583/2583, frontend 853/853, E2E 227 passés + 9 échecs attendus (+ la spec neuve rejouée + seule après correction de son montage, 2/2). Écart de la spec sur le bloc admin (27 → 28, et non 25 → 26), recompté + depuis la source. → `review`. - **2026-10-05** — Validation P4 ciblée (Haiku, prompt `25-6-b-validate-prompt-p4.md`) : **0 finding**. Sa première vérification résumait sa sortie au lieu de la citer : **reprise par l'orchestrateur** (`audit_route_registry.rs` porte bien 109, 91 et 112) ; le « six sites » restant est celui de P1, exact. **Boucle close** : P1 4H/12M (Sonnet ×3) → P2 diff --git a/_bmad-output/implementation-artifacts/sprint-status.yaml b/_bmad-output/implementation-artifacts/sprint-status.yaml index 1110f75e..484d8fe1 100644 --- a/_bmad-output/implementation-artifacts/sprint-status.yaml +++ b/_bmad-output/implementation-artifacts/sprint-status.yaml @@ -372,7 +372,7 @@ development_status: 25-5-etats-et-export: split # [#385] [#386] — la **Balance des comptes ne concorde pas avec le Bilan**, il manque la colonne « solde d'ouverture » (III.4) ; et **l'export de souverainete omet les achats, les avoirs, les projets et la piste d'audit** (V.6) — *il promet plus qu'il ne tient*. 25-6-tableau-de-bord-et-dettes: split # 2026-10-03 DECOUPEE en 25-6-a (#388 #389) et 25-6-b (#387). [#388] [#389] [#387] (#384 ramenee en 25-4-d le 2026-09-27) — la tuile « Dernieres ecritures » **n'appelle rien** et affiche toujours « Aucune ecriture » (*une tuile qui est un decor*) ; le « solde bancaire » est le solde COMPTABLE, donc faux ; imputer l'ECART d'un reglement partiel (escompte, frais bancaires, perte sur debiteur) ; et **le PDF d'une facture n'est jamais archive**, il est regenere a la volee (IV.9) — *un document reemis n'est pas le document envoye*. 25-6-a-tableau-de-bord: done # 2026-10-03 — sur sa branche, PR #501 (closes #388 #389). - 25-6-b-pdf-facture-archive: in-progress # 2026-10-03 CREEE (partie de main), validee (4 passes) ; arbitrages de Guy (gel au premier rendu, langue du client, colonnes sur invoices) ; CR #502 #503. + 25-6-b-pdf-facture-archive: review # 2026-10-05 DEV fait (gates backend 2583, frontend 853, E2E vert hors attendus) ; 2026-10-03 CREEE (partie de main), validee (4 passes) ; arbitrages de Guy (gel au premier rendu, langue du client, colonnes sur invoices) ; CR #502 #503. epic-16: done # 2026-08-11 (nuit) MERGÉ — dernière story 16-3b via PR #296 (squash `593bb845`). #152, #144 et #151 fermées. v0.9.0 prête à taguer. # 2026-07-26 KICKOFF (rétro Epic 14, décision D-D ; GO Guy après publication de v0.8.0). Branche `story/16-1-compte-produit-par-ligne` créée sur main `ef6cdf52`. Séquence : 16-1 (#152 socle par ligne) → 16-2 (#144 défaut catalogue) → 16-3 (#151 reliquat PDF). # ÉLU PROCHAIN EPIC — kickoff dès le merge de la PR groupée Epic 14. Reste #144 (compte produit au catalogue) + #152 (compte produit par ligne) ; #151 (récap TVA facture) déjà mergé hors-bande via PR #267 (bb3c8d64, partiel : coord. émetteur / n° client restants). Capte aussi les CR utilisateurs #265/#266/#268. # Facturation avancée (#144/#152/#151) — Epic dédié acté 2026-06-04 # 2026-07-26 ORDRE INVERSÉ au kickoff (#152 avant #144). Motif ground-truth : `invoice_lines` ne # porte AUCUNE colonne de compte ET ne référence même pas `products` (pas de `product_id` — cf. diff --git a/crates/kesh-api/src/exports/csv_tables.rs b/crates/kesh-api/src/exports/csv_tables.rs index 7c647fe8..f973c97c 100644 --- a/crates/kesh-api/src/exports/csv_tables.rs +++ b/crates/kesh-api/src/exports/csv_tables.rs @@ -2266,6 +2266,11 @@ mod tests { /// leur motif. Chacune est une colonne **technique** : aucune ne porte une /// information que l'export ne dirait pas déjà ailleurs. const COLONNES_HORS_EXPORT: &[(&str, &str, &str)] = &[ + ( + "invoices", + "pdf_storage_path", + "chemin du PDF figé sous `KESH_DOCUMENTS_DIR` (Story 25-6-b) : dérivé de `pdf_sha256` (exporté, `{sha256}.pdf`), il ne désigne qu'un fichier du serveur — les fichiers ne sont pas dans ce CSV", + ), ( "accounts", "singleton_role", diff --git a/docs/manual/fr/admin-manual.pdf b/docs/manual/fr/admin-manual.pdf index 006da745b131ebdb2e8ea7587cb769ec2fa78541..2627165cd7e5d0272dc9519093e0a621e4e028c6 100644 GIT binary patch delta 122666 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�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
hR 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 xhu<{ap!EwWI&Ys~n(_pmoqRvr3IL9=nM}Q`F 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ü)e2Y0e@Ho{=`5IQsnOJq2dmk&_(hbCr@fcp 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%0DRigDRXq2+vGUK| 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 delta 160561 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⁣u90)kBEDUe6%KPqr?FpZ;l!SI6 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

ScFFz>09|Cv?of)vf=$S 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�J@XW+1)=uy1djrNprbxWh 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.pdf}). Kesh ne le régénère jamais de lui-même : ce serait fabriquer une pièce qui n'a pas été émise. Le remède est de \textbf{restaurer ce fichier} depuis la sauvegarde du répertoire des documents --- c'est le seul moyen de retrouver l'original. À défaut, un \textbf{administrateur} voit apparaître sur la fiche le bouton \emph{Refiger le document} : il produit un \textbf{nouveau} document avec les données et la langue du client d'aujourd'hui, \textbf{qui n'est pas l'original}, et le journal d'audit garde l'empreinte de l'ancien et du nouveau. Une facture annulée ne peut pas être refigée : seule la restauration du fichier la répare. +\textbf{Si le fichier figé a disparu} --- typiquement après une restauration qui n'a pas repris le répertoire des documents ---, le téléchargement est \textbf{refusé} avec un message qui nomme le fichier manquant (\texttt{.pdf}). Kesh ne le régénère jamais de lui-même : ce serait fabriquer une pièce qui n'a pas été émise. Le remède est de \textbf{restaurer ce fichier} depuis la sauvegarde du répertoire des documents --- c'est le seul moyen de retrouver l'original. À défaut, un \textbf{administrateur} voit apparaître sur la fiche, après ce refus, le bouton \emph{Refiger le document} : il produit un \textbf{nouveau} document avec les données et la langue du client d'aujourd'hui, \textbf{qui n'est pas l'original}, et le journal d'audit garde l'empreinte de l'ancien et du nouveau. Une facture annulée ne peut pas être refigée : seule la restauration du fichier la répare. \end{keshwarning} \subsection{Envoyer une facture par e-mail}\label{sec:envoi-email} @@ -1839,7 +1839,10 @@ \subsection{Contenu du ZIP} ⚠️ Les \textbf{pièces justificatives} --- les fichiers eux-mêmes --- ne sont \textbf{pas encore} incluses. Le chemin de chaque pièce figure dans \texttt{imported\_supplier\_invoices.csv}, mais -le document doit être sauvegardé séparément. +le document doit être sauvegardé séparément. Il en va de même des \textbf{PDF des factures +émises} (\S\ref{sec:pdf-fige}) : \texttt{invoices.csv} porte leur empreinte, la date et la langue +du gel (colonnes \texttt{pdf\_sha256}, \texttt{pdf\_frozen\_at}, \texttt{pdf\_language}), +pas le document lui-même, qui se conserve avec le répertoire des documents de l'installation. \end{keshnote} \subsection{Génération} diff --git a/frontend/src/routes/(app)/invoices/[id]/+page.svelte b/frontend/src/routes/(app)/invoices/[id]/+page.svelte index 4012c261..653ef3f6 100644 --- a/frontend/src/routes/(app)/invoices/[id]/+page.svelte +++ b/frontend/src/routes/(app)/invoices/[id]/+page.svelte @@ -667,9 +667,10 @@ INVOICE_PDF_HEADER_OVERFLOW: 'error-invoice-pdf-header-overflow', PDF_GENERATION_FAILED: 'invoice-pdf-error-pdf-generation-failed', NOT_FOUND: 'invoice-pdf-error-not-found', - // Story 25-6-b (#387) — le PDF figé. Le message du 410 vient du serveur, - // qui nomme le fichier manquant : il est repris tel quel. - INVOICE_PDF_GONE: 'error-invoice-pdf-gone', + // Story 25-6-b (#387) — le PDF figé. ⚠️ `INVOICE_PDF_GONE` n'est PAS ici : + // son message nomme le fichier manquant, et le catalogue servi au + // frontend est résolu SANS arguments — il afficherait `{ $sha256 }`. Le + // message du serveur est repris tel quel (cf. `downloadPdf`). INVOICE_CHANGED: 'error-invoice-changed', INVOICE_CANCELLED: 'error-invoice-cancelled', }; @@ -698,7 +699,7 @@ } catch (err) { refreezeError = isApiError(err) ? err.message - : i18nMsg('invoice-pdf-error-generic', 'Erreur lors du téléchargement du PDF'); + : i18nMsg('invoice-pdf-refreeze-error', 'Le document n’a pas pu être refigé.'); } finally { refreezeSubmitting = false; } @@ -710,6 +711,9 @@ try { const res = await apiClient.getBlob(`/api/v1/invoices/${invoice.id}/pdf`); const blob = await res.blob(); + // Un téléchargement qui aboutit dit que le fichier est là (restauré + // depuis la sauvegarde, par exemple) : plus rien à refiger. + pdfGone = false; if (blob.size === 0) { notifyError(i18nMsg('invoice-pdf-error-empty', 'Le PDF reçu est vide.')); return; @@ -729,8 +733,11 @@ // Revoke différé pour laisser le navigateur récupérer le blob. setTimeout(() => URL.revokeObjectURL(url), 5_000); } catch (err) { - if (isApiError(err) && err.code === 'INVOICE_PDF_GONE') pdfGone = true; - if (isApiError(err)) { + if (isApiError(err) && err.code === 'INVOICE_PDF_GONE') { + // Le message nomme le fichier à restaurer : repris tel quel. + pdfGone = true; + notifyError(err.message); + } else if (isApiError(err)) { // Pass 2 : remappage vers les clés FTL réellement présentes — // `INVOICE_TOO_MANY_LINES_FOR_PDF` utilise la clé legacy // `error-invoice-too-many-lines-for-pdf` (existante FR/DE/IT/EN @@ -779,7 +786,9 @@

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�Yx2hQd}{8svu^OmBSl%B{jnah>|9(GNaQAy2Q*ooDduw&M9 zwY08Y-82{g-`>n794m0j6B1@c<1RP$nhp|Q(u^D#qO1YgpRaw2;^qmiHQ4)j(0NKj ze!y)C6(hnq+JBJ9HChD>&AHbPq&xzw2?T>u0fs#li%H&u9t(oERFPkp02wXfWw8Z zWR`nuo;+nCiEmVGxUU~hB+sV>4mjP=KV?IM4Wmz04-d!9L;2qiy!_hY0DLRHiceT)_YF<72o z{1EOi50l96Zj=n4XezT0;xGYr2J%k=$fP`f-J+kfR3b~FoS%#D;4HN!0VpqYV)GD| zKFDQdoxIM?G!7&s>_bR*{v3%o*rjo(bq_p%Gir$Q0TW&y6}Y?ysv^UW`N_~6%_fr7 z6+BhFA`Wtg*>DNDP=gJVzlVy1o&0TghRj8xM2i@{M-zJwxS`>gEQ!JTeT%^S`lFaZ`o zDFRW3FGT;dN&f-UGk?v%)INl!P?8R`1(HAn*HSTgY@P*@0ZwyEh7`c`gP@T0LyZRQ@q33k~fNp~cK*oZP+R4>FDh`|?q{SYz?&>k~O z8E}+5Gno}DAsGDKd#U@W)YZ8zphkQRW>`fZ{ipVJPNe3MP5s5O{*{|8LG(So@flNV)-!z(A2QpuEMx$-!Hn1Z|fssNQs{jZieXDyE zf8dBbu-XqloEk)`v*?_aQVGkH&B7cHY>-iOQ#zCu$C%1T5*>?qFAf4bTradOfNhkd zcvmV@RM=-I)UQEY32CIzFGrjWUK?bl$e_j%N~$SF*1LL+#Ok+_53{ALl8+QinK&wj zRq_(P1*gOgUeu5Zj(9CEpcJxTHZ^e4Q|ZS9yQKk14fqtQfVlgtlEu@sBl^KPVm>aL z>Le7IEbOEbGQ0bA@=4E!`|tgSy~E0`C(~xbWeUf&?bEa!BZFHDd*aRGaPhYT!0Gj`n|s~ozM7sLpnLPvx#wdrV>4xc z9CLqsK1DA3qyJkxWxBctFLIjre%biDMm*(mS!C&r2aQlJ#qRsvwfXb%@p01N{o`v< zD8~oj^7;7`k@0!H`4yykeRTMw*DTkp*HydUZ&!Eu`jnAjXZKH!udN;60!dzNTkR#y zXG8RjovjxuKb?OFAb2z_)o)#f#YyWJ&bqlR8qSvMi(B;SWX(ElDiTDT!7Y@2+9)V~ z_i}vEYX1JNpHK>ZpP-m##ZI?)>zG|uE}_HzBJ?_OGWDJ>QQ8yBe^hOM+{*P3Oju*l zoE-RR)RZGy!{j2&(y)`)Fk3Z8@C;EkrFidGVC?w{@_S+iTsCzItezL(ly>?(NNvY4 zxA-)XB32*E`MXkQ@jlA7{{f|Mlp#qZ+@zw5Ypr!wnZ-N(;=E~ zXnxCfAmoGx46oFGgYP+jyFF2TZRhYU0%EoZ5Srb-8#ljR_G3Puudm-Dmal87-^ZJ^ zc&)qF?Y6f%wr#E%d|F!91iCi$@T$N5cCY)mxp+Hxx3;hAZgq6?X?L`Fy1A_IZQ&DK zy9sD-meJcGUTFQ#VCm%cIKR*Fp7Fj;K-{>gV`ulwQFG0R=oWMB`c7EQ`cGF!8}PGi zOi4BX__<$$UyqA=3=bXF-yML+5wGQFwwGjiea_?AQ7&iqJdSMsy~i()EyI_=Uv}Gn z-P!^7FcFLhA)8;G?~Aeu-cOU5^ZtOYj@r)Nm%IE1x$MY?ZN1KJ?u}0OhsDW5BdSgT zYXUyLi!G~i&(_c8i0AfIJnX0dGmla6ZTcJl0erU3ZRNdgj^315RKpdOB!$p0_Al+5 zTleI>v>Uu|vmqzCZ18Cd726TVtg^#k_|>`WmRY2XY}D+}2RJr*^cbe?yL5H47{gYS z2<*=t%e{iXuugar&1LSvuhlmoSn&<;txXb;quuSE-p|4U)B|t30e!bBLu$vWk0}#? z!R0eh8?`VU($?6V>N10i^NoQQA=ZPjCk z1slra;A>q>!~K8t(n0UNcli+i159MUtQ@H$if~NKrGwbO&dX|p_4&|ciPYtSP zY(>CD3n?RR7hU=n1QKBD%=6Lw%sMuK#U@f7qp%}!DY zvb{kzLQ&F>y_=>l%Hc`-2vSU4f^jk@qLmWtM*`U!YN`oeXYa>i{yzCkFf~1cPy7M= z#E(c2`?(1-PXHo0KOx*88`>V02(z99wVs3&LDy7rrgpUK7+%15CP63?z_2kAvB?dC zpwWOO0%5B*Esp}1-Bt$&WOs9OcXM$QSj_Hwg9B9IxSS^>L87YUx&;dSWy-?z{+l6%cTdY)tgiAM~3-%TryUWEdcO zBO?kH=pUjl#ii_a64**&->vpf5VLt-k-ys#hgWx?J(%r zbB=RE^2f=Aos?AFDeea$bU^t;^I?zCWHKb0%_Y(1{slvA*OiZ)vuDD#+#+X>gKxZ4 z-dDQ=f~Eh`&PO+VQFXRZ#IW#UFu!689)j5Zg%ED_#mxbhVc3a=TP;y(Wgd6=mkc{o z+6Z~1WPms^ioWpzb?*f3b}&33K*~vRYE&3C_;8cr(0{IOjR3%GHUypXCXh4^OU^0LS*kU;D zSMr4){-!fkhjE$_sYN@=4bi984khp}x*^7LY>34*BOfo)q?3=I!%=4};;Pk!VayHE zr|tlvPfyy|Xmt*c)gE=IKHyYy+^9Sl>O2}LT*7C;gMpd}wWs0@5f2pE<#NWtgVB-# zBq3HfzEW{4Is&^;F#`qH+2d6dgesNFdS~B!gq^T5w>@BN>zy~YogEfceMAropu}wC0x<+su#u`n+ zJ|2s7G8vj2vu^veWZ!>>?%&>vCQi-)%$JY9x<^T7$uswt*|%B`pb=mO9D|TvU^b+C z9k|mKPI;svE9q1EkQU#xB4xwo!0xx+w3g~tj7mgv)wnWK3?v_k@}?Y-@nSM89|jG( zJX#)M6K(2stm`$H=fDV{zTrMwq?9&62bNB;&Qo zq!{7{no#G%K%>u3S(4{k4E;Fu&Y=Xj%ENpY9b~{-T4~Y;BpZm*`Om18X@D4y$d`rZ zOUiLaA7{eAdYq(Kz2BhYGZKJY8<@E1scxm!8m~yC2#9ylhEQ9(CIbFr|Z(q)|i<+bYw2$65t5ca=Mno|#&o?%4yDE-?9MXet)9&R0&$(>x$od9h_eci4 z949x@xe)k1&>Oj++eBs$O>8i>GI~1H24M}j4>IuF4^hQJAzicVCo>#vEN`CP>qTDy z$;Dl5ihC%G0w;s;ZD-_wA3(=(-a+2S_AXmWS$bGZivLMjo@H1EAb2NO&E(nL{mdit zkax>-#*-ahw~W<=%+__JXw=Dl1le+Ur|RfIYXr&mx8Mw~_}B4R!-G!MLd_|Co#2#Y znNUoIelov2aPJC>=dHZ}CYXlwa@#Mg?bv;eUOFRHh}Vr=S^%NNOwx4gyV#j_mgn-4 zni@m`j-xy31xiin+nUKlvELPr^NPXrCcRWfAs2Du<6=^;qX@!9?ObjJex6W@Ol_SI zVr~gy)I6&<3EI$=l@44=igwg2jD3_xz0oGonGo{*}$f#o%TE3AB=z z;{<4&(QpcJEtp&*iO;FR9v#%m!&FkMQP6UPzY)k%^4CGKvCd_RagX4GK`+gG#+!jP za0p{Zbj`jAN_y0AB%})OI`~m+0~Ot4Fb@^OD3tJTX}~W8?hJD5XRw@BL}8P^>Re@Q z40JqExh;(U2bLIk;FGYY*l_Z=%N)obTy)f*u!NX3UH=15nEi{j){M%goXa``XOY#L zYCog3B1*C7d0;=sl+@WV`gNKvXoD+$&xH)0l%8Ncw>Clj_d3>$n7`zx0d%VU&e?^a zYm4wWE-6N*AL_`!p|G$)S;Cwg5>BaIb5NGv?8Dk-v<)51mS-ip*ENdGTB4|HFc+iA zThVwRg^lX7R8pkZc`4b=9!y3mqfdwEbhlA_jBk=M!No~fm8kd;wK(h(D|0)4GKMU| zn6OC9xERa4a-wyrC4W8I0PNg5;mho=;7wvp8`)Y4|M%L<(b}qVAlUZ6_h~fX-F@{~ z+KB}C#obXtys9XwT6$J|2jNN=Ugmu53pi*zCR(}Ba;t)BaG2lwB6V~s1RCuohVme4C! z$*Cq=F~4jNu96kP!W^p(vxE;--_)W)-u6U;l5*hLNG*#T-%6{O_Laoh9Uys;DfCX$jevK*0kj70#!@K{UTRF~B4N==$VX zJaMsE_)PRjrmlxHBnq-K6thsXl0q z9Zd{u{&Qz%XbHo?#g)?a07{x-0tH3@VCLfdUor?uX;R4tE%3q5{6Vrk6wLN5!D=?o z=eQ5|Q_s(kMLdJK!V{%pMOYxr-#|htP6Brd6@;46M~|g_HJ)&XYCPdo0v>JnNq{1r z>tW)ctR_N3US#4b{Ot9-R>G`}3c4_GTJ zwFZ%Wb{}K@wdHhpqms0(xOVD^{uinmJJuC-J?m@Svs{~e{jAZ!p(LCeP@1zhST*6n zY5sU(9Y$WWe#QWy=-V}7%>GLXs76`5+Y)zTAWqR8$RC%b=|E<}BJs?dDrHi8PBqJZ zSP|LrKm?`V5uCV=eUu!D?1`Qir+JN;Ws&L)trE4+&e$kvzE()Kl#M1xfg@4I{yXCN z4F-7w{y;6jevU^q^@4J#w57)~Jb{~qtPMS&lusn0Lhx*?BA~ zlpzXoz$R~`8b%h!jv@%2Y$draPbnH@RMLy&5{0!WGoLI3y z6$R=zlJ-c%e6fO|MFC)xf9F7d{sg9qLXl{-BV*Hcof#XnBaKvZyK3Zf&rfLg!Lx@4bYTkblE*%@dfi5n{X-YsSo?MC=NSY@`s* ztPP;=nW_=0O(IX_=7NhU7`t&1NN|CMnV&^Dzdait0j9tnoKW&yT`b4KZ_JXYTANspOY zIa_oX>Y+k_A8!~aNvyLER_4y>|h-fEYK67f5_|0v0eA~`L;fl*!_(t-Piqg_t)D!ApnY?BleaZ zxUzec*3BY5^pm5xE56gS%^0;qZMBF3&dabEk&O3MpmkxfeimiK17%C1ezfZ8cM-r; z=~-fxbsmhh+l0|r(;kEjkPuOQz@Bg}Y^$nt9@A!VZK3Ux#Ad#z=$$x89e3Bf-WJ^W zBKcaS*Gb-{q;6{@q9$b|!RS4m<8lPqC%rh z!hhBoxCjC+!o17afLqGIT2m85$S62LdqfHVu`8o7rC09tyn7# z{Zz?|YEflt>qmzCvX2oxR!RLtPGc+q;iSp?y z;v(_3P^Wn);w`&Fg+cYn_#IH2cqO_{bERb&XVazkw#QQs*l6=Pk+~ju_x0RLaFN?; z>BCc-5T>NH6TpYV$$*VzWLveTk9&uCbq|QEDA|PaWq!(!OZ+sbNX-k~y?__0FnG ze-pcU-9@=F|}MGUaLmBOF4e0P!h`@P7oiaAS9A;K=7$97Xr^xaA8`S{OuwVXC?>I6UdKt6f z2B^2InC%`_O>Z~=E-!6Z_=B7trkZq?B3l34>UJkC#FbRsj}J!@Qj`%MO}~@hk&_bI z!yXIHH!HmEoY6Jjm92jHRkl|GEA53 zW>wo~fxf>Fd;;E4%x7pf1vcIemrm|o9=66BZa8AheqCO@O*m4{U%oj_Q`eZC|2FNY zyyGNdVCsy^vN|Va!%=0NHZGSNW@){9)^LfEo1a!Ln-8hb(z|(8>i-6co4`l>zkmFk zOiV;fME}_W@bWS$d)S*W${D6iKY*fua&oXFAfw{~*ne^SuliZ1j&#fcr(@T<+Ksth zJ@#KzEV$a6KK>OZjB`Hs%@Ywjm1O3g-1XEm<_o|zR9vDzniO+|)sZ|EbrQ)w>`+86 z(L5GqArl1*eBXYKQlC0?{tyqjAa(~h@X}r;gSN(I)ssWt|!d6tDq{(tUyCDERWC zi1q-942?KKRRrSA1@(7ykCI4P9+)wXZ-4xkSS-z|oo1dL1Q z0~GSuB}j-QakXy;%fLh~6qzd)lrfVeR+q)$Q>gnjpRT$Aybtq^q&gr%1m#DANGU)v zAu4VwoRbJaV3rdFVvsnthf{jH*8x5oD+ZK=p6^#5t+AJ2Tj#CEAMIQTDqaU%^8B88 z%Fw0!OmMvO9dd8~Pw+j&cw7@f7dkSHgpc%y<@drZCqem^rbE`ULa zK}sa;BoIlXWa*n1f&zAjb|F4U>d^*q>_u;>{{`AmSq2SlBl9I!^G4y-6DE?q(S`Ze zJEKcMgywO6QGxkYOEQo+K!YQ(Vzu=pH&G0Xh|ffeBMqWBi~fT|lVlPUksz^PrTI;i zCK^^md(n@iY>Y%xNCrW2-b<4YgASjB7DVlCJ?)7%?fdB)#R}jh=sqTzd6p!rLlr6j zpW5{TPQsLjjl(eJbiY}Ed5XZ1E%2rHlHMn*HMxc+FDL#LAP?~iCft};pO8~h68#Q6 zmTQ6FpMUcM!xJ)zBEbwD5CWNEPyvhrs_sX?iTobO6KEV6eJ&ggb)6iF9eGj-ZHQX1 zF_cF@pWqlWUpjy^j1=hxVK~NIJerD0QbLq8*Y|)cKRbU__(LHcxc}+~MoXb^2YFbX zy6ObRt6zKuBL9u%Fcg<+xU_1dPV%gr+>tJyW*=5kflOyfRf$kCf}#LTDhxiHMAv{2 zVi>2U7O|l28OoS@G*zYtKl^uTwqteN;0`m5?9_{X&1 z4`jaRqmnG-9MVO8(pI1au{KBJ#@K(MD7pDD#%m+7VhgUGEGPtt%=F|I zWSXpHc-{ao_oC4lunzkLo~K~74Ch@jGWB%4M6&TH%R;}Eu(2Su^hDUC=m*$A)WzQg zwz;)=GrQ<8KCH&#_-PPwa(t_fc*-4XftVvBC{li!#lT^~U6@ig3ZhLUyC8R_WI8X2 z`~fn?btXk4z@l$(t5p1kMkfm2AG-oyZ#gF@cIE)lqBetLJ)h6lV>y7EkF|EkE>iMv zmv`j`JpI6lP3%!Hi8?_6f@)0X1BW;7&~6!_SIaI@)Rs7+_dS!(x~8m$xui(+b|y}D z)h2vY--!+FZt>oY4f-BElYX&5#L|Zi+C`gPk)6SdGMAT##tPxNYtICHU+OPAyL6Y$ zy>LJrJXX2oCsx**Ooqe$(&oo(vjqWy}pFg^EC+LaL z=jCSj{k&NXZu6h4&qo~p+qm4ePuKU2BfujL1-?=F`9tq_cxz#^dsG}J#LZm6sRRev zBFonK1Ge|{@pY2dee?c1L*ewpcnsl}@8{=x2;l22rH1h9<+-N&>+3_Mg+WljDL=y$SiF~M?$iMXEZ_E7od!I`l*^Ag>6dbBe}W85PGNhkHAJVy;sO9XpX%?0 zdWb@+386Yq=F%I6vqfQ#{~l^?TU6XbcIk?) zrjcY5axVAUIntqB=fO~MNj`jug%?BKqwDMRr&{F5@{jfv@>OmZ!#^fwQ}J3{R9;+P zyyM6VGY5i@76k2zy(MD%bNw_Is4A<;HH|uFw8fJK@(p!ME5cU3^)5g_!wt!e1}d$q znZa|=CL`%2L4(e+Epwc%eIP8JC2&aFP+fa>3aO*h8!}vZ0C7Zgj=s9L)8t++0{+dAQIv zJW$G}>rz)V7f>7hm2?0*2l-!#b*CaKqabM`!pnyFx7P%gw2cvMW(F7c%nH;U<)*Pe z5{v<~@WuYn4Ee2TgI}(G>cq)EY;kk4Bq>rRwX{NVlM(See=E`XI*kxM|7#_rPJIh) zQsIp=S}&m(?twvXQx@!b#I*K;T%uH9MJa;QK?`)wZqp)Y}*Mqe&qQ(e{3#T!LB?Y z#x9TIm#(nf=V^etveu**P67LUz}3<4PD{|DJum}PL^5cir7?O2%nEaDdnQk+_g3M$ z^Dvw-mVYLKrc?$yt7}m+%m@U+v_r@+i)&c>y@eQh!HGiT9&SjA&HdHRp2zPs)8MBS z8T_Vw> zkPTy~$*MIWBJDEyT<37lq~Iwt6#=!m8*n-2%5`k1_tn)j^d65{-={U&%f&8Q5v%yH z-ix3f&qX>l@7c_kKlM{>WJWkr?6lE%%X^PupALSWvTD7|Svogz$7|~}{`h(7yL?Fa zQ?b_j0zKev^)1rDb%K-N^u)fGQ_W1l&Cn^$(5*?_l=`Od%AexPVjC`EKe9IyRY{KB&Eh#P0< z=kpWxDWLPzes)3WAv%rc1IY9=+A7eeVebyJ?8i9{^ylU>H%lCLP-xtZN|}E5|q__k`u~tGf%U zQeBALKsI`w;aEvcll@H{Ogdy;9%a1!{> zu;0C2U3f5sk~&OznJIp=tZI)-4TxV**VJ{rOtM0VZ_1x8V^Ed>0^8 z`DuDLl}MFbhBflgiA@DNw(7On7WoAC(Tmat%2TnJiuT>)_0Flw0)6xjEf^kl1x-uX z2;0=mha)mcVjQTRH=p?EWmW<# zl}zV{B87J6K(F~~5sd*`H?}2<_#~hJ9TK+mQcIC6V6h<#I^Ba^)Hoy*Z~B0z$#(>w z_TkxGa!*A}OzL!1o7`-}farPjAHU^lmF4f09EPz1ldPq31xJqE2aqw>%RN7~Y73Gi zlfbgC{ANSV-}h)0osxJhj;NF2LHkP1W`u%Osnyw*hg0JzCa%ql2$`l8GN*udGFArZ z;s*6SG(>9l2Jc<5sAW7Q{AiOr<_NrTg8^Oj@Awo23a;G>`+Rymy<|v;C=Y{S%$Lkd z)y4&wezRd)@(m~#ngoh?@`IKA>|p9^^PN8RM_Te5SV=>c!UVBg7tk(l6;1L3ujM2!HUVmmf0#T1vC}|m*kUe6acPh4Xi)X{q^`2Lm zBTEEtJaRpR{6ECP&C5cmbp-4eWOr%dM(lI7G+9I*g<9caL711q^~?k#A7V;}E>Lm$M;GCG$2NBA8IW}Uacj)IDKI&0rB2;dH;W>l_?UNYGpr;$ ztXD`_@e~EbAX1&=PNPF)v)8nDavN7_KC4mU-?*W6@I=>aaUZYBxeihd97VS$(sZM} z>k3YbF=(EnfkmY0NGkxWqZHFS!J=OH^a#^ETKuszkB@;x$r$CU#t6rX{@aoc=vH-@ zz~RA2s60B$W$w!0c6?mgw1zB?I3FU3|6iag%?e;|Ymu8Y&BZ+SaSQFjC;u@nftXFi z1&CMO1gAd|qc&Zt_xSMg*NYE-Z73d|EjYS0gS5Y?1|+8zeaWCBd9QqV~oezNc)xi{S7G> zoEm^``dG*H0%yxLQ(-o+AovnmD~*yom|$~VI+L2*g-bB!6FYyc^HH;aYf3QTiP7h} z0tZoH3pe`)-1#~_-MjW(;A#N%%log20d7=DVz*2B|t!{C8g0d#l@!NuAxmK zY>5_Ir5}dky~Z#AuJDAc3?Ox=X6F)Ykm9f{mew~n&VW;7#unNnB^DbV~NmR`si5G z)kqtZ)qMx7eWYpPk?O^U{q-l@1dZL={NU5%@X2&iI+_xbYJcRjGtMGtuvGyH$L4p4R~K{mJ~qQ;UVq2v;&6C(7G3Sc%a%?X z@X(2HD0BN$BO$q&%TZ7I>LDVk`k1sHEN^P$T}K4m>rl+#{Kin81^&03^^cN<4L2mD zV!ka6yKnHO`Cn{_tl@!jKgeQw9n2f7*L9N_uBOre)ifPLVg>lvq=G{qD2SPO#(Z&N z8na0c^*n6iDqHrJN`3J&=P?T+MmhL0SIs3>++OGeNWS9ceQUz2NlAax0$_TIT6AX! zid6!jkBRisE2WK3U!+ZZXao1B?B3`Mu4IZ{9&^j{MZ&Bzov>k`9vZU)!H8Aug8mha z09zHmyT2Hr^e^vt?a&$3sL=0#>CXJjS9hMUMF|yr^1K)K-% z*VbQRCBrAx!FFice>eh}(>yeSc$``9SWZbsRvl`%oXa5GFxpzKx8-0S zXC>ou&ai|SovR_%Jyvd8OK_H_J*uQ+p_TCa;sbAt2uM@GX&y;cT9wKlQfaOtdKu&a zCJ1(FHk*K*Mhc%5V`}={C)0mLsAmb$IIJ6P0a}7aJn=n$0MzAYd3op(^)h7Who3g! z@ku=RVb#;P z#~>hbCFx*gO?{NLpQ*Fv*w{G&3Ty%!Y~&H`Xm$2N@tp!gs>bN;2k0G*k+4;@J#?d7 zQ~7LsPD}*C)~8`<7&#Ay@ai)~eEdXwqC`r#w~mdfwO56o&S^Rtx7oUd`Vf)V5sYl7 zk{=q<@4`%4cQOf`u6}1aZr-@ovpV}99R;RYh7_9ZBm+2%(K6~pKuH7u)m$;p4>P`a z!5F~M`z#;poe!#u!=(38NSHv&FeqAeEqa+}rN*d?4u(zIM9IUVmvZur*rR@(IWj^? z)_W+~!m79aJ-r{V%8O$YXUd8Y=MyR?H+@~>(w|oadfKttZSDs(hld6`F1{6%-BXU` z#rKtcf*i+wx>;5TR%Ypd@-}ydd9~0**nx6Se0|1}oq0x`YnM_Qzm2so2$khtbYawp z*HsyX4Dj;DI{0trKHP|a;8kDBf6WZp%}};Y64hLD#1i8TZ=@CK*|NfB@i;H(5DPj}7%OxQf7Oi(Dc{PZmP$m((A_=M> z88jvV$0Fgfh?5Tk7#oPySCI%Ihl!D#`bzqf&5eW(Fvm^Npr0Dc$Hj&^rxr;bgM>NL zWJ;Q$hdYPoNSZBsmvbdPJL)=7Wzj#M_7isfeSN!hd5_y_h}q?pstA;GU8 zn?qJ4!M7lrgCLJ{%?x*@iI$`+4|N_0l{|I~b+!+ZT)!0qtc^3w+4{si-9|J{Y8BGY zk=RgUSa?-QuB(gDJYZOmCP}sfi>)zG&gnA8J*k8#`;jVAw@Tt_i>|GaD8hG1@*s(> zc@ZhDwnOn{2diWUCzlLb`TQyBBT-okSB|4rBuy+18xME9B>kiAB{D z2&s~dq=RWB5uKwLoA_7C#4emFRh%2BtR@ir>biH<_V{GWKzC|P;C@NT$<`Av9s7|b z<}H)t)`+QGj9tX3*A-E<9!ZDSXd*smH$Dum-27>uz^(TYQMDhzK`2IwUuS9MOZb7# zKP1K`L6udpi|F-T!m8>cIItQf#OHKmMK&5a(~#T^TPMMfQtQ~~8fg7E6Oe9ntf|)h zB}%X!3B$s$qw3C@>czcII2hni^{*k;w?r9il1t?xQzPYA>+$<<^aoX*wDbc)u%1mp zOo9q=uqvvWwRZaDjDIHfvTfYH;?5AbM0#E5x$?G!l`H5)F|^6{H_H{A$8A={qyDNz z?IG!!<8JJJ3Sc?61^nL?53Uq>ZV-xQGitC>5D>2aGNGF}=)k@~K)Et47S;Q*pyllmS629sBr68HLb}kbKmORZ?~c1@noHM ztE4uY4L0)0$oz|Lj3UeBjYzZ;#Nly@?Ujv>GKP&6btHrIgzWVDmrFk7U<10h#w&-pFc;5l0_}Br z3lp7gmJH4&^CW4@J4O+eL*WHaVk+$r;)AaY0<#LB!B&S2Ycl24Opvz%wFBiv=lsspBbjF)_P0ShYb44m}8PWDEK7|y%7y?WF72> z>Nw;||J_foazFI{rSbU!hO-sX|NnXMz?}af+Bdthf^+~tG24rFi%?h=9ox4|L7AwbaJ?i&8=Z(nw6AGWIBx*xi_tFQDu z=UlwS-}(RXN=fQ$QG-PAR^RKa3Vvsaqh^UgJ1wGx(?lFgih;b>Gi+*T8*D!-^sd_S zU;E`)t?O35pjXvw=JL_;DN*dY=QWEy)AjY%@A26$MaX07q1&VT@5`SvYTDytlvITs z(yC0NlvJQ1GaZtNUm#=wr4?cDHZ0=W8ur=laB&6uMr|14aJFu)IX_T(!_t^H75}*GtVoXV15M@3z@-#F&N{7!1g~^R> z7bnnaLGWW0FZT!U(9ERdzHo|({g6_1d(+s!uvc%U6;4b`WJaXNlq^_oUB zraOXh^W!z$BOU^Z3z(WahFArICJJ`|h)o@20`qOkBrpu&Y{#NTaB`<+%Bp~#WB&uA z;V7ukmElRra&d=eDo)Va;C+=P=8n!(o?s-z*&M_LGdCv0P($%jW$|%T2j8>C>dLY; zX2;NN#UgHL(?%-L&BS7WF&m-xRK~|<Ivi1I6&p@f=I`-!R*s;QHuEX1E6uDKueViof zyQY4GU)5oqh}4{&TgewB9Z;zI9R5+9J*XW2FT;=nlY{zzZCWw-%tZ079B&`FZmLe% z2eSjE!i5IL40z$OH2PT{rrq#2B}7#EYwSvoSz% z(pP>6u~01%mYa6AJb!d_HGDKXMH;JGvzy|UeLntvG;cO9N>K$a4Wd+J;Xe*j)Z65Q z4>I(L3)+&BVn0&dr*?4Pz~a4$9`-whp=mXLlQX|W_vsya_X?j?R36R909nV+Ce2#e zwb}<+m;|s-u!*GT0G2~*pQ##?-p5$M$U!J4^sCx{OjIN8&Ap?C`JeW0M>D!|TY`VT zER`(1NhAmh1t}Ro3MM3;fBkSw91a!>X3^Ij78yv=xo1~JL>4j@PfISjVd?rNX{wVs zTv(^9XaO^xYxgpA&_xP20Jsky-x(HhuuWxrs@7Rns#P)`l)ft!A4$?-y&ygC&#ThX z)+}4(N$xvE4bH1&XZozI>AIU9C|*!eDy+%kD9fi7+PYfM(xP+WL&(w?$+x8@vPyGi%NPir?XvOu72L-ZD{Rz z)5+~q+O7sExw~GDvU2-aZ(O&Nh&1B(eJ}rM_r`iH;1iVaf4<6z78fJgBdMfHx2F~7 zjp1Nr`MJoopMyO+3Xpo4Whp^xb(pW>ug2XC?st<9tf6J1=A5%fUj7R|^beyAjuXOj z*;hYO9AG!%0E2PH>y-Vw7yF8f72~tYnYyK;9oUL}`V*gk7I$P1SNXrTx#zxiPp1f_ z314Nk&FE^i>=&arOv(GH&E0ggz@BhvhUvv-jFU6FpIN|%0Gf9oDLYJtW|+`?sbW@- zyEg6?Jx)?}aYx6RkaxONvEvYN8dLd5X0ghB!Pfo~BXS}%>;#p&|1xH5E?jY9tmJqO zWs@5uY^e*EW>zsZ-oKgBbkX1Vh=f!x-f3lP%G^|GP+bWXDNb5NX0{b&l4#0c-suuo zFgJEb9#L2Ti|QG=cgp^ zE|DHC`AHS@oV&^%3}N5SH&|c`F?m4`(h5~~7M{tFHKC(>l{G&p1s3xM<%!`~b++tA zI*ll6_nny4B~37WI93IM=hNlk)Z^?#9ffYrjg}Np8iObHcVpe)Zzw2NR;0AOkc%)&Z9fYKga?_#IJ+psKT#t|T;I0N}G1P;^7cMX~R%(Sx03s>fMN^%O4 z6!EO+(7msJLeR6GLg#L@mFw0+X|O@TEPby^VMH{*m;x=*s=3N zP1D7wH6K4; z!_+Fbx8*+W6`r4gkF*Uas5g7?26Weu?AUQnVO#Dr^xb7c%{7xvZ zrgm^TH^V%$+(w_hAQP8fW-v47tjQqP+%q2GW*a&*UjM27EDGayMD?h~DJG#G-03e} zB~yV}T=`9QwQ+Il$!QXn#5hV2- z-c(FV2hG)pY|&c$^&){IY>P62;K@#}t%0LBmU=_Zc?oa_VbVPmMIw}}TPk!E(_sHCS36t9GCr=%QkCg!PG0|P za(nImD}_=U1$NG-yqax)xN!F7)xjMMxcVg?=Yjy%BVwRb$cM-Pr#EN?brvfk6hf`dfLl5>WXE8?(Sn1Qh0~6cR zr6#$e*qE7?G^p_xj&lL`=CY7T#}T|uproBzJ&$g3ft6KRIbK*Pj?bXL+ z{fuG+!|yb!W7Vci;f+Po3`y~MuDzZcP;qGDMbN~@MIBU?!C##WgJ2C?W@T3aBZ?Sj zMX8#3k776d8fKVTw_E7U+ZXH(i}@cGC*re+C?j@PNmaYd`70_A97M_v#a#JJahb9p z`&$!Ld<%R0~`@XP?S9yaS}TyP74It8De*d~M6_GK`rc>AERBhi0ujEuq;-1}fj88H+)VqE+@ac2B5`AI7jC6jZ*5&| zXic7yt`Fut@XM;!#sB?%N#hnvki2THT;Zjw`DJ}&uFYfz%F4>f$YIw#{323ThQHcP zZCvGs@R^w-kuYO&tMGesPzfX|UQ94OI< zYucRFZ$elSAXuN{=-Bi&lnUPt@u}Fpe?a}`K|FfI=-glv-~5eBS<+XUg}?xCyFpl$ z?efP?a+0Mv5woeVU2jw!VtL(P{yB*q6%gbkt8Ui(cOYO3tG%Ql_aZu}(FI8R*YcW? zvy{*97sl{OOGUNmi-T7`=@9m^96%d@ZC@WQ_9mR5GAGcb#mRd)sb^WL@4Tt3F>|KZ zjs4$;T?L-9X1TExa}xu|@E_^CTR&=PmgJLzDN;Rzm`3Gwcz!IqBUodV!qkPaAvU?h+($Z{CwsC z0WUFqb1i4{QC0Q#d44LQUhPimm@51smWBCDLKHUwn5C9eLN%UHUALgT9ot`o(~IbG zswTj%@ZX&NOnEVB7qQMWa5rXxzsqu`Pmb*nJvW*8l;bVu;L= zS4G294{1nNDw$W-)iJ!Q&p5uHc*Nv}pYS+srz&35x9x%BCtr9^?J35hMNyc|3D_ z)xsB>;@q2e#c`Gmvs1gaKAOmEsgei< z0Z06f{e-#h_Kbz6K*SDQ0s8Ir$wu+WbT39d>R1o0nD<5R+SA@vegb^UnxjT951|HLG#rL9KgG1ae^7%LFbU~j;#(1?&`Y^&-6 zR~bWTw5|ixu&5JxcSQWH?S-kgu4?20H9qS7yDOnw`>uC^;*OnGldMc*n0<#dDve7bR!&&m=$v;yQfV2IM;6TRD*=9 zj5b~`#@7Y9hdk^BCp~FBIz3}zum8EC{X#tcy_7-MfA`m)S!2#INj>|7( zeg8HOE)bBuF_AGqcn2ZwG^ZZInoY6$CjGMIpmN$Z1y6VPrUbIi_MtaY^UBl>eHrXHv426b(TMQ=AtCTEdfTX@STScFvLwFPo{bwJ0>{6WO8+pkc zEN6Fq$o$Q3TtZ@?|J{*DwEXZtt5deoY;Mr5v++CL0oLX8Z++G@%AlraBE3aj``DMGebaNYVLUXi7l8 zq72Z13 zO8otMc5BrYqzW-x*>V&8OovX{u`vSoX^OS?16JaY&V)ZjU$;DG6LUl1ke5Jm$;Qw$ z8gLUq6E9;?%!c2LDUu~c$!jlIj(cv>IJTL*a8#S;09s1lbjs& z!rPH3d*=b7%?h8bLX&+M)rIv-K>F#^G~h=VuNDUC&FgD>l|fuqY|F~Her#%4@ucuzAP}9c zagi~%e(kA~@xcLJ#rZxMZ^`uzV7qw|*rfk>h;$$*qoXX*(lsa)_@`T4R3lq#72+>* z_`UQKY2_O;<2ZmPa);)tn?q~gC_}2p2Dy)Y z{6%?5n~sNnPueVpbL=^FAcs)%p1IGz#DC`0LK}-|G+B5VlFW#V8M6>X;`dKCe|nCR zyDcQ&srernrN{4sGrP6ha zlDdxMl}>NpGC@FNai!tv*{TqNG!kS;;-VFoY}X#gnULyNX#Eurjntb5}UEoXe9}O%X9)KTDwB%XLeB*yLn0n3*nhw`ajY`Xy34n z*mP3P3q1)PBwY@^(Cg?>vsnWCFnq*Kig!Py-Vmq&?jKF**@zY`$gC&^LG)Ly0xh(W zhNhWZo9G0PzL7SwOo*gDVRuSH=QnF6Vr^mg2>$f&n*|@LpWcD8gBA`Z&q)D0}yBNZ4OF{sZ1f2|F5hs$R zxB+v7SuQQwQblI&iYxEaf7=)cwH^Cd0{?fM+raWz6>oLzgZ0hGUqHe;L4k?!~mXcqar?L_j{0BA#6-vIhcsN*c}<1Xbeu6Q}kn;e|NPFDPFtgbZAelov^lw=7N#Sw1nP zIWTa2Zng7{-^G#H+D|Cbwl}hK9^Vi9#CK*SNAP~t0&yj|7p4Iqc3)r}vXJH-=?oEg zzXgrM#oop74}pzlk#z9u=)3yH$c8@Cdr2uiVKY`e~daXE07SzEXf3GSssVIh^nf z`Mw|2l{Od>kR<>c=qTosDhLOdAk6(Ur_kM10?Mg)R1X{fZ%2a zuEJFo`+%R)M@Uv)Q_^Y09_%LH+LWIrW4kL?Et>O=RX!oX!UpeTzorAr__5A$mcav~+ z8}h+KgbN4~k?Z8F(56lPWa?!N_jaE95)KCfqWE7M(8PTSOekG+Nb31E#VN*#Gw6xl zdBuS?O})@SI8I#Bee}{;AKypn#>`CPw+53*5xsx5Kon#vRvD9T9Sjr|%_sKEKDp;J z{Y0>wmZwVR_~WUu98?QsWfW*GT`haBRrYQ;&}kL+J)C>;b3;=X z5xk*F=p7t7JzH6C0E!aEN=A!UY03o{FP{&_^PojgQx}&Y@V1Wxj@`8Ei8R}1jZ8etM@-l@+H4#o# z8eob*`#cD-Yb~Bx@JrW^O19myfXubkx!pko)6pb>tijvQ0glM(^UJr~U80}IVaD>l z8>HhqAY-mNR?SJTC7< zHUEbFt09zX5p+SW2^Jk8O_pEhpIzR0*t*MpY+f{<#@2`f{sxA1n+T-cfc-8VE?XYd zZ&sXM8Xsepq2s#)2m2>ZLF=MVzXI=jGqZVYgv2qe^omPUy`G~js z1-|y|dgsZrd@thTNz5&qjwqpZUd==tK zaW@ga>`z|tvU-8>%o;pYOeZ6@QyVh;N{+4msjVroIbF(C#o+wGkrA5 z_?C*DX8H+{f@g4AU^d#3dG5l7>Ze3L_)CS1WV0t-W#+fv1*|G%=3T}0cv_=8bf|A!XsTfLLhr@S`^UdLzGQTDV>~M#V5Q$5< z0l9QV(ZU%QTg4>M9RN~MqY;|TQ z-okH3R5qcR9Ec z^00kn2#@q0LC)At8}_oOZs}7N|9Lwq&Zt&a`8#{}=A@Ro)@R#8&P9B%bmuJR+h31F zz-!>FKCo+btOM-E9gdkGn&G$a5@u$qQEq*P&WsL+h5+#m`; zcftYJIOm2M0C*JpGO+>NxyM5aqz8&m9Pz&~v^xKM#YopFJGIq_7q&V%!nD7&QjO=b z8b2a57r+5$a0pA|FY!dJMWw!jlbT!GNQntM>*jdRfP_SK-uW=Ytg!I)*N?yTfn4&EvjKKi1AsI(t+YKG)AFKI06!fvmDb?9 zhDM@B4dlqt;gv^fWyII)o%JqpoZawhFlv0Yfi}nQ=;40ZoI!CsIA^}Ei4YEs-h;Lz zrmgKQAzm-zFBc%V;Lwr+t#L1*?fUxt4_*z^SEE&^T@pQyn=AD_54e@bi|XUMpPEc+ zrt&#Y%K`e}tM5jF1$BE=gqwA4g2uHO>WoCQu%}(m>lgRmY_?Y&X-CZN*UOIw_`G7G ztAYhgpKKLmP+qGH*EnpkM=}N+S<_ujx~e0rihVY3GS+hTPGhEFhtP%^Z90e2$E*z- zPlVdwsy6UjvEEFesUul)e`~SBr-}K}t=75MA5imq&VqJ|6eG{&Qd(PtA71Q}K1?0o zf`fh5b)2rZg58ONr?<1=UQn5zc}op$cZq`zvjZGU z&3$=8Ir%V`T>f9mw#)anobs>P>l|gSBNg+6lLC2?vF}X(&2X}~5J^ngrhImFoQa;> z2lgh^*Pox({?6A46b^5{SU>pu8uGT^enoTcWcwypCEyq_%q4$@IrF4t@*{X5lh*PY zuAiL8GKaTrGRt)kn{hH!IO%WV`d*@NzTj(++so}yj%j3(;_K^oRF|5Qb5N)89Z}4- zNtRH%DtR+aQYq1H#4^Ja2~n&F^o9A99N^l9iWt=HyUJ7aeB6pdN?ogqE8DG<6u?N+x$9^Ea{@R+BRlZo} z2P`!rS8T`63EK@)TxMeVt>Wwm^Nn9zAH<3k=tiBz49geyEmfc2ItNaCGpXg20Mwug zSMv3sl}8&AB8e_PpP;M1e|-ccJX+M>|I4!bcGKd*qj;HH;0 zA)BW!WkTL(qt6_sj=T>wqg4A8!KwdCbVB$MF*W|jNH@^>WW%W_YbI5#+VDw6f*{^Kyy*|E|b*tw5xP=jP9#sYGM|xP^HBpUTkuOZplF zeuTpp;%h{B)DT4ccZkSzVM_QqT!oq3wjU+m>AdHP7v_!={%<#d35y9#2-Dy<=GAR7 zzT*0zt=-hotliA{#MSZi?St;|-++JJfroSTKf78x&U#+gURv449b8)3%a@I!l-Ht+ z&6lC{fDr;$b|C+*C0rfO_+=wot1k4DF|@U#J_|hxN1XexnbIFq-w(?LU^{80#if6LPUF;fhHm7Za5r63~l%so9-r|tlY@@ zmK?j5;&ns(ZG`9z@8bv2?x)FbM3Np!Zv0n6U|G{RshZtAlzJryBR5F)odYQ)z9okAJgv;A5i| zj=j=!(meZdQ%h9R7E|^owBv~`AS3wZvmRObpJ|n=RNW&7wXG+Af_^A%F=#DVKpg2s z%uR`e?}v5-M}lONUcrzY`e0gp@q$KU`hT=Hl%OA~xYRTE52C9y(+?*c3&5sWs@}@= z+$S?Gv)kDwodpG)d`x4@_jL?iX}-wM5X>i!!wy5&wCER z_@QFb$=Sv+eF?!x1lk9kr3uIL1jZ3KiIaHHuJj|-|*wrCXzpB914!EpMI$Lnz_ zMcaPgmrlTtDSE5Q4hwy^b_yQjjz)gd+!VGnUx;-K-iZ}1C*%UyqR;1#6&yu$0|oy{ zJEg~iWnEP(1}gA0k}JbTF$IhRQdDru@3R#H70Y6@aqMv=AeCD>FVpn@=w~YtxHNLJ z1Dl!|jcv7%-=0B?$5Gh9!AJELAxvS=fhte5h)!<#573#6xPI;(qv}kCwYV2?lojIb zfInjml>+prUn401`U4;)Z-Wh_?FiC-vc4#d zAmI{CUKrKbPs7}#@YK4vtBUi zZQ6;3GG5^Cb&}mulgOOJ2k$4tRrK&cukd0umkMg_D|#SFB=nDY2SQkk79g=~l_8Rf zZ4LRp!_$DJnI<3X#|&z38l4Eo>eH*5=`T-%Fm zLm}GMGEqwo-cy?B)6Gm?zTW3NbaCzlv-Kq!C?%gNl0dgXs|m*Y(=WM+$QN9CMM>6T zKjklo^)}t+aEh+>*d{;{u^#6f3yr!!H6=i`A>$-Vaq?Jc}_+o2RNXF3`+i zjum;oJt$nZoI3{u_rJ7-h`bK~zeln{5qn&}>Hk9<7u3Kh_W1M9u&l}u(wxsGtSzDh zm1-Mr&e2dF=5ZWhI-OJN+?G&1iX8yvyu`jo&A4KgLKbU4_n&Tp_nLdKAeOVBzXi(W zhpqW`w;b4dY5hG1%?8MP(OtGF{N0z0Ij@IK_rtrdciwCo2)ow;gFzzE@%-)f^(*c& z^i1MiG|xEw|2dx1{-A_?>I~Dr5IG!S9;C(X+B-DWJs(W0%xptz)mZgZ^(>Q|>0S&~;4Wy0@gg5)w-JLi$byas7=+1LpETyLj`AZZ7 znrEIO)v{m3voLx^=YSG&uPNri<~9s{S6TC4O<5w@k4T4^(~NjQ&?V`hkVkQWLNje2 zH`YT@?a;@aCNg7QZ8ubM zBbSB9GB)6I%aIDN$0#0JbWoRE%+C<7&>EG&w0%Hs(mr*w=p|oeJ%w4 z^dZ#@1Q;aWUBI0&D{B+rPB!8>@;b zecf_?*%XfcKc6zyKh$;ehGk|9b$R8grn_~oR);2cS=f9xa&CD>_J*&>6Rbf5|6d%l cho_~xr?2}b8#EqaVF7MIGzNx`>T+oR2kcT1F#rGn diff --git a/docs/manual/fr/user-manual.tex b/docs/manual/fr/user-manual.tex index 50deb098..ce85fbf8 100644 --- a/docs/manual/fr/user-manual.tex +++ b/docs/manual/fr/user-manual.tex @@ -766,7 +766,7 @@ \subsubsection{Exemple : facture d'une agence web} \item Compte de réception : le compte bancaire QR-IBAN de l'agence. \end{itemize} -À la validation, Kesh attribue le numéro \texttt{F-2026-0042}, génère le PDF QR Bill, et crée l'écriture comptable automatique (Débit 1100 Débiteurs / Crédit 3200 Honoraires). +À la validation, Kesh attribue le numéro \texttt{F-2026-0042} et crée l'écriture comptable automatique (Débit 1100 Débiteurs / Crédit 3200 Honoraires). Le PDF QR Bill est produit et \textbf{figé} au premier téléchargement ou au premier envoi (cf. \S\ref{sec:pdf-fige}). \medskip \noindent\emph{Variante ventilée.} Si l'agence souhaite distinguer ses activités, elle affecte la ligne 1 au compte \texttt{3200 Honoraires} et la ligne 2 au compte \texttt{3400 Maintenance}. L'écriture générée porte alors \textbf{deux lignes de crédit distinctes} — Crédit 3200 pour CHF 4'500.00 et Crédit 3400 pour CHF 450.00 — au lieu d'un crédit unique. Le compte de résultat devient exploitable sans reclassement manuel a posteriori. Les lignes laissées vides suivent le compte de produit par défaut de la société et s'y regroupent — y compris celles qui viennent du catalogue, dont le compte a été vidé après la recopie. Si les lignes de la facture portent un taux de TVA, Kesh comptabilise aussi automatiquement la TVA due au compte de TVA (p.~ex. 2200) ; ici l'agence n'est pas assujettie, l'écriture se limite donc à CHF 4'950.00 (cf. \emph{Décompte TVA}). @@ -777,7 +777,7 @@ \subsection{Validation d'une facture} \begin{enumerate} \item \textbf{Brouillon} : modification libre, n'apparaît pas dans les rapports. Un brouillon n'a en général \emph{pas} de numéro --- sauf s'il vient d'être \textbf{dévalidé}, auquel cas il \textbf{conserve} celui qu'il portait, et le reprendra à la revalidation (cf. \S\ref{sec:suppression-facture}). - \item \textbf{Validée} : numéro définitif attribué, PDF QR Bill généré, écriture comptable créée automatiquement (Débit 1100 Débiteurs / Crédit 3000 Ventes + 2200 TVA), et \textbf{comptes de produit figés}. Une facture validée n'est plus modifiable : le compte de chaque ligne reste néanmoins \textbf{consultable} dans la colonne « Compte de produit » de l'écran de détail, où les lignes suivant le compte par défaut de la société l'affichent avec la mention \emph{(défaut)}. C'est le moyen de contrôler la ventilation sans avoir à ouvrir l'écriture comptable et à la relire à l'envers. + \item \textbf{Validée} : numéro définitif attribué, PDF QR Bill disponible (figé au premier téléchargement ou envoi), écriture comptable créée automatiquement (Débit 1100 Débiteurs / Crédit 3000 Ventes + 2200 TVA), et \textbf{comptes de produit figés}. Une facture validée n'est plus modifiable : le compte de chaque ligne reste néanmoins \textbf{consultable} dans la colonne « Compte de produit » de l'écran de détail, où les lignes suivant le compte par défaut de la société l'affichent avec la mention \emph{(défaut)}. C'est le moyen de contrôler la ventilation sans avoir à ouvrir l'écriture comptable et à la relire à l'envers. \item \textbf{Payée} : \textbf{soldée} par un ou plusieurs règlements --- enregistrés à la main depuis la fiche, ou par le rapprochement d'une transaction bancaire entrante (\S\ref{sec:reglement-client}). Une facture réglée en partie reste \emph{validée}, avec @@ -798,6 +798,8 @@ \subsection{Vos coordonnées sur la facture}\label{sec:coordonnees-emetteur} Les \textbf{avoirs} portent les mêmes coordonnées, à l'identique. +\textbf{Une facture déjà émise ne change plus} : vos coordonnées s'impriment sur les factures dont le PDF n'est pas encore figé. Celui d'une facture déjà téléchargée ou envoyée reste tel qu'il a été émis (cf. \S\ref{sec:pdf-fige}). + \begin{keshwarning} \textbf{Une coordonnée très longue est raccourcie à l'affichage} (suivie de «~\ldots~») pour ne pas empiéter sur le bloc de droite, qui porte le numéro et la date de la facture. La valeur complète reste intacte dans vos réglages. @@ -812,7 +814,7 @@ \subsection{Le numéro de client sur la facture}\label{sec:numero-client} Elle rend deux services : votre client rapproche la facture de son propre dossier fournisseur, et vous-même remontez d'une facture papier au contact en saisissant ce numéro dans la \textbf{recherche} du carnet d'adresses. -\textbf{Où le saisir} : sur la \textbf{fiche du contact}, champ \emph{Numéro de client}, sous le numéro IDE. La valeur apparaît ensuite sur toutes les factures adressées à ce contact, \textbf{avoirs compris}. +\textbf{Où le saisir} : sur la \textbf{fiche du contact}, champ \emph{Numéro de client}, sous le numéro IDE. La valeur apparaît ensuite sur toutes les factures adressées à ce contact dont le PDF n'est pas encore figé, \textbf{avoirs compris} --- une facture déjà émise ne change plus (cf. \S\ref{sec:pdf-fige}). \begin{keshnote} \textbf{Kesh ne génère aucun numéro de client}, et n'impose aucun format : \texttt{42}, \texttt{CLI-2026-00042} ou une référence dictée par votre client conviennent également. Le champ est facultatif ; un contact sans numéro n'affiche simplement aucune ligne sur le PDF, et rien ne bouge dans la mise en page. @@ -843,21 +845,38 @@ \subsection{Génération du PDF avec QR Bill} \keshscreenshot{facture-qrbill.png}{Exemple de PDF de facture avec section de paiement QR Bill 2.2 détachable en bas de page.} % TODO capture: PDF facture QR Bill (donnees factices) -À la validation, Kesh génère un PDF conforme au standard \href{https://www.six-group.com/en/products-services/banking-services/standardization/qr-bill.html}{QR Bill 2.2} (norme suisse 2020+) : +Le PDF d'une facture validée est conforme au standard \href{https://www.six-group.com/en/products-services/banking-services/standardization/qr-bill.html}{QR Bill 2.2} (norme suisse 2020+) : \begin{itemize} \item Format A4, page principale + section de paiement séparable en bas. \item QR code suisse contenant toutes les informations de paiement (créancier, débiteur, montant, IBAN, référence structurée, communication). - \item Section de paiement en français (modifiable selon la langue du client). + \item Facture et section de paiement dans la \textbf{langue de correspondance du client} (fiche contact --- sinon la langue de l'instance). \item Compatible scan par les e-banking suisses et applications mobiles (Raiffeisen, PostFinance, UBS, Credit Suisse, Migros Bank, etc.). \end{itemize} -Le PDF est téléchargeable depuis la facture validée — pour l'imprimer (envoi postal) ou l'archiver. Depuis la version v0.6, Kesh peut aussi l'\textbf{envoyer directement par e-mail} à votre client, sans passer par votre messagerie : voir la sous-section suivante. +Le PDF est téléchargeable depuis la facture validée — pour l'imprimer (envoi postal) ou l'archiver. Il est \textbf{identique d'un téléchargement à l'autre} : c'est le document émis, figé (cf. \S\ref{sec:pdf-fige}). Depuis la version v0.6, Kesh peut aussi l'\textbf{envoyer directement par e-mail} à votre client, sans passer par votre messagerie : voir la sous-section suivante. \begin{keshtip} La référence structurée du QR Bill est calculée selon la norme ISO 11649 (RF Reference) ou le format suisse QRR (Référence Kesh). Le choix du format dépend du compte bancaire de réception : les comptes IBAN suisses standard utilisent IS0 11649, les comptes QR-IBAN utilisent QRR. \end{keshtip} +\subsubsection{Le PDF émis est figé}\label{sec:pdf-fige} + +Le PDF d'une facture est produit \textbf{une seule fois} : au premier téléchargement ou au premier envoi par e-mail qui suit la validation, dans la langue de correspondance du client. Kesh le conserve alors tel quel, avec son \textbf{empreinte} (SHA-256), et c'est ce même fichier, octet pour octet, que rendent ensuite chaque téléchargement et chaque envoi. La fiche facture l'indique par la mention \emph{Document figé le} suivie de la date. + +\begin{itemize} + \item \textbf{Modifier ensuite} vos coordonnées, l'adresse, le numéro ou la langue du client, ou la mise en page, \textbf{ne change pas} une facture déjà émise : seules les factures non encore figées en tiennent compte. C'est ce qui permet de reproduire, des années plus tard, la copie exacte de la pièce envoyée. + \item \textbf{Qui que ce soit} qui télécharge le premier --- y compris un utilisateur en consultation ou une clé d'API en lecture --- fige le document : une pièce sortie de Kesh est figée. Le gel est inscrit au \textbf{journal d'audit}, avec l'empreinte et le nom de qui l'a déclenché. + \item Une facture \textbf{annulée par un avoir} garde le PDF qu'elle a émis, et la fiche continue de le proposer. Ce PDF ne porte pas de mention d'annulation : c'est l'avoir qui la porte. Une facture annulée qui n'a \textbf{jamais} été téléchargée ni envoyée n'a pas de PDF. + \item Une facture validée \textbf{avant la version v0.12.1} est figée à son prochain téléchargement, avec les données du moment : ses PDF antérieurs n'avaient pas été conservés. + \item La \textbf{dévalidation} détache le document figé (son empreinte reste au journal d'audit) ; la revalidation en figera un nouveau au premier téléchargement. + \item Les \textbf{rappels}, eux, sont produits à chaque envoi (cf. \S\ref{sec:relances-user}) : seul le PDF de la facture est figé. +\end{itemize} + +\begin{keshwarning} +\textbf{Si le fichier figé a disparu} --- typiquement après une restauration qui n'a pas repris le répertoire des documents ---, le téléchargement est \textbf{refusé} avec un message qui nomme le fichier manquant (\texttt{.pdf}). Kesh ne le régénère jamais de lui-même : ce serait fabriquer une pièce qui n'a pas été émise. Le remède est de \textbf{restaurer ce fichier} depuis la sauvegarde du répertoire des documents --- c'est le seul moyen de retrouver l'original. À défaut, un \textbf{administrateur} voit apparaître sur la fiche le bouton \emph{Refiger le document} : il produit un \textbf{nouveau} document avec les données et la langue du client d'aujourd'hui, \textbf{qui n'est pas l'original}, et le journal d'audit garde l'empreinte de l'ancien et du nouveau. Une facture annulée ne peut pas être refigée : seule la restauration du fichier la répare. +\end{keshwarning} + \subsection{Envoyer une facture par e-mail}\label{sec:envoi-email} \keshscreenshot{facture-envoi-email.png}{Modale d'envoi : destinataire verrouillé, objet et message pré-remplis dans la langue du client, modifiables avant l'envoi.} % TODO capture: modale envoi e-mail (facture validee, contact avec e-mail) @@ -877,7 +896,11 @@ \subsection{Envoyer une facture par e-mail}\label{sec:envoi-email} Les deux restent modifiables avant l'envoi : ce que vous voyez est ce qui part. \item \textbf{Pièce jointe} : la QR-facture PDF, attachée - automatiquement. + automatiquement --- le document \textbf{figé}, octet pour octet + celui du téléchargement (\S\ref{sec:pdf-fige}). Le premier envoi + d'une facture jamais téléchargée la fige, même si l'envoi échoue. + Si la langue du client a changé depuis le gel, le message suit la + nouvelle langue et la pièce jointe garde la sienne. \end{itemize} Après l'envoi, la fiche facture affiche \emph{Envoyée le} suivi de la date @@ -925,7 +948,8 @@ \subsubsection{Langue et civilité du contact, adresse de réponse} \begin{itemize} \item \textbf{Fiche contact} : le champ \emph{Langue de correspondance} (héritée de l'instance, ou FR/DE/IT/EN) détermine la langue de - l'e-mail \textbf{et} du PDF joint ; le champ \emph{Civilité} + l'e-mail \textbf{et} celle du PDF de la facture --- téléchargé ou + joint ---, figée au premier rendu (\S\ref{sec:pdf-fige}) ; le champ \emph{Civilité} (Neutre/Monsieur/Madame, contacts de type Personne) personnalise la formule d'appel. Une entreprise reçoit toujours la formule neutre. \item \textbf{Adresse de réponse} : \emph{Paramètres → Organisation → @@ -1008,7 +1032,7 @@ \subsection{Relancer les débiteurs}\label{sec:relances-user} \item Une \textbf{protection anti-double-envoi} empêche qu'un double-clic n'envoie deux fois le même rappel. Une facture arrivée au \textbf{dernier niveau} reste affichée avec le badge « Dernier niveau atteint » (poursuite à envisager) — elle ne disparaît jamais silencieusement. \end{itemize} -\paragraph{Ce que réclame un rappel.} Un rappel réclame ce que le client \textbf{doit encore} : le \textbf{reste dû} de la facture, après ses règlements partiels --- le montant total s'il n'a rien payé. Le courrier annonce ce reste, augmenté des frais de rappel s'il y en a ; à frais nuls, il ne parle pas de frais. Si un règlement est enregistré \textbf{entre l'ouverture de l'aperçu et l'envoi}, l'envoi est \textbf{refusé} : le courrier validé annoncerait un autre montant que la QR-facture jointe. Fermez puis rouvrez l'aperçu, qui reprend le nouveau reste. Le PDF joint n'est pas la facture réémise, c'est un \textbf{rappel} : il en porte le titre, rappelle le numéro de la facture d'origine et, sous le total, ce qui est \textbf{déjà réglé} puis le \textbf{reste à payer} (ces deux lignes n'apparaissent qu'après un règlement). Sa \textbf{QR-facture porte le reste dû}, avec la même référence que la facture : le rapprochement bancaire propose la facture pour un paiement de ce montant, même après des règlements partiels. Les \textbf{frais de rappel n'y sont jamais inclus} : ils figurent sur une ligne à part, avec la mention qu'ils ne sont pas compris dans le bulletin de versement. +\paragraph{Ce que réclame un rappel.} Un rappel réclame ce que le client \textbf{doit encore} : le \textbf{reste dû} de la facture, après ses règlements partiels --- le montant total s'il n'a rien payé. Le courrier annonce ce reste, augmenté des frais de rappel s'il y en a ; à frais nuls, il ne parle pas de frais. Si un règlement est enregistré \textbf{entre l'ouverture de l'aperçu et l'envoi}, l'envoi est \textbf{refusé} : le courrier validé annoncerait un autre montant que la QR-facture jointe. Fermez puis rouvrez l'aperçu, qui reprend le nouveau reste. Le PDF joint n'est pas la facture réémise, c'est un \textbf{rappel}, produit à chaque envoi --- il n'est pas figé comme le PDF de la facture (\S\ref{sec:pdf-fige}) : il en porte le titre, rappelle le numéro de la facture d'origine et, sous le total, ce qui est \textbf{déjà réglé} puis le \textbf{reste à payer} (ces deux lignes n'apparaissent qu'après un règlement). Sa \textbf{QR-facture porte le reste dû}, avec la même référence que la facture : le rapprochement bancaire propose la facture pour un paiement de ce montant, même après des règlements partiels. Les \textbf{frais de rappel n'y sont jamais inclus} : ils figurent sur une ligne à part, avec la mention qu'ils ne sont pas compris dans le bulletin de versement. \begin{keshwarning} Les frais de rappel ne sont \textbf{pas comptabilisés} par Kesh. Un client qui paie le montant du courrier (reste dû \emph{et} frais) ne verra pas son versement \textbf{proposé} au rapprochement, puisqu'il dépasse ce qui reste à payer ; saisi comme règlement manuel, il est \textbf{refusé comme trop-perçu}. Seul le montant de la QR-facture s'enregistre (issue \#401). @@ -1133,7 +1157,10 @@ \subsection{Supprimer ou dévalider une facture} \item facture \textbf{envoyée au client} par Kesh~: refus \textbf{sec}, que rien ne lève. Une facture que le client détient se corrige par un \textbf{avoir} (\S\ref{sec:avoirs}). ⚠️ Kesh ne connaît que ce qu'il a envoyé lui-même~: un PDF téléchargé puis transmis à la - main ne laisse aucune trace~; + main ne bloque pas la dévalidation. Son premier téléchargement est bien inscrit au + journal d'audit (gel du document, cf. \S\ref{sec:pdf-fige}), et la dévalidation + \textbf{détache} ce document~: celui que vous avez transmis reste valable, mais n'est plus + celui que Kesh conserve~; \item écriture \textbf{rapprochée} d'une transaction bancaire~; \item écriture d'un \textbf{exercice clos}~; \item écriture déjà \textbf{contre-passée}~; diff --git a/docs/testing.md b/docs/testing.md index 980e5b86..b91db408 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -202,6 +202,12 @@ démarre quand même, `/health` répond `ok`, et l'échec ne se voit qu'à l'ex côté Playwright un simple `getByTestId('inbox-import-report')` introuvable. On cherche alors la panne dans le frontend, qui n'y est pour rien. +Depuis la Story 25-6-b (#387), **tout téléchargement de PDF de facture écrit dans +`KESH_DOCUMENTS_DIR`** (le PDF y est figé au premier rendu) : sans un répertoire inscriptible, il +répond `500` et toutes les specs qui téléchargent un PDF de facture rougissent +(`invoice-frozen-pdf`, `invoices`, `invoice-send-email`). Les fichiers figés persistent d'une +exécution à l'autre : une spec qui en dépend crée sa propre facture. + Sans ces deux variables, `inbox-import.spec.ts` rend **1 échec et 2 tests skippés** ; avec elles, **3 passés** — le round-trip complet de l'import de factures fournisseurs. Les deux se corrigent ensemble : `documents` n'apparaît qu'une fois `inbox` réglé, chaque erreur masquant la suivante. diff --git a/frontend/tests/e2e/invoice-frozen-pdf.spec.ts b/frontend/tests/e2e/invoice-frozen-pdf.spec.ts index e0d209d0..a839f8ca 100644 --- a/frontend/tests/e2e/invoice-frozen-pdf.spec.ts +++ b/frontend/tests/e2e/invoice-frozen-pdf.spec.ts @@ -8,6 +8,7 @@ import { import { createContactWithAddressViaApi, createAndValidateInvoiceViaApi, + ensurePrimaryBankAccountViaApi, } from './helpers/api-fixtures'; /** @@ -45,6 +46,8 @@ function uniq(prefix: string): string { test.describe('PDF figé', () => { test('deux téléchargements rendent le même fichier', async ({ page }) => { await login(page); + // Le PDF exige un compte bancaire principal. + await ensurePrimaryBankAccountViaApi(page); const contactId = await createContactWithAddressViaApi(page, uniq('PDF Figé')); const invoiceId = await createAndValidateInvoiceViaApi(page, contactId); @@ -70,6 +73,8 @@ test.describe('PDF figé', () => { test('une facture annulée par un avoir garde son PDF émis', async ({ page }) => { await login(page); + // Le PDF exige un compte bancaire principal. + await ensurePrimaryBankAccountViaApi(page); const contactId = await createContactWithAddressViaApi(page, uniq('PDF Annulée')); const invoiceId = await createAndValidateInvoiceViaApi(page, contactId); From 8ac0a4de45c7a5c0bfaebb7630f82ec37d510728 Mon Sep 17 00:00:00 2001 From: Guy Corbaz Date: Mon, 5 Oct 2026 08:59:11 +0200 Subject: [PATCH 15/18] =?UTF-8?q?fix(25-6-b):=20revue=20P1=20=E2=80=94=20g?= =?UTF-8?q?arde=20d'envoi,=20message=20du=20410,=20inbox,=20manuels=20(ref?= =?UTF-8?q?s=20#387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B1 : une facture annulée figée ne s'envoie plus par e-mail. M1 : le toast du 410 nomme le fichier (message du serveur, pas du catalogue). M2 : la note de l'export dit que les PDF émis n'y sont pas. L3 : l'import de l'inbox ne supprime plus un fichier archivé partagé. Bouton de refigeage réservé aux factures validées, retiré après un téléchargement réussi. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 + .../25-6-b-pdf-facture-archive.md | 24 +++++++ .../25-6-b-review-prompt-p1.md | 61 ++++++++++++++++ crates/kesh-api/src/inbox_import.rs | 10 +-- crates/kesh-api/src/routes/invoice_email.rs | 7 ++ crates/kesh-api/tests/inbox_import_e2e.rs | 19 +++-- .../kesh-api/tests/invoice_frozen_pdf_e2e.rs | 37 ++++++++++ crates/kesh-i18n/locales/de-CH/messages.ftl | 1 + crates/kesh-i18n/locales/en-CH/messages.ftl | 1 + crates/kesh-i18n/locales/fr-CH/messages.ftl | 1 + crates/kesh-i18n/locales/it-CH/messages.ftl | 1 + docs/manual/fr/user-manual.pdf | Bin 307759 -> 308367 bytes docs/manual/fr/user-manual.tex | 9 ++- .../routes/(app)/invoices/[id]/+page.svelte | 23 ++++-- .../invoices/[id]/invoice-pdf-page.test.ts | 67 ++++++++++++++++-- 15 files changed, 236 insertions(+), 27 deletions(-) create mode 100644 _bmad-output/implementation-artifacts/25-6-b-review-prompt-p1.md diff --git a/CHANGELOG.md b/CHANGELOG.md index e18ff3d9..a62751b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,8 @@ Le contenu est rédigé en français à destination des **fiduciaires, PME, ind ### Changed +- **`invoices.csv` de l'export de souveraineté gagne trois colonnes** — `pdf_sha256`, `pdf_frozen_at`, `pdf_language`, l'empreinte, la date et la langue du PDF émis ([#387](https://github.com/guycorbaz/kesh/issues/387)). Elles s'insèrent **avant** `version`, `created_at` et `updated_at` : un outil qui lit ce fichier par position de colonne doit être ajusté. Le PDF lui-même n'est pas dans l'archive. L'API expose `pdfFrozenAt` et `pdfLanguage` sur la facture, et une route d'administration `POST /api/v1/invoices/{id}/pdf/refreeze` refige un document dont le fichier a disparu. + - **Le PDF téléchargé d'une facture est dans la langue du client**, comme celui qui part par e-mail ([#387](https://github.com/guycorbaz/kesh/issues/387)). Il suivait jusqu'ici la langue de l'installation : le document téléchargé n'était donc pas forcément celui que le client avait reçu. Le premier téléchargement, quel que soit le rôle de l'utilisateur — consultation comprise —, fige le document et l'inscrit au journal d'audit. Les rappels, eux, restent produits à chaque envoi ([#502](https://github.com/guycorbaz/kesh/issues/502)). - **La balance des comptes change de colonnes — écran, PDF et CSV ([#385](https://github.com/guycorbaz/kesh/issues/385)).** Ouverture | Débit | Crédit | Clôture : la colonne **« Solde »**, qui était le net des mouvements de la période et se prenait pour un solde de compte, disparaît de l'écran et du PDF. ⚠️ **Dans le CSV, la colonne `Solde` est remplacée** par `SoldeOuverture` (avant `TotalDebit`) et `SoldeCloture` (en dernier) : un outil qui lit ce fichier par position doit être adapté. Le CSV porte aussi la ligne du résultat reporté. *(API : `openingBalance` et `closingBalance` par compte, `retainedEarnings` et `openingBalanced` au rapport ; `balance` garde son sens — le net des mouvements.)* diff --git a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md index 47c80ba8..81c0e196 100644 --- a/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md +++ b/_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md @@ -411,6 +411,30 @@ Journaux sous `target/gate-logs/` : `25-6-b-backend.log`, `25-6-b-frontend.log`, ## Change Log +- **2026-10-05** — Revue de code P1 (Sonnet ×3, prompt `25-6-b-review-prompt-p1.md`) : **0 CRITICAL/HIGH, 3 MED, + 7 LOW**, tous retenus et corrigés. + - **MED** : + - **B1** : `send-email` envoyait une facture **annulée** figée — la seule garde de statut vivait dans le rendu, que + le service court-circuite pour servir le PDF figé. Garde rétablie dans le handler ; + - **M1** (A et C, convergents) : le toast du 410 affichait `{ $sha256 }` brut — le catalogue servi au frontend est + résolu sans arguments et l'emporte sur `err.message`. Le message du serveur est repris tel quel ; le mock + Vitest honore désormais un catalogue (il rendait toujours le repli, ce qui cachait le défaut) ; + - **M2** : la note de l'export de souveraineté (manuel utilisateur) ne disait pas que les PDF émis n'y sont pas. + - **LOW** : + - bouton « Refiger » proposé sur une facture annulée, où le geste échoue toujours : retiré ; + - `pdfGone` jamais remis à faux : un téléchargement réussi le remet ; + - repli d'erreur du refigeage qui parlait de « téléchargement » : clé `invoice-pdf-refreeze-error` (4 locales) ; + - **L3** : l'import de l'inbox supprimait, sur un champ QR trop long, un fichier archivé nommé par son contenu — + possiblement un PDF figé ou le justificatif d'une autre société. Suppression retirée ; + - facture déjà envoyée avant la v0.12.1 : le document figé n'est pas forcément celui reçu — écrit au manuel ; + - le bouton n'apparaît qu'après un téléchargement refusé — écrit au manuel ; + - CHANGELOG : trois colonnes insérées dans `invoices.csv` (lecture par position), route et champs d'API. + - Tests neufs : 1 HTTP (B1), 1 inbox (L3), 3 Vitest. **Mutations tuées** : garde de B1 retirée, suppression de + l'inbox remise, message du 410 tiré du catalogue, condition `validated` du bouton retirée, `pdfGone` non remis. + - Recomptes de la lentille C (migrations 71, bloc admin 28, registre 110/92/113, `sitesTotal` 1767, parité i18n, + décomptes de tests) : **tous exacts**. + - Gate ciblé : `fmt`, `clippy` workspace, `binary(invoice_frozen_pdf_e2e | invoice_send_email_e2e | + inbox_import_e2e | invoice_pdf_e2e)` 95/95, Vitest de la fiche et `i18n-keys` 27/27. Gate complet au push. - **2026-10-05** — Développement (dev-story) : T1 à T8. Service de gel, refigeage, détachement, export, écran, manuels. Gates : backend 2583/2583, frontend 853/853, E2E 227 passés + 9 échecs attendus (+ la spec neuve rejouée seule après correction de son montage, 2/2). Écart de la spec sur le bloc admin (27 → 28, et non 25 → 26), recompté diff --git a/_bmad-output/implementation-artifacts/25-6-b-review-prompt-p1.md b/_bmad-output/implementation-artifacts/25-6-b-review-prompt-p1.md new file mode 100644 index 00000000..5d66d302 --- /dev/null +++ b/_bmad-output/implementation-artifacts/25-6-b-review-prompt-p1.md @@ -0,0 +1,61 @@ +# Prompt — revue de code P1, Story 25-6-b (le PDF d'une facture est figé) + +*Versionné le 2026-10-05. Trois lentilles (Sonnet), contexte frais chacune.* + +Dépôt `/home/gcorbaz/devel/kesh`, branche `story/25-6-b-pdf-facture-archive`. **Diff à revoir : `git diff main 9d842984`** +(migration `51d1696f`, service et tests `bd753fdc`, écran/export/manuels `9d842984`). Fiche : +`_bmad-output/implementation-artifacts/25-6-b-pdf-facture-archive.md` (arbitrages 1–8, AC 1 à 8, Dev Notes, Dev Agent +Record). Issues : `gh issue view 387`, `502`, `503`. Règles : `CLAUDE.md`. + +## Lentilles + +- **A — Blind hunter** : le diff **seul**, sans la fiche. + - `crates/kesh-api/src/routes/issued_invoice_pdf.rs` : chaque branche de `get_or_freeze`, `pose`, `refreeze`, + `with_one_retry` — erreurs propagées ou avalées, `spawn_blocking` (panique, annulation), ordre écriture du + fichier → pose → audit, ce qui est servi dans chaque cas. + - `crates/kesh-db/src/repositories/invoices.rs` : `freeze_pdf`, `refreeze_pdf` (liaisons dans l'ordre — compte-les + contre les `?`), transaction et rollback, `unvalidate` (l'`UPDATE` unique), la macro `invoice_columns!` et + `INVOICE_COLUMNS` (ordre identique aux champs de `Invoice` ? `FromRow` lit par nom ou par position ?). + - `errors.rs` : les six variantes, statuts HTTP, messages et arguments Fluent. + - Svelte 5 : `+page.svelte` de la fiche facture — snippet, `$derived`, état `pdfGone` (quand se remet-il à faux ?). +- **B — Edge-case hunter** : le diff et le code environnant. + - **Courses et gardes**, refaites à la main : deux premiers téléchargements simultanés ; un envoi e-mail pendant un + téléchargement ; une dévalidation, un avoir, un règlement, une pause des rappels entre rendu et pose ; deux + refigeages ; un refigeage pendant un avoir. Pour chacun : qu'est-ce qui est figé, servi, tracé ? + - **Tous les chemins qui rendent un PDF de facture** — pars du symptôme : + `grep -rn "render_document\|PdfDocument::Invoice\|generate_qr_bill_pdf" crates/`. Un chemin contourne-t-il le + gel (lot d'envois, aperçu, rappel, export, test endpoint) ? + - **Tous les chemins qui changent `status` ou les lignes d'une facture** : + `grep -rn "UPDATE invoices" crates/kesh-db/src` — chacun est-il compatible avec un PDF figé (détache-t-il quand + il le faut, bumpe-t-il `version` quand les données rendues changent) ? + - Les fichiers : `KESH_DOCUMENTS_DIR` relatif, lien symbolique, fichier vide, `storage_path` corrompu en base, + `HEAD` sur la route `GET`. La restauration `.keshbackup` (`post_restore.rs`, `check_schema_compat`) et l'export + CSV : une sauvegarde antérieure s'importe-t-elle ? la colonne écartée l'est-elle à bon droit ? + - Les tests : déterministes ? chaque mutation déclarée au Dev Agent Record est-elle tuée par l'assertion écrite, et + non par un effet de bord ? le E2E Playwright crée-t-il sa propre facture ? +- **C — Acceptance auditor** : chaque AC (1, 1-bis, 2, 3, 3-bis, 4, 5, 5-bis, 6, 7, 8) tenu, point par point ? + - Recompte depuis la source : bloc admin (`ADMIN_COUPLES`, `lib.rs` « exactement 28 »), registre d'audit + (110 / 92 / 113), `sitesTotal` 1767 (`frontend/src/lib/shared/i18n-keys.test.ts`), parité des clés neuves dans les + 4 `.ftl`, compteurs de `docs/migrations-idempotence-audit.md` et de `migrations_upgrade_path.rs`, décomptes de + tests du Dev Agent Record (`main` → `9d842984`). + - **Le manuel** : `docs/manual/fr/user-manual.tex` et `admin-manual.tex`, **et leurs PDF aplatis** + (`pdftotext f.pdf - | tr '\n' ' ' | tr -s ' '` vers `target/gate-logs/`). Chaque site nommé par l'AC 8 est-il + traité ? Le manuel promet-il quelque chose que le code ne fait pas, ou omet-il un flux que le code ouvre (un + écran, une route, une clé d'API) ? Pars du symptôme : + `grep -nE "PDF|figé|refig" docs/manual/fr/*.tex`. + - Le CHANGELOG `[0.12.1]`, le README, `docs/testing.md`. + - Les écarts déclarés au Dev Agent Record (bloc admin 27 → 28 au lieu de 25 → 26 ; garde d'export non anticipée ; + E2E complet non relancé après la correction du montage de la spec) sont-ils exacts et acceptables ? + +## Ce que tu rends + +Findings avec sévérité (CRITICAL/HIGH/MEDIUM/LOW), `fichier:ligne`, **preuve** (commande et sortie, ou code cité relu), +scénario d'échec, correction proposée. Pour tout finding affirmant qu'un code est absent ou présent : la sortie d'un +`grep -nF`. ⛔ **La liste des axes exercés ET non exercés** — un « 0 finding » sans elle ne compte pas. + +## Interdits + +⛔ N'écris aucun fichier du dépôt hors `target/gate-logs/` ; aucune commande qui écrit dans le dépôt ou dans une base : +`scripts/*` (dont `scripts/prepare-release.sh`), `make`, `latexmk`, `git commit`/`add`/`checkout`/`stash`, `sqlx`, +`cargo test`/`nextest`/`build`, `npm run`, `npx`, `gh issue create`/`comment`/`edit`. Autorisés : lecture, `grep`, +`sed -n`, `git log`/`show`/`diff`, `gh issue view`, `pdftotext` vers `target/gate-logs/`. diff --git a/crates/kesh-api/src/inbox_import.rs b/crates/kesh-api/src/inbox_import.rs index 232c13ce..f27789ea 100644 --- a/crates/kesh-api/src/inbox_import.rs +++ b/crates/kesh-api/src/inbox_import.rs @@ -526,7 +526,6 @@ async fn process_one_file( ); } }; - let storage_path = doc.storage_path.clone(); // (8) Staging : INSERT imported_supplier_invoices (status='to_complete'). let new = NewImportedSupplierInvoice::from_scanned(company_id, &scanned, doc); @@ -556,10 +555,11 @@ async fn process_one_file( } DbError::DataLengthOrRange(_) => { // Champ QR tiers sur-long (hors SIX 2.2) → échec par-fichier - // propre (D2). Nettoyage best-effort de l'orphelin archivé - // (content-addressed → idempotent : un ré-import réécrirait - // le même chemin). - let _ = std::fs::remove_file(documents_root.join(&storage_path)); + // propre (D2). ⛔ Le fichier archivé n'est PAS supprimé : nommé + // par son contenu, il peut être partagé — justificatif d'une + // autre société, ou PDF de facture figé (Story 25-6-b) au même + // octet près. Un orphelin est inoffensif ; une suppression à + // tort ferait répondre 410 à une pièce émise. dispose_failed( path, failed_dir, diff --git a/crates/kesh-api/src/routes/invoice_email.rs b/crates/kesh-api/src/routes/invoice_email.rs index a25ce7c3..dacf6085 100644 --- a/crates/kesh-api/src/routes/invoice_email.rs +++ b/crates/kesh-api/src/routes/invoice_email.rs @@ -768,6 +768,13 @@ pub async fn send_invoice_email( let (invoice, lines) = invoices::find_by_id_with_lines(&state.pool, company.id, id) .await? .ok_or(AppError::Database(DbError::NotFound))?; + // ⛔ Story 25-6-b (#387, revue P1) : seule une facture VALIDÉE s'envoie. + // Cette garde vivait dans le rendu ; le service de gel sert le PDF figé + // d'une facture ANNULÉE par un avoir (pour le téléchargement), et sans elle + // une facture annulée repartait au client par l'API. + if invoice.status != "validated" { + return Err(AppError::InvoiceNotValidated); + } let contact = load_active_contact(&state.pool, invoice.contact_id, company.id).await?; // Destinataire VERROUILLÉ = contacts.email (décision #13 epic-20). diff --git a/crates/kesh-api/tests/inbox_import_e2e.rs b/crates/kesh-api/tests/inbox_import_e2e.rs index 86f3ad88..7dfa0276 100644 --- a/crates/kesh-api/tests/inbox_import_e2e.rs +++ b/crates/kesh-api/tests/inbox_import_e2e.rs @@ -618,11 +618,16 @@ async fn import_field_too_long_returns_failed_not_500(pool: MySqlPool) { let app = spawn_app(pool.clone(), 25 * 1024 * 1024).await; // Nom créancier > 70 chars (QR tiers non conforme SIX 2.2) → 1406 → FIELD_TOO_LONG. let long_name = "X".repeat(100); - std::fs::write( - app.inbox.join("long.png"), - qr_invoice_png(dec!(20.00), &long_name), - ) - .unwrap(); + let png = qr_invoice_png(dec!(20.00), &long_name); + std::fs::write(app.inbox.join("long.png"), &png).unwrap(); + // Story 25-6-b (revue P1) : un fichier du même contenu existe déjà sous + // `KESH_DOCUMENTS_DIR` — un PDF figé, ou le justificatif d'une autre + // société. L'échec de cet import ne doit pas le supprimer. + use sha2::Digest; + let archived = app + .documents + .join(format!("{:x}.png", sha2::Sha256::digest(&png))); + std::fs::write(&archived, &png).unwrap(); let resp = app .client @@ -638,6 +643,10 @@ async fn import_field_too_long_returns_failed_not_500(pool: MySqlPool) { ); let body: Value = resp.json().await.unwrap(); assert_eq!(body["failed"][0]["errorCode"], "FIELD_TOO_LONG"); + assert!( + archived.exists(), + "un fichier archivé partagé (nommé par son contenu) ne doit jamais être supprimé" + ); } #[sqlx::test(migrations = "../kesh-db/test-schema")] diff --git a/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs b/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs index 19ec3c55..e6cd6340 100644 --- a/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs +++ b/crates/kesh-api/tests/invoice_frozen_pdf_e2e.rs @@ -844,3 +844,40 @@ async fn refiger_une_facture_annulee_est_refuse(pool: MySqlPool) { assert_eq!(resp.status(), 400); assert_eq!(error_code(resp).await, "INVOICE_CANCELLED"); } + +/// Revue P1 (B1) : le service sert le PDF figé d'une facture annulée — pour le +/// téléchargement. L'envoi, lui, reste réservé à une facture validée : sans sa +/// garde, une facture annulée par un avoir repartait au client par l'API. +#[sqlx::test(migrations = "../kesh-db/test-schema")] +async fn une_facture_annulee_figee_ne_s_envoie_pas(pool: MySqlPool) { + let s = seed(&pool, None).await; + let id = seed_invoice(&pool, &s, 1).await; + let mailer = MockMailer::new(); + let app = spawn_app(pool.clone(), mailer.clone(), unique_dir("documents")).await; + let token = login(&app, "admin", TEST_ADMIN_PASSWORD).await; + pdf_bytes(&app, &token, id).await; + credit_notes::create_credit_note( + &pool, + NewCreditNote { + company_id: s.company_id, + invoice_id: id, + date: NaiveDate::from_ymd_opt(2026, 4, 20).unwrap(), + }, + s.admin_id, + ) + .await + .unwrap(); + + let resp = app + .client + .post(app.url(&format!("/api/v1/invoices/{id}/send-email"))) + .header("Authorization", format!("Bearer {token}")) + .json(&json!({ "subject": "Facture", "body": "Bonjour" })) + .send() + .await + .unwrap(); + assert_eq!(resp.status(), 400); + assert_eq!(error_code(resp).await, "INVOICE_NOT_VALIDATED"); + assert!(mailer.sent_emails().is_empty(), "rien n'est parti"); + assert!(invoice(&pool, &s, id).await.emailed_at.is_none()); +} diff --git a/crates/kesh-i18n/locales/de-CH/messages.ftl b/crates/kesh-i18n/locales/de-CH/messages.ftl index d2ebfb69..b31e2713 100644 --- a/crates/kesh-i18n/locales/de-CH/messages.ftl +++ b/crates/kesh-i18n/locales/de-CH/messages.ftl @@ -1393,6 +1393,7 @@ invoice-pdf-refreeze-title = Dokument neu festschreiben? invoice-pdf-refreeze-body = Die Datei des ausgestellten PDF dieser Rechnung ist nicht auffindbar. Neu festschreiben erzeugt ein NEUES Dokument mit den heutigen Daten und der heutigen Sprache des Kunden: Es ist nicht das Original. Der Vorgang wird im Prüfprotokoll festgehalten, mit dem Fingerabdruck des alten und des neuen Dokuments. invoice-pdf-refreeze-restore-first = Stellen Sie die Datei zuerst aus der Sicherung des Dokumentenverzeichnisses wieder her, falls sie dort vorhanden ist: Nur so erhalten Sie das Original zurück. Sind mehrere Rechnungen betroffen, prüfen Sie vor dem Neufestschreiben die Einbindung dieses Verzeichnisses. invoice-pdf-refreeze-done = Dokument neu festgeschrieben. +invoice-pdf-refreeze-error = Das Dokument konnte nicht neu festgeschrieben werden. contact-form-language = Korrespondenzsprache contact-form-language-inherited = Geerbt (Sprache der Instanz) contact-form-salutation = Anrede diff --git a/crates/kesh-i18n/locales/en-CH/messages.ftl b/crates/kesh-i18n/locales/en-CH/messages.ftl index ad36b2d3..3489825c 100644 --- a/crates/kesh-i18n/locales/en-CH/messages.ftl +++ b/crates/kesh-i18n/locales/en-CH/messages.ftl @@ -1393,6 +1393,7 @@ invoice-pdf-refreeze-title = Refreeze the document? invoice-pdf-refreeze-body = The issued PDF file of this invoice cannot be found. Refreezing produces a NEW document, with today's data and the client's current language: it is not the original. The action is recorded in the audit log, with the fingerprint of the old document and of the new one. invoice-pdf-refreeze-restore-first = First restore the file from the backup of the documents directory, if it is there: it is the only way to recover the original. If several invoices are affected, check how that directory is mounted before refreezing. invoice-pdf-refreeze-done = Document refrozen. +invoice-pdf-refreeze-error = The document could not be refrozen. contact-form-language = Correspondence language contact-form-language-inherited = Inherited (instance language) contact-form-salutation = Salutation diff --git a/crates/kesh-i18n/locales/fr-CH/messages.ftl b/crates/kesh-i18n/locales/fr-CH/messages.ftl index 8eef42da..586ffb14 100644 --- a/crates/kesh-i18n/locales/fr-CH/messages.ftl +++ b/crates/kesh-i18n/locales/fr-CH/messages.ftl @@ -1490,6 +1490,7 @@ invoice-pdf-refreeze-title = Refiger le document ? invoice-pdf-refreeze-body = Le fichier du PDF émis de cette facture est introuvable. Refiger produit un NOUVEAU document, avec les données et la langue du client d'aujourd'hui : ce n'est pas l'original. Le geste est tracé au journal d'audit, avec l'empreinte de l'ancien document et celle du nouveau. invoice-pdf-refreeze-restore-first = Restaurez d'abord le fichier depuis la sauvegarde du répertoire des documents, s'il y existe : c'est le seul moyen de retrouver l'original. Si plusieurs factures sont dans ce cas, vérifiez le montage de ce répertoire avant de refiger. invoice-pdf-refreeze-done = Document refigé. +invoice-pdf-refreeze-error = Le document n’a pas pu être refigé. contact-form-language = Langue de correspondance contact-form-language-inherited = Héritée (langue de l'instance) contact-form-salutation = Civilité diff --git a/crates/kesh-i18n/locales/it-CH/messages.ftl b/crates/kesh-i18n/locales/it-CH/messages.ftl index b0240c5a..408eae96 100644 --- a/crates/kesh-i18n/locales/it-CH/messages.ftl +++ b/crates/kesh-i18n/locales/it-CH/messages.ftl @@ -1393,6 +1393,7 @@ invoice-pdf-refreeze-title = Fissare di nuovo il documento? invoice-pdf-refreeze-body = Il file del PDF emesso di questa fattura è introvabile. Fissarlo di nuovo produce un NUOVO documento, con i dati e la lingua del cliente di oggi: non è l'originale. L'operazione è registrata nel registro di controllo, con l'impronta del vecchio documento e quella del nuovo. invoice-pdf-refreeze-restore-first = Ripristinate prima il file dal backup della directory dei documenti, se vi si trova: è l'unico modo per ritrovare l'originale. Se più fatture sono in questo caso, verificate il montaggio di questa directory prima di fissarle di nuovo. invoice-pdf-refreeze-done = Documento fissato di nuovo. +invoice-pdf-refreeze-error = Non è stato possibile fissare di nuovo il documento. contact-form-language = Lingua di corrispondenza contact-form-language-inherited = Ereditata (lingua dell'istanza) contact-form-salutation = Titolo diff --git a/docs/manual/fr/user-manual.pdf b/docs/manual/fr/user-manual.pdf index 77a07d6e9c93e6a307cc3fccd937203c36147e56..0e2b8092d932a19271929c544f3da3ce1df7231b 100644 GIT binary patch delta 65631 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 delta 65042 zcmY(KQ*)pVux=-|ZQHi(iEU48=Z$S=V%xTzOl&6;+ni*7b@t6ZKcJtBuIj4pwW{OK zQ0xAp)(?{at2oHcL+v;e86C}_sYQlh+#F^ZvxR9yv~R^E6sW>!T2Kf|1m=d-aGO%j zEm+0L+XU-#L@bppb}saCL7&X)xpW<)X{5MXSz9W&sWLdI&i1xgiAAP_oXufYCs{^N znUs_)i{POq8|R5IiY3bB*$d2iAGQmnq;$r7O3|a5Z)A4e;RQNfcNNZ)y*G*9;S(CU9NMp69_y0GMDU~p z@0iLx(4K|mq5U=km&hI*7%v*rtHzq^Fb_14)Vi&1Lfl7jKOJzn!5yA$$yp*jQ$xNd zQy19)T#9*P2ZR@q{hI1F%7r#u-(5n&LIOw4Y0-VI+K>z&+dY3M-t&H|#p<$+7FOYf zGKZN|-?WwJsZwal)=}(Oo!U|HD(ge-@=N6b zftLVbF5RB<@w9{f>Upv&CG(SV{5M&o(W9lcpJ>cm{;jSb>lQk7gewUidVRa+kJ72G zt{SX2{$LLzOT2cqVhWC>zj(ItInz;#oCh=EZE-R2pDGxja@%NWi2voT1)*=zNZ0X7 zmd>$)kl~l!i;BYwRIff8Bj7J7JM*m?S*v~V_bb##Pze$I+-LBEx3`qt&tq0asz}b5rrIJV`JwM6ohqgbv8G)gZ11v z!kdc2Z@bH_J0)7f+(j~Ch7KAQ^>xY5+8_GmUW{K%?u_{MPc5<9Byk3(W(C!js$P?A zhBA7@yTPEzZ{x9aPpC(tX(Zt#rEN+I+Y%rWLcynGmE%G+&yYU4&oefJ!-OVTFR;AT zhu}z*o!7Qo$$ix@D$@)6^t+qS#jKmQzV0_%>P`F~)_kN_gX^^7gzoU|RixFVd*>if z@eYhnKEC{Wi-Mc>I#=4}`qbctMVo{HucK|-3G{#?V-5SI3CA^D@J1e3uHGRdq6N0E zoE8ReYKJrmer810)Nrdf9wfnjOV3;vqOh$#wsQY~o<{)!3jYkN(qqkZhb;6CmWK7e zR?#yDQB&6Zm!FEF*+gwv<)KXzY((Ief3C%~D*QQ#&2skGz+{IgT}$tGwm?r#*TnVp z$3%gnwhcnpwHyjgOy%A*&AQ%2u*HA1!J!ZeoxWs4Ed$*vBM>!Ajqly^PH2Fa*zJy&wUE9t`=G9x7BHf-?6BqVZ} z4y3OH1m9W>6A1|^Vjh#V)Z5q9LMR&e+dKe&W5j^j@`qO?#2H+9Qz541ChU5slV^0( zqLZVm^s1L1#QYelQaUF3{mCVw{h``Rsp@nhu)nZk7+DvW>X2EJPZue3&7>El)ir%} zV5E&R86L2lOIy|zSiAdrT+wRz!Y?Grkq}Uf(!4b7!ElXXgn3;>rXN($!|rRc5oUly zo0a}so)C7Olg;by`n6C>76eCIi#7wEZDbT0h&+ul(F6Wdt7qG3Gl<`iZ;}d1o%UIY z^Cw!=v7NPZj~Q(WER)IPDaslV3O+YTl#kWh*10O4gJjh{7<)$ZWmW0NO>ddtwtmK| z!Tj@x!rB()&6Tq8vWksm|EPUj6V?Ig6lD{;?Q=wdi1E(Ke7?DRFWPq2hqmTgFGia~ zcZP`hb*v2nFn@yD$j0>&KaF3E=!=7c)83K(;){^vwr+H=Cb69AiH-HuQ8OVz6LcxD zAC5`K06MG3wK^Q?q0^P4ePJT{!ZO7ClW>*qJEaC8zYyH<3Y zY)%YC;mRcQL_bzX;x(*tv=0>?(i1z@c=<17ZLh9JatqMA=h4*URil4Gl!fY_mu36iBJs zWp$CL!g`2NYQe}B*pVceMwlT?of9(K2+8?Ag%Tw}rtdJReIbJJXcd;Ri|^Sky!S|d z@mQM*ac(2G$3!j;@>`2pFzSU&_VuG_=}b5jq!X_*78@3(gN5MU!Npt8DS#PDkOzkp z$TfMUkm7diJC_K&@dLwK8W*ZuHS<&RwcHG{^T(bQ%U$`=3_7a1pWxj%7pN2DXO?Nm zp(xzmmdilZ+|Oh=6H0Zg4q?vcNSR(6b{3isvj!>^WbRV4f#c;;(4 z)OE4+{O|ct>Glp>&Twe=147#LGIu*|rdF?b%UM7;+|}m|q=;w(xU%Y-K>HBTeW;1| z<$iMr`@wk42srRo35Y1Tl8)+hQ37(#X{vr5Kx z7mh`5iZ;RGkt|0q=ilP|M+^ni)(dyAqdY(rAZl~h0A$zI4vxLA=2_ELzkjs$TrADd z(17RpHA|4z%`f&MmIokqMH+u8tps^04@7u~ZpGpaM|e~N)zuKuoS`g;p+cv%J&vIyi4FW6!)8veT`Dg*A&FC|FkVqz8lP+|ah8sZw zxQ`~@lrH0n!B~$uPwk(_0u(Y*mj0;C-_vS7t^xx$gnX9LtYd$@$sSrLR(;V*fo4(; z@w1i3q>y+95G`dxc3o|{sbjkx;keT6lE&pmU9B_P4aQ`1jJeL@ZDA+DxV8e@@~Rvn z9f@PjEOqCAr>s4)wF7;p##~vB!mYm&JXM$i2Puy(+pxq$Im{jsHLAa}c2&BUKhx3} zl&rN0l)}AnV^!(tb2D^P|Q!o-SSgZB4|?@|dWALc{o!MM}H8ceV05 zjIFRc|+M!Q}D8=Og)I3;rlFZ|RS1zp4%eZ+03;^OBVf^6Zfy3yq@--@-KuUYH@&+PEupktyqFNl2OKZ z>68E1u1x7v!&|#|yf^D8=FiB)QZ}43(!3w$u7rR4^Ad0P15eo99a-?-&DwSzb#e$G z>u`EAh`|jB{WfizVgY!l2-M8)%Z5UgSF_*XJ3E(1uqdDLYk+#`Wir@EXR}q=r&^_Z z8EJ3jxz^AX^b&}&dUio)+qNe0YST}0Gvm}7jc5Lt zm~t!jj}0HQz`l;biR=fK(9m+0q=6)fQk$xDo?PJ)5#6iELk?lfPRnciaBqi{o_uTW zKcfU&4bk4K(3Fc2<4`W66}uNkIEPBE{@A#QH<7&3u$_XAH2X!*tAek!&MeH_wK*lf z&wooQgx5I3OkWeEYr)9H5K*I7xizn;?1UL?A5yMWd@K}knYnc@!Lp`Hwa&SBa2d$n zAJH#oYCo=ai+JWhx)$eA4=th9weHq?Y=V6D|2!>oJcWOQf;$G@rx!GUprzj;gHi(Q zTwJXG-xY8F)nmvaR8Q4u7%)&sJqJFn3)=_bRc|?V9jwZJEe73>%@dSxi6U{J$z$vj9YVT&DFEy_@m^QGkiNZ7lzg* z8CN=`W$HboU|l>CrR3{KU$CK?*W|4k{j*cYr@+_!@z|o_Za3s4CzS9;oOIW%mAVL_ zB)qxWh?YeEG8kg-r}Mzg-4!Cyd+~hpM&o3s>M4ko13v;LAYTNHppv`Q0&l3JB0?^3 z%z@$}(L{Q?{i1`2ad`X#4xjv7YUZ()9sF}2K=^)Ig_5`Xf$sulR2w7b)njUb&!{JH zVkZ&4f@16qv$)9+inwSZb%-o-cri83l=xc8C{h&jGR)ekTuP55Kd5iz+{!Y}USQj{ z$18z-R!+wa#9sKhz%(C%)Cspm+$^=M^%x?LELV`b4-rFbjzLLnZ#cXD7QDjQ($a5l z|4atEds%uugB)6Kx6bER{C9s%IfSUE)+@;c!hF+ZTmOjptAPD*$&+PL{a8eL{7F2thIj ze^}Bp+cu|LswDGQ{FHGu0%%ot*q}VpYyxt#@#nG|h%yB*W z=YjgiV3%oiBa=b5VZ{%@P}N7g38$z}*a!YcHzne8YRp$m^Fk)(MoXCZ6g5^ytx&m= zMmwECT`PMzI`}`(9C&fdZuH0p3|->_UVuIX;44#Zbpf`MkT*a)0h2ITonK1Xej;(1 z;)Q06!$}x5v_zUPb$FShMsR~?;OA@YB5u?2LI>?e-fF}su33sjp!1LxrpY|Xn&whD zmdO~T;s4@J!~8PsuV!ffz;iLv&6tVuu((OSr9|Cu?|M!1h7GRc!NV@n^{_ zq6e4k&M+451jRO61!})+M^u_>JVg24+n886=J|6j0J6q zy}FzCT1r)U`ArU66c|iXaua(fW)Gz0$}Nf%elfsPw*GKkNa6a}0M@e{*mD|G!_?h8 zvfh!+jb`r`bwi;X)`2frN;$q3YsVKu`zA@~o#o{k*2QCOm_scJk3WuMUyQGSx<9)j zc&GrvWBvItmfh0bPTdX9Ic8CE6~D{b|W&Fo~9$OU*C^U;LNq8B>Y}aoi9thgeVl zTbucaKpyy&8BhwNHyBLj@eW-elhy0k|1%VUP0&q1|AP~0yMmI;;B+W+1sYtftHE!m z-MYS$m_}V%6qcIXsINht)TcSgR6U}UpdB=G|J^|nUpy5KM?^#>! zpo8&XDc-L6gyU$$>NVmn^b+R1Mexp1&dEw77-NXjl*=ArJ$@tt^|$BdL8|k&x40mp zr8=Yl?&wD-hA8;6Mg#{ykaam_$_Ak$De*j1@9{_Om^WBW@=reI)mg!?d{*F6I%S_k z+FS?yZBB1AkBq*H!|-V4a%)%Xjwxo&PPlcaF`@e*Z|BTebF{*{xvh%UpRn7FJ)geJ zB@eZv^f^0AWcQ41X%P3GaEXyN@V@GSEer{l1@0#nC?*HQ2LuwJw>8=VlLgYYfvu^Q z%*~W^Z zenL<)Y-30mpPXcMJGR#7@Yyg_S}OZ2$Peb6S0wtHaiGd)_X{}66F$p`%}M+gb+{iU z;1n*MDC2*iuHKFKd#gSGS4TMl8gQ-eG8^q zd>YzC<(_RSJx+lQ7RSS$l^vsRMx7O`N=|p0SqY|$w*4=c z@H26SQ!r;#Q)mGCfVEa!FIUd1*o!qkk`pZw(Cnb+fxwIuqdWqpw*q!xu2Whwz71n$ zR6jtILo`5zoh8&OLo z3Zc-VBX*3z(U_@c2|jS~`bJJ<@ej()EQ|=AsQ_WlaGoLg-HC@*+oa_+FO0u-P^Ovp z;!2PnOrujWxxNk9c6tsARa3=ZG1?}`7Kj|&f9=M^#9V3GQm?fGS$46^c5pg^uBSZ` zNeOrW1x!cm-Ps(>VH_9-w2Cv@k6#b_kqakV{=yrPm3@6_2u2dZ%teNjbuABI>X{5` zWGNzKtK6qsuhw2amgNSPR~&w}aBCiQ6ABs; z4Z7d|O)^2RGR3aq5(*RA@M_72sg(@gMbfG8fg5PnWX@L#XRAk=q+}q4J|;!Y;YL3I z!uK+`PDtqI??L(ZiP==%erQMca|>?c89aESjEF#+@;4K~yx=Q<7Hn8E9PXNgJVgds z^RCe-p0-H;Y9PHS40Z2LgQv3!*3XvbvECjzpFoFl`UEk=!5i(XJEffyJXzC<;R%&W z4mZ=|t?2i}po-TL^fFBwz&zO7pANnU_%xLFl8&(zls1i>4wCU<8I?n9Qxj4-(Vnt> zsp9JYnEs79n)%(G&~}7_s1hpnKzcpP`|FRO)jFdFCI2QD{K}!62V)q z>>RTG^gyX$ug38_`PowR$(@Y&+l-A48G(UL6Ro+Y?jv1Z&vB^Bb@KQJR%Q2kpayO& z1K>5-bB!oFX=3=>&}0^!Ys~_#MDdJ1L)b)TiqYizH_8`d)%0sC&{@!y^Yr^*R5RxF zmyUfo^IT((i|zUN{?u0QXUln`6wh1s+?qdQ<_jywQKPK;iFGLoftX9gPS7j{XfYuRfPwru zgKax9dSDMC+bVX$!0rn&YDcQF_JP8S;K>2U|9OLLYkm-^Rkh3`j$;$5pDf3^5`_Q; z($OG~i@B{G^Iyg^E+xW7wa5)aP{0-?%(z{QB9tPu2YT<-&kMSXbsw=BntVO=ibCm& zwO06MP@I5b1Z!B(5DiGc{R|^)pO?I&&pzcz%gI+H#SP-WxjCGTZ)C-+r*Y22npq=B zmZQs@#9%)%zrIfn>QMFzzCla<4l)@Ywwk=T2%V7W=(y~GhHwq z@gvvG{pK+VL3SfdAqB=*F6bJ)X`}e(T2~#K(hI`hE2(F-(un{l90FeYz(Hh$+xhG* z!clH=ruD*nh+xBpTS(}dnt{4*FJ+S}(9x4$nX^8xzDgiVNw~ioj0&1F%~^%GJsZ&( z(xw~NqTm(;N@yv!4w%qx3d&##)uP2NYAs2+zEt|=gwaLr&X?zZG44o+^VIcFPiMU1 zk}X3cYY2*?T-E{mG?g}UN9+sJZU|F0*tr5CiBzTbT_+Lo_=2a z7yfkhZ2?+_1;M4H6w0pictU=PO08-3O^nzTo~llsTb0~HH&JZ8M%;Ck3K?TA0_3t% ziX!+akLWX{XA;{UeF8yP{*`%EGKU|8ZEkmss3T1BX_~;EHr2M}L1!9To2ecw?(6hq zzUJOwijBxo7aZVn6E{Cb=#k%7H5{3xs0t%=w45${E4;F$gkE{%SYxqNqK^0~#{qY4 zq#3O%XQeAT#>c;gu4?R26*cG~UdhW@U*dk{h@719=DDpTUd`f%t3G_6r9oC0yIkc` zOvI^s;t#N%sByn6=rOkTh8J}tLF`Z1I)!+t9gC1bI+eOx7muH4Tp$r#z!(gR_9Iuc z&hB|w&V{7isIv$?nG)h3j9;SYQM5NdpDc!3Rtuv2)Ub|qdnmpgi5$7FSNdD$;c>VA zORO11j7HgtVqsuQ7c$geTkDN^1Cwoz011r`%?S`8`cQq~X^^3_W=tmnC#yom8cM6r z!GY{?gOSm`Hi-7)cEtUqbWM5@gi2W$~L7iZq#-T<#7H@%jLHuJFOB6IIT zO&v%I*CDB8!CCUIQYpFa`jzB+!I%ZxWU!*rhcVDAuL+Nx6*fq=T;j;hPBi(FB~x$- zn;l6%E5+TG4Mz1VM1zNw#a7u?YRy=CYrLNLIT(ydo1&-u>+0$KpJc#2dI+ZNSa-`Z zKLd~95T>`;zx*+L!rqhMqZk_W7HSuHs8vAUng9x`u*~zdY1{&J>`!&dL`wA(Z8J%5CZsu)s3YQCFoD5hkcKhr+ zldC*~B&!KouJS5-PZPOZeLWaw6@{K7pJP>ShQ0y*q65Wgn@J{eIxL2JcrTKV8a04> zGfAjzggc!Uld(e00v94LGLGnR_J|oj)o1{Ao~+EBQpUv%xj)#rng~n;QwwnZiUO#u%Y{ zj=|=#p9wmlzguxp=>Rvq?9cZ?4mYsplV3vQK!VEzV-ux;0LN)xl%jqn6pzSPnD@rvn2o!;$|UH*X0Pa~oWXrcA_0Tuof>DS z+nt}`ACHea^xf!Zm0VOL$|gFwg)ucL90=E{xO$x_*Yk~k#rCC@;;-q?y4(w1R}22| zC?k?~+W9TbUDN~;^f%OdZ&=LY1Zpe2m__35bb?L&0?uSR+#NgNO%!V-`@`ERV&T~! z1AXZ;QKlAdlV-;*_?I*;?f_1@;ZA+Z#3yOSp8VCz)T0{866jJfW>L5gw-&xw1CP%2 z?6Jw4f@m~81nuyvk1C7F=9$Kj&dh!rAzEhP-W;Y&Atu!E)nMlXmrYK?_@dx8#u(@! zx0qF4O(q*|s0Yqgoo8SZixGMh82bU15yjOe6JeR^Kx$U`bR6Ol>M3dfQ{It# zG3p+}?6tr)vzPXEn(O!bzsIug9|TlN9REwWM2JDD0cN)U%ePu|rsC*25VlX~&Y`O3 zKR~bzz%#)o?1Oe7wDr>cEIFVlzx%Ld(J5ppy0+VV<{UTGHI&hbq{36$cDY()UR8DH zbZ=#bo3HxpRH!i?03<^=yQSwFfZqP=ThkN0cWqBUqjmUnW!AW4`xV2;d%_C<$IKu6z$wl+TSn>^7$Jf0SYJZ};B7Mf*y~{*J z0P1^KdmB5g2~*oVz`}X7derCez2Wcw0h_9DpWlp=+WKW;ra@@&=%pc}12MN8h{y;u z9iH4?mCsH|0$yhGdUlhrrai#*ir@f2ru;Jhg#@p+=I%@BE|rA~GwICYdIV$ho^n%> zW$eUg)QB&Z&z~=fi=!Xo2Jlf{izz6~KV>Aq_6f&HdEQvy5z#rvlI_VJw(qM4mH+mC znt03jtB(y{GDn-T?Xxx6WJNcX5ZB)K{k0iZc=7J1X(t)*-L@NzfW85&#{Ruq5junW z5DG%_!7zg`Xw&PZmlXo5p5_}e1NkATFcwnt?~;X$U6KP{l?UGh5PX^tyo|`AW3-## zg0Q&gHfbBd$*AwLPJPY*&icslSmlky1s;Q*RVTM0rgHX;dbFgujc`8Ybv{;xD4k|e zJGdOelQvY0qHj5Uu|8m){)S(5TiZ9(GCIrINA;O~qn&Ufsy!vcCoMhRn|wcrEA@v7 zuAMq^Vuc|EtJ#Bs<#;0bTyi~3vx**3tQEZVmVQ^`?MQnuz$;F(jF_qOLnMt)C`zCt z^u>>U9oaaqE}u+%o!+*^*t48Nw=R+*15-CibZHihjr>P zeNzcGQh7F^)f;FHJv52wLdC-nHn5#=SuYUl&xAJQLRqEZTu>^*qV2{H35sw4cD)^? z9u)5P%;|vH*`FDo>wx+1828W&dEo8pZ_lkr4JVZn-dT(dkeRKh$D3C~hiW+>Gn-=IMDSCoS^XrzF7kVk_%twIe>&BWPuc6F@maLHvX}5_j+5$nGmR0%HP_D68HX~w8zdF&QD5_gqTAS!KkflJh|n7N~-UXp}{F(XfmuJJE$*di^L zVL_|7a+%kZBu-1SlZjP72*=3?GY*7Gi~iW#4hl>((f$3DGvv9}6=Ejo!Rso!4)d_H zYM^=8f*12|(Zp`Sso24e#m9Fq2nT4WdDI%Z9HP8&?5;05i>eG*#&OXfhQ_?Fx2&zN z=f10SDs*(vDUs8h>L_HbR?Y2W3y>3!M(J|ntGXJm`4m1`1s&l%B^4p$T0_&W_cbo( zv!7e+Nkxpk><8tFIFcyC%)rIy6>Q8L=Yvka=-w<^|R;fb!a7Q zax|v(_2VVB*CEZ1rbbFrO(dz^Y|Eg04#tD*&h9{u`(PPvh8{n|PVYVH%*2jE(PCZl z9L4WWvTh??ZV3em-YU{%sK@p30=Vo%1?{V5ti}vviC$P04z>B6%G=Hm3`_N=V?MnG zX+c-O{WOAA-}^00v?1>2DlSYUZZ@`VraXDcNuh<|5{zP7K%E~K4_%I<)s4QjrPY6E zdMmniYk z0+H5LGu+G%KCS41!I#I{m~QDlFK<)T;=MBwjlUyhd-YhrFzY!>0HJl z-nd1W8+r;{2Cxe6TY1y>LyqawhF7b5qDDNys=UDU6b!3fK%q{}BtqyOV5- zm7W(o;=s)OX{#Zl1X4)^nc|mZTVzH&yK0*HYhr%HPQqGIzAyr3su~vi`>9wr2diUz z%2??HBSZ>_b+}*^{cw!)uPB6FeKSFyw{LmWN!OMaSZj73fFO zyDxehz@!vXGrfOi~?xKyn%`1em*I&$S37EU-KuD|~``^*M)w-S_cs+8_U zL3Tzw?!OxGXV-vx=GukKyk*Q*7Yn|`EG6Q+FWw(1(1XQNIw8kK{hy_cd9OzWZS8P6_(9;a^v5WJqA& zcim_Bbq@uN4eHnO|CX^f30lx*Q4r?zcUw?m0DN332bX$|STPV(gwWP9vAw}#`>9jr zQHk^X@1di*lNdZK%0x_IU*Ls2X3b}qTh@0)G8ykSY#Wtf*Ua|T&3Oyn>6&Uai@L_ zm{$d1y6pUtNG6WZ6<2SKlA89b%D>rejiU4!bs^@NlOCyAcU9F(gY=(Qn`yjLhCtJq z4>>}hS9fTSSBQ!7-&cOrfFhJg_mmq**SIY&8nP-p5FDxr`;ZBEmlgicR~_!KpZLv%o{SO)A++@$*_v6ND!-F+dT9AMYwsM9`)dLnpq25WGnsgp5gK{pxR~SEvkcM^t17cK)**?Nyc-*eYlT zZyIup{2D>}JFSZc38R4YOjL+t`tvOxITN+t@H1+}@KfXGfMF%oyEZF2gU@nN=ds0S zjMCF6T{+(GgEr5~lu4gk9$XFo;9c2Y5H(n6y-=|Sle5A_>?bbWSlb5zKQH9XLlMzw z{+!^d6Mzl~w5!~M#4?z4$J<5W0eM3`3*#7nLAQxDvl)LX`G(LUIJK96Fq?GTrxL_kViHbvdzDTO*B%}57N!mPbQKGg+=zaIv(K*9H}{6A}EBrIm5;d0FMr~AUD}* zg|}Yipf`{R@Dw!rh-E#(Rqc&`=zbTCCJy>i@BA0sb`YG6iy(VUZB&^`*^QK3(LC8Z z|BIs}8&`;}oTCOTEWOd>TjylWeWP>0Kamt3t~P(8Bpf4zbx1357v)98Klp{`ue?oY znN@jtPR>7!$tomy-h!1_AO?YG`aciCVj@Zs0{)5FyiecH@QY38hx&u~$ zQqR=fsyYtO5QC)xRJ#Z+DluE`_kni_^*e)xYYxrf%0G4q7`PQWfF!JGp2vWcY`?&P zLKI8G_PBaCoWBr7p$1No1>%)PY0#qzzbF)B(W+3cNA;4<^~_&uIc3Wq*8gDg<`FRe z%+4~(cdRg~3wbeCBY~1-eXstTQWV_LuO8WGodG4v$c*J_C=EW_^Zm7tB&6r(eR6)i zyk4qBFC^sadv|+q5BxdodYR>nMzYt>Hr(&kWu6^-VJ_%?-3uPFOvie;$=3Jtdc926 z4QKk}-_E<`@A{I}6d%t-L||wSJPkngiGUe?KHRPE4?R3YR}JNqz0|&5Dq1aayee|& zWCu+G{76CTtloQxy)h^1a?xj&W;b8pS0%H67WYEFHEu39_jOuz97eNwp}t(D+AgWg zn!^)&ac#an)kglA+SFFkKz4`g?Ew|xFE6k1n)u@88d@W;+K7^^$47xQui~0i@gn%c zL|8u(E4=DQ0LHpc_zMy&<5~)F8dX6u^pcL7g=j)8-HDhD>NlD%{c8@7lQyN4wt46$ zl^qvNg^PYTGOWNHc%3W6k<2Q?s`wa67}r2>DA(3NWKDhz)8b0)1Ot8|IObkLaB6Q* zvqJH`)X-KbP7H$T6C8r45PWM1A>WcV6`AQanFU#UcM(+YvaAKnGVve+0jpx zN3w20Qiw%6YkV*w7W&=zfH&Am$p902<5(mNEaNmF5u`y0MHe6446xN(>OofxI<88Daec#jpsIC7m}Oz6Us&t zkhd)_jc;|$AdakCM75HzAxUp#P!@!@KX3z;sxStd%-~~TC4=`dmIw^qU^f<>LjyQs zg`aD$s5R_7rRl7crZ7M~x(A#4?ZX;PmkC<|v+hlCyk4z<^kr45;b8Nw6$;iHv@2Sg zcuX4&M9<>DbSIOn1%p-^iXo7Peg+jde%a(_2(+#lPIE`W`1-vNQdsuhaW=Rwp|OQk zlE;Vqcgy$^hi4~N0|dDc)WhI0%bzDJ%+orWbGg%+!KS-x^BA2X`F0rHudo}*Z$ak( zWuZBS0Vm6l21a)bMl;pJvM`zrdbKnzc#E}2cr~$rHq#h05*dB5-fu3Vy}I@Ps-B!r z==}QQxGi1i=ZD^57yQEPQ%0kx%}7Zva#fd|O%9i-nxp*vPI#Aj2D8NWr$DjlZvxb{ zP{A7NI8vrj#yOWUnon*CS~nU;SVIA<@J=jiI_cTFt|7Ag;qZZPw0h9RM)8AW2^RW@ zg$QQdely7U=J?K_)|mj9vXrpH+1Ks-n*~LL`B<1jG5jidNC;Y8u(pZL{@*b<*tmj5 z7Niieqeeq}@m_dx$c+ur^VVWNaje6WGRW0Ei!@wupx7kK#G}|3uxZFTDW!n7V(Im0 z{H07VjPU@O(xeP&3aQq?;n?+Q;RhA-1N7rkIuv|*>K^*@o=aXM`9Yx==ua3G3-pv)AP$H@I%4v;EMo_^H*wz9xC5=M(Vt)Uq zshdeh&YKUjh?D_XBsW9SkYVZy1Q=??=j$6;B;a?0&h*zn^~s(ljIr8dsymPgXzqt1 z5-*Ec7NXM++(0vdSg_vQC&x-slGBk+TpN&m&grXG&;S}fb@EveCQwCsJ3R>R)Ew3% z%W|w_fYFcOT;2U#y4IMqjxvgce~bE+)Tk*A);5q5$-|9-?MDWE)>--8s5>$&n}$0PI{p5kv68q; zXFOQOaZa8bgL-*-DmN@dmMBgYF=IAb-HJ00V<_f3O4?*n8t<5aFOTiow^4C-&5E^b zl<%gOE=>xUEr|5{jJ!8$s)MoVnm~n>qQ2rE_bhYZYQB(&jL_K>8-GS1ma|oHt~AsK z!wkw@#b^{fV!|IKm&zHM7(tWcb8 zB@d}c^`SUZVebbH!Y0&kdS(KoRipYZ2`p~lHWd98e`4iwlXZ2+ zf-ZwxdZgZjRnuBFm^VFYzN5@^9=)8bpWQ#a>{!%52+OXyYI zh~{~&pNv66N>i;K4S<@QI(f-L}%}%8eNyu@k%*9#tL8zj|t;9`W^A%!I8Q2^9i zrj%`H!+9i3sM7z**dV;#tB`Y_QhTyg^f7ec?&)~5YGi)5f3<0HWTEc3}kaHsv7J^+T0RR!848l2gwliLY0 z@U+=W$OL6N!STbDiG#JktGR{G7Q(-a73E|Mc2*h|(X)Yzjvok01BCLlZ=Uf1hU^|Z z)4Ro*xypZZF{Gq!!=(O%$$_u5Dj5XHMPKI+*$JO?$H%%Ssf^o?WDId^`yFW&Lkv~x zCU60+N@*7t1>{q$LJ=;T+_O+t)6sV+Gu%G)4>8r9o{Mr<9CyO1bo6LU4JFBN<;&UA z=Li2ZLR@P`oEjp-fgDtZO&}#$e!xZ79{?u3Ia6P66Y>UzKZLAh1VN& z6#46_7PJxqGUivsrY(Dtt4X5_9|;j|3Hdm;10FA*T~H^xpRWVSRb3~B zyFH)p1AW&jVc~s-y&g9ML*ZweRZ>Vmw!BU}1#2~iv$P|&l0V-HtiWtc4}|;WawmFt zTAVcc9lUoiQ#Ku_t*J<7?>}s@-U4|3ocs|Pa&_b=ZZTrYVFrYj)y*fZuC3MF-_+!Z zXz{O@mbHOdfH^Y%iih#<`hdF3v1@ih_u1Im%#ZtgJi8Gdf2K-Gv=x5-kP_dPQAvdG z6xk-cvdJDaVPY=vR@_Y}PhUhN*S|b2QSov%(QxJJv1&#*?9Zd2r$4wxHGa~b}5hN7&Wtk5!Ucu{a96HX?9hvYI=Ua zFRL@{C8oR}B11IizpMD6uFo3K zq_p&jIVeeqC0ci44vbeGy}R>G$!!n9;&XYwdA;z~iV=|kBRYAfyq}4T?gxx@_6%c- zYzl3HUb%4@&RVlb>3`Pz(AdsGdyg`;V4Z$Z>v{Dc7?0oiaCLVp;UT}K&7i7Ej(JPl)mwFV z!}*h0EwXB5jV6+@0%-2pBtDv!lr6Tpn96vbnHSua85TWJa zpvWf9+>_{e<2`8@*AC(qO8zzCT3U39d7RA_AQ`-K@NW=vgmR>-eE4V=E^zaEzWd$f z`>C*xha>x6G)oWm=-XOUykhed(^OsG{;Ey(2fmO4fau73qJSWGSL%7^85?ahBKs{MiW$_E z5K88Kc?nw>8^c-nRe+bez`(R%jr}z?h~!-egzS&~eg8)F>m?X7Jn-ysYDiGzp9BSYc7hwf-Nf?t!}!XxkES#kOtRPAaL`wryJ{wr$(CS+Q-~ zcGtZ<-ssoAVqxy}?H%$1cYvB0;oH}zMxM{lSRb&(ZmvEpj3BApPBB@(psY5FS9aAF9&d;uyVG4>~9;g=UoFVT9m zGN3C{22<4D=-6HTDb{kap`I*82u+Aato3)f*j^q!T7#F!SuroXI)r02ezvlBcgu%* z@MdrBkk@DTk2`UZKyCrR0g$%=)+D<)?q6beUR@9nnON|pQp-kDZmFc_N{QYAZ+Ou^ z`_M82q6lG>?7^|l=EIzvU#)Jp1x6*d(Kt!utVrh+uA>Dsqr#lJ+Pqn=Qrn%Q@_0|| zyV#nk8vKwZ?2j`QAukG25UndQZorRrvfDpc%tmC0+OgjuGOGnZ9ay3~%*3p<(QcFf zs9<4ifs{)|mv(Qu0zN&n^b^E?lGJ=KxOIX?pBj|ZBZOMvK~4ifr@GOT7ruqSW}?3x zVha19r!5PQ0#^mXS1vE8sjuoM)$pzpW_${m!*GtWUBw%`;C5 z4pbqKMD7rG$6?O;3e?veIxKB*R;ezW02%?F*P2G+Jk}7VLuEdk9?ZpRs6CkXkq2L32p{ zWA8G3LpNuCIU5tTNc1%>kq{4EP><$5hM7!!HO_A?9=FYe;9In{CMJzR@;tHOK}=Gz zpb`=)Gnoe{mo~zKw28Ev|9En(XbV@+dWC}*eQBlh#6t>nqjjIWY1PqmKFe1)K?f_>O!vX%af8Z<*oOCII!nS3qH>1 z<;d%R(ckJkMx}bL$|l=t`Qfd(Dc}*?^Q(1pJ&Ke&>}E&!NOTG7xk>U8vMi9ZzjP%bZ(e(vyNf{6 zlyx&wW!_SvxrA7|)KI05GY;64NThVqk~v&Zm~XzJ1U^P2u z6PqMql5rwMB|xk5#Ad|PIM4f>;|s$}9X-|6#{yEQ7=t4BLRUbTKYpLSP-yk=UL+cO zEv$#T>|pX{UUcUh#%=#s~!bGEv3W+_Vqz^7^Y!M2*&#{!PEJ9M<99pfrB*0nG^hhQia;eul2*7 zXKl48oP^Sxk>3*op%Ll)ud) z>y9z4VuUJ`wfd;%Le)vVf4jeJw zJ&*7t7cTl|*MRNuY77jIwo1N=>$vv0!H)!|&+hK7uP-t}A3R(+Ll&ct7il+$XV@YP z=6*z>Vw18%DEaW4!&jkL8)5*8M2xn!C|wTE#)slb44F*Re>n{_vt4a0Jj$FeYdJAp z7qFlTItwf#+c6^tZtqx1YA_7@HYUm-E$|XBq*}I?g_s>? zMM-tC?P)Y87%R3CYPc%*AMmT8MBH>5QPx}Ti5F1%sGd>YZU+p4&vpTT-IBb+QF5W| zVHkT-^)80gciI-W_>tBsXod=}&AODgs;*CxH?&(xoMSjBHB{mXX$It+CMKbU+_yMC zZqikUGi2!P<5b^1N~J58FO0pO73rkZ4$3t7#_5xU+DulWtd}ae2zC;>Jvvzh*{B9P zw0SDRiS-Jb<-Foi4=eyv9}g*7W}>^!Czzl8J`>NLHKlg<{h)$UHEJ8f$B5?8zFBvIX_+W6$d=W$yMNodZG&Oi2B7Bc6rb-d1TZUp@9@^971%+bC?|&PvQ&`>% z-+Y5CTIGwS3N8Sn0CA+|BLV#z64=;S|M!q^g*y>L(tedwTSj1CO?nQ6DT+v_p>LNs zX;UAH@Ah=ah+|A1`sph!u~<32W$V_dr!o1e&=9eoi8_3K_CZSF|8sb_cxavGlNQq} zXZXCm?-lo0a`gC;yJ95JvmedLzjp#FxYx-Jz7x%U7UBRvym_5CIVyr4$`@0**$^t1@0mB9hEB#k{{(H59STxli?C?ES1V|T%|g( zNA&|tf`A4SAsTyV<&V|}n|gMr%wEApiOpxdMo1lD_4<69ykDH0?1F+ucKP{ZJpVGB zsoZPU_rwM4+s48F>BU`eb88$qk(QW-^xHm@S&w>Vd_H*F%LmR_J7>Hq$|-J46ul38 zM$yI2FCmz4=J4@UVHP)4?RRDw>TppR$eK?xBpmPV&|EfQBn7t9Wq2)e<( z-9_xe>sPBwC8^3G51dGhZ!t~5_MDX@KOzG(lB2m9kG^w3#size6haoz38W;f zv?2s6I$TGujY?E2dx9S^PmC>zo^6wk%B~y+^zTL%*{!vkv_?7kX94hI`*&B(g@*!3 zX-v_W;l5VUZ51mu0C*ena+5;1m5u%CPp4CGTf|f3Z~%cn;qj$FGQPk=U4oP zp=dw{V7NCfuXsSkA(?Q`a0A|Hzt6?Fr2PPY#azXy#(gIzi1z4+?~Iq!2jP%0@ac$n zQd4@QwhC?=NdLXjxf#jM)Yf$^lH<>cM$-0ni`g;I* z6b?i41|IiG8$89Sk+8tM3n6b7)*6ELDdT(zVl35QXRT>?K|cj7;r`>^mJ zcX{Nf;JKyNN(0s~{3(`B2C57C&qb$uQ1HKS6AII%Q5#W-@CByXjRCOk-bIayD3zk_UC2kWy-g zH`dk3?qr)REJ%7il}C7~A&&%~jx2uBcJBGE<3BNCLjg8|r#jiq#sO4zJ+4u}( zkHWxlUvMfH9arSUDH61|#OI+e|6u@awre$}f)Yt4T77n;XM4C+sU;whNa3boK414R zK689VkR(AoR=%>EosCsBzC?EDI>mcl5Mrdr-POWOnKrXV(1Y<~o)t^LAk%+_kRm!= zWOtI-g-n;Q6drnwfd;QNE-6vV5o-IglB$R%lGu-D{@R@8PP!XEVvjUC-3p_lA@C3x zQIj@9-;^z!k6}pvP~AFS_`Ph0_v@$&sC3`WN^?KdA#I ziE4P6S&dhE*~fZqc7H~46@l%}J~+gRYvb`X3ML(mS3fQ1xl6GeJRiL=f(0fu?TUYH z4FRVPowiRF>N2{%a+=_JeEUkhij^q|+QiL7aLf81g}D`Zu@=CpQ{%G%hRtm8FSSjp z+32;B%4x3JpDjUL(INUyi`Ynf!P=%b84tALkW+ z*+f61D<-k=ES%r}>ftX6X33;4KtKLGP%HhHqs)XP{ppbDb7mU&@NO}>uEvh&4eCLM zr@ml9OW)$eG&X?yk8WC5#e15N#59t!gyiCupjcl(k69q{Rn$IR;~%n+HkxwQ0&bj% zcC1b9l6gK<8cWUJizevDNkkF@bTaG|`E#mqTJMm|qlxg)XHdpI*MnX*?z8Ox=Kg4( z#w?a5AewGYFzZf|^)BZ8h&h_TgExoxVpRmH_6e8_{w07+A*YQydLh?C)k-oCC-!<# zyEHW?9*zKArG{mDbt9g^iX#1ac9Mx1KD}}c{CK%d4D?h=-ZcvMl%!g8TIJtUweH&O z!UycW@i=ycS$7dc%i+%g9rTJ%t!ip&ETj%7x`L!@a%EA&)jikuwChF)v=9p2c?OEV zV{!+#w9J5r(>CMBsW<<8RtZ$iMwthhu6PEh=U@wp_QV!U`MMou60>at({fC-Qj zUfh&tsH;H(i`-d0T-8VLgnqNE)?6%}#_I>43>UzyP*x(R;G3hU5`#tZ)lOd-K{BcSY4@nmYHp zO{HlqT!LD(o03C82x_OTwp@$KhcKjU6u~DzN~XOwx4Btg5c0XKZXtxTaTI-#VL4; z1Bn}!q7I!fflBGuRY;xcCLn-a?6orV3s8xgsg6~`_UWdOXH0M;bK3i?1F$^w@Cp=( zN{8{u3Pw^#Hre51lH20l`a|W0c)M&OD>{JrpSfnpdXhHEqcd&=RH_+*gfiS@gQ0ac zU)DA1G~Ag}W!Xv@9)(6FFp`)tqot}#J?d52)7d1~dEyv!Bz+=!!?}~O7~5$87VO