A UK-based financial services firm operating in a highly regulated part of the industry, responsible for administering and disbursing payments on behalf of a large portfolio of institutional clients across several UK offices.
The firm's payment operation had grown into a high-volume, high-risk manual process that was becoming harder to control at scale.
High transaction volume: The firm makes a high volume of supplier payments every month on behalf of the institutional funds it administers, spanning several offices and hundreds of underlying client accounts.
Manual, email-driven intake: Documents arrived by email and were checked individually, with no shared view of status across teams.
Repeated re-keying: The same payment details were entered by hand into several systems at different points in the process.
Rising operational risk: For a business whose credibility depends on handling other organisations' money correctly, the volume of manual work had become both an efficiency problem and a source of operational risk.
This was never a simple data-entry tool. The defining constraint throughout was the cost of a wrong payment, whether caused by an honest mistake or a fraudulent change of bank details.
Strict separation of duties: Three separate teams had to pass work between them, each able to see and do only what their role allowed.
Office- and size-based approval rules: Payment authorisation rules differed by office and by payment size, and had to be enforced by the system rather than left to individual judgement.
Fraud and error controls: The system had to detect duplicate payments, flag any change to a supplier's bank details, and enforce a second approver before funds left the account.
Regulatory auditability: The environment required complete, tamper-proof auditability, several different bank output formats, foreign-currency handling, and a live operation that had to keep running throughout.
GoodCore ran a structured series of discovery workshops with every team involved before committing to a design, rather than a single kickoff.
Workshops with every team involved surfaced the edge cases that undermine projects like this: payments split across multiple accounts, office-specific approval rules, currency handling, and the exact formats each bank and the accounting system required.
A specialised document-extraction service was used as the primary engine, with a language model kept as a fallback only for cases it could not handle. This held running costs down.
The AI extracted the data, but a team member reviewed and confirmed every field before the payment progressed. The AI assisted the work; it did not decide anything.
Every field carried a record of where its value came from, and every action was written to an audit trail that could not be edited or deleted.
A specialised extraction service handles most documents. A general model is reserved for exceptions. A person confirms every field.
A specialised extraction service handles the majority of documents; a general model is reserved for exceptions.
Several of the architecture decisions followed directly from the shape of the problem, not from default technology choices.
Scope expanded mid-discovery: Bringing several non-standard payment types into the first phase was not a small addition: it affected the interface, the data model, and every downstream output.
Timeline protected, not stretched: The plan was re-cut to absorb the extra work through parallel workstreams and additional resourcing, which held the client's go-live date.
The firm moved from an informal, email-driven process to a single platform where every payment follows the same controlled path.
One workflow, every office and type: A single controlled workflow now covers every office and every payment type.
Manual entry sharply reduced: AI-assisted extraction removed most of the manual data entry, with a person confirming every field before use.
Controls that cannot be skipped: Duplicate and bank-detail checks became enforced steps built into the workflow.
Full ownership retained by the client: The complete codebase and infrastructure were handed over, built to the client's standards and documented in full.
The same work, re-shaped around a single system of record.
Received and worked individually, with no shared view of status
The same data entered by hand at multiple points
Duplicate and bank-detail checks depended on individual diligence
Reconstructing what happened meant piecing together records
More payments meant proportionally more manual work
Every payment follows the same path, across all offices and types
Data extracted automatically and confirmed by a person, once
Duplicate and bank-mismatch checks that cannot be skipped
Every action recorded, immutable, attributable to a user
Higher volumes no longer require proportional headcount
The same operation, before and after the platform
For every value on a payment, the system records where it came from - and every change is written to an audit trail that cannot be edited.
Every field on a payment carries a record of how its value was determined
Systems like this, where payments are made on behalf of others in a regulated setting and the process cannot be paused while it is replaced, are a large part of the work GoodCore does.
Explore how we can work together.