The account's purchase-to-pay flow is disciplined where a purchase order exists. Every PO maps to at most one receipt and one bill; 698 of 740 POs run the complete Order Placed → Received → Billed → Paid chain in a median of four days; every one of the 705 billed POs matches its bill total exactly; and the single voided payment was reversed and re-issued the same day. Unlike the sales side there is one genuine consolidation — a single payment covering seven bills — and a bill-from-receipt path used 19 times, so the perspectives do diverge and the divergences are explained in §4.
The exposure sits outside the PO-controlled flow and in payment timing:
Figure 1 — Row funnel. Nothing is lost between mainline rows and objects; the reduction from 3,492 to 1,053 is the linking itself.
| Stage | Count | Note |
|---|---|---|
transactionline rows streamed | 29,786 | 6 keyset pages on uniquekey, 2.2–2.9 s per pass, peak held ≈ 1 page + headers |
| Mainline rows (one per document) | 3,492 | Equals header count — no document dropped |
createdfrom candidates → used | 1,440 → 1,432 | 8 dropped: target outside the six types (transfer orders, sales orders on drop-ship POs, requisitions) |
nexttransactionlinelink raw in-scope rows → distinct pairs | 16,275 → 2,458 | PO→receipt 7,695 → 722; PO→bill 7,491 → 705 (multi-line POs, median 8 lines); receipt→bill 66 → 19 |
| Distinct edges after merging both sources | 2,458 | PO→IR 722 · PO→VB 705 · VB→VP 1,005 · IR→VB 19 · PO→VRMA 4 · VRMA→VC 1 · VB→VC 1 · VB→IR 1 |
| Events / objects | 3,492 / 3,492 | One event per document; payments inherit PO objects through their bills; the voided payment is its own activity |
| Connected components | 1,053 | Union-find over 2,458 edges |
| PO child lines streamed (three-way match) | 7,721 | 2 pages; 740 POs; 1–29 lines each |
| # | Assumption | Effect |
|---|---|---|
| A1 | Scope is all history (740 POs, 1,017 bills — too few to trim); window on trandate. | ~170 future-dated documents retained (§9). |
| A2 | One event per document; activity = type: PurchOrd → Order Placed, ItemRcpt → Received, VendBill → Billed, VendPymt → Paid (status V → Paid (voided)), VendAuth → Return Authorised, VendCred → Credited. | Approval, pick-up and putaway are not activities. |
| A3 | Timestamp = trandate, day resolution. | All durations in whole days; same-day chains have cycle 0. |
| A4 | Same-day tie-break: Order Placed < Received < Billed < Paid < Return Authorised < Credited, then internal id. | Same-day bill-before-receipt is undetectable. |
| A5 | Links = distinct nexttransactionlinelink pairs ∪ transactionline.createdfrom on the mainline row. | 2,458 edges; reachability per source in §2. |
| A6 | A payment inherits PO objects through its bill(s); a bill inherits receipt objects via BillRcpt when present. | Payment perspective includes Order Placed and Received. |
| A7 | Case = connected component. | Unlinked documents are size-1 components and counted. |
| A8 | Two reference models: PO-backed — one Order Placed, then Received and Billed in either order (Received first expected), then one Paid, nothing after; non-PO — Billed → Paid. Open prefixes conforming. | Returns, credits, voids, multiple bills or payments per PO are deviations and are each explained. |
| A9 | Three-way match at PO line level: quantity vs quantityshiprecv vs quantitybilled; header amount match = Σ OrdBill bills vs PO foreigntotal. | Lines classified full / received-not-billed / billed-not-received / open / over / partial. |
| A10 | Payment timing measured two ways: bill date → payment date, and payment date − bill duedate (negative = early). | Early-payment cost estimated as annual bill value × median early days ÷ 365. |
| A11 | Out of scope: cash-sale deposits, expense reports, journals, checks, requisitions, landed cost. Receipts from transfer orders and return authorisations are traced and excluded. | 3 payments and 5 receipts appear unlinked for this reason (§8-F). |
| A12 | Percentiles exact (whole arrays in the Worker). | No reservoir estimates. |
| A13 | Amounts = ABS(foreigntotal) (vendor bills are negative in NetSuite); status labels live via BUILTIN.DF. | PurchOrd G = "Fully Billed", F = "Pending Bill", B = "Pending Receipt". |
| A14 | Bills with NULL tranid (999 of 1,017) are shown as #<internal id>. | Document numbering is itself a §9 finding. |
| Object type | Objects | Both sources | ntll only | createdfrom only | Unreached | Unreached examples |
|---|---|---|---|---|---|---|
| Purchase order (PurchOrd) | 740 | root object | 18 with no downstream | PO314 2026-09-08 · PO364 2026-09-01 (both Pending Receipt) | ||
| Item receipt (ItemRcpt) | 727 | 722 | 0 | 0 | 5 | IR311 2026-08-26 · IR317 2026-09-12 — transfer orders / RMAs (§8-F) |
| Vendor bill (VendBill) | 1,017 | 705 | 0 | 0 | 312 | #27120 2026-09-03 $120,000 · VB2 2026-06-01 $350 "Quarterly Postage Meter Rental" |
| Vendor payment (VendPymt) | 1,002 | 0 | 999 | 0 | 3 | 167 2026-09-08 $59.98 · 362 2026-09-24 $80.00 |
| Return authorisation (VendAuth) | 4 | 4 | 0 | 0 | 0 | — |
| Bill credit (VendCred) | 2 | 1 | 0 | 0 | 1 | 4433911592582809 2026-09-24 $29.99 |
As on the sales side, the two link sources agree completely where both apply: all 1,432 PO→receipt and PO→bill edges are present in both. Bill→payment (1,005) and receipt→bill (19, linktype BillRcpt) exist only in nexttransactionlinelink. Example edges: PO1202 2026-09-17 → IR1211 2026-09-18 [ShipRcpt + createdfrom]; PO1204 2026-09-03 → #42202 2026-09-05 [OrdBill + createdfrom]. Example events: Order Placed PO388 2026-06-01; Billed #31726 2026-06-01 (objects: bill, PO388, IR406).
| Multiplicity | 0 | 1 | 2+ | Example |
|---|---|---|---|---|
| Receipts per PO | 18 | 722 | 0 | 0: PO314 2026-09-08 $59.98 · PO395 2026-06-01 $6,110.00 |
| Bills per PO | 35 | 705 | 0 | 0: PO1018 2026-06-11 received IR1163, unbilled 85 days |
| POs per bill | 312 | 705 | 0 | 0: #27120 Davidson Leasing $120,000 · VB843 Cloud Consulting $52,550 |
| Receipts directly linked to bill (BillRcpt) | 998 | 19 | 0 | 1: IR1174 2026-08-15 → #40098 2026-08-16 |
| Payments per bill (non-voided) | 13 | 1,004 | 0 | 0: #27120 · VB843 (both open) |
| Bills per payment | 3 | 997 | 1 (×7) | 7: #42228 2026-09-07 $341,743.03 ← VB01, VB02, VB03, VB04, VB06, VB07, VB08 |
| POs per payment | 297 | 704 | 0 | 0: the 291 non-PO bill payments + 3 unlinked + 3 other |
Component sizes: 1 doc 39 · 2 docs 307 · 3 docs 2 · 4 docs 702 · 5 docs 1 · 6 docs 1 · 14 docs 1. Strict 1:1:1:1 chains: 704 of 740 POs (95.1%). Lines per PO: median 8, P90 20, max 29.
Figure 2 — Directly-follows graph across all 1,053 components. Labels: count · median wait. Main PO path in emerald; the non-PO Billed → Paid entry (291) is drawn as a second start. Grey arcs are the minority routes. Return / credit / void edges (≤ 2 each) are listed in the table.
| Transition | PurchOrd lifecycles | VendBill lifecycles | ItemRcpt lifecycles | Reading |
|---|---|---|---|---|
| Order Placed → Received | 719 | — | — | Main path |
| Received → Billed | 702 | 1 | 19 | Main path; 19 receipt lifecycles carry it via BillRcpt |
| Billed → Paid | 700 | 1,002 | — | 302 bill lifecycles carry it without a PO |
| Order Placed → Billed | 3 | — | — | Billed before received (2) + PO626 date anomaly |
| Billed → Received | 2 | — | — | PO1192, PO1204 — receipt one day after bill |
| Billed → Return Authorised / Return Authorised → Paid | 2 / 2 | — | — | PO1155, PO1158 (Generation N) |
| Received → Return Authorised / RA → RA | 1 / 1 | — | — | PO1156: VRMA22 then VRMA23, 8 days apart |
| Received → Order Placed | 1 | — | — | IR684 2026-01-08 precedes PO626 2026-02-08 (31 days) |
| Billed → Paid (voided) → Paid | — | 1 / 1 | — | VB05: void and re-issue same day |
| Billed → Credited → Paid | — | 1 / 1 | — | #40098 → VRMA20 credit → applied in #42228 |
Lifecycle lengths: PurchOrd 4 events 703 · 1 event 18 · 2 events 16 · 5 events 2 · 3 events 1; VendBill 2 events 1,001 · 1 event 13 · 3 events 3; ItemRcpt 1 event 708 · 2 events 19; VendPymt all single. Convergence = 1 on every transition: no single event touches two objects of the same type, even in the consolidated payment (it touches seven bills but each bill is one object of type VendBill per edge).
| Transition | PO view | med / P90 / max | Payment view | med / P90 / max |
|---|---|---|---|---|
| Billed → Paid | 700 | 3 / 3 / 14 | 996 | 3 / 3 / 110 |
| Order Placed → Received | 719 | 0 / 0 / 2 | 701 | 0 / 0 / 2 |
| Received → Billed | 702 | 1 / 1 / 3 | 701 | 1 / 1 / 3 |
| Billed → Billed | — | — | 6 | 29.5 / 60.5 / 64 |
| Trace starts | Order Placed 739 · Received 1 | Order Placed 703 · Billed 295 · Paid 3 · Received 1 | ||
| Trace ends | Paid 704 · Order Placed 18 · Received 16 · Return Authorised 1 · Billed 1 | Paid 1,001 · Paid (voided) 1 | ||
| Trace lengths | 1: 18 · 2: 16 · 3: 1 · 4: 703 · 5: 2 | 1: 3 · 2: 294 · 4: 704 · 8: 1 | ||
Three divergences, each structural. (1) The payment view has 296 more Billed → Paid transitions and a 110-day maximum: these are the non-PO bills, invisible from any PO. (2) The payment view alone contains Billed → Billed (6) and an 8-event trace — that is the consolidated payment #42228 walking VB01 → VB02 → … → VB08 in one case; the PO view sees none of it because those bills have no PO. (3) The PO view has 36 traces ending before payment (18 unreceived, 16 received-not-billed, 1 in return, 1 billed-unpaid) that the payment view cannot see. No divergence involves partial receipt or split billing; §3 rules those out.
Component-level variants; cycle = first to last event, whole days; percentiles exact (A12). Sixteen distinct variants; the top twelve cover 1,049 of 1,053.
Figure 3 — Components by variant, log-scaled bars, exact counts printed.
| # | Variant | Count | Median | P90 | Max | Examples (raw dates) |
|---|---|---|---|---|---|---|
| 1 | Order Placed → Received → Billed → Paid | 698 | 4 | 4 | 14 | PO388 2026-06-01 → IR406 06-01 → #31726 06-01 → 539 2026-06-15 PO389 2026-07-01 → IR407 07-01 → #31730 07-01 → 540 2026-07-15 |
| 2 | Billed → Paid (non-PO) | 291 | 0 | 0 | 17 | VB2 2026-06-01 → 1 2026-06-01 · #206 2026-08-01 → 360 2026-08-03 |
| 3 | Order Placed (only) | 18 | 0 | 0 | 0 | PO314 2026-09-08 · PO364 2026-09-01 |
| 4 | Order Placed → Received | 16 | 0 | 0 | 0 | PO1055 2026-08-18 → IR1156 08-18 · PO1073 2026-09-21 → IR1157 09-21 |
| 5 | Billed (only) | 12 | 0 | 0 | 0 | #26022 2026-09-13 · #26042 2026-09-15 |
| 6 | Received (only) | 5 | 0 | 0 | 0 | IR311 2026-08-26 · IR317 2026-09-12 |
| 7 | Paid (only) | 3 | 0 | 0 | 0 | 167 2026-09-08 · 362 2026-09-24 |
| 8 | Order Placed → Billed → Received → Paid | 2 | 4 | 4 | 4 | PO1204 09-03 → #42202 09-05 → IR1217 09-06 → 1179 09-07 PO1192 09-12 → #42167 09-14 → IR1213 09-15 → 1167 09-16 |
| 9 | Credited (only) | 1 | 0 | 0 | 0 | 4433911592582809 2026-09-24 |
| 10 | Received → Order Placed → Billed → Paid | 1 | 35 | 35 | 35 | IR684 2026-01-08 → PO626 02-08 → #33413 02-09 → 241 2026-02-12 |
| 11 | Order Placed → Received → Billed → Return Authorised → Paid | 1 | 4 | 4 | 4 | PO1155 08-01 → IR1172 → #40097 08-02 → VRMA21 08-03 → #40099 08-05 |
| 12 | Order Placed → Received → Return Authorised → Return Authorised | 1 | 9 | 9 | 9 | PO1156 09-01 → IR1173 → VRMA22 09-02 → VRMA23 09-10 |
Remaining four (one each): the 14-event Generation N case anchored on PO1158 (345 days; §8-E); PO1162 with two bills and two payments; VB05 Billed → Paid (voided) → Paid; and one Order Placed → Billed with no receipt or payment.
Figure 4 — Documents per month by transaction date. The PO/receipt line runs at a flat 18 a month with quarterly spikes (Apr, Jul, Nov) and a step-up from June 2026; bills run at 30 a month — the 12-a-month surplus is the recurring non-PO cadence. September 2026 payment value ($538K) includes the $341,743 consolidated payment.
| Month | POs | Receipts | Bills | Payments | PO value | Bill value | Paid value |
|---|
| Transition | Count | Median | P90 | Max | Same-day | Examples |
|---|---|---|---|---|---|---|
| Billed → Paid | 991 | 3 | 3 | 17 | 30.5% | VB2 06-01 → 1 06-01 (0d) · #206 08-01 → 360 08-03 (2d) |
| Order Placed → Received | 719 | 0 | 0 | 2 | 97.8% | PO388 06-01 → IR406 06-01 · PO389 07-01 → IR407 07-01 |
| Received → Billed | 702 | 1 | 1 | 3 | 13.0% | IR406 06-01 → #31726 06-01 · IR407 07-01 → #31730 07-01 |
| Billed → Billed | 7 | 29 | 59.8 | 64 | 0% | VB01 2025-09-27 → VB02 2025-11-30 (64d) · PO1162 07-01 → #41129 07-03 (2d) |
| Order Placed → Billed | 3 | 2 | 2 | 2 | 0% | PO626 02-08 → #33413 02-09 · PO1204 09-03 → #42202 09-05 |
| Paid → Paid | 2 | 9.5 | 17.1 | 19 | 50% | #41130 07-04 → 1154 07-04 · 00000002/1 08-19 → #42228 09-07 (19d) |
| Billed → Received | 2 | 1 | 1 | 1 | 0% | #42202 09-05 → IR1217 09-06 · #42167 09-14 → IR1213 09-15 |
| Billed → Return Authorised | 2 | 0.5 | 0.9 | 1 | 50% | #40097 08-02 → VRMA21 08-03 · #40098 08-16 → VRMA20 08-16 |
The PO flow has no bottleneck: receipt on the order day, bill the next day, payment three days later. The waiting time worth managing is not a delay — it is the opposite.
Figure 5 — 1,004 non-voided bill→payment pairs by days between payment date and bill due date. Negative = paid early.
| Relative to due date | Pairs | Share |
|---|---|---|
| More than 30 days early | 99 | 9.9% |
| 8–30 days early | 895 | 89.1% |
| 1–7 days early | 0 | 0% |
| On due date | 1 | 0.1% |
| 1–7 days late | 2 | 0.2% |
| More than 30 days late | 7 | 0.7% |
| Total · median −28 days · P90 −14 | 1,004 | 100% |
994 of 1,004 payments (99.0%) were made before the due date, a median of 28 days early; bill-to-payment is a median of 3 days (30% same day) against what are evidently 30-day terms. Example: #40503 due 2024-12-03 paid by 1010 on 2024-11-01 (−32 days); #40505 due 2025-02-01 paid by 1012 on 2025-01-01 (−31). The only late payments are #206 (Cloud Consulting, +2 days) and the seven Generation N bills settled by #42228 at 95–330 days past due (§8-E). Working-capital estimate: bill value over the 24-month window is $3.40M ≈ $1.70M a year; paying a median 28 days early holds ≈ $1.70M × 28 ÷ 365 ≈ $130K permanently ahead of terms. If no early-payment discount is being captured, that is float given away.
| Component | Cycle days | Longest wait | Note |
|---|---|---|---|
| PO1158 (Generation N, 14 docs) | 345 | Billed VB08 2026-05-20 → Order Placed PO1158 2026-08-15 (87d) | VB01–VB08 non-PO bills joined to PO1158 by the consolidated payment #42228; §8-E |
| PO626 | 35 | Received IR684 2026-01-08 → Order Placed PO626 2026-02-08 (31d) | Receipt dated before its PO — date integrity |
| LP- interco alloc 3 | 17 | Billed 2026-09-10 → Paid 370 2026-09-27 (17d) | Flexsteel intercompany allocation bill |
| PO388 · PO389 · PO390 | 14 | Billed → Paid 14d on each (e.g. #31726 06-01 → 539 06-15) | The only PO chains paid on a 14-day cycle rather than 3 |
| PO1156 | 9 | VRMA22 09-02 → VRMA23 09-10 (8d) | Two return authorisations, no bill |
| PO1074 | 8 | Billed #39249 09-25 → Paid 332 09-30 (5d) | |
| PO1059 · PO1060 | 7 | Billed → Paid 4d |
Figure 6 — 1,053 components by conformance outcome against the two reference models (A8).
| Outcome | Components | Share |
|---|---|---|
| PO-backed, complete and conforming | 698 | 66.3% |
| PO-backed, conforming open prefix (18 ordered · 16 received · 1 billed) | 35 | 3.3% |
| Non-PO, complete (Billed → Paid) | 291 | 27.6% |
| Non-PO, open (Billed only) | 12 | 1.1% |
| Deviant | 17 | 1.6% |
| Conforming share | 1,036 of 1,053 | 98.4% |
| Pattern | Count | Root cause | Examples |
|---|---|---|---|
| Unlinked receipt | 5 | Receipts of transfer orders / return authorisations — out of P2P scope (§8-F) | IR311 2026-08-26 · IR317 2026-09-12 |
| Unlinked payment | 3 | 1 expense-report payment, 1 journal-sourced, 1 genuinely unlinked | 362 2026-09-24 $80 "Meal Allowance" · 167 2026-09-08 $59.98 "Vendor Returns - LP" |
| Billed before received | 2 | Bill entered one day before the receipt; both paid within 4 days | PO1204: #42202 09-05, IR1217 09-06 · PO1192: #42167 09-14, IR1213 09-15 |
| Return / credit present | 2 | Vendor returns on PO1155, PO1156 (Generation N) | PO1155 → VRMA21 Pending Credit · PO1156 → VRMA22, VRMA23 |
| Multiple bills for one PO | 1 | PO1162 billed twice (a bill carrying the PO's own number, then #41129), paid twice | PO1162 07-01 → IR1182 → PO1162 (bill) 07-01 → #41129 07-03 → #41130 · 1154 07-04 |
| Voided payment present | 1 | Payment voided and re-issued same day — the control worked; no recovery due | VB05 02-28 → 00000005/1-12102024-181841 (voided) 03-01 → 00000005/1 03-01 |
| Receipt before PO | 1 | Date integrity | IR684 2026-01-08 → PO626 2026-02-08 |
| PO not first (starts with Billed) | 1 | Seven non-PO bills joined to PO1158's chain by consolidated payment #42228 | VB01 2025-09-27 … VB08 → PO1158 2026-08-15 → … → #42228 2026-09-07 |
| Unlinked credit | 1 | Bill credit applied to nothing | 4433911592582809 2026-09-24 $29.99 |
Figure 7 — 7,721 PO lines classified by ordered / received / billed quantity.
| Line class | Lines | POs | Examples |
|---|---|---|---|
| Fully received and fully billed | 7,491 | 705 | PO388 uk443460 item 17518 qty 1 / 1 / 1 @ 2,000.00 |
| Received, not billed | 207 | 19 | PO1018 uk496538 item 80 qty 15 / 15 / 0 @ 30.00 · PO383 uk403615 item 42 qty 1 / 1 / 0 @ 167.50 |
| Open — nothing received or billed | 23 | 16 | PO314 uk257131 item 115 qty 2 / 0 / 0 @ 29.99 |
| Billed, not received · over-billed · over-received · partial · closed short | 0 | 0 | None |
| Header amount match (Σ bills vs PO total) | 705 exact · 0 within 1% · 0 variance | Every billed PO reconciles to the cent | |
Complete lists. Sortable. Amounts USD (absolute). Ages as at 2026-09-04; negative = future-dated.
| Bill | Id | Date | Due | Status | Vendor | Total | Unpaid | Days past due | PO | Memo |
|---|---|---|---|---|---|---|---|---|---|---|
| #27120 | 27120 | 2026-09-03 | 2026-10-02 | Open | Davidson Leasing | 120,000.00 | 120,000.00 | -28 | — | |
| VB843 | 31706 | 2026-09-03 | 2026-10-02 | Open | Cloud Consulting | 52,550.00 | 52,550.00 | -28 | — | |
| VB397 | 27859 | 2026-09-01 | 2026-09-30 | Open | Generation N | 2,995.00 | 2,995.00 | -26 | — | 4433911592582809 |
| INV-005 | 42266 | 2026-09-11 | 2026-09-11 | Pending Approval | Ad4tech Material LLC | 1,564.00 | 1,564.00 | -7 | — | Vendor bill from Ad4tech Material LLC - INV-005 |
| VB385 | 27109 | 2026-08-31 | 2026-09-30 | Open | Witt & Anderson | 1,500.00 | 1,500.00 | -26 | — | For Allocation Schedule |
| #41773 | 41773 | 2026-07-01 | 2026-07-31 | Pending Approval | Bedline | 1,500.00 | 1,500.00 | 35 | PO1173 | Only PO-backed open bill; 35 days past due in approval |
| LP- interco alloc 2 | 28668 | 2026-08-10 | 2026-08-25 | Open | Flexsteel | 1,000.00 | 1,000.00 | 10 | — | 4434236567426894 |
| #26022 | 26022 | 2026-09-13 | 2026-09-13 | Open | Well | 1,000.00 | 1,000.00 | -9 | — | |
| LP- interco alloc | 28666 | 2026-07-09 | 2026-07-24 | Open | Flexsteel | 1,000.00 | 1,000.00 | 42 | — | 4434236567426894 |
| VB842 | 31705 | 2026-09-01 | 2026-09-30 | Open | Cloud Consulting | 500.00 | 500.00 | -26 | — | |
| #26043 | 26043 | 2026-09-15 | 2026-09-15 | Open | Cable Plus Distributors | 389.00 | 389.00 | -11 | — | |
| #26042 | 26042 | 2026-09-15 | 2026-09-15 | Pending Approval | Lotion Co | 30.00 | 30.00 | -11 | — | |
| #26044 | 26044 | 2026-09-15 | 2026-10-15 | Pending Approval | Harris Technology | 20.00 | 20.00 | -41 | — | |
| 13 bills · 12 non-PO ($182,548.00) · 1 PO-backed ($1,500.00) · 4 Pending Approval | 184,048.00 | 184,048.00 | ||||||||
| Vendor | Bills | Total | Unpaid | First | Last | Pattern |
|---|---|---|---|---|---|---|
| FrisCo US | 48 | 476,235.00 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| Generation N | 9 | 378,528.00 | 2,995.00 | 2025-09-27 | 2026-09-01 | VB01–VB08 consolidated (§8-E) + VB397 |
| Dell US | 48 | 194,147.04 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| Brocade Communications Systems US | 48 | 161,788.88 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| Davidson Leasing | 1 | 120,000.00 | 120,000.00 | 2026-09-03 | 2026-09-03 | Single open bill, no PO, no memo |
| Staples US | 48 | 64,406.28 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| Cloud Consulting | 3 | 53,550.00 | 53,050.00 | 2026-08-01 | 2026-09-03 | Training fee; two open |
| XCOM US | 48 | 19,413.13 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| CDW US | 48 | 13,865.88 | 0.00 | 2024-10-01 | 2026-09-01 | Twice-monthly, card-number memo |
| Flexsteel | 3 | 3,000.00 | 2,000.00 | 2026-07-09 | 2026-09-10 | Intercompany allocation bills |
| Ad4tech Material LLC | 1 | 1,564.00 | 1,564.00 | 2026-09-11 | 2026-09-11 | Pending Approval |
| Witt & Anderson | 1 | 1,500.00 | 1,500.00 | 2026-08-31 | 2026-08-31 | Allocation schedule |
| Well | 1 | 1,000.00 | 1,000.00 | 2026-09-13 | 2026-09-13 | |
| Cable Plus Distributors | 1 | 389.00 | 389.00 | 2026-09-15 | 2026-09-15 | |
| EFX Imports | 1 | 350.00 | 0.00 | 2026-06-01 | 2026-06-01 | Postage meter rental |
| Evolve Transport Services | 1 | 120.00 | 0.00 | 2026-07-01 | 2026-07-01 | |
| Lotion Co | 1 | 30.00 | 30.00 | 2026-09-15 | 2026-09-15 | Pending Approval |
| Harris Technology | 1 | 20.00 | 20.00 | 2026-09-15 | 2026-09-15 | Pending Approval |
| 18 vendors · 288 recurring (6 vendors × 48) = $929,856.21 · 24 non-recurring = $560,051.00 | 312 | 1,489,907.21 | 182,548.00 | 43.8% of all bill value; PO-backed bills = 705, $1,912,826.02 | ||
| PO | Id | Date | Vendor | Total | Age days | Receipt | Note |
|---|---|---|---|---|---|---|---|
| PO1018 | 38739 | 2026-06-11 | Lotion Co | 5,140.00 | 85 | IR1163 2026-06-11 | Oldest |
| PO1053 | 38774 | 2026-08-14 | Lotion Co | 4,955.00 | 21 | IR1166 2026-08-14 | |
| PO1102 | 38823 | 2026-07-02 | Bedline | 4,357.50 | 64 | IR1158 2026-07-02 | |
| PO1048 | 38769 | 2026-08-07 | Mac Oca & Co. | 3,540.00 | 28 | IR1164 2026-08-07 | |
| PO1055 | 38776 | 2026-08-18 | The Apparel Co Inc. | 2,469.60 | 17 | IR1156 2026-08-18 | |
| PO1154 | 38875 | 2026-09-19 | The Apparel Co Inc. | 2,091.98 | -15 | IR1162 2026-09-19 | |
| PO1153 | 38874 | 2026-09-18 | The Apparel Co Inc. | 1,481.98 | -14 | IR1161 2026-09-18 | |
| PO1073 | 38794 | 2026-09-21 | The Apparel Co Inc. | 1,454.60 | -17 | IR1157 2026-09-21 | |
| PO1080 | 38801 | 2026-08-16 | Mac Oca & Co. | 790.00 | 19 | IR1165 2026-08-16 | |
| PO1081 | 38802 | 2026-09-11 | Mac Oca & Co. | 790.00 | -7 | IR1167 2026-09-11 | |
| PO1121 | 38842 | 2026-08-04 | Mac Oca & Co. | 636.00 | 31 | IR1168 2026-08-04 | |
| PO1151 | 38872 | 2026-09-16 | The Apparel Co Inc. | 396.96 | -12 | IR1159 2026-09-16 | |
| PO383 | 28875 | 2026-09-06 | Flexsteel | 335.00 | -2 | none | Lines show qty received 2 of 2, no receipt document |
| PO1156 | 40088 | 2026-09-01 | Generation N | 299.90 | 3 | IR1173 2026-09-01 | In return (VRMA22, VRMA23) |
| PO1152 | 38873 | 2026-09-17 | The Apparel Co Inc. | 279.96 | -13 | IR1160 2026-09-17 | |
| PO1143 | 38864 | 2026-09-08 | Betty Black, Inc. | 266.00 | -4 | IR1169 2026-09-08 | |
| PO1206 | 42218 | 2026-08-19 | Core4Solutions | 225.00 | 16 | IR1219 2026-08-19 | |
| PO1174 | 41785 | 2026-08-01 | Flexsteel | 167.50 | 34 | none | Lines show qty received, no receipt document |
| PO1181 | 42030 | 2026-09-09 | China Manufacturer | 29.99 | -5 | IR1200 2026-09-09 | |
| 19 POs · 207 lines · The Apparel Co 6 ($8,175.08) · Mac Oca 4 ($5,756.00) · Lotion Co 2 ($10,095.00) | 29,706.97 | Equals the line-level (received − billed) × rate exposure to the cent | |||||
| PO | Id | Date | Status | Vendor | Total | Age days | Memo |
|---|---|---|---|---|---|---|---|
| PO395 | 31845 | 2026-06-01 | Pending Receipt | Johnson Supply | 6,110.00 | 95 | Oldest and largest |
| PO1175 | 41794 | 2026-06-01 | Pending Receipt | Generation N | 37.00 | 95 | |
| PO1177 | 41796 | 2026-07-01 | Pending Receipt | Generation N | 299.99 | 65 | |
| PO1174 | 41785 | 2026-08-01 | Pending Bill | Flexsteel | 167.50 | 34 | See 8-C |
| PO1171 | 41765 | 2026-08-25 | Pending Supervisor Approval | China Manufacturer | 750.00 | 10 | |
| PO391 | 31836 | 2026-09-01 | Pending Supervisor Approval | Crown Equipment Corporation | 1,300.00 | 3 | LP - Purchase Request |
| PO1176 | 41795 | 2026-09-01 | Pending Receipt | Generation N | 37.00 | 3 | |
| PO364 | 27091 | 2026-09-01 | Pending Receipt | Generation N | 89.97 | 3 | |
| PO383 | 28875 | 2026-09-06 | Pending Bill | Flexsteel | 335.00 | -2 | See 8-C |
| PO314 | 24145 | 2026-09-08 | Pending Receipt | Generation N | 59.98 | -4 | |
| PO1157 | 40089 | 2026-09-15 | Pending Receipt | Generation N | 149.95 | -11 | DIG - P2P |
| PO1186 | 42047 | 2026-09-15 | Pending Receipt | Johnson Supply | 224.50 | -11 | |
| PO1178 | 41803 | 2026-09-20 | Pending Receipt | Generation N | 149.95 | -16 | Control Tower DB |
| PO374 | 27977 | 2026-09-25 | Pending Receipt | Interco Vendor US1 - US2 | 29.99 | -21 | Intercompany |
| PO375 | 28084 | 2026-09-25 | Pending Receipt | Interco Vendor US2 - US1 | 29.99 | -21 | Intercompany |
| PO394 | 31840 | 2026-09-27 | Pending Receipt | Generation N | 329.89 | -23 | LP - Adv Proc - Purchase Req |
| PO1183 | 42044 | 2026-09-27 | Pending Receipt | Generation N | 299.90 | -23 | |
| PO1187 | 42048 | 2026-09-30 | Pending Receipt | Bedline | 1,500.00 | -26 | |
| 18 POs · 14 Pending Receipt · 2 Pending Supervisor Approval · 2 Pending Bill without receipt document | 11,900.61 | Generation N 9 of 18 | |||||
| Document | Date | Status | Amount | Role in the process |
|---|---|---|---|---|
| VB01 · VB02 · VB03 · VB04 · VB06 · VB07 · VB08 | 2025-09-27 → 2026-05-20 | Paid In Full | 341,833.00 | Seven non-PO bills (memo 0722407033737), due 2025-10-12 → 2026-06-04, left open 95–330 days |
| VB05 | 2026-02-28 | Paid In Full | 33,700.00 | Paid by 00000005/1-12102024-181841 on 2026-03-01, voided, re-paid by 00000005/1 same day — near-miss, control worked |
| PO1158 → IR1174 → #40098 | 2026-08-15 / 08-15 / 08-16 | Fully Billed | — | PO received and billed next day via BillRcpt |
| VRMA20 → bill credit VRMA20 | 2026-08-16 | Credited | 89.97 | Return authorised and credited same day; credit applied inside #42228 |
| #42228 | 2026-09-07 | Bill Payment | 341,743.03 | = 341,833.00 (seven bills) − 89.97 (VRMA20 credit). The one consolidated payment in the account; reconciles to the cent |
| VRMA21 | 2026-08-03 | Pending Credit | 149.95 | Return on PO1155 — credit agreed, never received (32 days) |
| VRMA22 · VRMA23 | 2026-09-02 · 09-10 | Pending Return · Pending Approval | 119.96 · 29.99 | Two returns on PO1156, goods not yet shipped back |
| Bill credit 4433911592582809 | 2026-09-24 | Open | 29.99 | Credit received, applied to nothing |
| Prepayment 354 | 2026-09-24 | Paid | 99.97 | Prepayment not offset against any bill |
| Payment 167 | 2026-09-08 | Deposited | 59.98 | Linked to nothing; memo "Vendor Returns - LP"; PO314 ($59.98, same vendor) is Pending Receipt |
| VB397 | 2026-09-01 | Open | 2,995.00 | Open non-PO bill |
| PO314 · PO364 · PO1157 · PO1175 · PO1176 · PO1177 · PO1178 · PO1183 · PO394 | 2026-06 → 2026-09 | Pending Receipt | 1,453.63 | Nine of the fourteen unreceived POs |
One vendor carries every P2P edge case in the account: the only consolidated payment, the only late payments, the only void, all returns, both credits, the prepayment and the longest case. Whether Generation N is a real supplier relationship in distress or the demonstration vendor for procurement scenarios, it warrants one consolidated review rather than eleven tickets.
| Document | Date | Amount | Source | Disposition |
|---|---|---|---|---|
| IR311 · IR317 + 3 more receipts | 2026-08 / 09 | — | Transfer orders (3), return authorisations (2) | Out of P2P scope |
| Payment 362 | 2026-09-24 | 80.00 | Expense report ("Meal Allowance") | Out of scope |
| Payment (journal-sourced) | — | — | Journal → VendPymt link | Out of scope |
| Payment 167 | 2026-09-08 | 59.98 | None | Genuinely unlinked — §8-E |
| Bill credit 4433911592582809 | 2026-09-24 | 29.99 | None | Unapplied — §8-E |
| Limitation | Evidence | What it prevents |
|---|---|---|
| Day-level dates | trandate carries no time component | Same-day order/receipt/bill sequences (97.8% of PO→receipt) rely on the assumed rank (A4); same-day bill-before-receipt undetectable. |
| Bills without document numbers | 999 of 1,017 vendor bills have NULL tranid; two payments share number 167 and two share 362 | Bills cannot be cited by number; the vendor's invoice number is not captured for 98% of bills, so duplicate-invoice detection by reference is impossible. |
| No approval events | Status-change system notes on 7 bills, 0 POs; 4 bills and 2 POs currently pending approval | Approval lead time unmeasurable; #41773 (Bedline, $1,500) has sat in Pending Approval 35 days past its due date with no timestamp for when it entered. |
| Received quantity without receipt document | PO383 and PO1174 lines show quantityshiprecv > 0 with no ItemRcpt linked | Three-way match passes on quantity but the receiving evidence is absent; likely a direct edit or an import. |
| Demo-load dating | ~172 documents dated after 2026-09-04 (PO 46, VP 44, VB 42, IR 40); IR684 precedes PO626 by 31 days | Ages for recent items unreliable; one receipt-before-order case is dating, not process. |
| Recurring bills via card memo | 288 bills from 6 vendors carry a 16-digit card-number-like memo | Spend category and contract cannot be inferred from the bill; whether these are card statements or supplier invoices is undeterminable from the record. |
| Prepayments and credits not linked to bills | VPrep 354 and bill credit 4433911592582809 have zero links | Cannot tell whether they are awaiting application or forgotten. |
| Synthetic GL journals | Monthly "Beg Balance" journals JE102–JE149 (not in scope) | Any reconciliation to GL AP or expense must exclude them. |
Verbatim as executed. Q3–Q5 feed the shared reducer core; Q6–Q7 feed the three-way-match pass; the rest are probes and registers.
SELECT p.type AS prev_type, n.type AS next_type, l.linktype, COUNT(*) AS link_rows,
COUNT(DISTINCT l.previousdoc || '-' || l.nextdoc) AS distinct_pairs
FROM nexttransactionlinelink l JOIN transaction p ON p.id = l.previousdoc JOIN transaction n ON n.id = l.nextdoc
WHERE p.type IN ('PurchReq','PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth','VPrep','Check')
OR n.type IN ('PurchReq','PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth','VPrep','Check')
GROUP BY p.type, n.type, l.linktype ORDER BY COUNT(*) DESC
SELECT t.type, COUNT(*) AS docs, COUNT(DISTINCT t.status) AS statuses,
TO_CHAR(MIN(t.trandate),'YYYY-MM-DD') AS first_date, TO_CHAR(MAX(t.trandate),'YYYY-MM-DD') AS last_date,
SUM(CASE WHEN t.trandate > SYSDATE THEN 1 ELSE 0 END) AS future_dated,
SUM(CASE WHEN t.memo LIKE 'TEST%' THEN 1 ELSE 0 END) AS test_memo
FROM transaction t WHERE t.type IN ('PurchReq','PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth','VPrep','Check')
GROUP BY t.type ORDER BY COUNT(*) DESC
uk, no ORDER BY)SELECT tl.uniquekey AS uk, tl.transaction AS tid, tl.mainline, tl.createdfrom
FROM transactionline tl JOIN transaction t ON t.id = tl.transaction
WHERE t.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth')
SELECT t.id, t.type, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS trandate, TO_CHAR(t.duedate,'YYYY-MM-DD') AS duedate,
t.status, t.entity, t.foreigntotal AS total, t.foreignamountunpaid AS unpaid, t.memo
FROM transaction t WHERE t.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth')
SELECT DISTINCT l.previousdoc, l.nextdoc, l.linktype
FROM nexttransactionlinelink l JOIN transaction p ON p.id = l.previousdoc JOIN transaction n ON n.id = l.nextdoc
WHERE p.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth')
AND n.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth')
SELECT tl.uniquekey AS uk, tl.transaction AS tid, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS podate, t.status,
tl.item, tl.quantity AS qty, tl.quantityshiprecv AS qrecv, tl.quantitybilled AS qbill, tl.rate, tl.foreignamount AS amt, tl.isclosed
FROM transactionline tl JOIN transaction t ON t.id = tl.transaction
WHERE t.type = 'PurchOrd' AND tl.mainline = 'F' AND tl.taxline = 'F'
SELECT b.id AS bill_id, b.tranid AS bill_tranid, TO_CHAR(b.trandate,'YYYY-MM-DD') AS bill_date,
ROUND(ABS(b.foreigntotal),2) AS bill_total, l.previousdoc AS po_id
FROM transaction b JOIN nexttransactionlinelink l ON l.nextdoc = b.id AND l.linktype = 'OrdBill'
JOIN transaction p ON p.id = l.previousdoc AND p.type = 'PurchOrd'
WHERE b.type = 'VendBill' GROUP BY b.id, b.tranid, b.trandate, b.foreigntotal, l.previousdoc
SELECT x.type, x.status, x.docs, BUILTIN.DF(t.status) AS label
FROM (SELECT type, status, COUNT(*) AS docs, MIN(id) AS sample_id FROM transaction
WHERE type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt','VendCred','VendAuth','VPrep','PurchReq') GROUP BY type, status) x
JOIN transaction t ON t.id = x.sample_id ORDER BY x.type, x.docs DESC
SELECT t.type, COUNT(*) AS docs, SUM(CASE WHEN t.duedate IS NULL THEN 1 ELSE 0 END) AS null_duedate,
SUM(CASE WHEN t.terms IS NULL THEN 1 ELSE 0 END) AS null_terms,
(SELECT COUNT(DISTINCT sn.recordid) FROM systemnote sn JOIN transaction x ON x.id = sn.recordid
WHERE sn.recordtypeid = -30 AND sn.field = 'TRANDOC.KSTATUS' AND x.type = t.type) AS docs_with_status_notes
FROM transaction t WHERE t.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt') GROUP BY t.type
SELECT v.entityid AS vendor, COUNT(*) AS bills, ROUND(SUM(ABS(t.foreigntotal)),2) AS total, ROUND(SUM(t.foreignamountunpaid),2) AS unpaid,
MIN(TO_CHAR(t.trandate,'YYYY-MM-DD')) AS first_date, MAX(TO_CHAR(t.trandate,'YYYY-MM-DD')) AS last_date, MAX(t.memo) AS sample_memo
FROM transaction t LEFT JOIN vendor v ON v.id = t.entity
WHERE t.type = 'VendBill' AND NOT EXISTS (SELECT 1 FROM nexttransactionlinelink l JOIN transaction p ON p.id = l.previousdoc
WHERE l.nextdoc = t.id AND p.type = 'PurchOrd')
GROUP BY v.entityid ORDER BY SUM(ABS(t.foreigntotal)) DESC
SELECT t.id, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS trandate, TO_CHAR(t.duedate,'YYYY-MM-DD') AS duedate,
BUILTIN.DF(t.status) AS status_label, v.entityid AS vendor, ROUND(ABS(t.foreigntotal),2) AS total,
ROUND(t.foreignamountunpaid,2) AS unpaid, TRUNC(SYSDATE)-TRUNC(t.duedate) AS days_past_due, t.memo,
(SELECT MAX(p.tranid) FROM nexttransactionlinelink l JOIN transaction p ON p.id = l.previousdoc
WHERE l.nextdoc = t.id AND p.type = 'PurchOrd') AS po
FROM transaction t LEFT JOIN vendor v ON v.id = t.entity
WHERE t.type = 'VendBill' AND t.foreignamountunpaid > 0 ORDER BY t.foreignamountunpaid DESC
SELECT t.id, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS trandate, BUILTIN.DF(t.status) AS status_label, v.entityid AS vendor,
ROUND(ABS(t.foreigntotal),2) AS total, TRUNC(SYSDATE)-TRUNC(t.trandate) AS age_days,
(SELECT MAX(r.tranid) || ' ' || TO_CHAR(MAX(r.trandate),'YYYY-MM-DD') FROM nexttransactionlinelink l
JOIN transaction r ON r.id = l.nextdoc WHERE l.previousdoc = t.id AND r.type = 'ItemRcpt') AS receipt
FROM transaction t LEFT JOIN vendor v ON v.id = t.entity
WHERE t.type = 'PurchOrd' AND t.status = 'F' ORDER BY ABS(t.foreigntotal) DESC
SELECT t.id, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS trandate, BUILTIN.DF(t.status) AS status_label, v.entityid AS vendor,
ROUND(ABS(t.foreigntotal),2) AS total, TRUNC(SYSDATE)-TRUNC(t.trandate) AS age_days, t.memo
FROM transaction t LEFT JOIN vendor v ON v.id = t.entity
WHERE t.type = 'PurchOrd' AND NOT EXISTS (SELECT 1 FROM nexttransactionlinelink l JOIN transaction n ON n.id = l.nextdoc
WHERE l.previousdoc = t.id AND n.type = 'ItemRcpt')
ORDER BY t.trandate
SELECT t.type, t.id, t.tranid, TO_CHAR(t.trandate,'YYYY-MM-DD') AS trandate, BUILTIN.DF(t.status) AS status_label,
v.entityid AS vendor, ROUND(ABS(t.foreigntotal),2) AS total, t.memo,
(SELECT COUNT(*) FROM nexttransactionlinelink l WHERE l.nextdoc = t.id) AS inbound,
(SELECT COUNT(*) FROM nexttransactionlinelink l WHERE l.previousdoc = t.id) AS outbound
FROM transaction t LEFT JOIN vendor v ON v.id = t.entity
WHERE (t.type = 'VendPymt' AND (t.status = 'V' OR NOT EXISTS (SELECT 1 FROM nexttransactionlinelink l WHERE l.nextdoc = t.id)))
OR (t.type = 'ItemRcpt' AND NOT EXISTS (SELECT 1 FROM nexttransactionlinelink l WHERE l.nextdoc = t.id))
OR t.type IN ('VendCred','VendAuth','VPrep')
ORDER BY t.type, t.trandate
SELECT b.id, b.tranid, TO_CHAR(b.trandate,'YYYY-MM-DD') AS bill_date, TO_CHAR(b.duedate,'YYYY-MM-DD') AS due,
ROUND(ABS(b.foreigntotal),2) AS total, BUILTIN.DF(b.status) AS status_label, b.memo,
TRUNC(TO_DATE('2026-09-07','YYYY-MM-DD'))-TRUNC(b.duedate) AS days_late_at_payment
FROM transaction b JOIN nexttransactionlinelink l ON l.previousdoc = b.id AND l.nextdoc = 42228
WHERE b.type = 'VendBill' ORDER BY b.trandate
SELECT TO_CHAR(t.trandate,'YYYY-MM') AS ym, t.type, COUNT(*) AS docs, ROUND(SUM(ABS(t.foreigntotal)),2) AS total
FROM transaction t WHERE t.type IN ('PurchOrd','ItemRcpt','VendBill','VendPymt') AND t.trandate < TO_DATE('2026-10-01','YYYY-MM-DD')
GROUP BY TO_CHAR(t.trandate,'YYYY-MM'), t.type ORDER BY 1, 2
BUILTIN.DF(status) cannot sit inside GROUP BY (Q8 uses a sample-id subquery); a four-way self-join across link pairs errors — chains are assembled in the Worker; t.shipdate must not be selected alongside a transactionline join. Vendor bill foreigntotal is negative — every amount is wrapped in ABS().Four sqlReduce passes. Passes 1–3 share Q3 (stream) + Q4 + Q5 (materialised) and the core below; pass 4 streams Q6 with Q7 and PO headers materialised. Only the returned summaries entered the model context.
// fold — keep mainline rows and their createdfrom pointer
fold(acc,page){ for (r of page){ acc.linesIn++; if (r.mainline==='T'){ acc.mainlines++;
if (r.createdfrom) acc.cf.push([+r.createdfrom,+r.tid]); } } return acc; }
// finalize — docs from Q4; edges = distinct(Q5) ∪ acc.cf; drop self/out-of-scope; record source per edge
// events: activity by type; VendPymt status 'V' → 'Paid (voided)'; objects = own + upstream;
// payments inherit PurchOrd via VendBill; bills inherit ItemRcpt via BillRcpt
RANK = { 'Order Placed':0, 'Received':1, 'Billed':2, 'Paid':3, 'Paid (voided)':3, 'Return Authorised':4, 'Credited':5 }
cmp = (a,b) => a.ts < b.ts ? -1 : a.ts > b.ts ? 1 : (RANK[a.activity]-RANK[b.activity]) || (a.docId-b.docId)
// components: union-find → sorted trace, variant, cycle = daysBetween(first,last)
// Pass 1: funnel; objects by type; edge/doc reachability by source; seven multiplicity histograms
// Pass 2: H.ocdfg(events,{tieBreak}); PO traces; payment traces (payment + bills + their POs + POs' receipts
// + BillRcpt receipts); H.dfg on both; variants; transitions; two-model conformance;
// due-date timing: for each non-voided bill→payment pair, rel = daysBetween(bill.duedate, pay.date)
// Pass 3: payment perspective detail; variants 5–16; slowest 10; open PO components by last activity × status
// Pass 4 (three-way match): per PO line classify (qty, qrecv, qbill, isclosed) →
// full | openNotRecv | recvNotBilled | billedNotRecv | overBilled | overRecv | partialRecv | partialBill | closedShort
// exposure: Σ (qrecv − qbill) × rate on recvNotBilled; header: Σ OrdBill bills vs PO foreigntotal (exact / ≤1% / over / under)
Conformance rules — PO-backed: starts with Order Placed; one PO; no return/credit/void; ≤ 1 Billed; ≤ 1 Paid; nothing after Paid; Paid requires Billed and Received; every Received after the Billed → "billed before received". Non-PO: exactly Billed → Paid (complete) or Billed (open); anything else deviant with a named reason.
| Step | Document | Internal id | Date | Status | Amount | Link |
|---|---|---|---|---|---|---|
| Order Placed | PO388 | 31725 | 2026-06-01 | Fully Billed | 3,300.00 | 2 lines: item 17518 qty 1 @ 2,000; item 17519 qty 1 @ 1,300 |
| Received | IR406 | — | 2026-06-01 | Item Receipt | — | ntll ShipRcpt; createdfrom = 31725 |
| Billed | #31726 | 31726 | 2026-06-01 | Paid In Full | 3,300.00 | ntll OrdBill; createdfrom = 31725; header match exact |
| Paid | 539 | — | 2026-06-15 | Bill Payment | 3,300.00 | ntll Payment; 14 days after bill |
| Cycle = 14 days. Variant 1. Conforming, complete. Lines: both qty 1 / recv 1 / billed 1 → class "full". One of only three PO chains paid on a 14-day cycle. | ||||||
| Consolidated payment reconciliation | ||||||
| Paid | #42228 | 42228 | 2026-09-07 | Bill Payment | 341,743.03 | 7 inbound ntll Payment links |
| VB01 22,499.00 + VB02 22,575.00 + VB03 30,100.00 + VB04 31,000.00 + VB06 55,660.00 + VB07 69,699.00 + VB08 110,300.00 = 341,833.00; less bill credit VRMA20 89.97 (ntll VendBill→VendCred Payment) = 341,743.03 ✓. Days late at payment: 330, 269, 238, 210, 153, 124, 95. | ||||||
Arithmetic checks. Conformance 698 + 35 + 291 + 12 + 17 = 1,053 ✓; (1,053 − 17) / 1,053 = 0.9839 ✓. Edges 722 + 705 + 1,005 + 19 + 4 + 1 + 1 + 1 = 2,458 ✓. Bill value: PO-backed 1,912,826.02 + non-PO 1,489,907.21 = 3,402,733.23; non-PO share 43.8% ✓. Open bills: 182,548.00 + 1,500.00 = 184,048.00 = Σ register 8-A ✓. Received-not-billed: Σ 19 PO totals = 29,706.97 = line-level exposure ✓. Due-date buckets 99 + 895 + 0 + 1 + 2 + 7 = 1,004 ✓. Deviations 5 + 3 + 2 + 2 + 1 + 1 + 1 + 1 + 1 = 17 ✓. Component sizes 39 + 307×2 + 2×3 + 702×4 + 5 + 6 + 14 = 3,492 documents ✓.
| Type | Code | Label | Docs |
|---|---|---|---|
| PurchOrd | G | Fully Billed | 705 |
| PurchOrd | F | Pending Bill | 19 |
| PurchOrd | B | Pending Receipt | 14 |
| PurchOrd | A | Pending Supervisor Approval | 2 |
| ItemRcpt | Y | (no status) | 727 |
| VendBill | B | Paid In Full | 1,004 |
| VendBill | A | Open | 9 |
| VendBill | D | Pending Approval | 4 |
| VendPymt | Y | (no status) | 1,001 |
| VendPymt | V | Voided | 1 |
| VendAuth | A / B / F / G | Pending Approval / Pending Return / Pending Credit / Credited | 1 each |
| VendCred | Y | (no status) | 2 |
| VPrep | B | Paid | 1 |
| Linktype | From → To | Rows → pairs | Meaning |
|---|---|---|---|
| ShipRcpt | PurchOrd → ItemRcpt | 7,695 → 722 | Receipt of PO lines |
| OrdBill | PurchOrd → VendBill | 7,491 → 705 | Billing of PO lines |
| Payment | VendBill → VendPymt / VendCred | 1,006 | Payment or credit applied to bill |
| BillRcpt | ItemRcpt → VendBill | 66 → 19 | Bill created from receipt |
| PurchRet | PurchOrd → VendAuth | 8 → 4 | Vendor return authorisation |
| DropShip / SpecOrd / CtrctOrd / POrdBlnk | SalesOrd / WorkOrd / PurchCon / BlankOrd → PurchOrd | 6 | PO origins (out of scope) |
| LandCost / RevRec / TOrdCost | various | 5 | Costing links (out of scope) |
Three-way match — PO quantity/amount vs receipt vs bill. GR/IR — goods received / invoice received accrual for received-not-billed lines. Convergence — objects of one type touched by one event. Component — maximal linked document set (the case). ntll — nexttransactionlinelink.
| Item | Value |
|---|---|
| Account / environment | TD3016323 · production · OneWorld · USD |
| Analysis date | 2026-09-04 (SYSDATE for ages) |
| Tooling | Sonar AI v1.15.0 · sqlReduce streaming fold (keyset on transactionline.uniquekey) · runSql registers · no records created, modified or deleted |
| Stream statistics | Q3: 29,786 rows · 6 pages · 2.2–2.9 s · ~22 KB on wire per pass (≈ 80:1 vs 1.8 MB decoded) · Q6: 7,721 rows · 2 pages · 1.0 s |
| Materialised inputs | Q4 headers 3,492 · Q5 links 2,458 · Q7 bills 705 · PO headers 740 |
| Worker time | Pass 1 3.0 s · Pass 2 2.5 s · Pass 3 2.5 s · Pass 4 1.0 s |
| Percentile method | Exact (A12) |
| Privacy | Vendor names appear in §8 as recorded; a redacted edition can be produced on request |
| Companion | Order-to-Cash Object-Centric Process Mining, same account and date; the two share the reducer core and the Precision Slate template |