GL coding looks like reading an invoice. It is really classification with hundreds of classes, a long tail, and a right answer that depends on your chart of accounts and your vendor history more than on the invoice text.
| Pitfall | What it looks like | How to check, before spending anything |
|---|---|---|
| Chart changes | Old rows coded to accounts that no longer exist | Map or drop rows from before a restructure. |
| Leakage | Approver comments or posting batch predict the account | Keep only what exists when the invoice arrives: the invoice, the PO, the vendor record. |
| Vendor memorization | Great on known vendors, poor on new ones | Hold some vendors out entirely and score them separately. |
| Flat accuracy | Frequent accounts dominate the score | Read the per-account table; score the account group as well as the account. |
| Line versus invoice | One invoice, three correct accounts | Label and score per line, not per invoice. |
Tools that run this loop: DSPy and its GEPA optimizer, bpto (ours, open source), and Impromptune, the studio built on it.