What ProcurementOps is
Link to section “What ProcurementOps is”In 30 seconds
Link to section “In 30 seconds”ProcurementOps (procurement operations) is the discipline of running everything an organisation does to buy goods and services, from “I need this” to “the supplier has been paid”, as a dependable, measured operation. It owns the buying channels people use, the approvals and contracts that commit money, the supplier records that say who may be paid and where, the matching of invoices to orders and receipts, and the data that shows where the money went.
Two outcomes pull against each other: requesters want things quickly; finance and auditors want proof that every payment was authorised and went to a real supplier, for something received, at the agreed price, once. A good operation makes the compliant path the fastest, with hard controls only where money can be lost.
Written for beginners, procure-to-pay (P2P) and accounts payable staff, budget holders, engineers who integrate ERP and procurement tools, and leaders. Sources were last verified on 2026-10-23.
At a glance
Link to section “At a glance”| Question | Short answer |
|---|---|
| Goals | Spend that is authorised, competitive and recorded; fast purchasing that stays compliant; clean supplier data; no duplicate or fraudulent payments |
| Users | Requesters, budget holders, buyers, procurement operations analysts, accounts payable (AP), treasury, reviewers, auditors |
| Scope | Intake, approvals, sourcing (RFI, RFP, RFQ), purchase orders (POs), receipt, invoice matching, supplier onboarding and master data, renewals, spend analysis, procurement systems |
| Prerequisites | Basic accounting vocabulary (accrual, payable, cost centre); no prior procurement knowledge needed |
| Key outputs | Buying channels and policy, approval matrix, supplier master, POs, matched invoices, spend cube, KPIs, audit evidence |
| Term status | Established practice; “procurement operations” is a common team and job name; “ProcurementOps” in one word is informal (see term status) |
The problem it solves
Link to section “The problem it solves”Without an operating discipline, buying fails in recognisable ways:
- Money is committed before anyone checks. A manager signs a supplier’s order form; finance learns about a three-year commitment from the first invoice, and budget, legal and data-protection review happen after the fact, if at all.
- Invoices cannot be checked. With no purchase order and no receipt, AP can only ask the requester “is this OK?” by email, so overbilling, duplicates and invoices for things never received get paid.
- The supplier list is a liability. Three records for one supplier, a bank account changed after an email, suppliers never screened against sanctions lists, a vendor sharing a bank account with an employee.
- Nobody knows what the organisation buys, so it cannot negotiate as one customer, see concentration risk, or report on suppliers when the law or a customer asks.
- Or the opposite: controls so heavy that people avoid them. A six-week process for a $300 tool teaches everyone to expense purchases on a personal card, which removes every control at once.
The cost of the first four is not hypothetical. In the Association of Certified Fraud Examiners’ 2024 study of 1,921 occupational fraud cases, billing schemes (invoices for fictitious goods or services, inflated invoices, or invoices for personal purchases) appeared in 22% of cases with a median loss of $100,000, and a lack of internal controls was the main weakness in 32% of cases.[1] External fraud aimed at payables is larger still: the FBI’s Internet Crime Complaint Center (IC3) recorded 21,442 business email compromise (BEC) complaints with reported losses of about $2.77 billion in 2024, and defines BEC as a scam aimed at those working with suppliers or regularly making wire transfers.[2]
What ProcurementOps is not
Link to section “What ProcurementOps is not”- Not logistics or inventory. Moving, storing and planning physical goods belongs to SupplyChainOps. Editorial distinction: in this Atlas, ProcurementOps is the buying process (who may commit money, to whom, on what terms, and how the invoice is proven); SupplyChainOps is the physical flow of goods. Many organisations put both under one chief procurement officer, and the industry does not draw this line consistently.
- Not contract law. Drafting, negotiating clauses and contract lifecycle management (CLM) belong to LegalOps. Procurement decides commercial terms and routes contracts; legal owns the legal review.
- Not the supplier risk method. How to score, accept and aggregate third-party risk belongs to RiskOps; this page runs the onboarding and review steps that feed it.
- Not cloud cost optimisation. Commitment purchases and rightsizing are taught in FinOps; the enterprise contract and the supplier relationship are procurement’s.
- Not just accounts payable or “the people who raise POs”. That view loses the upstream controls (need, budget, competition) that prevent most problems.
- Not a software category. Buying an “intake-to-procure” or “procure-to-pay” suite does not create the operating model, the data or the segregation of duties.
Vocabulary, origins and neighbours
Link to section “Vocabulary, origins and neighbours”Term status and where the label comes from
Link to section “Term status and where the label comes from”Procurement is an established profession. The Chartered Institute of Procurement & Supply (CIPS) holds a Royal Charter, is a not-for-profit awarding body, and reports over 60,000 members in over 150 countries.[3] CIPS publishes a 13-step Procurement and Supply Cycle.[4] An ISO guidance standard covers sustainable procurement (ISO 20400, 2017),[5] and public buying is set by law in many jurisdictions (for example the UK’s Procurement Act 2023).[6]
“Procurement operations” is a common name for a team and job family. GitLab’s public handbook describes a Procurement Operations job family that “supports procurement and spend management activities”, with analysts who maintain the procurement process, run spend analytics and procurement metrics, and own supplier onboarding with accounts payable.[7] Northeastern University’s Procurement Operations team “develops and implements processes and procedures related to buying goods and services for the university”.[8]
“ProcurementOps” in one word is informal: a web search on 2026-10-23 for the exact string found only pages about procurement operations, and no body, standard or product of that name. Vendors promote neighbouring labels: Zip defines “intake-to-procure” as “a centralized, structured process that guides purchase and supplier requests” up to approval, with POs, invoicing and payment in the downstream procure-to-pay process.[9] That is a product category, not a definition of the discipline.
In the narrow usage, procurement operations is the transactional sub-team (requisitions, POs, supplier set-up, systems, reporting), separate from strategic sourcing, as in GitLab’s separate operations and category-manager roles.[7] This page uses the broad sense, the whole source-to-pay operating model, with most space on the controls and the data.
Glossary and mental model
Link to section “Glossary and mental model”| Term | Meaning |
|---|---|
| Source-to-pay (S2P) | The whole chain: need, sourcing, contract, order, receipt, invoice, payment |
| Procure-to-pay (P2P) | The transactional part of S2P: requisition, PO, receipt, invoice, payment |
| Requisition | An internal request to buy, approved before a PO exists |
| Purchase order (PO) | The buyer’s numbered commitment to buy stated quantities at stated prices and terms |
| Goods receipt / service entry | A record, by someone other than the buyer, that goods arrived or a service was done |
| Two-, three-, four-way match | Comparing the invoice with the PO (2), plus the receipt (3), plus inspection results (4), before payment |
| Tolerance and hold | The permitted difference (for example 2% and 0.50 per unit) before a mismatch blocks payment as a hold |
| GR/IR | Goods receipt / invoice receipt clearing account: SAP posts the receipt value there until the invoice clears it[10] |
| Supplier (vendor) master | The record of who may be paid: legal name, tax ID, address, bank account, terms, status |
| Segregation of duties (SoD) | Splitting authorise, record, custody and review so no one person controls a transaction end to end |
| RFx | Requests for information (RFI), proposals (RFP) or quotations (RFQ) |
| Category management | One strategy for a group of similar spend (for example laptops and peripherals) |
| Tail spend | The many small suppliers that together make up a small share of spend |
| Maverick spend | Buying outside the agreed channels or contracts (off-contract, no PO); the target of PO-compliance metrics |
| Evaluated receipt settlement (ERS) | Paying from the receipt and the contract price without a supplier invoice; it moves the whole control onto the receipt |
| Verification of Payee (VoP), Confirmation of Payee (CoP) | A bank service that checks the payee name against the account before a transfer (EU and UK names) |
| SOX, COSO | The US Sarbanes-Oxley Act’s internal-control rules; COSO’s Internal Control – Integrated Framework, widely used by auditors |
Mental model: a chain of evidence. Think of every payment as needing five pieces of evidence that were created by different people or systems: an approved need (requisition), a commitment (PO or contract), proof of delivery (receipt), a claim (invoice) that matches the first three, and a payee (supplier master record) that was verified independently. When any piece is missing, or two pieces were created by the same person, the chain is weaker exactly there. The rest of this page is about building that chain without making it slow.
How ProcurementOps relates to other Ops
Link to section “How ProcurementOps relates to other Ops”Diagram source (Mermaid)
flowchart LR
PF["`PortfolioOps, BizOps:
budgets, priorities`"] -->|"budget"| PO
FO["`FinOps:
cloud demand`"] -->|"forecast"| PO
PO["`ProcurementOps:
request-to-payment
control chain`"]
PO <-->|"contracts"| LO["`LegalOps:
contract terms`"]
PO -->|"supplier facts"| RO["`RiskOps:
risk method`"]
PO -->|"evidence"| CO["`ComplianceOps:
audits`"]
PO -->|"orders"| SC["`SupplyChainOps:
logistics`"]
PO -->|"anomalies"| FC["`FinCrimeOps:
fraud monitoring`"]
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class PO core
class PF,FO,LO,RO,CO,SC,FC neutral
Text equivalent: PortfolioOps and BizOps send budgets, and FinOps cloud demand forecasts, into ProcurementOps (the request-to-payment control chain). It exchanges contracts with LegalOps, and sends supplier facts to RiskOps, evidence to ComplianceOps, orders to SupplyChainOps and payment anomalies to FinCrimeOps.
| Neighbour | Shared scope | ProcurementOps owns | The neighbour owns |
|---|---|---|---|
| SupplyChainOps | Sourcing of direct materials, supplier performance | Buying process, PO, matching, supplier master | Demand planning, inventory, logistics, SCOR metrics |
| LegalOps | Contracts, NDAs, data-processing agreements | Commercial terms, routing, the renewal or re-tender decision | Legal review, clause libraries, the CLM record (dates, notice periods) |
| RiskOps | Third-party risk | Running due diligence at onboarding and renewal | Risk appetite, scoring method, acceptance |
| FinOps | Cloud and SaaS commitments | Enterprise agreements, supplier relationship | Usage data, commitment sizing, cost allocation |
| ComplianceOps | Audit evidence | Producing evidence that controls ran | Control framework mapping, audits |
| FinCrimeOps | Payment fraud | Preventive controls in P2P | Transaction monitoring and investigations in financial services |
| PeopleOps | Contractors and agencies | Contracting the supplier | Worker records, background checks |
| GovOps | Public procurement rules | The process inside a public body | Public-value constraints on services |
Procurement also buys for every other function, so it touches ITOps (software and hardware), IdentityOps (supplier and contractor accounts), and GreenOps (supplier emissions data). Several pages hand their buying to this one: vehicles and fleet leases (FleetOps), merchandise and store supplies (RetailOps), lab consumables and instruments (LabOps), and contracts with AI model and API providers (FinOps for AI). Those pages own what to buy and how to run it; this page owns how the purchase is approved, contracted and paid.
Principles and operating model
Link to section “Principles and operating model”Charter and principles
Link to section “Charter and principles”No body publishes a “ProcurementOps manifesto”; this charter is this Atlas’s proposal, distilled from the sources cited here.
Mission. Let the organisation buy what it needs quickly, from suppliers it can trust, on terms it has agreed, and pay each supplier correctly and once, with evidence that a sceptical auditor would accept.
Principles (proposed):
- Commit before you buy. Money is committed by an approved request and a PO or contract before work starts, never reconstructed from an invoice afterwards. Exceptions are listed, not improvised.
- No one person controls a transaction end to end. Authorising, recording, receiving and paying are split; where a team is too small to split them, a compensating review is designed and evidenced. This follows the US Government Accountability Office’s Green Book, which asks management to separate “authorizing transactions, processing and recording them, reviewing the transactions, and handling any related assets”.[11]
- The payee is verified independently of the request. Supplier identity and bank details are confirmed through a channel the requester or the email sender did not provide.
- Proportionate control. Control follows value and risk; small, repetitive buys use low-friction channels.
- One front door, visible queues. Every request has an owner, a service level and a visible status.
- Data is a product. Supplier master, categories and contract metadata are kept clean.
- Measure flow and leakage together, so neither speed nor control wins at the other’s expense.
Non-goals. Deciding what budget holders need; legal advice; physical logistics; winning negotiations at the cost of supplier relationships.
Fundamentals: the documents and the control points
Link to section “Fundamentals: the documents and the control points”The chain has eight records, each with the control that applies to it.
| Record | Created by | Control that applies | What it proves |
|---|---|---|---|
| Requisition / intake request | Requester | Budget-owner approval within delegated authority | The need exists and is funded |
| Sourcing record (quotes, RFx, award) | Buyer | Competition thresholds; conflict-of-interest declaration | The price and supplier were chosen fairly |
| Contract | Legal and procurement | Signature authority matrix | Terms are agreed and enforceable |
| Purchase order | Buyer or system | PO cannot exceed the approved requisition; numbered and unique | The commitment and its price |
| Receipt / service entry | Receiver (not the buyer) | Independent confirmation | Goods or services were delivered |
| Supplier master record | Supplier (self-service) plus vendor data team | Screening, tax and bank verification; changes approved by a second person | The payee is who they claim to be |
| Invoice | Supplier | Matching to PO and receipt within tolerances; duplicate check | The claim is due |
| Payment | Treasury / AP | Release by someone who cannot create suppliers or post invoices | Money left once, to the verified account |
The Green Book also recommends unique transaction identifiers, naming “unique invoice numbers and purchase order numbers”, so that duplicates can be detected.[11] It also notes that segregation of duties mitigates the risk of management override but “cannot absolutely prevent it because of the risk of collusion”.[11] Collusion between two or more people defeats any split of duties, which is why the chain also needs detective controls (analytics, reviews, tips), not only preventive ones.
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”Besides requesters, budget holders, AP, treasury and the legal, security and privacy reviewers, three procurement roles matter: buyers and category managers (sourcing, negotiation, supplier relationships), procurement operations analysts (intake, workflow, tooling, policy, KPIs) and a vendor data team (onboarding, bank-detail verification). Internal audit tests the controls independently.
RACI for the main activities (R responsible, A accountable, C consulted, I informed):
| Activity | Requester | Budget holder | Procurement | AP | Treasury | Legal / Security |
|---|---|---|---|---|---|---|
| Raise and justify request | R | A | C | – | – | – |
| Choose sourcing route and run RFx | C | C | A/R | – | – | C |
| Approve commercial terms | C | A | R | – | – | C |
| Contract review and signature | I | A | R | – | – | R |
| Onboard supplier and verify bank details | I | – | A/R | C | C | C |
| Issue PO | I | I | A/R | I | – | – |
| Confirm receipt | R | A | I | I | – | – |
| Match invoice and clear holds | C | C | C | A/R | – | – |
| Release payment | – | – | – | C | A/R | – |
| Spend reporting and KPIs | I | I | A/R | C | I | – |
Segregation-of-duties matrix. The pairs in the table should never be held by one person without a documented compensating control. Lab 3 below turns this table into a script.
| Duty A | Duty B | Why the pair is dangerous |
|---|---|---|
| Create or change supplier | Release payment | Can create a payee and pay it |
| Create PO | Confirm receipt | Can order and confirm receipt of goods that never arrived |
| Post invoice | Release payment | Can enter an invoice and pay it |
| Raise requisition | Approve the same requisition | Approves own spending |
| Change supplier bank details | Approve that change | No second check on the riskiest field |
Lifecycle: from need to renewal
Link to section “Lifecycle: from need to renewal”CIPS describes a 13-step Procurement and Supply Cycle: Specification, Analysis, Strategy, Market, Documentation, Criteria, Tender, Evaluation, Contract, Delivery, Performance, Management and Asset, with a “Gateway review: Stop, Think, Check” between steps.[4] Operationally, the same life is easier to run as five stages, each with an owner and an exit condition.
Diagram source (Mermaid)
flowchart TB
A["`1 Need and intake
request, budget check, routing`"] --> B["`2 Source and contract
RFx, negotiation, legal, security`"]
B --> C["`3 Onboard and order
supplier master, PO issued`"]
C --> D["`4 Receive, match, pay
receipt, 3-way match, payment`"]
D --> E["`5 Manage and renew
performance, renewal or exit`"]
E -->|"renewal or re-tender"| B
E -->|"new need"| A
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
class A,B,C,D,E core
Text equivalent: five stages in sequence. 1, need and intake (request, budget check, routing). 2, source and contract (RFx, negotiation, legal and security review). 3, onboard and order (supplier master record, PO issued). 4, receive, match and pay (receipt, three-way match, payment). 5, manage and renew (supplier performance, renewal or exit). From stage 5 a renewal or re-tender loops back to stage 2, and a new need loops back to stage 1.
| Stage | CIPS steps covered | Exit condition |
|---|---|---|
| 1 Need and intake | Specification | Approved request with category, value, data classification and owner |
| 2 Source and contract | Analysis, Strategy, Market, Documentation, Criteria, Tender, Evaluation, Contract | Award decision recorded; contract signed by someone with authority |
| 3 Onboard and order | (contract implementation) | Supplier active in master data; PO released |
| 4 Receive, match, pay | Delivery | Invoice matched or exception resolved; payment released |
| 5 Manage and renew | Performance, Management, Asset | Review held; renewal, re-tender or exit decided before the notice date |
A catalogue order skips stage 2 (sourcing was done once for the catalogue); a renewal skips onboarding but never the stage 5 review.
Operating model and governance
Link to section “Operating model and governance”Delegation of authority. A written approval matrix states who may approve spend, sign contracts and release payments, by amount and type; every approval workflow is configured from it. GitLab, for example, points requesters to an “Authorization Matrix” and allows only “a small number of team members” to sign agreements.[12]
Buying channels by spend type. Mature operations route each kind of purchase to the lightest channel that controls its risk:
| Channel | Use for | Main control | Typical friction |
|---|---|---|---|
| Catalogue / punch-out | Repeat items from contracted suppliers | Prices fixed in advance; approval by amount | Minutes |
| Purchasing card | Small, low-risk, one-off buys | Card limits, blocked merchant categories, monthly review | Minutes |
| Purchase order | Goods and defined services above the card limit | Approved requisition, PO, receipt, matching | Days |
| Contract with call-offs | Recurring services under a framework | Contract rates; call-off orders against it | Days |
| Competitive sourcing | High value, high risk or new categories | RFx thresholds, evaluation panel, award record | Weeks |
| No-PO list | Utilities, taxes, statutory fees, refunds | Named exceptions with their own approval | Varies |
GitLab’s tiers illustrate this (US dollars, handbook modified 2026-09-13): a procurement-led RFP with typically five or more bids above $250K, a business-led RFP with two to three bids from $100K, a two-bid quick-bid from $25K, no bid below, and a PO exception for one-time purchases under $5K.[12] Set yours from your own risk and volume data.
Cadence. Daily triage of intake and invoice exceptions; weekly review of ageing requests and holds; monthly KPIs with finance; quarterly category and renewal reviews with budget holders; an annual policy and threshold review.
Escalation. Make urgency criteria explicit. In GitLab’s rule, “Supplier wants it signed today” does not qualify; a specific, quantified business impact does.[12]
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture: process, systems and data
Link to section “Reference architecture: process, systems and data”For a non-technical discipline, the reference architecture is a process-and-systems map: which system is the record for which document, and where the controls run. Most organisations have four layers, whether they buy one suite or assemble several tools.
Diagram source (Mermaid)
flowchart TB IN["`Engage: intake front door`"] CAT["`Engage: catalogues, supplier portal`"] WF["`Workflow: approvals from authority matrix`"] SRC["`Workflow: sourcing, RFx`"] CLM["`Workflow: contract repository (LegalOps)`"] VM["`Record: supplier master`"] POS["`Record: requisitions, POs`"] REC["`Record: receipts`"] AP["`Record: invoices, matching, holds`"] PAY["`Money: payment run, bank`"] DW["`Evidence: spend data, KPIs`"] IN --> WF CAT --> POS WF --> SRC SRC --> CLM WF --> POS VM --> POS POS --> REC REC --> AP AP --> PAY AP --> DW POS --> DW classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class WF,POS,REC,AP core class VM,PAY risk class IN,CAT,SRC,CLM,DW neutral
Text equivalent: four layers, named at the start of each label. Engage: intake front door, and catalogues with a supplier portal. Workflow (decisions): approvals built from the authority matrix, sourcing and RFx, contract repository (with LegalOps). Record (the ERP or P2P suite): supplier master, requisitions and POs, receipts, invoices with matching and holds. Money and evidence: payment run with the bank, and spend data with KPIs. Intake feeds the approval workflow, which feeds sourcing (then contracts) and POs; catalogues create POs directly; the supplier master feeds POs; POs lead to receipts, receipts to matching, matching to payment; invoices and POs feed spend data. The supplier master and payment run are marked highest-risk.
Component responsibilities and trust boundaries.
- Intake captures facts once and routes them; the requisition or PO in the ERP stays authoritative.
- Approval workflow rules are controlled changes: whoever edits routing can bypass every approval.
- Supplier master is the trust boundary between the outside world and your money. Suppliers enter their own banking and tax data through a portal; GitLab’s handbook says its procurement team cannot enter suppliers’ banking and tax information on their behalf: it does not know that information, and “it would be a violation of SOX Compliance guidelines” (SOX: the internal-control rules of the US Sarbanes-Oxley Act).[12] Bank-field changes follow SOP-VM-03.
- Matching runs in the system of record, so holds actually block payment; payment is released by a separate role.
Alternatives and trade-offs.
| Option | Strengths | Limits | Fits |
|---|---|---|---|
| ERP purchasing module only | One record, matching built in, fewer integrations | Poor requester experience; intake lives in email | Organisations with simple, mostly direct spend |
| ERP plus intake/orchestration tool | Good front door; routes legal, security, privacy reviews in parallel | Two systems to keep consistent; licence cost | Knowledge-work companies with many SaaS and services purchases |
| Full source-to-pay suite | Catalogues, sourcing, contracts, invoicing and supplier portal in one product | Implementation effort; lock-in; still needs ERP integration for the ledger | Large organisations with high invoice volumes |
GitLab’s documented set-up is an example of the second and third rows combined: requests start in Zip, where sanctions, procurement, financial planning and analysis (FP&A), IT and legal reviews take place (negotiation, security, privacy and PeopleOps reviews, when required, run in parallel with legal review), and the requisition then moves to Coupa for final approvals and PO release.[12]
End-to-end workflow: happy path and exception paths
Link to section “End-to-end workflow: happy path and exception paths”The flow below follows one purchase of goods; each label starts with the actor, and every change of actor is a control point.
Diagram source (Mermaid)
flowchart TB
R1["`Requester:
submit request`"] --> R2{"`Budget holder: within
budget and authority?`"}
R2 -->|"no"| R1
R2 -->|"yes"| P1["`Procurement: choose
channel and source`"]
P1 --> P2["`Procurement: onboard
supplier if new`"]
P2 --> P3["`Procurement:
issue PO`"]
P3 --> G1["`Receiver:
record receipt`"]
G1 --> A1["`AP: capture
invoice`"]
A1 --> A2{"`AP: matches PO
and receipt?`"}
A2 -->|"yes"| A3["`Treasury:
release payment`"]
A2 -->|"no"| A4["`AP and owner:
hold and resolve`"]
A4 --> A2
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class R1,P1,P2,P3,G1,A1,A3 core
class R2,A2 decision
class A4 risk
Text equivalent: one chain, each step labelled with its actor. The requester submits a request; the budget holder checks whether it is within budget and authority; if not, it goes back to the requester. If yes, procurement chooses the channel and sources, onboards the supplier if new, and issues the PO. The receiver records the receipt. Accounts payable (AP) captures the invoice and checks whether it matches the PO and receipt; if yes, treasury releases payment; if not, AP and the hold’s owner resolve the hold, and the invoice is re-checked.
Happy path details. Specialist reviews run in parallel (intake playbook); the PO tells the supplier to quote its number on every invoice; for services the requester confirms the milestone as the receipt; payment is released on the due date; cycle time, holds and supplier performance feed the KPI review.
Exception paths that need a documented owner.
| Exception | Owner | Default action |
|---|---|---|
| Invoice without PO | AP, then requester | Return it, or route a counted retrospective approval (an “after-the-fact” PO) |
| Price above tolerance | Buyer | Accept with a PO change (documented reason) or dispute with the supplier |
| Quantity billed above received | Receiver, then AP | Confirm missing receipt or short-pay; never “receive” just to clear the hold |
| Duplicate suspected | AP | Hold both; confirm with supplier statement |
| Bank detail change request | Vendor data team | Out-of-band verification before any payment (workflow) |
| Urgent request | Procurement lead | Apply the written urgency criteria; record the bypass and review it monthly |
| Supplier fails due diligence | Procurement with RiskOps | Reject, or accept with recorded risk owner and conditions |
The quietest failure is the third row: receipts booked to unblock invoices turn three-way matching into two-way matching. Monitor receipts entered after the invoice and in bulk.
Practices and playbooks
Link to section “Practices and playbooks”Each playbook names its trigger, owner, steps, acceptance criteria and the usual variant. Together they cover the recurring work.
Playbook: intake and triage
Link to section “Playbook: intake and triage”Trigger: any new request. Owner: procurement operations. Goal: route every request correctly on first contact.
- Publish one front door (a form in the procurement tool or chat) and retire side doors such as personal email.
- Ask only the questions that change routing (Artefact 2 in the reference implementation) and derive the route automatically: value sets approvers and sourcing, data shared sets security and privacy review, a new supplier triggers onboarding, anticorruption answers trigger compliance review.
- Run reviews in parallel, not in series, and show each review’s status to the requester.
- Publish and measure service levels per review (GitLab’s range from two days for buyer review to four to fourteen days for security and privacy[12]).
Acceptance criteria: fewer than one in ten requests rerouted after submission; median time to first action within one working day; requesters can see status without asking.
Playbook: choosing the sourcing route and running an RFx
Link to section “Playbook: choosing the sourcing route and running an RFx”Trigger: new spend above the bid threshold, a change of supplier, or a periodic market test (GitLab requires a market review every three years for existing contracts[12]). Owner: buyer or category manager.
| Instrument | Use when | Output |
|---|---|---|
| RFI (information) | You do not yet know the market or the right specification | Long list, market facts, refined requirements |
| RFQ (quotation) | Requirement is fully specified; price is the main differentiator | Comparable prices; award to lowest compliant quote |
| RFP (proposal) | Solutions differ; quality, risk and price must be weighed | Scored proposals; award on weighted criteria |
Steps for an RFP: separate must-haves from scored criteria; fix criteria and weights before opening responses; sign confidentiality agreements before sharing sensitive needs; collect evaluators’ declarations of interest; score independently, then moderate; record the award rationale; notify unsuccessful bidders. Public bodies follow statutory procedures instead (see the regulatory map).
Pitfalls: writing the specification around a preferred supplier; changing weights after seeing prices; letting the incumbent see competitors’ prices; running an RFP for a purchase too small to justify the suppliers’ bid cost.
Playbook: supplier onboarding and bank-detail changes
Link to section “Playbook: supplier onboarding and bank-detail changes”Trigger: award to a supplier not yet in the master, or any change request to a supplier’s legal, tax or bank data. Owner: vendor data team (procurement operations), with AP and treasury consulted.
Onboarding steps:
- Search the master by tax ID, normalised legal name and bank account to avoid duplicates.
- Screen the legal entity and its owners against applicable sanctions lists by full legal name. The US Office of Foreign Assets Control (OFAC) lists screening software not updated for list changes, and missed alternative spellings, among failures.[13]
- Run the due diligence the category needs (security, privacy, financial viability, anticorruption). NIST CSF 2.0 asks that “Planning and due diligence are performed to reduce risks before entering into formal supplier or other third-party relationships” (GV.SC-06).[14] The scoring method belongs to RiskOps.
- The supplier enters legal, tax and bank data through a self-service portal; tax IDs and account formats are validated.
- A second person approves the record before it is activated.
In this Atlas’s judgement, the bank-detail change is the riskiest single transaction in procurement. Payment-diversion fraud usually arrives as a plausible email, sometimes from the supplier’s real but compromised mailbox. The FBI’s advice for BEC is to “use secondary channels and/or two-factor authentication to verify requests for changes in account information”.[15] In a survey of 465 US treasury practitioners released in April 2026, 74% said their organisation had been affected by BEC in 2025.[16] The figure shows the workflow; SOP-VM-03 in the reference implementation is the one-page procedure.
Keep the bank’s payee-name check switched on. The EU Instant Payments Regulation requires banks to offer Verification of Payee (VoP), a check of the payee’s name against the IBAN, before every SEPA credit transfer, instant or not, from 9 October 2025 in the euro area. The answer is match, close match or no match, and the payer can still pay after a warning.[17] Business payers may opt out for orders sent as a bundle, which is how many AP payment files go, and banks are to tell payers how ignoring a warning affects the bank’s liability and the payer’s refund rights.[17][18] So do not waive the check without a documented compensating control, keep the supplier’s legal name equal to the account holder’s name, and treat a close match or no match on a recently changed account as a stop. The UK equivalent is Confirmation of Payee (see the regulatory map).
Diagram source (Mermaid)
flowchart TB
A["`Change request
arrives`"] --> B{"`Submitted through
supplier portal?`"}
B -->|"no: email, phone, letter"| C["`Do not edit the record
ask supplier to use portal`"]
B -->|"yes"| D["`Hold payments
to this supplier`"]
C --> D
D --> E["`Call back on a number
already on file, not
one in the request`"]
E --> F{"`Supplier confirms
new account?`"}
F -->|"no"| G["`Reject, alert security
and AP, check mailbox`"]
F -->|"yes"| H["`Second person approves
change in the master`"]
H --> I["`Release held payments;
first payment monitored,
bank name check must match`"]
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class D,E,H,I core
class B,F decision
class C,G risk
Text equivalent: a change request that did not come through the supplier portal (email, phone, letter) is not entered; the supplier is asked to use the portal. Either way, payments to the supplier are held and the supplier is called back on a number already on file. If it does not confirm, the change is rejected, security and AP are alerted and the mailbox checked. If it confirms, a second person approves the change, held payments are released, and the first payment is monitored; the bank’s payee-name check must return a match.
Acceptance criteria: 100% of bank changes have a recorded call-back to a pre-existing number and a second approver; no payment is made to a changed account within the verification window; duplicate-supplier rate trends down.
Playbook: invoice matching and exceptions
Link to section “Playbook: invoice matching and exceptions”Trigger: invoice received. Owner: accounts payable.
Oracle’s Payables documentation describes two-, three- and four-way matching with percentage and amount tolerances for quantity and price, and named holds such as “QTY REC” when more is billed than received.[19] A university research foundation’s procedure states the consequence: “payment cannot be made until the hold is resolved or manually released”.[20]
Diagram source (Mermaid)
flowchart TB
S["Invoice line"] --> D1{"`Duplicate of an
earlier invoice?`"}
D1 -->|"yes"| H1["Hold: DUPLICATE"]
D1 -->|"no"| D2{"`Valid PO line
for this supplier?`"}
D2 -->|"no"| H2["Hold: NO PO"]
D2 -->|"yes"| D3{"`Price within
tolerance?`"}
D3 -->|"no"| H3["Hold: PRICE"]
D3 -->|"yes"| D4{"`Billed qty within
ordered and received?`"}
D4 -->|"no"| H4["Hold: QTY"]
D4 -->|"yes"| OK["Pass to payment run"]
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class S,OK core
class D1,D2,D3,D4 decision
class H1,H2,H3,H4 risk
Text equivalent: each invoice line is checked in order. If it duplicates an earlier invoice, it is held as DUPLICATE. Otherwise, if there is no valid PO line for this supplier, it is held as NO PO. Otherwise, if the price is outside tolerance, it is held as PRICE. Otherwise, if the billed quantity exceeds what was ordered or received, it is held as QTY. If all checks pass, the line goes to the payment run.
Choosing the match level.
| Spend type | Match | Why |
|---|---|---|
| Physical goods | Three-way | Receipt proves delivery |
| Goods with quality acceptance (medical, aerospace, regulated parts) | Four-way | Delivery is not acceptance |
| Services with milestones | Three-way with a service entry by the requester | Requester confirms the milestone |
| Subscriptions and fixed fees under contract | Two-way, with periodic usage review | Receipt adds little; review prevents paying for unused seats |
| Utilities, taxes | No-PO, with their own approval | No order exists |
Tolerances are policy, not a technical default: too tight and AP drowns in rounding holds, too loose and systematic overbilling passes. Use two-sided limits (percentage and absolute amount) so a small percentage on a large line cannot hide a large overcharge, and never allow quantity over-billing on goods.
Resolving holds. Price holds go to the buyer, quantity holds to the receiver, no-PO invoices to the requester for a counted retrospective approval. AP must not “fix” a hold by editing the PO: whoever approves an exception must not own the clogged queue.
Playbook: renewals, supplier reviews and offboarding
Link to section “Playbook: renewals, supplier reviews and offboarding”Trigger: a contract enters its notice window, or a supplier is no longer needed. Owner: category manager with the business owner.
- Keep a renewal calendar, procurement’s working view of the term, notice and auto-renewal dates held in LegalOps’ CLM record, and review it quarterly with budget holders (GitLab reviews a rolling 12-month list each quarter[12]); start at least 90 days before notice deadlines for anything material. Procurement owns the renewal or re-tender decision.
- Before renewing, check usage (seats, consumption), the last market test, and changes in risk (new data shared, sanctions hits, security incidents).
- Segment suppliers so effort matches importance (GitLab uses four tiers: Strategic, Niche, Commodity, Transactional[12]) and hold business reviews on success criteria, issues and utilisation.
- On exit: send notice as the contract requires, remove access and integrations, recover or delete data, deactivate the supplier after the last invoice, and keep the record for the retention period.
Spend analysis and category management
Link to section “Spend analysis and category management”Build a spend cube: every payment or invoice line classified by supplier (one parent per legal entity), category and business unit, over time.
- Classify with a taxonomy: an internal one, or the United Nations Standard Products and Services Code (UNSPSC), four levels (segment, family, class, commodity) of two digits each; according to Wikipedia, the UN Development Programme has maintained it since 1 January 2025.[21]
- Analyse concentration, fragmentation (many suppliers per category), the share of spend on PO or contract, and the tail.
- Act through category strategies. A widely taught tool is Peter Kraljic’s matrix from his 1983 Harvard Business Review article “Purchasing Must Become Supply Management”.[22] It places categories on two dimensions, profit impact and supply risk, giving four quadrants: non-critical, leverage, bottleneck and strategic items.[23]
| Quadrant | Typical strategy | Example (illustrative) |
|---|---|---|
| Non-critical (low impact, low risk) | Simplify: catalogue, card, consolidate suppliers | Office supplies |
| Leverage (high impact, low risk) | Compete: tender, volume consolidation, price benchmarking | Laptops, cloud capacity under contract |
| Bottleneck (low impact, high risk) | Secure supply: buffers, alternatives, longer contracts | A niche spare part with one maker |
| Strategic (high impact, high risk) | Partner: joint planning, executive relationship, exit plan | A core payroll or ERP platform |
Two recorded criticisms: it is designed for categories but often misapplied to suppliers, and it is a snapshot that ages as markets move.[23] Re-plot categories at least yearly.
Savings: define them before you report them. GitLab separates soft savings (cost avoidance, such as resisting a proposed price increase) from hard savings (a cost decrease from last year, valid only for renewals).[12] One combined “savings” number is the commonest way procurement overstates its value.
Frameworks, regulation and tools
Link to section “Frameworks, regulation and tools”Methods, standards and frameworks
Link to section “Methods, standards and frameworks”Separate what is mandatory for you (law, your auditors’ framework, contract terms) from what is guidance you may adopt.
| Framework | Type | What it gives a procurement operation |
|---|---|---|
| GAO Green Book, 2025 revision (GAO-25-107721)[24] | Mandatory for US federal entities; GAO says non-federal entities may adopt it; it adapts the principles of the Internal Control – Integrated Framework of the Committee of Sponsoring Organizations of the Treadway Commission (COSO)[11] | Plain-language control principles: segregation of duties, management override, IT general controls, preventive and detective control examples |
| CIPS Procurement and Supply Cycle[4] | Professional guidance | The 13-step sourcing life cycle with gateway reviews |
| Kraljic matrix[22] | Management model | Category segmentation by profit impact and supply risk |
| ISO 20400:2017 Sustainable procurement | Guidance standard | Integrating sustainability into procurement; not certifiable (“neither intended nor appropriate for certification purposes”, per its steering group)[5] |
| NIST CSF 2.0, GV.SC outcomes[14] | Voluntary framework | Supplier criticality, due diligence and contract requirements for cybersecurity |
| UNSPSC[21] | Classification standard | A shared category taxonomy for spend analysis and catalogues |
| GHG Protocol Scope 3, category 1[25] | Accounting standard | Emissions of purchased goods and services from supplier or spend data |
| Peppol[26] | Interoperability framework | Standard e-orders and e-invoices exchanged through accredited providers |
The Green Book was written for US federal agencies (the 2025 revision applies from fiscal year 2026), but it is one of the clearest free statements of internal-control principles, and GAO describes the update as continuing “harmonization” with COSO’s framework.[11] Cite it for principles; use your own auditors’ framework for the controls you are tested against.
Regulatory map (as of October 2026)
Link to section “Regulatory map (as of October 2026)”Procurement touches many laws. The table is orientation for the jurisdictions named, not legal advice; confirm with counsel.
| Topic | Jurisdiction | What applies | Operational consequence |
|---|---|---|---|
| E-invoicing | EU | The Council adopted the VAT in the Digital Age (ViDA) package on 11 March 2025; mandatory e-invoicing and near real-time reporting for intra-EU transactions apply from 1 July 2030[27] | Plan structured e-invoices (for example via Peppol); check earlier national mandates |
| Payment terms | EU | Late Payment Directive 2011/7/EU: public authorities pay within 30 days (60 in very exceptional cases); businesses within 60 days unless expressly agreed and not grossly unfair (Commission FAQ).[28] A 2023 proposal to replace it with a regulation (2023/0323(COD)) still awaited the Council’s first-reading position[29] | Payment-term policy and on-time payment KPI; invoice cycle time matters legally |
| Modern slavery | UK | Organisations doing business in the UK with turnover of £36 million or more publish an annual statement on modern slavery risks in their supply chains[30] | Supplier questionnaires, risk-based audits, evidence |
| Supply-chain due diligence | EU | Omnibus I amended the CSDDD; per a law-firm summary, in-scope companies (EU: over 5,000 employees and €1.5 billion turnover) comply from 26 July 2029[31] | Large companies map suppliers’ human-rights and environmental risks; others get questionnaires |
| Sanctions | US (and others) | OFAC regulations do not require a formal sanctions compliance programme, but OFAC strongly encourages organisations subject to US jurisdiction to adopt a risk-based one; its framework lists screening failures such as software not updated for list changes and missed alternative spellings[13] | Screen at onboarding and on list updates; handle alternative spellings |
| Payee verification | EU | Instant Payments Regulation (EU) 2024/886: banks must offer Verification of Payee before SEPA credit transfers, instant or not; euro area from 9 October 2025, other member states by 9 July 2027; business payers may opt out for bundled orders[17][18] | Keep the check on for payment files or record the compensating control; a close match or no match on a changed account stops payment |
| Payee verification | UK | Confirmation of Payee checks a payee’s account details against those held by the payee’s provider; over 320 organisations offer it. The direction requiring it was due to expire on 1 November 2026; the regulator consulted in July 2026 on removing the expiry (no decision found on 2026-10-23)[32] | As in the EU: a mismatch on a changed account stops payment |
| Public procurement | UK | The Procurement Act 2023 and its regulations came into force on 24 February 2025, replacing the Public Contracts Regulations 2015;[6] procurements begun under the old rules, and contracts awarded under them, continue under those rules[33]; notices go through an enhanced Find a Tender service[34] | Statutory procedures and transparency notices; see GovOps |
| Third-party risk in banking | US | Banking agencies proposed new third-party risk guidance on 15 September 2026 to rescind and replace the 2023 guidance; comments close 16 November 2026[35] | Banks: keep the current guidance until final; risk-tiered due diligence |
Tooling landscape
Link to section “Tooling landscape”Vendor-neutral first: these are the jobs tools do, then examples verified for this page.
| Tool category | Job | Examples (as of October 2026) | Selection criteria | Risks |
|---|---|---|---|---|
| Intake and orchestration | One front door; parallel reviews; status | Zip[9] | Form logic, ERP integration | A second source of truth if not integrated |
| Procure-to-pay suite | Catalogues, requisitions, POs, receipts, invoices, supplier portal | Coupa (a “cloud-based purchasing and payment platform” in GitLab’s handbook[12]); SAP Ariba; Oracle procurement | Matching controls, supplier adoption, ERP integration | Long implementations; lock-in |
| ERP purchasing and payables | Ledger, GR/IR, matching, payments | SAP, Oracle, Microsoft Dynamics; open-source Odoo (a “3-way matching” setting and a “Should Be Paid” status[36]) | Accounting fit, matching levels | Poor requester experience alone |
| Sourcing and RFx | Events, scoring, awards | Modules in the suites above; standalone tools | Scoring audit trail, supplier experience | Overkill for small teams |
| Supplier risk and screening | Sanctions, financial, security, ESG data | Screening services, questionnaires | List coverage and updates, false positives | Alert fatigue |
| E-invoicing network | Structured invoices | Peppol access points; suite networks | Your suppliers’ countries | Mandates differ by country |
| Spend analytics | Classification, cube, dashboards | Suite analytics; BI on a warehouse | Classification accuracy, supplier hierarchy | Polished dashboards on dirty data |
SAP Ariba and Oracle are named as examples only (their product pages could not be opened for this page). Re-check any capability against current documentation before you buy.
Automation and AI
Link to section “Automation and AI”Automation helps most where the work is high-volume and rule-based: invoice capture, matching, duplicate detection, routing, and supplier self-service. The Green Book describes automated approvals that “authorize transactions without human intervention” for lower-risk items, paired with rule maintenance and manual review of flagged issues.[11] That is a good template: automate the decision, keep a human owner for the rules and the exceptions.
Language models help (as of October 2026, with human review) to structure free-text requests, suggest category codes, summarise security questionnaires, extract fields from non-standard invoices and draft RFx documents. They are risky for deciding to pay, approving bank-detail changes or accepting supplier risk: a model that reads “our bank has changed” is exactly the target of payment-diversion fraud.
In the AFP survey released in April 2026, 17% of organisations said they use AI to combat payments fraud.[16] Test any AI feature on exceptions you already resolved (precision and recall), and log its suggestions as evidence, not decisions.
ProcurementOps in practice
Link to section “ProcurementOps in practice”Reference implementation: operating artefacts
Link to section “Reference implementation: operating artefacts”For an illustrative organisation of 1,200 employees, 2,500 active suppliers and 40,000 invoices a year, with one ERP and an intake tool. Adjust thresholds to your own volumes and risk.
Artefact 1: the authority matrix as configuration, kept in a reviewed file so changes are visible and approvable.
Example status: syntax-checked as YAML by the Atlas validator; not executed against any product (illustrative values).
# approval-matrix.yaml: who may approve spend, sign and pay (illustrative values, USD)
version: 2026-10
currency: USD
# mode: all = every listed person must approve; mode: any = one of them is enough
spend_approval: # total contract value, including renewals and options
- max: 5000
mode: all
approvers: [budget_holder]
- max: 50000
mode: all
approvers: [budget_holder, department_head]
- max: 250000
mode: all
approvers: [budget_holder, department_head, finance_director]
- max: null # no upper limit
mode: all
approvers: [budget_holder, department_head, cfo]
sourcing:
- max: 25000
route: single_quote
- max: 100000
route: two_quotes
- max: 250000
route: rfp_business_led
- max: null
route: rfp_procurement_led
signature_authority:
- max: 100000
mode: any
signers: [procurement_director]
- max: null
mode: any # either one signs
signers: [cfo, general_counsel]
mandatory_reviews:
personal_data_shared: [privacy, security]
system_access: [security, it]
new_supplier: [sanctions_screening, vendor_data]
government_interaction: [ethics_compliance]
segregation:
- [maintain_vendor, release_payment]
- [create_po, receive_goods]
- [post_invoice, release_payment]
- [create_requisition, approve_requisition]
Artefact 2: intake form fields and the routing they drive.
| Field | Values | Drives |
|---|---|---|
| What are you buying? | Category picker (taxonomy) | Category owner, catalogue suggestion |
| Total contract value | Amount and currency, incl. renewals | Approvers and sourcing route |
| Term and renewal | Start, end, auto-renewal, notice period | Renewal calendar |
| Supplier | Existing (search) or new (legal name, website) | Onboarding and sanctions screening |
| Data the supplier will receive | None, internal, confidential, personal | Security and privacy review |
| Access to our systems or premises | Yes or no | Security and IT review |
| Government interaction or recommendation | Yes or no | Ethics and compliance review |
| Needed by | Date, plus business impact if missed | Urgency rule |
| Quotes and documents | Upload | Buyer review |
Artefact 3: matching and tolerance policy.
Example status: syntax-checked as YAML; illustrative policy values.
# matching-policy.yaml
default_match: three_way
by_category:
subscriptions_under_contract: two_way # plus quarterly usage review
regulated_components: four_way # inspection acceptance required
utilities_taxes_statutory: no_po # named exceptions only
tolerances:
price:
over_percent: 2.0 # both limits must hold
over_amount: 0.50 # per unit, document currency
quantity:
over_percent: 0.0 # never pay for more than received
freight_and_charges:
unplanned_max: 100.00 # above this, buyer approval
duplicate_check:
keys: [supplier, normalised_invoice_number]
fuzzy_keys: [supplier, amount, invoice_date_within_days: 7]
hold_owners:
PRICE: buyer
QTY_REC: receiver
NO_PO: requester
DUPLICATE: accounts_payable
Artefact 4: standard operating procedure for supplier bank-detail changes (one page).
SOP-VM-03 Supplier bank-detail change Owner: Vendor data lead
Purpose Prevent payment diversion; every change verified out of band.
Scope Any change to bank account, beneficiary name or payment address.
Steps
1. Accept changes only through the supplier portal; reply to email or
phone requests with portal instructions. Do not edit the record.
2. Place a payment block on the supplier at once.
3. Call the supplier on a phone number already in the master record or
the contract, never one given in the request. Speak to a known contact.
4. Record date, time, number called, person confirming, account last 4.
5. A second vendor-data analyst approves; the requester cannot approve.
6. Remove the block. Flag the first payment to the new account for
treasury review before release. Keep the bank's payee-name check
(VoP or CoP) on: a close match or no match stops the payment.
7. If the supplier denies the request: reject, inform security and AP,
check recent payments, and treat it as a suspected BEC incident.
Evidence Call log, approvals and before/after values kept for 7 years
(or your retention rule).
Metric % of changes with call-back evidence (target 100%).
Artefact 5: monthly operations scorecard (the full KPI definitions are in Metrics and KPIs).
| KPI | Target | This month | Trend | Owner | Action if off target |
|---|---|---|---|---|---|
| Median request-to-PO cycle time (days) | ≤ 5 | 7.5 | Worse | Proc. ops | Find slowest review step |
| PO compliance (% of addressable spend on PO before invoice) | ≥ 90% | 86% | Better | Proc. ops | Target top 10 no-PO suppliers |
| First-pass match rate | ≥ 80% | 74% | Flat | AP | Analyse hold reasons |
| Bank changes with call-back evidence | 100% | 100% | Flat | Vendor data | — |
| Duplicate payments made (count, value), from the quarterly review | 0 paid; review run | 2 / 3,400; review run | — | AP | Recover; root-cause both |
| Requests breaching SLA | ≤ 10% | 18% | Worse | Proc. ops | Staff legal review queue |
Hands-on labs
Link to section “Hands-on labs”Four labs on synthetic data only (Python 3.8+ standard library and bash; no accounts, no cost). Each was run on 2026-10-23 as printed (Python 3.8.10, Ubuntu Linux); expected outputs are copied from those runs.
Lab 1 (beginner): build a three-way match
Link to section “Lab 1 (beginner): build a three-way match”Objective. Implement two- and three-way matching with price and quantity tolerances and a duplicate check, and see why each hold fires. Prerequisites. Python 3.8+, bash. Time. 30 minutes. Risk. None (synthetic data).
- Create the folder and three files: PO lines, receipts and invoices.
Example status: verified by execution on 2026-10-23 (bash, Linux).
mkdir -p ~/procurement-labs/lab1 && cd ~/procurement-labs/lab1
cat > po_lines.csv <<'CSV'
po,line,vendor,item,qty,unit_price,match
PO-1001,1,V-ACME,Laptop 14in,10,1200.00,3-way
PO-1001,2,V-ACME,Docking station,10,180.00,3-way
PO-1002,1,V-NORTH,Safety gloves (box),200,6.50,3-way
PO-1003,1,V-CLOUDX,SaaS licence (annual),50,240.00,2-way
PO-1004,1,V-BOLT,M8 bolts (box),40,12.00,3-way
CSV
cat > receipts.csv <<'CSV'
po,line,qty_received,received_on
PO-1001,1,10,2026-10-02
PO-1001,2,8,2026-10-02
PO-1002,1,200,2026-10-05
PO-1004,1,40,2026-10-07
CSV
cat > invoices.csv <<'CSV'
invoice,vendor,po,line,qty,unit_price
INV-881,V-ACME,PO-1001,1,10,1200.00
INV-882,V-ACME,PO-1001,2,10,180.00
INV-0457,V-NORTH,PO-1002,1,200,6.60
INV-0458,V-NORTH,PO-1002,1,200,6.50
CX-3301,V-CLOUDX,PO-1003,1,50,240.00
B-77,V-BOLT,PO-1004,1,40,12.95
INV881,V-ACME,PO-1001,1,10,1200.00
Z-1,V-ZED,,,1,4999.00
CSV
- Save the matcher as
match.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Two- and three-way invoice matching with tolerances (standard library only)."""
import csv
import re
from collections import defaultdict
PRICE_TOL_PCT = 2.0 # unit price may exceed the PO price by at most 2 %
PRICE_TOL_ABS = 0.50 # ... and by at most 0.50 per unit (both must hold)
QTY_TOL_PCT = 0.0 # no over-billing of quantity
def load(name):
with open(name, newline="") as f:
return list(csv.DictReader(f))
po = {(r["po"], r["line"]): r for r in load("po_lines.csv")}
received = defaultdict(float)
for r in load("receipts.csv"):
received[(r["po"], r["line"])] += float(r["qty_received"])
billed = defaultdict(float) # quantity already passed for payment, per PO line
seen = set() # (vendor, normalised invoice number)
def norm(number):
"""INV-0881, inv 881 and INV881 are the same document."""
digits = re.sub(r"[^0-9A-Z]", "", number.upper())
return re.sub(r"^([A-Z]*)0+", r"\1", digits)
for inv in load("invoices.csv"):
key = (inv["po"], inv["line"])
qty, price = float(inv["qty"]), float(inv["unit_price"])
holds = []
dup_key = (inv["vendor"], norm(inv["invoice"]))
if dup_key in seen:
holds.append("DUPLICATE")
seen.add(dup_key)
line = po.get(key)
if line is None:
holds.append("NO_PO")
else:
if line["vendor"] != inv["vendor"]:
holds.append("VENDOR_MISMATCH")
po_price = float(line["unit_price"])
over = price - po_price
if over > 0 and (over > PRICE_TOL_ABS or 100 * over / po_price > PRICE_TOL_PCT):
holds.append("PRICE")
limit = float(line["qty"]) * (1 + QTY_TOL_PCT / 100)
if billed[key] + qty > limit:
holds.append("QTY_ORD")
if line["match"] == "3-way" and billed[key] + qty > received[key]:
holds.append("QTY_REC")
if not holds:
billed[key] += qty
status = "PASS" if not holds else "HOLD " + ",".join(holds)
print(f"{inv['invoice']:<9} {inv['vendor']:<9} {inv['po'] or '-':<8} "
f"{qty * price:>10.2f} {status}")
- Run it:
python3 match.py.
Expected output (copied from the 2026-10-23 run):
INV-881 V-ACME PO-1001 12000.00 PASS
INV-882 V-ACME PO-1001 1800.00 HOLD QTY_REC
INV-0457 V-NORTH PO-1002 1320.00 PASS
INV-0458 V-NORTH PO-1002 1300.00 HOLD QTY_ORD,QTY_REC
CX-3301 V-CLOUDX PO-1003 12000.00 PASS
B-77 V-BOLT PO-1004 518.00 HOLD PRICE
INV881 V-ACME PO-1001 12000.00 HOLD DUPLICATE,QTY_ORD,QTY_REC
Z-1 V-ZED - 4999.00 HOLD NO_PO
Validation. INV-882 bills 10 docking stations but 8 were received. INV-0457 is 0.10 (1.5%) over the PO price, inside both tolerances. INV-0458 re-bills the gloves under a different invoice number: the duplicate check misses it, quantity matching catches it. CX-3301 is two-way matched. B-77 is 0.95 (7.9%) over price. INV881 is INV-881 retyped. Z-1 has no PO.
Troubleshooting. KeyError: 'po': a mistyped CSV header. ValueError: could not convert string to float: a blank quantity
or price. Every line on QTY_REC: receipts use different PO or line identifiers.
Teardown. rm -r ~/procurement-labs/lab1.
Lab 2 (beginner): a spend cube and the tail
Link to section “Lab 2 (beginner): a spend cube and the tail”Objective. Classify payments into categories, compute the share of spend on PO, and find the suppliers that make up the head and tail of spend. Prerequisites. Python 3.8+. Time. 20 minutes. Risk. None.
- Create the payment extract.
Example status: verified by execution on 2026-10-23 (bash, Linux).
mkdir -p ~/procurement-labs/lab2 && cd ~/procurement-labs/lab2
cat > spend.csv <<'CSV'
paid_on,supplier,description,amount,po
2026-07-03,CloudCo Inc,Cloud hosting July,48000,PO-2001
2026-07-09,Northwind Office,Paper and toner,1200,
2026-07-15,Acme Laptops Ltd,Laptops x20,26000,PO-2002
2026-07-21,Brightlearn,Training workshop,4500,
2026-07-28,Fieldwise Consulting,Security assessment,22000,PO-2003
2026-08-02,CloudCo Inc,Cloud hosting August,51000,PO-2001
2026-08-06,Northwind Office,Chairs x6,2100,
2026-08-12,Acme Laptops Ltd,Docking stations,3600,PO-2002
2026-08-19,Pixel Print,Event banners,900,
2026-08-23,Fieldwise Consulting,Pen test retest,6000,PO-2003
2026-08-30,QuickCater,Team lunch,650,
2026-09-04,CloudCo Inc,Cloud hosting September,53000,PO-2001
2026-09-10,Northwind Office,Paper,800,
2026-09-14,Brightlearn,E-learning seats,3000,
2026-09-18,Saasly,Survey tool annual,7800,
2026-09-22,Dataport,Data enrichment,9500,
2026-09-26,QuickCater,Offsite catering,2400,
2026-09-29,Pixel Print,Brochures,1300,
CSV
- Save the analysis as
cube.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""A small spend cube: classify, aggregate, find tail spend and off-PO spend."""
import csv
from collections import defaultdict
RULES = [ # first matching keyword wins; order matters
("hosting", "IT / Cloud"), ("laptop", "IT / Hardware"),
("docking", "IT / Hardware"), ("tool", "IT / Software"),
("data", "IT / Software"), ("security", "Professional services"),
("pen test", "Professional services"), ("training", "People / Learning"),
("e-learning", "People / Learning"), ("paper", "Facilities / Office"),
("chairs", "Facilities / Office"), ("banner", "Marketing / Print"),
("brochure", "Marketing / Print"), ("lunch", "Travel & events"),
("catering", "Travel & events"),
]
def classify(description):
d = description.lower()
for keyword, category in RULES:
if keyword in d:
return category
return "UNCLASSIFIED"
with open("spend.csv", newline="") as f:
rows = list(csv.DictReader(f))
total = sum(float(r["amount"]) for r in rows)
by_cat, by_sup = defaultdict(float), defaultdict(float)
sups_in_cat = defaultdict(set)
on_po = 0.0
for r in rows:
amount, cat = float(r["amount"]), classify(r["description"])
by_cat[cat] += amount
by_sup[r["supplier"]] += amount
sups_in_cat[cat].add(r["supplier"])
on_po += amount if r["po"] else 0.0
print(f"Total spend {total:,.0f} | on PO {100 * on_po / total:.1f}% | "
f"suppliers {len(by_sup)}")
print("\nCategory Spend Share Suppliers")
for cat, amount in sorted(by_cat.items(), key=lambda x: -x[1]):
share = 100 * amount / total
print(f"{cat:<22} {amount:>8,.0f} {share:>6.1f}% {len(sups_in_cat[cat])}")
print("\nPareto: suppliers that make up the first 80% of spend")
running, head = 0.0, []
for sup, amount in sorted(by_sup.items(), key=lambda x: -x[1]):
if running < 0.8 * total:
head.append(sup)
running += amount
tail = [s for s in by_sup if s not in head]
tail_spend = sum(by_sup[s] for s in tail)
print(f"head {len(head)} suppliers: {', '.join(head)}")
print(f"tail {len(tail)} suppliers = {100 * tail_spend / total:.1f}% of spend")
- Run
python3 cube.py.
Expected output (copied from the 2026-10-23 run):
Total spend 243,750 | on PO 86.0% | suppliers 9
Category Spend Share Suppliers
IT / Cloud 152,000 62.4% 1
IT / Hardware 29,600 12.1% 1
Professional services 28,000 11.5% 1
IT / Software 17,300 7.1% 2
People / Learning 7,500 3.1% 1
Facilities / Office 4,100 1.7% 1
Travel & events 3,050 1.3% 1
Marketing / Print 2,200 0.9% 1
Pareto: suppliers that make up the first 80% of spend
head 3 suppliers: CloudCo Inc, Acme Laptops Ltd, Fieldwise Consulting
tail 6 suppliers = 14.0% of spend
Validation. Check by hand that 152,000 / 243,750 = 62.4%. The loop adds suppliers until 80% is reached, so the head ends at 86%. Here the off-PO spend (14%) happens to equal the tail; in real data they differ, and both lists are worth reviewing.
Questions to answer. Which category should be a catalogue? Which supplier is a concentration risk? Is “Data enrichment” software? Keyword rules drift, so classification needs an owner.
Troubleshooting. UNCLASSIFIED means no keyword matched: add a rule. Wrong totals usually mean thousands separators.
Teardown. rm -r ~/procurement-labs/lab2.
Lab 3 (intermediate): find segregation-of-duties conflicts
Link to section “Lab 3 (intermediate): find segregation-of-duties conflicts”Objective. Detect conflicting permissions (a preventive gap) and transactions where one person did two incompatible steps (a detective finding). Prerequisites. Python 3.8+. Time. 25 minutes. Risk. None.
- Create a role export and an event log.
Example status: verified by execution on 2026-10-23 (bash, Linux).
mkdir -p ~/procurement-labs/lab3 && cd ~/procurement-labs/lab3
cat > roles.csv <<'CSV'
user,permission
asha,create_requisition
asha,approve_requisition
ben,create_po
ben,receive_goods
chen,maintain_vendor
chen,release_payment
dana,maintain_vendor
eli,post_invoice
eli,release_payment
fay,create_po
CSV
cat > events.csv <<'CSV'
doc,step,user
PO-3001,requested,asha
PO-3001,approved,asha
PO-3002,requested,gus
PO-3002,approved,asha
PO-3002,po_created,ben
PO-3002,received,ben
PO-3003,requested,gus
PO-3003,approved,hal
PO-3003,po_created,fay
PO-3003,received,gus
CSV
- Save
sod.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Find segregation-of-duties conflicts in role assignments and in actual transactions."""
import csv
from collections import defaultdict
# Pairs one person should not hold together (adapt to your own risk assessment).
CONFLICTS = {
("maintain_vendor", "release_payment"): "can create a payee and pay it",
("create_po", "receive_goods"): "can order and confirm receipt of the same goods",
("post_invoice", "release_payment"): "can enter an invoice and pay it",
("create_requisition", "approve_requisition"): "may approve own requests",
}
# Steps of one document that must be done by different people.
STEP_RULES = [("requested", "approved"), ("po_created", "received")]
perms = defaultdict(set)
with open("roles.csv", newline="") as f:
for r in csv.DictReader(f):
perms[r["user"]].add(r["permission"])
print("Role conflicts (preventive control gaps):")
for user in sorted(perms):
for (a, b), why in CONFLICTS.items():
if a in perms[user] and b in perms[user]:
print(f" {user:<5} {a} + {b}: {why}")
steps = defaultdict(dict)
with open("events.csv", newline="") as f:
for r in csv.DictReader(f):
steps[r["doc"]][r["step"]] = r["user"]
print("Transaction conflicts (detective review):")
for doc in sorted(steps):
for a, b in STEP_RULES:
who = steps[doc]
if a in who and b in who and who[a] == who[b]:
print(f" {doc}: '{a}' and '{b}' both by {who[a]}")
- Run
python3 sod.py.
Expected output (copied from the 2026-10-23 run):
Role conflicts (preventive control gaps):
asha create_requisition + approve_requisition: may approve own requests
ben create_po + receive_goods: can order and confirm receipt of the same goods
chen maintain_vendor + release_payment: can create a payee and pay it
eli post_invoice + release_payment: can enter an invoice and pay it
Transaction conflicts (detective review):
PO-3001: 'requested' and 'approved' both by asha
PO-3002: 'po_created' and 'received' both by ben
Validation. Four users hold conflicting pairs; two conflicts were actually used. In PO-3003 gus requested and received, which is normal for services and not a conflict under these rules: the rule list is a risk decision.
Troubleshooting. No output under a heading means no conflicts. In real ERPs, map conflicts to transaction codes or API scopes, not role names.
Extend it. Add a “mitigated” list with the compensating control and reviewer for accepted conflicts (common in teams too small to split duties, as the Green Book allows[11]).
Teardown. rm -r ~/procurement-labs/lab3.
Lab 4 (advanced): vendor master red flags
Link to section “Lab 4 (advanced): vendor master red flags”Objective. Find near-duplicate suppliers, a supplier sharing a bank account with an employee, and recent bank changes not made through the portal, with the amount paid since. Prerequisites. Python 3.8+. Time. 30 minutes. Risk. None; the bank account values are fake test strings, not valid IBANs.
- Create the extracts.
Example status: verified by execution on 2026-10-23 (bash, Linux).
mkdir -p ~/procurement-labs/lab4 && cd ~/procurement-labs/lab4
cat > vendors.csv <<'CSV'
vendor_id,name,tax_id,iban,bank_changed_on,changed_via
V-100,Acme Laptops Ltd,GB111,GB00TEST0001,2024-02-01,portal
V-101,ACME Laptops Limited,GB111,GB00TEST0009,2026-10-01,email
V-102,Northwind Office,GB222,GB00TEST0002,2023-06-12,portal
V-103,Fieldwise Consulting,GB333,GB00TEST0003,2026-09-30,email
V-104,Bright Learn Ltd,GB444,GB00TEST0042,2025-01-15,portal
CSV
cat > employees.csv <<'CSV'
employee_id,iban
E-7,GB00TEST0042
E-8,GB00TEST0777
CSV
cat > payments.csv <<'CSV'
paid_on,vendor_id,amount
2026-10-03,V-101,18400
2026-10-04,V-103,22000
2026-10-05,V-102,800
CSV
- Save
vendor_flags.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Vendor master red flags: duplicates, shared bank accounts, risky bank changes."""
import csv
import re
from collections import defaultdict
from datetime import date
TODAY = date(2026, 10, 6)
RECENT_DAYS = 30
STOP = {"ltd", "limited", "inc", "llc", "gmbh", "plc", "the", "co"}
def load(name):
with open(name, newline="") as f:
return list(csv.DictReader(f))
def key(name):
words = re.sub(r"[^a-z0-9 ]", " ", name.lower()).split()
return " ".join(w for w in words if w not in STOP)
vendors = load("vendors.csv")
staff_ibans = {e["iban"]: e["employee_id"] for e in load("employees.csv")}
payments = load("payments.csv")
groups = defaultdict(list)
for v in vendors:
groups[("name", key(v["name"]))].append(v["vendor_id"])
groups[("tax_id", v["tax_id"])].append(v["vendor_id"])
groups[("iban", v["iban"])].append(v["vendor_id"])
for (kind, value), ids in sorted(groups.items()):
if len(ids) > 1:
print(f"DUPLICATE {kind}={value}: {', '.join(ids)}")
for v in vendors:
if v["iban"] in staff_ibans:
print(f"EMPLOYEE BANK {v['vendor_id']} shares an account with "
f"{staff_ibans[v['iban']]}")
changed = date.fromisoformat(v["bank_changed_on"])
age = (TODAY - changed).days
if age <= RECENT_DAYS and v["changed_via"] != "portal":
since = sum(float(p["amount"]) for p in payments
if p["vendor_id"] == v["vendor_id"]
and date.fromisoformat(p["paid_on"]) >= changed)
print(f"RISKY CHANGE {v['vendor_id']} bank changed {age} days ago via "
f"{v['changed_via']}; paid since: {since:,.0f}")
- Run
python3 vendor_flags.py.
Expected output (copied from the 2026-10-23 run):
DUPLICATE name=acme laptops: V-100, V-101
DUPLICATE tax_id=GB111: V-100, V-101
RISKY CHANGE V-101 bank changed 5 days ago via email; paid since: 18,400
RISKY CHANGE V-103 bank changed 6 days ago via email; paid since: 22,000
EMPLOYEE BANK V-104 shares an account with E-7
Validation. V-101 is the classic pattern: a second record for a real supplier, with a new bank account from an email, paid within days. V-103’s bank was changed by email. V-104 may be a conflict of interest, a shell company or a declared family business; the flag starts an inquiry, not an accusation.
Troubleshooting. Matching employee bank data requires a lawful basis and a privacy review in many jurisdictions; run it inside the finance or audit function with access controls, never as an ad hoc export. Name normalisation is crude: extend the stop-word list for your countries’ legal forms.
Teardown. rm -r ~/procurement-labs (removes all four labs).
Use cases and scenarios
Link to section “Use cases and scenarios”The first case is a sourced description of documented practice; the others are clearly labelled illustrative scenarios.
1. Sourced: a remote-first software company buying mostly SaaS and services (GitLab). Problem: many requesters and SaaS tools, each purchase needing security, privacy, legal and finance input. Method (GitLab’s public handbook, modified 2026-09-13): one intake system (Zip) whose first page asks anticorruption gating questions; specialist reviews in parallel with legal review, each with a published target time; suppliers register their own bank and tax data in Coupa; the PO is released only after signature; quarterly renewal reviews and a three-year market test.[12] Trade-offs: requests take “5 days to 3+ weeks” by GitLab’s own estimate, trading speed for assurance; no outcome metrics are published, so effectiveness cannot be judged from outside. Success criteria to adopt: SLA attainment per review, no work before contract, renewals decided before notice dates.
Measurement, risk and cost
Link to section “Measurement, risk and cost”Metrics and KPIs
Link to section “Metrics and KPIs”Measure flow (is buying fast?), control (is money protected?), coverage (how much spend is managed?) and data (can we trust the records?). Review them together; each family can be gamed if it is reviewed alone.
| KPI | Definition and formula | Data source | Pitfall | Cadence |
|---|---|---|---|---|
| Request-to-PO cycle time | Median and 90th percentile of (PO release − request submission), by route | Intake and ERP timestamps | Averages hide the tail; show paused clocks | Weekly |
| PO compliance | Spend on invoices whose PO was created before the invoice date ÷ addressable spend (excluding the no-PO list); the rest is maverick spend | ERP invoices and POs | Counting after-the-fact POs as compliant | Monthly |
| After-the-fact PO rate | POs created on or after the invoice date ÷ all POs | ERP | Teams create POs just to clear holds | Monthly |
| First-pass match rate | Invoice lines matched with no hold on first attempt ÷ PO-backed invoice lines | AP system | Loose tolerances inflate it | Weekly |
| Touchless invoice rate | Invoices posted and approved with no human action ÷ all invoices | AP system | Touchless is not the same as correct; sample them | Monthly |
| On-time payment | Invoices paid by the due date ÷ invoices paid | AP | Paying early to hit the metric costs cash | Monthly |
| Duplicate payments | Count and value of duplicates paid, found by a post-payment review, and value recovered | Recovery reviews, Lab 1 style checks | Zero found may mean nobody looked: also report that the review ran | Quarterly |
| GR/IR ageing | Value and count of GR/IR items older than 60 or 90 days, split into receipts without invoice and invoices without receipt | ERP GR/IR clearing account | Old items written off instead of investigated | Monthly |
| Spend under management | Spend through contracts, catalogues or competitive awards ÷ addressable spend | Spend cube | Definitions vary; publish yours | Quarterly |
| Supplier master health | Duplicate records, records missing tax ID, inactive > 18 months, as % of active records | Vendor master | Deactivation backlog | Monthly |
| Bank changes verified | Changes with call-back evidence and second approver ÷ all bank changes | Change log | Must be 100%; anything less is an incident | Monthly |
| Open SoD conflicts | Users with unmitigated conflicting permissions | Access review (Lab 3 style) | Mitigations that nobody performs | Quarterly |
| Savings | Hard savings and cost avoidance, reported separately | Award records | Mixing them; claiming list-price discounts | Quarterly |
Spend under management has a defined, tiered meaning in some settings, for example US federal category management, where OMB memorandum M-19-13 (2019) sets agencies goals for it and points to GSA’s tracking dashboard.[37] Elsewhere, write your formula down before you report it.
Worked calculation (illustrative month). An organisation records this month:
- Addressable spend 8,400,000; of that, 6,900,000 on invoices with a PO created before the invoice date, and 600,000 on after-the-fact POs; the rest has no PO.
- 5,200 PO-backed invoice lines, of which 3,900 passed matching first time.
- 6,000 invoices in total, of which 2,700 were posted and approved with no human touch.
- Request-to-PO times for 400 requests: median 4.0 days, 90th percentile 19.0 days.
- 38 bank-detail changes, 36 with call-back evidence.
Then:
- PO compliance = 6,900,000 ÷ 8,400,000 = 82.1% (the after-the-fact 600,000 is not compliant; counting it would show 89.3%).
- First-pass match rate = 3,900 ÷ 5,200 = 75.0%.
- Touchless rate = 2,700 ÷ 6,000 = 45.0%.
- Cycle time: the 4-day median looks healthy; the 19-day 90th percentile is where the complaints come from.
- Bank changes verified = 36 ÷ 38 = 94.7%: two incidents to investigate today, not a trend to improve next quarter.
Setting targets. Baseline for a quarter first. Improve flow by removing waiting time (parallel reviews, catalogues), not by loosening controls; control metrics such as bank-change verification are 100% by definition. The classic vanity metric is “savings” against a supplier’s opening quote.
Fraud, security and compliance
Link to section “Fraud, security and compliance”Where fraud happens in buying. In the ACFE’s 2024 study, 109 cases (7%) were committed by purchasing staff, median loss $143,000; corruption appeared in 79% of them and billing schemes in 33% (schemes overlap). Frauds by three or more perpetrators had a median loss of $329,000 against $75,000 for one, and the median fraud lasted 12 months.[1] These are cases investigated by certified fraud examiners, not a random sample.
| Risk | Signal | Preventive control | Detective control | Owner |
|---|---|---|---|---|
| Fictitious supplier (shell company) | No web presence, PO box address, bank shared with an employee | Tax-ID validation; second approver | Lab 4 checks (with privacy approval) | Vendor data |
| Inflated or duplicate invoices | Price creep, same amount repeated, invoice numbers retyped | Three-way match with tight tolerances; duplicate check | Post-payment recovery review | AP |
| Kickbacks and conflicts of interest | One buyer always awards one supplier; specs written around a product | Evaluation panels; declarations of interest; rotation | Award-pattern analytics; tips | Procurement lead |
| Payment diversion (BEC) | Bank change by email; urgency; account in a new country | Portal-only changes; call-back; payee-name check | First-payment review | Vendor data, treasury |
| Purchase splitting | Several invoices just below an approval or bid threshold | Thresholds on total contract value, not per invoice | Split-purchase analytics | Proc. ops |
| Management override | Senior person instructs an urgent exception | Written urgency rule; exceptions logged | Monthly review of all bypasses by finance | CFO, audit |
| Sanctions breach | Supplier or owner on a list; alternative spellings | Screening at onboarding | Re-screening on list updates[13] | Compliance |
Tips are the main way fraud is found in the ACFE data (43% of cases), and external sources such as customers, vendors and competitors gave about one-third of tips,[1] so tell suppliers in your terms how to report concerns, and protect the channel.
Security and privacy. The procurement system holds bank details and sole traders’ personal data: apply least privilege, log every master-data change, and review access and SoD on actual permissions quarterly (GAO: no one individual should control “all critical stages of a process”[11]). Put supplier security and privacy review before signature; NIST CSF 2.0 asks that requirements be “integrated into contracts and other types of agreements” (GV.SC-05).[14]
Compliance and evidence. Auditors of financial-reporting controls typically test approvals against the authority matrix, matching holds and supplier-change approvals. Keep that evidence in the system, not in inboxes, for the retention period your tax and company law sets.
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”Process cost. Mostly people time. Calculate your own cost per PO and per invoice (team cost ÷ volume) and track it with quality, because cost per invoice falls fastest when nobody checks anything. Published benchmarks are mostly paywalled and definition-dependent, so none is quoted here.
Capacity planning. Model the queues: requests per week by route, review time per specialist, invoices per AP analyst per day including exception handling. The bottleneck is usually a specialist review (legal or security) rather than procurement itself; GitLab’s published targets show legal review alone ranging from three to five days for renewals with existing vendors to one to three weeks or more for new ones.[12] Staff the bottleneck, or cut its load with standard terms.
Working capital. Payment terms are a cash lever, within legal limits (in the EU, 60 days business-to-business unless expressly agreed and not grossly unfair; see the regulatory map).[28] Two more levers need a fast, clean P2P process. An early-payment discount such as 2/10 net 30 (2% off if paid in 10 days, else due in 30) is worth taking when your cost of cash is below its annualised value: forgoing 2% to keep cash 20 more days costs about 2/98 × 365/20 ≈ 37% a year (illustrative arithmetic), and only invoices matched inside the window can earn it. Supply-chain finance (reverse factoring) lets a bank pay suppliers early against invoices the buyer has approved, while the buyer pays the bank on the original due date. Accounting standards now ask buyers to disclose it: under US GAAP, ASU 2022-04 requires the programme’s key terms, confirmed amounts outstanding at period end and a yearly rollforward,[38] and the IASB amended IAS 7 and IFRS 7 for supplier finance arrangements in May 2023.[39] Run such programmes with treasury and the auditors, not as a procurement initiative alone.
Sustainability. GHG Protocol scope 3 category 1 (“Purchased goods and services”) offers four methods, from supplier-specific data to spend × industry-average emission factors, and notes that splitting production from non-production purchases “may be aligned with procurement practices”.[25] Your spend cube feeds a spend-based estimate; the method belongs to GreenOps.
Assurance of the operating model
Link to section “Assurance of the operating model”A procurement operation needs its own monitoring, the business equivalent of observability:
- Continuous control checks (daily or weekly scripts like Labs 1, 3 and 4): duplicates, split purchases, bank changes without evidence, receipts entered after invoices, SoD conflicts, payments to inactive suppliers.
- GR/IR ageing review each month: old receipts without invoices reveal unbilled or mis-booked deliveries (and accrual errors); old invoices without receipts reveal goods paid or held without proof of delivery. Each old item needs an owner and a reason.
- Exception logs for every bypass (urgent requests, after-the-fact POs, released holds), reviewed monthly outside procurement.
- Sampling. Each quarter, trace 25 random paid invoices through the full chain and check each step was done by a different person; record failures as findings. Internal audit reviews supplier master and payments at least yearly.
- Leading indicators of control erosion: rising after-the-fact POs, manual hold releases, new suppliers per month and specialist-review SLA breaches.
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Remediation | Prevention |
|---|---|---|---|---|
| Requesters expense purchases instead | Too slow for small buys; no card or catalogue | Expense claims by category; cycle-time p90 | Card or catalogue; fast lane under a threshold | Proportionate channels; SLAs |
| Hold queue grows every week | Tolerances too tight, receipts not recorded, or POs priced wrongly | Hold reasons by type, supplier and buyer | Fix the top cause (often missing receipts) | Receipt reminders; PO price from contract |
| Receipts entered in bulk after invoices | Receivers clearing holds, not confirming delivery | Receipt timestamp vs invoice date | Retrain; require evidence for late receipts | Monitor the pattern; receipts by a third party for goods |
| Same supplier appears three times | No duplicate search at onboarding; mergers and renames | Lab 4 name, tax-ID and bank checks | Merge records; block old ones | Mandatory search; tax-ID uniqueness |
| Contract auto-renewed unnoticed | Notice periods not captured | Auto-renewing contracts past notice dates | Negotiate now | Metadata at signature; 90-day alerts |
| Savings reported, budgets unchanged | Cost avoidance counted as savings; volume grew | Reported savings vs actual spend | Separate hard and soft savings | Finance validates definitions |
| Supplier paid twice | Invoice retyped, sent twice, or a statement paid as an invoice | Lab 1 normalised numbers; amount and date window | Recover; credit note | Duplicate check before payment |
Worked runbook: a supplier payment diverted to a fraudulent account
Link to section “Worked runbook: a supplier payment diverted to a fraudulent account”Diagram source (Mermaid)
flowchart TB
A["`Supplier reports
unpaid invoice`"] --> B["`Confirm payment went
to a changed account`"]
B --> C["`Hour 0-1: ask bank
to recall the funds`"]
C --> D["`Hour 0-1: block all
payments to that account`"]
D --> E["`Day 0: report to police
or national fraud centre`"]
E --> F["`Day 0-2: preserve
emails and change logs`"]
F --> G{"`Was our mailbox or
the supplier's compromised?`"}
G -->|"ours"| H["`Security incident
process (ResponseOps)`"]
G -->|"theirs"| I["`Tell supplier; review
their other changes`"]
H --> J["`Week 1-4: fix control
gap; pay supplier per
legal advice; review`"]
I --> J
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class A,B risk
class C,D,E,F,H,I,J core
class G decision
Text equivalent: the supplier reports an unpaid invoice; AP confirms the payment went to a changed account. Within the first hour, ask the bank to recall the funds and block all payments to that account. On day 0, report to the police or national fraud reporting centre. Over days 0 to 2, preserve emails and change logs. Then decide whether your own mailbox or the supplier’s was compromised: if yours, run the security incident process (ResponseOps); if theirs, tell the supplier and review their other changes. In weeks 1 to 4, fix the control gap, pay the supplier according to legal advice, and hold a review.
Notes on the steps.
- Recall first. The FBI’s advice is that “time is of the essence”: ask the financial institution to recall the transfer at once, and in the US file a complaint with IC3.[15] Elsewhere, use the national reporting route.
- Contain widely. Block the account for every supplier (fraudsters reuse accounts), list all payments to accounts changed in the last 90 days, and keep the phishing email with full headers.
- Find the entry point: a look-alike domain or a compromised mailbox? If yours shows forwarding rules or odd sign-ins, run the security incident process (ResponseOps, IncidentOps).
- Name the control failures. Here two combined: a bank change accepted by email without call-back, and a temporary access exception that let one analyst enter and approve the change (a segregation-of-duties breach). For a SEPA transfer, also check the bank’s payee-name result: was a close match or no match overridden, or was the check waived for the payment file?
- Fix and verify. Whether to pay the supplier again depends on contract and law (involve legal). Remove the exception, re-verify the last 12 months of bank changes by call-back, and test the fixes at the next quarterly sample.
Signals that should have fired: bank change via email (Lab 4 “RISKY CHANGE”), approver equals entrant (Lab 3 transaction rule), a payee-name mismatch from the bank, a large first payment to a new account.
The near miss. Where the rule is followed, the same attack (a reply from the supplier’s compromised mailbox inside a genuine invoice thread) fails: the portal-only rule and a call-back on the contract’s number show the supplier asked for nothing. The rule works because it does not depend on anyone spotting a fake email.
Anti-patterns and myths
Link to section “Anti-patterns and myths”| Anti-pattern or myth | Why it seems right | What happens | Do instead |
|---|---|---|---|
| “One process for everything” | Consistent and easy to audit | Small purchases wait weeks; people bypass via expenses | Channels by value and risk |
| “No PO, no pay” announced overnight | Strong compliance message | Suppliers unpaid, exceptions explode | Phase in by supplier group, with an exception route |
| “Three-way match makes us fraud-proof” | Matching blocks mismatches | Fake receipts defeat it, and collusion between two or more people defeats segregation (GAO 10.22)[11] | Add analytics, rotation, tips channel, sampling |
| “Savings is our headline KPI” | Easy to explain | Cost avoidance inflates results; quality drops | Hard and soft savings separately, with service metrics |
| “The suite will fix it” | Vendors demo clean workflows | Dirty supplier data and unclear authority are automated, not fixed | Clean master data and authority matrix first |
| “Procurement approves everything” | Central control | A bottleneck that owns others’ decisions | Budget holders approve the need; procurement owns route and terms |
| “Loosen tolerances to cut the backlog” | Faster AP | Systematic overbilling passes | Fix root causes of holds |
| “Urgent means skip” | Business pressure | Unvetted suppliers and terms; precedent | Written urgency criteria; logged, reviewed bypasses |
Deciding and adopting
Link to section “Deciding and adopting”When to use and when not to use
Link to section “When to use and when not to use”Every organisation that pays suppliers has a procurement process; the question is how much dedicated operation to build.
Invest in a dedicated procurement operation when several of these hold: supplier spend is a large share of costs; there are more requesters than one person can know; purchases often involve personal data, system access or regulated goods; auditors test your financial controls; a fraud or duplicate payment has already happened; or a law requires documented procedures.
Do not build one yet if you are a small company with a handful of suppliers and one finance person who knows every invoice. You need a written authority matrix, two people for bank changes and payments, POs for large commitments and a good accounting system, not a team, an intake tool or a sourcing suite. The cost of process must stay below the risk it removes.
Hidden responsibilities: supplier master data needs an owner forever, every threshold creates an exception process, and a central team gets blamed for every delayed purchase. Scale down a low-risk control that catches nothing for a year (verify by sampling).
Decision framework
Link to section “Decision framework”Most adoption decisions are really “which channel and how much control for this kind of spend”. The tree below is a starting point; set the thresholds from your own data.
Diagram source (Mermaid)
flowchart TB
Q0{"`Need approved
and funded?`"} -->|"no"| X0["`Stop:
do not buy`"]
Q0 -->|"yes"| QN{"`On the
no-PO list?`"}
QN -->|"yes"| CN["`Pay under its
own approval`"]
QN -->|"no"| Q1{"`Recurring item with
contract prices?`"}
Q1 -->|"yes"| C1["`Catalogue or call-off
approval by amount`"]
Q1 -->|"no"| Q2{"`Supplier gets data,
access or regulated role?`"}
Q2 -->|"yes"| C2["`Add security, privacy,
legal review; no card`"]
Q2 -->|"no"| Q3{"`Value under the
card limit?`"}
Q3 -->|"yes"| C3["`Purchasing card
monthly review`"]
Q3 -->|"no"| Q4{"`Value above the
bid threshold?`"}
C2 --> Q4
Q4 -->|"yes"| C4["`Competitive sourcing
then contract and PO`"]
Q4 -->|"no"| C5["`Requisition and PO,
match level by spend type`"]
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class Q0,QN,Q1,Q2,Q3,Q4 decision
class CN,C1,C2,C3,C4,C5 core
class X0 risk
Text equivalent: first ask whether the need is approved and funded; if not, stop and do not buy. Then ask whether the item is on the no-PO list (utilities, taxes, statutory fees); if yes, pay it under its own approval. Otherwise ask whether the item is recurring with contract prices; if yes, use a catalogue or call-off with approval by amount. If not, ask whether the supplier will get data, system access or a regulated role; if yes, add security, privacy and legal review, never use a card, and continue to the bid-threshold question. If not, ask whether the value is under the card limit; if yes, use a purchasing card with monthly review. Otherwise ask whether the value is above the bid threshold; if yes, run competitive sourcing, then contract and PO; if not, use a requisition and PO, with the match level from the match table (three-way for goods, two-way plus usage review for subscriptions under contract).
Weighted comparison for a tooling decision (illustrative). Score options 1–5 on criteria weighted by what matters to you. The weights below suit a 1,200-person organisation with many SaaS purchases; a manufacturer would weight matching and supplier portal higher.
| Criterion | Weight | ERP only | ERP + intake tool | Full S2P suite |
|---|---|---|---|---|
| Requester experience and visibility | 25% | 2 | 5 | 4 |
| Enforced controls (matching, SoD, audit trail) | 25% | 4 | 4 | 5 |
| Fit with existing ERP and ledger | 20% | 5 | 4 | 3 |
| Implementation effort and time | 15% | 5 | 4 | 2 |
| Licence and running cost | 15% | 5 | 3 | 2 |
| Weighted score | 100% | 4.00 | 4.10 | 3.45 |
Arithmetic for the middle column: 0.25 × 5 + 0.25 × 4 + 0.20 × 4 + 0.15 × 4 + 0.15 × 3 = 1.25 + 1.00 + 0.80 + 0.60 + 0.45 = 4.10. The near-tie is the real finding: the choice turns on how much you value requester experience, a judgement to record in a decision record.
Maturity model
Link to section “Maturity model”This is this Atlas’s model, not an industry standard. Levels describe observable behaviour; move up only when the exit criteria are met.
| Level | Observable behaviour | Evidence | Exit criteria to the next level |
|---|---|---|---|
| 1 Ad hoc | Anyone signs; invoices approved by email | Suppliers created on request; no PO numbers on invoices | Written authority matrix; supplier changes need a second person |
| 2 Controlled | POs for goods and services above a threshold; matching blocks payment; SoD in roles | Hold reports; access reviews | PO compliance ≥ 80% measured; zero unmitigated SoD conflicts in payments |
| 3 Channelled | One intake; catalogues and cards for small buys; parallel reviews; SLAs published | Cycle-time reports by route | Median request-to-PO within target; after-the-fact PO rate falling for two quarters |
| 4 Managed | Category strategies for top categories; spend cube refreshed monthly; renewal calendar | Category plans; master health report | Duplicate suppliers < 1%; renewals decided before notice dates; savings definitions agreed with finance |
| 5 Optimised | Continuous control checks; supplier risk, ESG and finance share one supplier record; automation with monitored exception rates | Control check logs; quarterly sampling with few findings | Sustained; review the model yearly |
Aim for level 3 quickly and level 4 for the largest categories; level 5 pays off at high volume.
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”Assumes an organisation at level 1–2 with a sponsor in finance and one procurement operations lead.
| Period | Actions | Quick wins | Milestone / metric |
|---|---|---|---|
| Days 1–30: see and stop the bleeding | Map the process; extract 12 months of payments; run duplicate, bank-change and SoD checks (Labs 1, 3, 4); write the bank-change SOP; draft the authority matrix with finance | Portal-only bank changes with call-back; remove payment-release rights from people who create suppliers | Baseline: PO compliance, duplicates, SoD conflicts; SOP live |
| Days 31–60: build the front door | Publish one intake with routing rules; channels by spend type; POs required for the top 50 suppliers; matching tolerances | Catalogue or card for the two largest tail categories (Lab 2) | Intake used for ≥ 80% of new requests; first-pass match rate weekly |
| Days 61–90: measure and govern | Monthly scorecard; renewal calendar for the top 100 contracts; quarterly sample of 25 invoices; plans for the top three categories | Renegotiate one auto-renewing contract caught by the calendar | Scorecard reviewed by finance; first sample results |
Dependencies: ERP data access, finance agreement on authority levels, legal capacity for templates, IT for integrations. Skills: process design, data analysis (spreadsheet or Python), stakeholder management, basic ERP configuration.
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Supplier onboarding (per supplier)
- Searched for an existing record by tax ID, normalised name and bank account
- Legal entity and owners screened against applicable sanctions lists, full legal name used
- Due diligence matches the risk: security, privacy, financial viability, anticorruption as required
- Supplier entered its own legal, tax and bank data; formats validated
- Second person approved activation; contract or PO exists before work starts
Payment run (each run)
- All lines matched or holds released with a recorded reason by an authorised person
- No payments to accounts changed within the verification window without call-back evidence
- Bank payee-name check (VoP or CoP) on for this file, or the waiver and its compensating control recorded
- Duplicate check (normalised invoice number, amount and date window) run on the proposal
- Release by a person with no supplier-maintenance or invoice-posting rights
- First payments to new or changed accounts reviewed by treasury
Quarterly governance review
- KPI scorecard reviewed with finance; flow and control metrics side by side
- All bypasses (urgent requests, after-the-fact POs, manual hold releases) reviewed by someone outside procurement
- Access review and SoD analysis on actual permissions; mitigations evidenced
- Random sample of 25 paid invoices traced end to end; findings logged
- Renewal calendar for the next 12 months reviewed with budget holders
- Inactive suppliers deactivated; duplicate suppliers merged
For a suspected payment fraud, use the runbook as the checklist.
Templates
Link to section “Templates”One-page procurement charter
PROCUREMENT OPERATIONS CHARTER Version / date: ______
Purpose Buy what the organisation needs quickly, from trusted suppliers,
on agreed terms; pay each supplier correctly and once.
Scope All third-party spend except: ____________ (no-PO list ref ____)
Owns Intake, channels, sourcing route, POs, supplier master,
procurement KPIs, renewal calendar
Does not Budget decisions (budget holders); legal review (Legal);
own payment release (Treasury); supplier risk method (Risk)
Authority Approval matrix ref ____ Signature matrix ref ____
Service Request acknowledged in 1 working day; route-specific SLAs ____
levels
Controls SoD matrix ref ____; matching policy ref ____; SOP-VM-03
Measures Cycle time, PO compliance, first-pass match, bank changes
verified, duplicates, savings (hard / avoidance separately)
Review Monthly with finance; annual policy and threshold review
Sponsor ____________ Owner ____________ Next review ____________
Purchase request (intake) form
PURCHASE REQUEST Request ID: _________
Requester / team / cost centre: ________________________________________
What do you need and why? (business outcome) ____________________________
Category (pick list): __________ Supplier: [ ] existing ____ [ ] new ____
Total contract value incl. renewals: ________ Currency: ___ Term: ________
Auto-renewal? [ ] yes [ ] no Notice period: ________
Data the supplier will receive: [ ] none [ ] internal [ ] confidential
[ ] personal data (describe) ____________
Access to our systems or premises? [ ] no [ ] yes (describe) ____________
Government official involved or recommended supplier? [ ] no [ ] yes
Quotes attached: ___ Needed by: ________
Impact if late (specific, quantified): __________________________________
Budget holder approval: __________________ Date: ________
Supplier performance review form
SUPPLIER REVIEW Supplier: ____________ Tier: strategic/other ____
Period: ______ Contract ref: ______ Business owner: ______________
1. Success criteria in the contract and how they were met: _____________
2. Service levels: target ____ actual ____ credits claimed ____
3. Invoices: count ____ first-pass match ____ % disputes ____
4. Utilisation: seats or volume paid ____ used ____
5. Risk changes: security incidents / sanctions hits / financial ____
6. Issues and agreed remediation (owner, date): ________________________
7. Decision: [ ] continue [ ] improvement plan [ ] re-tender [ ] exit
Next review date: ________ Signed: business owner / category manager
Decision record for a procurement process change
DECISION RECORD PR-____ Title: ____________________ Date: ________
Context What problem, with which data (volumes, holds, cycle times)?
Options A ______ B ______ C (do nothing) ______
Decision ______________________________________________________
Controls Which control changes? Who checked SoD and audit impact?
Metrics What will show it worked, and by when?
Reversal How do we roll back, and what would make us do it?
Approved by Finance ________ Procurement ________ Audit (informed) ___
Deep comparisons
Link to section “Deep comparisons”ProcurementOps compared with its nearest neighbours.
| Dimension | ProcurementOps | SupplyChainOps | LegalOps | FinOps |
|---|---|---|---|---|
| Unit of work | A purchase, from request to payment | A flow of goods through plan, source, make, deliver | A legal matter or contract | A cloud or technology cost line |
| Core control | SoD, approvals, matching, supplier master | Inventory accuracy, service levels | Legal review and contract obligations | Allocation, accountability, commitments |
| Headline metrics | Cycle time, PO compliance, first-pass match | Service level, inventory turns, forecast error | Matter cycle time, outside counsel spend | Unit cost, coverage, waste |
| Typical systems | Intake, P2P suite, ERP | Planning, warehouse, transport systems | CLM, matter management | Cost tools, cloud billing data |
| Choose this page when | You need to control how money is committed and paid | You manage physical flow and stock | You run legal work | You manage variable technology spend |
Centralised, decentralised and centre-led procurement.
| Model | How it works | Strength | Weakness | Fits |
|---|---|---|---|---|
| Centralised | One team buys for everyone | Leverage, clean data | Bottleneck, far from users | Uniform organisations |
| Decentralised | Each unit buys for itself | Speed, local knowledge | Duplicate contracts, weak data | Very autonomous units |
| Centre-led (hybrid) | Central policy, systems and category strategies; local buying | Leverage with speed | Needs clear decision rights | Most multi-unit organisations |
What is the difference between procurement and purchasing? Usage varies; commonly purchasing is ordering and paying, while procurement covers the whole cycle from need to supplier management, as in CIPS’s 13-step cycle.[4]
Do we need a PO for everything? No. Use POs where they add control (goods, defined services, anything you must match). Keep a written no-PO list for utilities, taxes, statutory fees and similar items, and use cards or catalogues for small, frequent buys.
Our team is too small to segregate duties. What now? Evidence compensating controls: the finance lead reviews every supplier change and the bank’s payment report weekly, and an external accountant samples quarterly. The Green Book allows “alternative control activities” when segregation is not practical.[11]
Does three-way matching work for services and subscriptions? For milestone services, yes, with the requester recording a service entry as the “receipt”. For fixed subscriptions under contract, two-way matching plus a periodic usage review is usually more sensible; the risk there is paying for unused seats, not undelivered goods.
Who should own the supplier master, procurement or AP? Either, as long as its maintainers cannot also post invoices or release payments.
Is ISO 20400 certification worth asking suppliers for? No: ISO 20400 is guidance, and its steering group calls any claim of certification a misrepresentation.[5] Ask for the practices instead.
Can AI approve invoices? Rules can auto-approve matched, low-risk invoices, as GAO describes for automated approvals with manual review of flagged items.[11] Do not let a model decide payments, bank changes or exceptions; those are exactly where attackers aim.
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”Separate what is established, what is emerging, and what is mostly marketing (as of October 2026).
- Structured e-invoicing (established, now mandated by law in places). Peppol uses a four-corner model in which buyers and suppliers connect through accredited providers;[26] intra-EU e-invoicing becomes mandatory from 1 July 2030 under ViDA.[27] Plan supplier onboarding to e-invoicing country by country.
- Continuous control monitoring (established idea, uneven practice): worthless unless someone owns the alerts.
- Payee-name checks at the bank (new, mandatory for EU banks since October 2025): they move part of the verification to the payment itself, for payers who keep them on.[17]
- One supplier record for many purposes (emerging): sanctions screening, security due diligence, modern-slavery statements, EU due diligence (very large companies, from 2029[31]) and Scope 3 estimates.[25] The hard part is governance: who may update which field, and how often it is re-verified.
- Language models in intake and review (emerging): treat “autonomous procurement” as marketing until you see exception rates on your own data.
- Regulatory change in third-party risk (watch). The US banking agencies’ September 2026 proposal to replace their 2023 third-party guidance with a more explicitly risk-tiered approach was still a proposal when this page was checked.[35]
Learning path
Link to section “Learning path”| Stage | Goal | Activities |
|---|---|---|
| Prerequisites | Accounting basics | Learn accrual, payables, cost centres and the purpose of a GR/IR account[10] |
| 1-day primer | Understand the chain | Read What ProcurementOps is, Fundamentals and the workflow; run Lab 1 |
| 1-week practice | Analyse your process | Map it against the five stages; run Labs 2–4 on synthetic data shaped like yours; draft an authority matrix and bank-change SOP |
| 30-day progression | Change something | Follow the first 30 days of the roadmap; present a baseline scorecard |
| Advanced specialisation | Pick a track | Sourcing and category management (CIPS, Kraljic); P2P systems; controls and audit (COSO, Green Book); sustainable procurement (ISO 20400, GHG Protocol) |
| Portfolio project | Show competence | A redesign of one category (cube, strategy, channel, metrics) or continuous-control scripts with alert owners |
Leaders: read the cheat sheet, when to use and the judgement call. Practitioners: do the four labs and the mastery check.
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”- Decide: the authority matrix, the channel for each kind of spend, the match level per category, and tolerances.
- Essential practices: one intake; channels by value and risk; self-service supplier onboarding with screening; three-way match for goods; renewal calendar; spend cube; quarterly sampling.
- Non-negotiable controls: no one person creates a supplier and pays it; no one person orders and receives; no bank change outside SOP-VM-03.
- Metrics: request-to-PO cycle time (median and p90), PO compliance (before-invoice POs only), first-pass match rate, bank changes verified (100%), duplicate payments, GR/IR ageing, open SoD conflicts, hard savings and cost avoidance separately.
- Watch-outs: one heavy process for everything; receipts booked to clear holds; savings inflation; urgency used as a bypass; waived payee-name checks; models deciding payments, bank changes or exceptions (rule-based auto-approval only for matched, low-risk lines with an owned rule set).
- Next actions: run the duplicate and bank-change checks (Labs 1 and 4) this week; publish SOP-VM-03; agree the authority matrix.
A judgement call: auto-receipts to clear the hold backlog?
Link to section “A judgement call: auto-receipts to clear the hold backlog?”The situation. AP has 2,300 invoice lines on QTY REC hold because receivers do not record receipts; two suppliers threaten to stop supply. Option A (the AP manager’s): for suppliers with a good history, create receipts automatically when the invoice arrives. Option B: keep three-way matching, clear the backlog in a two-week blitz in which receivers confirm deliveries with evidence, and fix the root cause (reminders; the warehouse, not the requester, receives goods).
Assumptions. About 70% of held lines are from 40 regular goods suppliers; the warehouse can take over receiving for goods within a month; the organisation’s auditors test three-way matching as a key control.
Why the attractive option A is likely wrong here.
- It removes the control silently. A receipt created from the invoice proves nothing; the match becomes two-way while reports still say three-way, misleading auditors and management.
- “Good history” is the profile fraud exploits. In the ACFE’s purchasing-department cases, corruption appeared in 79%;[1] a trusted-supplier exception is where overbilling would go unnoticed.
- It treats the symptom. The backlog exists because receiving is not owned; option A makes that permanent.
What option A gets right: suppliers should not suffer for internal failures, and some categories do not need receipts. So option B pays confirmed lines quickly and moves genuinely low-risk categories to two-way matching by an approved policy change.
Decision under these assumptions: option B, plus a documented policy change for categories where receipt adds little. If the warehouse cannot take over receiving, do not reach for evaluated receipt settlement (ERS, paying from the receipt without an invoice): it moves the whole control onto the receipt, so it helps only once receiving is owned and accurate. Instead, approve a time-limited two-way match for named suppliers with a compensating control (for example monthly delivery confirmation by an independent person) and auditor agreement. This is a reasoned recommendation, not a proven result.
Learning objectives and mastery check
Link to section “Learning objectives and mastery check”You should now be able to explain the request-to-payment chain; design an authority matrix, channels and a matching policy; operate onboarding, bank-change verification and invoice exceptions; measure flow and control KPIs; and evaluate process changes for their control impact.
- An invoice is 1.8% above the PO unit price, which is 400.00, and your policy allows 2% and 5.00 per unit. Does it pass?
Answer and explanation
No. 1.8% of 400.00 is 7.20 per unit: inside the percentage limit but above the 5.00 absolute limit, and both must hold. A small percentage on an expensive line can still be a large overcharge.
- Name the two duties whose combination is most dangerous in the supplier master, and a compensating control for a two-person finance team.
Answer and explanation
Creating or changing a supplier (including bank details) and releasing payments: one person could create a payee and pay it. Give one person each duty; if impossible, the second person reviews every master-data change and the bank’s payment report weekly, with evidence, plus an external sample.
- Your PO compliance shows 92%, but 9 percentage points of it are POs raised after the invoice. What is the real figure, and why does it matter?
Answer and explanation
83%. After-the-fact POs record commitments made without approval, budget check or sourcing; counting them hides the behaviour the metric exists to reduce. Report them as a separate after-the-fact PO rate.
- A supplier emails new bank details from its usual address, in an existing invoice thread, with a signed letter attached. What do you do?
Answer and explanation
Do not change the record from the email: a real mailbox can be compromised. Follow SOP-VM-03: hold payments, require the portal, call back on a number already on file (never one in the email or letter), get a second approver, and let a payee-name mismatch stop the first payment.
- Which match level would you use for (a) laptops, (b) an annual SaaS subscription under contract, (c) implant components that must pass inspection?
Answer and explanation
(a) Three-way: receipt proves delivery. (b) Two-way with a periodic usage review: receipt adds little and the risk is unused seats. (c) Four-way: delivery is not acceptance, so inspection results must block payment for rejected quantities.
- Your three-way match is perfect, yet a buyer and a supplier’s salesperson split a kickback on inflated prices. Which controls would have helped?
Answer and explanation
Matching checks the invoice against the PO, and here the PO carried the inflated price. Helpful: bid thresholds on total contract value, independent evaluation panels, declarations of interest, price benchmarking, award-pattern analytics, buyer rotation and a protected tips channel. Segregation of duties is defeated by collusion, which is why these detective controls matter.
Scenario challenge. Using the reference implementation’s authority matrix, route a 180,000 two-year contract for an HR analytics tool that will receive employee personal data. List every approver, review and the sourcing route.
Model answer
Spend approval (mode: all): budget holder, department head and finance director (up to 250,000). Sourcing: business-led RFP
(100,000 to 250,000). Reviews: privacy and security (personal data); IT if it integrates with HR systems; sanctions screening and
vendor data if the supplier is new. Signature (mode: any): the CFO or the general counsel. Add a data-processing agreement and
put the notice date in the renewal calendar.
Conclusion
Link to section “Conclusion”ProcurementOps is not glamorous, and its best work is invisible: the supplier paid correctly, the fake invoice stopped at matching, the bank change confirmed by phone before a large payment. It asks for two things most organisations treat as opposites, speed for the people who need things and proof for the people who answer for the money. The way through is not more approvals; it is putting each control where money can actually be lost, making the compliant path the easy one, and measuring both sides honestly. Get the chain of evidence right (approved need, commitment, receipt, matched invoice, independently verified payee, independent payment) and the tools, the categories and the savings follow. Get it wrong, and no suite, dashboard or AI assistant will notice until a supplier calls to ask where their money went.
Sources and further reading
Link to section “Sources and further reading”All sources were opened on 2026-10-23 unless noted in the evidence ledger (research/procurementops-ledger.md). Legal sources
are for orientation; check the official text before relying on them.
Further reading
- CIPS Intelligence Hub pages linked from the Procurement and Supply Cycle (specification, Kraljic, supplier management).
- The full GAO Green Book, especially Appendix II on preventive and detective control activities.
- Your auditors’ control framework and your ERP vendor’s current matching and approval documentation.
Changelog
- 2026-10-23, first version: researched and drafted; four labs executed on synthetic data; nine diagrams.
- 2026-10-23, r1 revision after independent review: added EU Verification of Payee and UK Confirmation of Payee (playbook, SOP, regulatory map, runbook, checklist); corrected the OFAC and GAO wording; dated the Late Payment proposal and the UK transitional rules; added supply-chain finance, early-payment discounts and GR/IR ageing; acknowledged FleetOps, RetailOps, LabOps and FinOps for AI handoffs; redrew figures 3, 4 and 8 and removed HTML from diagram labels; dropped the maturity diagram, which restated its table (eight diagrams); merged scenario 4 into the runbook; trimmed repetition.
- 2026-10-23, post-score polish: figure 8 match level follows the match table; OMB M-19-13 wording; “riskiest transaction” labelled as judgement; UK CoP row dated; bank-change restatements now link to SOP-VM-03.
Occupational Fraud 2024: A Report to the Nations — Association of Certified Fraud Examiners, 2024. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
2024 IC3 Annual Report — FBI Internet Crime Complaint Center, April 2025. Checked 2026-10-23. ↩︎
About CIPS — Chartered Institute of Procurement & Supply, undated. Checked 2026-10-23. ↩︎
CIPS Procurement and Supply Cycle — Chartered Institute of Procurement & Supply, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Buyer beware: ISO 20400 is not certifiable — ISO20400.org Steering Group (independent experts), May 2023. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Procurement Act 2023 — East Sussex County Council, undated. Checked 2026-10-23. ↩︎ ↩︎
Procurement Operations job family — GitLab Handbook, modified 2026-03-12. Checked 2026-10-23. ↩︎ ↩︎
Procurement Services — Northeastern University Finance, undated. Checked 2026-10-23. ↩︎
What is intake-to-procure? — Zip (vendor blog, Brooks Rocco), 2025-04-01. Checked 2026-10-23. ↩︎ ↩︎
Postings at Goods Receipt and Invoice Receipt — SAP Help, legacy R/3 4.6C documentation. Checked 2026-10-23. ↩︎ ↩︎
Standards for Internal Control in the Federal Government, 2025 revision (full report, PDF) — US GAO, May 2025: Table 1 and paras. 10.21–10.23, 11.16, Appendix II. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
The GitLab Procurement Team — GitLab Handbook, last modified 2026-09-13. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
A Framework for OFAC Compliance Commitments — US Treasury, Office of Foreign Assets Control, undated PDF. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
The NIST Cybersecurity Framework (CSF) 2.0, NIST CSWP 29 — NIST, 2024-02-26. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Business Email Compromise: The $55 Billion Scam (PSA I-091124-PSA) — FBI IC3, 2024-09-11. Checked 2026-10-23. ↩︎ ↩︎
Over 75 percent of U.S. firms experienced payments fraud in 2025 while AI adoption for fraud mitigation lags — Association for Financial Professionals, press release, 2026-04-14 (survey of 465 US treasury practitioners). Checked 2026-10-23. ↩︎ ↩︎
Verification of Payee requirements (VoP) under the EU’s Instant Payments Regulation (IPR) — PwC Legal (law-firm client alert), 2025-08-21. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Verification of Payee (VoP) Service — European Central Bank, TIPS Contact Group presentation summarising the Instant Payments Regulation, 2024-04-19. Checked 2026-10-23. ↩︎ ↩︎
Using Approval (Oracle Payables Help) — Oracle, legacy E-Business Suite help (release not shown). Checked 2026-10-23. ↩︎
Two, Three, and Four Way Matching — The Research Foundation for SUNY, procedure, 2011. Checked 2026-10-23. ↩︎
UNSPSC — Wikipedia (tertiary source; unspsc.org could not be fetched automatically). Checked 2026-10-23. ↩︎ ↩︎
Purchasing Must Become Supply Management (P. Kraljic) — Harvard Business Review, September 1983 (page shows the introduction only). Checked 2026-10-23. ↩︎ ↩︎
Kraljic matrix — Wikipedia (tertiary source). Checked 2026-10-23. ↩︎ ↩︎
Standards for Internal Control in the Federal Government (GAO-25-107721) — US Government Accountability Office, 2025-05-15. Checked 2026-10-23. ↩︎
Technical Guidance for Calculating Scope 3 Emissions, version 1.0 — GHG Protocol (WRI and WBCSD), 2013, category 1. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
About Peppol — OpenPeppol AISBL, undated. Checked 2026-10-23. ↩︎ ↩︎
VAT in the Digital Age (ViDA) formally adopted — European Commission newsroom, 2025-04-04. Checked 2026-10-23. ↩︎ ↩︎
Late Payment Directive: frequently asked questions — European Commission, DG GROW, undated PDF. Checked 2026-10-23. ↩︎ ↩︎
Commercial transactions: combating late payment, procedure 2023/0323(COD) — European Parliament Legislative Observatory, procedure file (stage: awaiting Council’s first-reading position). Checked 2026-10-23. ↩︎
Publish an annual modern slavery statement — GOV.UK, Home Office, updated 2024-04-25. Checked 2026-10-23. ↩︎
EU Sustainability Omnibus Published in the Official Journal — Latham & Watkins (law-firm summary), 2026. Checked 2026-10-23. ↩︎ ↩︎
CP26/2: Extending Specific Direction 17 (Confirmation of Payee) — Payment Systems Regulator, 2026-07-30. Checked 2026-10-23. ↩︎
Guidance on transitional and saving arrangements — GOV.UK (Cabinet Office), Procurement Act 2023 guidance, undated PDF (paras 4–6). Checked 2026-10-23. ↩︎
Procurement Act 2023 guidance documents — GOV.UK, Cabinet Office, updated 2026-02-04. Checked 2026-10-23. ↩︎
Proposed Third-Party Risk Management Guidance (FR Doc. 2026-18859) — OCC, Federal Reserve, FDIC, NCUA, Federal Register, 2026-09-15 (status checked via the Federal Register API). Checked 2026-10-23. ↩︎ ↩︎
Bill control policies — Odoo 18.0 documentation. Checked 2026-10-23. ↩︎
M-19-13, Category Management: Making Smarter Use of Common Contract Solutions and Practices — US Office of Management and Budget, 2019-03-20 (archived; current status not verified). Checked 2026-10-23. ↩︎
FASB Enhances Disclosure Requirements Related to Supplier Finance Programs — Deloitte DART (summary of FASB ASU 2022-04), 2022-09-30. Checked 2026-10-23. ↩︎
Supplier Finance Arrangements — IFRS Foundation, IASB completed project, May 2023. Checked 2026-10-23. ↩︎