The risk in an organisation rarely sits in a single record. It sits in the relationships across thousands: who approves whose invoices, where the spend funnels, how the process really flows. This turns procurement into a graph, then surfaces the patterns a person could never hold in their head. Every one is cited to the records, and every one is treated as a lead to investigate rather than a verdict.
Any single purchase order looks fine. The problem only appears when you connect them: the person who raised a PO also approved its invoice; nearly half a vendor's spend flows through one approver; one manager is a bottleneck on dozens of approvals. To find these by hand, an auditor would have to hold thousands of relationships in their head at once. So they don't, and the patterns persist until something goes wrong.
So the design resolves the records into a typed entity graph, runs an explicit traversal query for each risk pattern, and mines the actual process from the events. Every finding is cited back to the records that produced it.
Records are resolved into a typed graph of employees, vendors, POs, invoices, and the raised / supplied / approved / paid edges between them. Each risk pattern is an explicit, deterministic traversal; the process map is mined from the PO→GR→Invoice events. The model only narrates an insight after the traversal has found and cited it.
| Pattern | What surfaced | Evidence | Result |
|---|---|---|---|
| Vendor concentration | 46% of Volt & Co spend (S$82,662) approved by one person, Kavya Lim | V004 · E0042 | lead to investigate |
| Segregation of duties | raised the PO and approved the invoice on INV-00117 | INV-00117 · PO-00117 · E0101 | control breach |
| Vendor concentration | spend spread evenly across 9 approvers, 22% max | V006 | below 45%, not flagged |
What a finding means, and what it does not. These are deterministic graph traversals rather than machine learning, so they are explainable and reproducible. A concentration or a bottleneck is a lead rather than a verdict. 46% through one approver may be entirely legitimate, say a specialist category, so the output is a cited shape for a human to investigate and never an automated sanction. The thresholds are the dial. 45% concentration and ≥5 approvals are set to surface the few worth a look without burying the team. On synthetic data they isolate the seeded patterns cleanly; on a real estate you'd tune them to the org's size and tolerance for review volume.
Every surfaced pattern carries the records that produced it, so a control owner can verify it in seconds rather than take it on trust. The output shape:
pattern : vendor-approver concentration severity: medium headline : 46% of Volt & Co spend (S$82,662) approved by one person detail : Kavya Lim (E0042) approves the bulk of V004's invoices evidence : [V004, E0042] control : POL-FIN-02 status : lead , route to a human to investigate
I turn scattered records into a structure that surfaces the relationship rather than just the row, the connections and bottlenecks a person can't hold in their head, and I make every finding traceable back to the data so someone can act on it. Just as important, I frame a surfaced pattern as a lead to investigate rather than a verdict. The value is in the edges. I insist the AI cite its evidence, and I am careful not to turn a correlation into an accusation. That is how I'd bring this kind of discovery into a business without it becoming an unexplainable black box.
The insights and process breakdown above are real output from the engine over Origin's procurement records. The full console runs as a working application, with the graph stats, the cited insight cards, and the mined process.