The work is not hard, which is why it never gets fixed. A bill arrives, someone reads it, someone types it, someone checks it against a purchase order in another window, someone routes it for approval by email. Each step is a minute. The month is four hundred bills. Nothing about that is a systems failure until the quarter closes and a duplicate payment shows up in a bank reconciliation nobody had a reason to look at twice.
The bill posts itself into the ledger, with the period it belongs to rather than the period that happens to be open.
The PO, the receipt and the bill are compared before payment, not after, and where they disagree, nothing posts.
The payment run is checked against what has already been paid, before the money moves rather than at the next reconciliation.