feat(payment): first-class transaction_id when recording a règlement #27
Reference in New Issue
Block a user
Delete Branch "claude/dolibarr-payment-txn-integrate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Suite de #26 — l'id de transaction devient un champ first-class lors de l'enregistrement d'un paiement, pour que chaque règlement soit lié au mouvement bancaire réel dès l'écriture.
transaction_idest le champ canonique (l'id de transaction du feed Qonto/Wise) ;numreste un alias rétro-compatible. Il est stocké sur la ligne bancaire du paiement (llx_bank.num_chq) — la clé de rapprochement.transaction_id→ avertissement stderr (le paiement passe quand même, mais ne se rapprochera pas automatiquement) — incite l'agent à toujours le fournir.{id, bank_transaction_id, transaction_id}.paymentdes manifestes portenttransaction_id;promote-planl'affiche (tx=…outx=MISSING).Prouvé en live
Prochaine étape (PR suivante) : apprendre à
bank-matchà préférer un match exactnum_chq↔ id-transaction-feed — le lien est désormais posé à l'écriture.🤖 Generated with Claude Code
Make the originating bank transaction id a first-class input on payment-record.sh so every règlement is tied to the real bank movement at write time. - `transaction_id` is the canonical field (the Qonto/Wise feed tx id); `num` stays as a back-compat alias. It's stored on the payment's bank line (llx_bank.num_chq), the reconciliation key. - Recording WITHOUT a transaction_id prints a stderr warning (still posts, but won't auto-reconcile) — nudges the agent to always carry it. - Output normalises to {id, bank_transaction_id, transaction_id}. - Promote: manifests' payment ops carry transaction_id; promote-plan shows it (tx=… or tx=MISSING). Proven live: customer + supplier record with transaction_id; the `num` alias maps to the same field; the no-tx warning fires; promote plan/apply carry it through. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>