feat(bank-match): exact tx-id match pass (consumes payment transaction_id) #28

Merged
arcodange merged 1 commits from claude/bank-match-exact-txid into main 2026-06-30 00:39:46 +02:00
Owner

Le côté consommateur de #26/#27 — maintenant qu'un règlement stocke son id de transaction bancaire (transaction_idllx_bank.num_chq), bank-match l'utilise.

Nouvelle PASS 0 (exacte), prioritaire avant wire-ref et amt+date :

  • on porte l'id propre de chaque mouvement du feed (id transaction Qonto ; id activité + id resource transfer Wise) comme feed_ids, et le num de chaque paiement Dolibarr ;
  • match quand le num d'un paiement = un id du feed → tag [tx-id] ;
  • indépendant de la fenêtre de dates — l'id est la preuve, donc il apparie des mouvements dont le règlement bancaire et la saisie Dolibarr sont à des semaines d'écart (ce que amt+date raterait).

Pass 0 tourne avant la construction de l'index de réfs, donc ses matchs sont exclus des passes suivantes (pas de double-match).

Prouvé sur fixtures

A) paiement à 15j du mouvement (hors fenêtre ±7), num = id Qonto  → MATCHED [tx-id] (Δ+15d)
B) même paiement, num vide                                        → NON matché (bank-only + dolibarr-only)

La différence A/B isole exactement l'apport de l'id.

La boucle est bouclée

Enregistrer un paiement avec son transaction_id (#27) → le rapprochement devient déterministe (#28) au lieu d'heuristique. Saisie et réconciliation tiennent par construction.

🤖 Generated with Claude Code

Le côté consommateur de [#26](https://gitea.arcodange.lab/arcodange-org/erp/pulls/26)/[#27](https://gitea.arcodange.lab/arcodange-org/erp/pulls/27) — maintenant qu'un règlement stocke son id de transaction bancaire (`transaction_id` → `llx_bank.num_chq`), `bank-match` l'utilise. Nouvelle **PASS 0 (exacte)**, prioritaire avant wire-ref et amt+date : - on porte l'id propre de chaque mouvement du feed (id transaction Qonto ; id activité + id resource transfer Wise) comme `feed_ids`, et le `num` de chaque paiement Dolibarr ; - match quand le `num` d'un paiement = un id du feed → tag **`[tx-id]`** ; - **indépendant de la fenêtre de dates** — l'id est la preuve, donc il apparie des mouvements dont le règlement bancaire et la saisie Dolibarr sont à des semaines d'écart (ce que `amt+date` raterait). Pass 0 tourne **avant** la construction de l'index de réfs, donc ses matchs sont exclus des passes suivantes (pas de double-match). ### Prouvé sur fixtures ``` A) paiement à 15j du mouvement (hors fenêtre ±7), num = id Qonto → MATCHED [tx-id] (Δ+15d) B) même paiement, num vide → NON matché (bank-only + dolibarr-only) ``` La différence A/B isole exactement l'apport de l'id. ### La boucle est bouclée Enregistrer un paiement avec son `transaction_id` (#27) → le rapprochement devient **déterministe** (#28) au lieu d'heuristique. Saisie et réconciliation tiennent par construction. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
arcodange added 1 commit 2026-06-30 00:39:39 +02:00
The consumer side of erp#26/#27: now that a règlement stores its originating bank
transaction id (transaction_id -> llx_bank.num_chq), bank-match uses it.

New PASS 0 (exact), highest priority, before wire-ref and amt+date:
- carry each feed movement's own id (Qonto transaction id; Wise activity + transfer
  resource id) as feed_ids, and each Dolibarr payment's num.
- match when a payment's num equals a feed id. Tagged [tx-id].
- DATE-WINDOW-INDEPENDENT — the id is proof, so it pairs movements whose bank
  settlement and Dolibarr saisie are weeks apart (which amt+date would miss).
Pass 0 runs before the ref index is built, so its matches are excluded from the
later passes (no double-match).

Fixture-proven: a payment dated 15d off the bank movement (outside the ±7d window)
matches via [tx-id] when num carries the Qonto id, and correctly does NOT match
when num is empty.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
arcodange merged commit 0688e3d7fd into main 2026-06-30 00:39:46 +02:00
arcodange deleted branch claude/bank-match-exact-txid 2026-06-30 00:39:46 +02:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: arcodange-org/erp#28