AP_HOLDS_ALL — HOLD_LOOKUP_CODE = PO_CLOSED (INV-2026-00881, INV-2026-00882)
PO header, line, shipment, and distribution integrity — approval status, vendor and site validity, distribution CCID validation, encumbrance status, funds check, and change order history.
Oracle EBS Purchase Order failures span the entire PO lifecycle — from the moment a buyer creates a standard PO in PO_HEADERS_ALL through approval, receiving, and final closure. The most operationally disruptive PO issues are those that block the downstream AP invoice matching process: a PO line that has been fully received but still shows OPEN status, a PO that was approved but whose authorization status reverted to IN PROCESS due to a workflow error, or a PO distribution with a disabled GL account that blocks both the encumbrance entry and the eventual AP distribution match.
PO approval status inconsistencies are the primary source of downstream AP holds. When a PO is approved in Oracle, PO_HEADERS_ALL.AUTHORIZATION_STATUS is set to APPROVED and the workflow item in WF_ITEMS is closed. If the workflow engine stalls after marking the PO approved but before closing the workflow item cleanly, the PO may show APPROVED in the buyer screen but have an orphaned workflow item that prevents re-approval, amendment, or cancellation. AP invoices matched to this PO will hold at validation because the PO approval status cannot be re-confirmed by the matching engine.
PO closure conditions are the second major complexity area. Oracle EBS automatically closes PO lines when the billed quantity reaches the ordered quantity (bill-close tolerance) or when the received quantity reaches the ordered quantity (receive-close tolerance). When these tolerances are configured incorrectly — or when a PO line was manually forced closed before all invoices were matched — AP invoices attempting to match against the closed line receive a PO_CLOSED hold that cannot be released without reopening the line. PO-01 checks closure status and tolerance configuration against the actual received and billed quantities.
PO-01 runs a complete purchase order diagnostic — header authorization status and workflow state, line status by type (STANDARD, BLANKET, CONTRACT), distribution account validity across all distribution lines, shipment receipt status vs ordered quantity, invoice matching status and any active AP holds, encumbrance balance vs PO commitment, and closure tolerance configuration against actual received and billed quantities.
PO-01 systematically investigates every major condition that can cause the issue this diagnostic targets. Below is the complete coverage breakdown.
Representative output showing the diagnostic running against a real-world scenario. The script identifies every condition, states the root cause, and generates the fix.
════════════════════════════════════════════════════════════
ORACLE EBS R12 — PURCHASE ORDER DIAGNOSTIC
════════════════════════════════════════════════════════════
PO Number : PO-2026-004481
Supplier : Acme Technology Solutions
Operating Unit : US Primary OU
Case Number : PO-481022
Report Date : 20-FEB-2026 10:15:33
════════════════════════════════════════════════════════════
[ SECTION 1 — HEADER STATUS ] STATUS: ✓ APPROVED
────────────────────────────────────────────────────────────
Authorization : APPROVED ✓
PO Status : OPEN ✓
Workflow Item : PO_APPROVAL — COMPLETE ✓
[ SECTION 2 — LINE STATUS ] STATUS: ✗ ISSUE
────────────────────────────────────────────────────────────
Line 1 — Laptops : Qty 50 ordered, 50 received, 48 billed
Line 1 Status : CLOSED — closed before final 2 invoices matched ✗
Line 2 — Monitors : Qty 30 ordered, 30 received, 30 billed — CLOSED ✓
✗ FAIL: Line 1 closed — 2 unmatched AP invoices will receive PO_CLOSED hold
[ SECTION 3 — DISTRIBUTIONS ] STATUS: ✓ PASS
────────────────────────────────────────────────────────────
All 3 distribution CCIDs active ✓
[ SECTION 4 — AP MATCHING STATUS ] STATUS: ✗ FAIL
────────────────────────────────────────────────────────────
Invoices on Hold : 2 invoices — PO_CLOSED hold ✗
Invoice 1 : INV-2026-00881 — $12,400 — PO_CLOSED hold
Invoice 2 : INV-2026-00882 — $12,400 — PO_CLOSED hold
[ SECTION 5 — ENCUMBRANCE ] STATUS: ✓ PASS
────────────────────────────────────────────────────────────
Encumbrance balance matches PO commitment ✓
════════════════════════════════════════════════════════════
DIAGNOSTIC SUMMARY
════════════════════════════════════════════════════════════
1 blocking condition: PO Line 1 closed prematurely
FIX: Reopen PO Line 1 — 2 AP invoices will release from PO_CLOSED hold
════════════════════════════════════════════════════════════
Backup Created : CONS_BACKUP.PO_LINE_LOCATIONS_ALL_481022 ✓
Registry ID : 6041
════════════════════════════════════════════════════════════
Every table touched by PO-01 data fixes is backed up before the first UPDATE fires. Backup is verified by row count. One script restores the original state if needed.
Backup happens before any DML. Script aborts if backup creation fails.
This article is produced automatically at the end of every PO-01 execution — written from actual run output. No manual documentation required.
PO line manually closed before all AP invoices were matched. Outstanding invoices receive PO_CLOSED hold at validation. PO-01 confirms remaining unmatched quantity and reopens the line with full backup.
PO stuck in IN PROCESS or REQUIRES REAPPROVAL. Workflow item exists but has not progressed. PO-01 identifies the stall point and the resubmission path vs Oracle Support escalation.
PO distribution references a disabled GL account — blocks both the encumbrance entry at approval and the AP distribution match at invoice validation. PO-01 remaps to the active replacement CCID.
Received quantity exceeds ordered quantity, or received quantity does not match the supplier's invoice quantity. PO-01 identifies the receipt line and the RTV or correction path.
| Table | Module | Purpose |
|---|---|---|
| PO_HEADERS_ALL | PO | PO header — authorization status, type, supplier |
| PO_LINES_ALL | PO | PO lines — item, quantity, unit price |
| PO_LINE_LOCATIONS_ALL | PO | Shipments — closed code, received/billed qty, tolerances |
| PO_DISTRIBUTIONS_ALL | PO | Distributions — CCID, encumbrance amount |
| RCV_SHIPMENT_LINES | PO | Receipt lines — received quantity |
| AP_HOLDS_ALL | AP | Invoice holds — PO_CLOSED, QUANTITY ORDERED, PRICE |
| GL_BC_PACKETS | GL | Encumbrance balance packets |
| WF_ITEMS | WF | PO approval workflow item state |
| AP_INVOICES_ALL | AP | Invoices matched to PO — validation status |
| GL_CODE_COMBINATIONS | GL | Distribution CCID active status |
Before any data is modified in a production Oracle database, AP-01 walks through a four-stage decision process. Every condition identified by the diagnostic maps to exactly one resolution path.
Oracle's own forms and concurrent programs are always the first option. If the condition can be corrected through Oracle's standard UI — a form, a concurrent program, a setup screen — that path is taken first. No consultant SQL required, no database risk, and the fix is fully supported by Oracle. The diagnostic identifies these conditions explicitly and states the exact front-end navigation path.
When the front-end path is unavailable or would require an unacceptable volume of manual steps, a direct fix is evaluated against explicit criteria. All of the following must be true before proceeding:
Certain table areas are never touched directly, regardless of how well the underlying structure is understood. The diagnostic flags these conditions and generates the Service Request documentation:
XLA_EVENTS, XLA_AE_HEADERS — incorrect changes corrupt the subledger audit trail in ways undetectable until period close fails or an auditor requests a reconciliationWF_ITEMS, WF_ITEM_ACTIVITY_STATUSES — ad-hoc DML can corrupt the workflow engine state instance-wideA timestamped backup table is created and row-count verified before the first UPDATE fires. Explicit parameter confirmation is required — the script will not self-execute. After execution, a verification query confirms the expected state. A complete change record — rows affected, before and after values, database username, timestamp — is written to the FIX_BACKUP_REGISTRY and becomes the primary artifact in the knowledge base entry for this incident.
| Condition Identified | Resolution Path | Notes |
|---|---|---|
| PO line closed prematurely — AP invoices on PO_CLOSED hold | Direct Fix | PO-01 sets CLOSED_CODE back to OPEN in PO_LINE_LOCATIONS_ALL with full backup. Pre-flight confirms the billed quantity is still below the ordered quantity before reopening. |
| Authorization status IN PROCESS — workflow stalled | Functional First | Resubmit PO for approval via Purchasing > Purchase Orders > Approve. PO-01 identifies the workflow item state and confirms whether the stall is recoverable through resubmission. |
| Orphaned workflow item — APPROVED but WF not closed | Oracle Support | Orphaned WF_ITEMS for PO approval are not directly modifiable. PO-01 documents the item key and activity status for the Oracle Support SR. |
| Distribution CCID disabled — encumbrance and AP hold | Direct Fix | PO-01 remaps CODE_COMBINATION_ID in PO_DISTRIBUTIONS_ALL to the active replacement CCID with full backup. Both the encumbrance entry and the AP distribution must reference the corrected CCID. |
| PO quantity over-received — receipt exceeds ordered qty | Functional First | Correct via Return to Vendor transaction in Oracle Receiving. PO-01 identifies the receipt line, over-received quantity, and the RTV navigation path. |
| PO on payment hold — supplier hold active | Functional First | Release the supplier payment hold via Suppliers > Edit > Payment Details. PO-01 identifies the hold type and the AP invoices blocked by the supplier-level hold. |
| Encumbrance balance mismatch — GL_BC_PACKETS not reconciled | Direct Fix | PO-01 calculates the encumbrance variance and generates the correcting GL_BC_PACKETS entry with full backup and explicit Controller authorization before execution. |
| PO in REQUIRES REAPPROVAL after amendment | Functional First | Resubmit for approval via the standard PO approval process. PO-01 identifies which amendment triggered the reapproval requirement and the current approver in the workflow queue. |
Before any data fix runs, the script verifies pre-flight conditions and creates a complete verified backup. If any check fails, the script aborts. There is no partial execution path.
Before the first UPDATE fires, the script creates a complete copy of every row to be modified. Tables are named CONS_BACKUP.<TABLE>_<CASE#> and persist permanently after execution.
INSERT from the backup table. No reconstruction required.The knowledge base article is generated automatically from the script's execution output. No manual documentation required. It becomes the institutional record — for the team, for auditors, and for every future engagement in the same environment.
References the Oracle public documentation for this diagnostic area. These links open directly on docs.oracle.com.
| R12 Guide (PDF) | Title & Chapter | Detail |
|---|---|---|
| 120poug.pdf | Oracle Purchasing User's Guide — Chapter 4: Purchase Orders | Ch. 4: Entering POs, distributions, tolerances, and shipment lines |
| 120poug.pdf | Oracle Purchasing User's Guide — Ch. 2: Approval, Security, and Control | Ch. 2: Document status checks, submission checks, and control applicability matrix |
| 120apug.pdf | Oracle Payables User's Guide — Ch. 3: Matching to Purchase Orders | pp. 3-30 to 3-68: Two-way and three-way PO matching and matching hold resolution |
PO-01 is one of 65 diagnostic scripts covering every major Oracle EBS and Fusion module. William A. Green Consulting runs the script in your environment, applies guided data fixes, and builds the knowledge base that prevents the same issues from recurring.
See this script run autonomously — Oracle AI Platform →