Corrige le bilan pour les numéros de comptes complétés (455100, 281000…) - #66
Corrige le bilan pour les numéros de comptes complétés (455100, 281000…)#66jcnoir wants to merge 2 commits into
Conversation
Le PCG prévoit les subdivisions (4551 « Principal », 281 « même ventilation que celle du compte 21 »…) et les logiciels comptables complètent les numéros à 6 chiffres ou plus dans leurs exports — c'est la forme standard des FEC : 455100, 281000, 210000… Avec un tel plan de comptes, le gabarit bilan de generate-statements.js affichait un bilan faussement déséquilibré alors que la balance était équilibrée : - dettes : le test « a === '455' » (match exact) excluait 455100 (compte courant d'associé) du passif ; même motif pour « a === '487' » - amortissements : l'appariement « '28' + suffixe » cherchait 2810000 pour l'immobilisation 210000 — 281000 jamais trouvé, et son montant compté nulle part → actif surestimé - les dépréciations 29x étaient exclues de l'actif immobilisé sans jamais être réintégrées Correctif minimal : startsWith pour 455x/487x ; les comptes 28x/29x non appariés par la règle historique « 28 + suffixe » (conservée) sont ajoutés sur leur propre ligne, si bien que le total actif reste exact quel que soit le plan de comptes. Vérifié : bilan.md du journal d'exemple byte-identique avant/après ; repro minimal (5 lignes, numéros complétés) passe d'un écart de 1 200,00 à un bilan équilibré ; comptabilité réelle (SASU, plan de comptes à 6 chiffres) passe d'un écart de 4 229,37 à un bilan équilibré 3 039,91 = 3 039,91 ; npm run test:calc OK.
romainsimon
left a comment
There was a problem hiding this comment.
Merci, le problème de l’issue #65 est réel, mais cette implémentation ne le corrige pas complètement.
Le calcul actuel construit le compte d’amortissement avec :
'28' + acct.substring(1)
Pour l’immobilisation 210000, cela produit 2810000, et non 281000. Le compte n’est donc pas apparié : il est affiché sur une ligne séparée avec un brut vide et un net négatif. Le total peut rester arithmétiquement équilibré tout en produisant un bilan trompeur.
Deux autres cas restent incorrects :
- les comptes 29x ne sont jamais appariés à l’immobilisation correspondante ;
- si la balance contient un 28x/29x sans compte brut détecté, la condition
if (immoAccounts.length > 0)fait disparaître entièrement cette dépréciation du bilan.
La suite npm run test:calc passe, mais elle ne couvre aucun de ces scénarios. Merci d’ajouter des fixtures automatisées pour 210000/281000, une subdivision du type 218300/281830, un compte 29x et le cas d’un 28x orphelin. L’issue #65 doit rester ouverte jusque-là.
…omainsimon#66) L'appariement « 28 + suffixe » échouait sur les numéros complétés (2810000 cherché pour 210000) : l'amortissement partait sur une ligne orpheline — total exact mais présentation trompeuse — et les 29x n'étaient jamais appariés. Un 28x/29x sans immobilisation brute détectée disparaissait en outre entièrement du bilan, tout le bloc étant sous « if (immoAccounts.length > 0) ». Appariement par racine : zéros finaux retirés puis 8/9 en 2e position (281000→210000, 281830→218300, 28183→2183, 291000→210000). Les comptes réellement orphelins gardent leur ligne propre et restent affichés même sans immobilisation brute. Tests de non-régression ajoutés à test:calc — 210000/281000, 218300/281830, dépréciation 29x, 28x orphelin — chacun vu échouer avant le correctif. Bilan du journal d'exemple byte-identique avant/après ; npm run test:calc OK.
5df34e5 to
de329d0
Compare
…omainsimon#66) L'appariement « 28 + suffixe » échouait sur les numéros complétés (2810000 cherché pour 210000) : l'amortissement partait sur une ligne orpheline — total exact mais présentation trompeuse — et les 29x n'étaient jamais appariés. Un 28x/29x sans immobilisation brute détectée disparaissait en outre entièrement du bilan, tout le bloc étant sous « if (immoAccounts.length > 0) ». Appariement par racine : zéros finaux retirés puis 8/9 en 2e position (281000→210000, 281830→218300, 28183→2183, 291000→210000). Pas d'affectation arbitraire pour les cas indécidables : un 28/29 nu (non ventilé dans le PCG) et une racine ambiguë (21 et 210000 dans la même balance) restent sur leur propre ligne, comme les comptes réellement orphelins — qui demeurent affichés même sans immobilisation brute. Tests de non-régression ajoutés à test:calc — 210000/281000, 218300/281830, dépréciation 29x, 28x orphelin, 28 nu, collision de racines — chacun vu échouer avant le correctif. Bilan du journal d'exemple byte-identique avant/après ; npm run test:calc OK.
|
Corrigé — les trois points :
L'appariement refuse les cas indécidables plutôt que de trancher arbitrairement : un Six fixtures ajoutées à |
|
Et merci beaucoup pour ce projet, c'est très utile ! |
Closes #65
Problème
Avec un plan de comptes aux numéros complétés à 6 chiffres ou plus — la forme
standard des exports FEC des logiciels comptables (
455100,281000/210000…) —le gabarit bilan de
generate-statements.jsaffiche un bilan faussementdéséquilibré alors que la balance est équilibrée. Détail et reproduction minimale
dans l'issue liée.
Correctif (volontairement minimal — 22+/4−, un seul fichier)
a === '455'→a.startsWith('455')(compte courant d'associé etses subdivisions PCG, ex. 4551 « Principal ») ; même correction pour
487x(PCA).'28' + suffixeest conservée telle quelle ; les comptes28x/29xqu'ellene rattache à aucune ligne d'immobilisation sont désormais ajoutés sur leur
propre ligne dans la colonne Amort./Déprec. — le total actif reste donc exact
quel que soit le plan de comptes.
29x: incluses dans ce même traitement (elles étaientexclues de l'actif immobilisé sans jamais être réintégrées).
Tests effectués
Non-régression sur le journal d'exemple du repo —
bilan.mdgénéréavant/après le patch est byte-identique (
diffvide) :Reproduction minimale de l'issue (journal 5 lignes) :
Comptabilité réelle (SASU au régime réel, plan de comptes à 6 chiffres,
33 écritures, 20 comptes) :
avec
455100au passif (4 087,89) et l'amortissement281000(141,48)déduit de l'actif ; la balance générée concorde compte par compte avec celle
du logiciel comptable d'origine.
Suite de tests du repo :