Commit Graph
4 Commits
Author SHA1 Message Date
arcodangeandClaude Opus 5 8eb64e7666 fix(bank-reco): l'annotation URSSAF contredisait la doctrine — 641, pas 645 ni 646
known-patterns.json se contredisait lui-même : sa classification annonçait le
compte 646, l'annotation du motif URSSAF le compte 645100. Les deux sont faux.

Pour une SARL à l'IS, la prise en charge par la société des cotisations
personnelles de son gérant majoritaire est un COMPLÉMENT DE RÉMUNÉRATION :
compte 641, sous-compte dédié. Le 646 vise l'exploitant individuel et les
sociétés à l'IR ; le 645x vise les cotisations sur salaires — Arcodange n'a
aucun salarié et l'opérateur n'est pas employeur. Établi par adc-009, sur deux
sources indépendantes concordantes.

Ce fichier est lu par un agent qui classe des mouvements bancaires : une
annotation périmée y pèse plus qu'une décision au registre, parce qu'elle est
sur le chemin de l'outil et la décision ne l'est pas. C'est ce qui la rendait
dangereuse.

L'annotation porte désormais aussi le caractère PROVISOIRE des montants appelés
en 2026, assis sur un forfait début d'activité et régularisables après
déclaration des revenus.

adc-009 lui-même reste en Draft (PR #86) : il attend la lecture de l'opérateur
et l'arbitrage expert-comptable sur l'assiette en l'absence de rémunération.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-15 11:56:33 +02:00
arcodangeandClaude Opus 5 81cc3df13c feat(erp): enregistrer les charges sociales — script + runbook rationalisés
Dolibarr n'expose AUCUNE API REST pour les charges sociales (/taxes,
/socialcontributions, /chargesociales répondent tous « API not found »). Le
module est actif, seule l'API manque : le pipeline de promotion, qui parle REST,
ne peut pas porter cette opération. D'où un script UI, gardé par guard.ts.

La sandbox a joué son rôle : quatre doublons y ont été créés pendant la
découverte, sans conséquence, et les quatre pièges du formulaire sont désormais
documentés au lieu d'être redécouverts.

- recordSocialCharge.ts : idempotent (cherche la charge avant de créer),
  vérifie par LECTURE de la liste, type TNS par défaut, --dry-run.
- RUNBOOK_charges_sociales.md : écrit pour être suivi par un agent moins
  performant ou un harness limité — la commande, les garanties, les quatre
  pièges, et ce que le script ne garantit PAS (ni juge, ni artefact de gate).

Les quatre pièges, tous rencontrés :
1. La date visible est décorative : le backend ne lit que les champs CACHÉS
   echday/echmonth/echyear. Remplir le champ texte crée l'enregistrement avec
   une période aberrante (20/06/2000 observé) au lieu d'échouer.
2. Le bouton de soumission n'a pas d'attribut name — le cibler par value.
3. L'URL après soumission ne porte pas d'id : vérifier par l'URL fait conclure
   à un échec sur une création réussie. C'est ce qui a produit les doublons.
4. Les milliers portent une espace insécable (« 1 215,00 ») : une comparaison
   littérale casse au-delà de 999 € et l'idempotence saute en silence.

Correction comptable : 645x → 646 dans known-patterns.json. Les cotisations d'un
gérant TNS sont des cotisations personnelles du dirigeant (646), pas des
cotisations patronales sur salaires (645) — Arcodange n'a aucun salarié.

Appliqué en production : les trois échéances URSSAF 2026, toutes IMPAYÉES.
Reste à vérifier dans le dictionnaire Dolibarr que le type « indépendants »
porte bien le code comptable 646.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01VRShc4QhLLU73FLHx9vskh
2026-08-13 17:27:17 +02:00
arcodange 6b576931b6 fix(bank-reco): known-patterns.json — Mistral is annual, not monthly
- MISTRAL.AI: update note to reflect annual subscription (Le Chat Pro - Annual)
  from invoice MSTRL-API-814045-001, 2026-04-02, 143.90 HT / 172.68 TTC.
  Next expected ~2027-04.
- CLAUDE.AI: document payment rail moved to personal card (fk_account=3,
  API-invisible) for May/June; reference issue #57.

Both AI subscriptions are now recorded supplier invoices (post-replay).

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <[email protected]>
2026-07-18 18:53:07 +02:00
arcodangeandClaude Opus 4.7 4b6a5f7529 arcodange-bank-reco: add known-patterns.json catalog + bank-match annotation
V6.1 follow-up to the bank-reco V6 ship. Splits the BANK-ONLY bucket into
"known patterns" (intentional gaps, documented and classified) vs
"unknown" (real action items).

What the catalog covers today:
- FOUREZ Quentin → capital_deposit (apport en capital 1000 € initial,
  notaire FOUREZ centralisateur du dépôt). Maps to Dolibarr account 1013.
- URSSAF → social_charges (account 645100)
- MISTRAL.AI, CLAUDE.AI → ai_subscription (account 6262)
- Wise *Plan, qonto_fee → bank_fee (account 627)
- BALANCE_DEPOSIT / FEATURE_CHARGE on Wise → internal_topup (self-funding
  pair, often nets to zero)

Effect on the V6 baseline (Jan-May 2026):
- Before catalog: 8 BANK-ONLY mixed entries (noise + signal)
- After catalog:  7 known + 1 UNKNOWN (just the +2147 € KM Wise payment
  2026-05-29 that genuinely needs a Dolibarr entry)

The catalog is JSON (not YAML — stdlib only, no dependency). Schema
documented in SKILL.md. Pattern matches case-insensitive regex against
both bank label AND operation type. Optional filters: bank, side,
amount_min, amount_max.

Exit code now reflects only the UNKNOWN bank-only and dolibarr-only
counts — the verdict is no longer noisy because of intentional gaps.

Edit known-patterns.json as new recurring patterns emerge.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-31 14:06:46 +02:00