Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@
# Après une modification : `docker compose up -d` (un `restart` ne relit pas
# `.env`).
#
# Une ligne laissée vide (le nom suivi du signe égal, sans valeur) vaut une
# ligne absente : le défaut s'applique, et pour les deux variables
# obligatoires, DATABASE_URL et KESH_JWT_SECRET, le démarrage est refusé
# comme si elles manquaient. Seule exception, sous Docker : KESH_LOG_FILE_PATH,
# dont la ligne vide désactive le journal fichier alors que son absence
# laisse le compose poser son défaut (voir son commentaire) ; hors Docker,
# vide et absente le désactivent toutes deux. Les espaces de tête et de fin
# d'une valeur sont ignorés.
#
# Valeur contenant `$` (ex. un mot de passe SMTP) : la mettre entre APOSTROPHES
# SIMPLES, ex. KESH_SMTP_PASSWORD='pa$word' — sinon Compose (et `cargo run`) la
# tronquent au `$`. Valeur contenant aussi une apostrophe : guillemets doubles
Expand Down Expand Up @@ -128,8 +137,9 @@ KESH_REFRESH_TOKEN_MAX_LIFETIME_DAYS=30
# exposée Internet sans HTTPS.
#
# Valeurs acceptées : `true` / `1` (défaut, sécurisé) ou `false` / `0`
# (override HTTP-only). Tout autre valeur (`True`, `yes`, `on`, espaces...)
# refuse le démarrage avec ConfigError::InvalidCookieSecureValue.
# (override HTTP-only) ; les espaces de tête et de fin sont ignorés ; toute
# autre valeur (`True`, `yes`, `on`…) refuse le démarrage avec
# ConfigError::InvalidCookieSecureValue.
#
# Alternative recommandée : mettre HTTPS via reverse proxy (Let's Encrypt
# automatique si domaine public, certificat auto-signé `mkcert` si LAN
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Le contenu est rédigé en français à destination des **fiduciaires, PME, ind

### Modifié

- **Une ligne vide de `.env` vaut une ligne absente, pour toutes les variables ([#550](https://github.com/guycorbaz/kesh/issues/550)).** Kesh lit désormais toute sa configuration par une seule fonction : une variable vide ou faite d'espaces prend son défaut (ou, si elle est obligatoire, fait refuser le démarrage comme si elle manquait), sauf `KESH_LOG_FILE_PATH` sous Docker, dont le vide désactive toujours le journal fichier alors que son absence laisse le compose poser son défaut (hors Docker, vide et absente le désactivent toutes deux). Les valeurs sont débarrassées de leurs espaces de tête et de fin : `KESH_COOKIE_SECURE=" true "`, refusé jusqu'ici, est accepté ; `KESH_PORT=" 8080"` est lu au lieu de retomber sur 80. ⚠️ **`KESH_JWT_SECRET`** : un espace de tête ou de fin cesse de faire partie du secret — un secret de 32 octets dont un bord est un espace fait désormais **refuser le démarrage** (trop court), et un secret ainsi modifié **déconnecte** les utilisateurs (les jetons émis ne sont plus valides). **Hors Docker seulement** : `RUST_LOG=""` ne laissait passer que les erreurs et vaut désormais `info` ; `KESH_HOST=""` faisait échouer le démarrage et vaut désormais `127.0.0.1` — sous Docker, ces deux cas n'existaient pas, les compose fournis remplaçant déjà le vide (`${RUST_LOG:-info}`, `${KESH_HOST:-0.0.0.0}` ou le littéral `0.0.0.0`).

- **Une écriture se modifie tant que son exercice est ouvert ([#532](https://github.com/guycorbaz/kesh/issues/532)).** Depuis la v0.12.0, toute écriture était figée dès son enregistrement : une inversion de débit et de crédit — sur les soldes de départ, par exemple — ne se corrigeait que par trois écritures (l'erreur, son inverse, la bonne), et les comptes touchés cessaient d'être complétables. La fiche d'une écriture offre désormais **Modifier** : date, journal, libellé et lignes se corrigent là où ils sont, **tant que l'exercice de l'écriture est ouvert, qu'aucun exercice postérieur n'est clôturé** (le bilan, cumulatif, la reprend — garde posée sur la modification et la suppression : la saisie, la contre-passation, les règlements, la dévalidation et le complément des soldes de départ ne la portent pas encore, [#543](https://github.com/guycorbaz/kesh/issues/543)), **et que sa date n'est pas dans la période verrouillée** — l'ancienne comme la nouvelle. Le numéro ne change jamais, la date reste dans l'exercice de l'écriture. **Chaque modification est tracée** au journal d'audit, avec l'état avant et après, lignes comprises, et l'auteur — utilisateur ou clé d'API. **Ce qui reste figé, et se corrige comme avant** : l'écriture d'une pièce (facture, avoir, facture fournisseur, règlement ou solde, rapprochement bancaire — depuis sa pièce), une écriture contre-passée ou une contre-passation, le **paiement d'une facture fournisseur annulée** (une sortie de banque réelle, qui se contre-passe), et toute écriture d'un exercice clos ou d'une période verrouillée (par contre-passation). Les mêmes contrôles qu'à la saisie s'appliquent, **à toutes les lignes, y compris celles qu'on ne touche pas** : un compte archivé ou devenu non imputable doit être remplacé. L'écriture d'ouverture et les compléments de soldes de départ se modifient comme les autres ; retirer la ligne d'un compte le rend de nouveau complétable. ⚠️ **Changement de contrat pour une intégration par clé d'API** : `PUT /api/v1/journal-entries/{id}` ne rend plus jamais `409 ENTRY_IS_POSTED` ; il prend un corps `{ entryDate, journal, description, lines, version }` et rend `200`, ou un refus nommé — `FISCAL_YEAR_CLOSED`, **`LATER_FISCAL_YEAR_CLOSED`** (nouveau, `400`), `ENTRY_IS_REVERSED`, `IS_A_REVERSAL`, le code de la pièce, **`DETACHED_SUPPLIER_SETTLEMENT`** (nouveau, `409`), `OPTIMISTIC_LOCK_CONFLICT`, `DATE_OUTSIDE_FISCAL_YEAR`, `INACTIVE_OR_INVALID_ACCOUNTS`, `ACCOUNT_NOT_POSTABLE` (comme la saisie), `PERIOD_LOCKED`. `GET /journal-entries/{id}` porte `modifiable`, `modificationBlockedBy` et `modificationBlockedLabel`. Détail : `docs/api-external.md`, « Modifier une écriture ».

- **Une écriture se supprime dans le même cadre ([#532](https://github.com/guycorbaz/kesh/issues/532)).** La fiche offre **Supprimer** à côté de **Modifier**, aux mêmes conditions — exercice ouvert, aucun exercice postérieur clôturé, aucune pièce, ni contre-passée ni contre-passation, pas le paiement d'une facture fournisseur annulée, date hors de la période verrouillée — : une écriture saisie par erreur disparaît sans écriture inverse. Une confirmation le rappelle : **le numéro n'est jamais réattribué** — la suppression laisse un trou dans la numérotation —, et **la suppression est inscrite au journal d'audit** avec le contenu complet de l'écriture et son auteur, utilisateur ou clé d'API. L'écriture d'ouverture se supprime aussi : seule écriture de la société, sa suppression rouvre la génération des soldes de départ (la nouvelle ouverture reçoit le numéro suivant, pas le 1) ; parmi d'autres écritures, ses comptes sans autre mouvement redeviennent complétables. La fiche dit désormais qu'une écriture a été **modifiée**, et son lien **Historique** ouvre le journal d'audit filtré sur elle (rôles Administrateur et Comptable). ⚠️ **Changement de contrat pour une intégration par clé d'API** : `DELETE /api/v1/journal-entries/{id}` rend `204`, ou les refus nommés du `PUT` (sans ceux du corps) ; le code **`ENTRY_IS_POSTED` est retiré** — plus aucune route ne le rend. Détail : `docs/api-external.md`, « Supprimer une écriture ».
Expand Down
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading