Skip to content

feat(25-4-c3-a1): désigner le compte de différences d'arrondi dans les paramètres (refs #476) - #487

Merged
guycorbaz merged 27 commits into
mainfrom
story/25-4-c3-arrondi-centime
Sep 30, 2026
Merged

guycorbaz merged 27 commits into
mainfrom
story/25-4-c3-arrondi-centime

Conversation

@guycorbaz

Copy link
Copy Markdown
Owner

Refs #476 — première des trois stories de la 25-4-c3 ; la 25-4-c3-b fermera l'issue.

Pourquoi

Arbitrage du Project Lead (2026-09-30) : l'écart d'un demi-centime au plus qu'un paiement arrondi au centime laisse sur une facture dont le total a plus de deux décimales se passe en écriture, sur un compte de différences d'arrondi désigné par un réglage (pas un rôle de compte), créable dans le plan comptable et choisi dans les paramètres. La 25-4-c3 a été découpée (sept modules) : a1 le réglage (cette PR), a2 le compte « 6940 Différences d'arrondi » dans les plans livrés et l'onboarding, b l'arrondi et l'écriture de l'écart.

Ce qui change

  • Migration 20260930000001 : company_invoice_settings.default_rounding_account_id BIGINT NULL + FK ON DELETE RESTRICT. DDL seul, non breaking. Garde-fous P5 (audit, compteurs recomptés 70 = 70, 8 + 62 + 0), P6 (migrations_upgrade_path 70 / 36, frontière 34), P8 (migrations.sha384), squash régénéré.
  • API — GET/PUT /company/invoice-settings portent defaultRoundingAccountId. Validé : charge ou produit, actif, imputable, de la société — et seulement s'il change, pour qu'un compte archivé ailleurs ne bloque pas un enregistrement sans rapport. Absent d'un PUT : préservé ; à null : effacé (double_option, déplacé dans crate::helpers).
  • Écran — Paramètres → Facturation, section Différences d'arrondi : sélecteur filtré, compte courant conservé, aide qui renvoie au plan comptable ; 4 langues.
  • Export CSV ; sauvegarde : un backup antérieur s'importe toujours (prouvé par test).
  • Manuel d'administration — paragraphe qui dit que le réglage n'est encore lu par aucune écriture. CHANGELOG [0.12.1] Added.
  • Issue Un compte désigné dans les paramètres de facturation (TVA, arrondi) peut être archivé sans avertissement #486 ouverte : l'archivage d'un compte désigné dans les réglages (TVA et arrondi) n'est pas gardé.

Validation et revue

Validation de spec en 2 passes (Sonnet 2 MEDIUM → Haiku ciblée 0). Revue de code en 2 passes (Sonnet ×3 : 1 HIGH / 2 MEDIUM corrigés → Haiku ciblée : 0 > LOW). Mutations : garde de postabilité, préservation de l'absent, validation conditionnelle — chacune tuée.

Gates locaux, au dernier commit, base remise à zéro

🤖 Generated with Claude Code

guycorbaz and others added 27 commits September 29, 2026 08:35
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…refs #420, refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… l'orchestrateur (refs #420)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… arbitrages en attente (refs #420)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#476) ; périmètre réduit au rapprochement (refs #420)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… en partie (refs #420)

Le filtre des candidates, le score, le re-score à l'acceptation et le
montant affiché portent sur le reste dû (TTC − avoir − règlements), par
la forme jointe ; le TTC ne suit qu'en mention quand les deux diffèrent.
Manuel et brochure réécrits sur le score réel ; #481 ouverte pour le reste.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ues, Playwright départagé (refs #420)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le rejeu sur interblocage (refs #480)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n rejoue un interblocage (refs #480)

Le règlement manuel incrémente invoices.version à chaque règlement, partiel
compris : le verrou optimiste de l'acceptation refuse désormais celle qui
arrive après un règlement concurrent. Un interblocage absorbé dans une
proposition (ROLLBACK TO SAVEPOINT en 1305) remonte en TransactionAborted et
la route rejoue le lot par retry_with. Trois tests de course sans sleep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…INT, verrou de test détaché (refs #480)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(refs #480)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e ; PR #485 ouverte (refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ge du compte d'arrondi (refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s paramètres (refs #476)

Nouvelle colonne company_invoice_settings.default_rounding_account_id (DDL seul,
non breaking), validée charge ou produit, actif, imputable ; absente d'un PUT
elle est préservée, à null effacée. Section Différences d'arrondi dans
Paramètres > Facturation ; export ; import d'une sauvegarde antérieure prouvé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… s'il change, Playwright nettoyé en finally (refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ne (refs #476)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@guycorbaz
guycorbaz merged commit 7233771 into main Sep 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant