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_id est le champ canonique (l'id de transaction du feed Qonto/Wise) ; num reste un alias rétro-compatible. Il est stocké sur la ligne bancaire du paiement (llx_bank.num_chq) — la clé de rapprochement.
Enregistrer sanstransaction_id → avertissement stderr (le paiement passe quand même, mais ne se rapprochera pas automatiquement) — incite l'agent à toujours le fournir.
Promote : les ops payment des manifestes portent transaction_id ; promote-plan l'affiche (tx=… ou tx=MISSING).
Prouvé en live
client : {"id":15,"bank_transaction_id":38,"transaction_id":"QONTO-TXN-AAA"}
alias num : {"id":16,"bank_transaction_id":39,"transaction_id":"QONTO-TXN-BBB"}
sans tx : WARNING … won't auto-reconcile → {"id":17,…,"transaction_id":""}
fournisseur:{"id":17,"bank_transaction_id":41,"transaction_id":"WISE-TXN-CCC"}
promote : plan → tx=WISE-TX-2026-042 ; apply → paiement enregistré
Prochaine étape (PR suivante) : apprendre à bank-match à préférer un match exact num_chq ↔ id-transaction-feed — le lien est désormais posé à l'écriture.
Suite de [#26](https://gitea.arcodange.lab/arcodange-org/erp/pulls/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_id`** est le champ canonique (l'id de transaction du feed Qonto/Wise) ; **`num`** reste un alias rétro-compatible. Il est stocké sur la ligne bancaire du paiement (`llx_bank.num_chq`) — la clé de rapprochement.
- Enregistrer **sans** `transaction_id` → avertissement stderr (le paiement passe quand même, mais ne se rapprochera pas automatiquement) — incite l'agent à toujours le fournir.
- Sortie normalisée : `{id, bank_transaction_id, transaction_id}`.
- Promote : les ops `payment` des manifestes portent `transaction_id` ; `promote-plan` l'affiche (`tx=…` ou `tx=MISSING`).
### Prouvé en live
```
client : {"id":15,"bank_transaction_id":38,"transaction_id":"QONTO-TXN-AAA"}
alias num : {"id":16,"bank_transaction_id":39,"transaction_id":"QONTO-TXN-BBB"}
sans tx : WARNING … won't auto-reconcile → {"id":17,…,"transaction_id":""}
fournisseur:{"id":17,"bank_transaction_id":41,"transaction_id":"WISE-TXN-CCC"}
promote : plan → tx=WISE-TX-2026-042 ; apply → paiement enregistré
```
Prochaine étape (PR suivante) : apprendre à `bank-match` à préférer un match exact `num_chq` ↔ id-transaction-feed — le lien est désormais posé à l'écriture.
🤖 Generated with [Claude Code](https://claude.com/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) <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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) <[email protected]>