{
  "test_id": "ORCL.P2P.AP.INV.HOLD",
  "scenario_name": "Invoice Holds",
  "application": "Oracle Fusion Cloud",
  "product": "Financials",
  "module": "Accounts Payable",
  "process": "Invoice Processing",
  "business_flow": "Procure-to-Pay",
  "scenario_type": "Positive / Functional",
  "priority": "High",
  "automation_status": "SyntraFlow Ready",
  "library": "Syntra Standard",
  "canonical_url": "https://www.syntraflow.cloud/oracle-erp-testing-tool/test-library/financials/accounts-payable/invoice-processing/invoice-holds/",
  "objective": {
    "intro": "Validate that Oracle Fusion applies, maintains, and releases invoice holds according to configured matching tolerances, account validation rules, supplier controls, and budgetary conditions, without allowing held invoices to reach accounting or payment prematurely.",
    "confirms": [
      "Manual holds applied by an AP user are correctly recorded against the invoice header and block scheduled payment where configured.",
      "Matching holds (Qty Ord, Qty Rec, Price, Tax, Rate Variance) are raised when PO-matched invoice lines exceed configured matching tolerances.",
      "Distribution and accounting holds (Distribution Variance, Invalid Account) are raised when distributions fail to sum to the invoice amount or reference an invalid or inactive account combination.",
      "Supplier-level controls (Hold All Payments, Hold Unvalidated Invoices, Hold Unmatched Invoices) configured at the supplier site are honored during invoice Validation.",
      "Duplicate Invoice holds are raised when supplier invoice number, invoice date, and invoice amount match an existing invoice for the same supplier.",
      "Budgetary control holds are raised when the funds check fails against available budget for one or more invoice distributions.",
      "Held invoices are correctly excluded from Create Accounting and Create Payment Process Request selection until released.",
      "Holds are released automatically on revalidation for system-releasable conditions, and only via explicit action for manual or non-releasable holds.",
      "Invoice status, hold name, hold reason, and hold-applied/hold-released dates are accurately reflected in Manage Invoices after each Validate action."
    ],
    "scope_note": "Scope includes both the hold-application and hold-release paths; a test that intentionally creates a hold passes when the expected hold is correctly applied, and a resolution test passes when Correct Exception then Revalidate results in the expected hold being released."
  },
  "preconditions": [
    "Supplier and supplier site are active in Oracle Fusion Payables with defined payment terms and a matching option (2-way, 3-way, or 4-way).",
    "An approved, open purchase order with receipted lines exists to drive matching-hold scenarios.",
    "Matching tolerance templates (Qty Ord %, Price %, Amount tolerances) are configured at the required matching tolerance level.",
    "Invoice Options at the supplier site enable Hold Unmatched Invoices and Hold Unvalidated Invoices where those scenarios are tested.",
    "The chart of accounts includes at least one intentionally invalid or inactive account combination reserved for negative testing.",
    "Budgetary control is enabled on the business unit and ledger with a defined budget and a known available-funds boundary.",
    "AP Manager or AP Specialist role includes the Invoice Hold and Release Management duty role for manual hold actions.",
    "DataVault seed data for standard invoice header, line, and distribution fields is available and reusable across hold scenarios.",
    "The test business unit, ledger, and GL period are configured Open for the invoice date used in test data."
  ],
  "test_data": [
    {
      "field": "Supplier",
      "example": "Global Office Supplies Inc."
    },
    {
      "field": "Supplier Site",
      "example": "NYC-HQ"
    },
    {
      "field": "Invoice Number",
      "example": "HOLD-INV-2001"
    },
    {
      "field": "Invoice Amount",
      "example": "12,450.00 USD"
    },
    {
      "field": "PO Number",
      "example": "PO-88214"
    },
    {
      "field": "Matching Type",
      "example": "3-Way (PO, Receipt, Invoice)"
    },
    {
      "field": "Quantity Ordered / Invoiced",
      "example": "100 / 115 units"
    },
    {
      "field": "Price Tolerance",
      "example": "\u00b13% (PO Price $50.00)"
    },
    {
      "field": "Distribution Account",
      "example": "01-000-7420-0000-000 (invalid segment)"
    },
    {
      "field": "Hold Type",
      "example": "Price"
    },
    {
      "field": "Budget Available",
      "example": "$8,000.00 (FY26, Period 08)"
    },
    {
      "field": "Duplicate Check Fields",
      "example": "Invoice Number + Supplier + Invoice Date"
    }
  ],
  "business_steps": [
    {
      "step_number": 1,
      "step_name": "Create PO-matched invoice",
      "action": "Create an invoice header and lines referencing an approved purchase order, with an invoiced quantity that exceeds the receipted quantity beyond tolerance.",
      "test_data": "PO-88214; Ordered 100 / Invoiced 115 units",
      "expected_result": "Invoice is created and saved in Incomplete status pending validation.",
      "validation_type": "action"
    },
    {
      "step_number": 2,
      "step_name": "Enter invoice distributions",
      "action": "Enter distribution lines for the invoice, including one line coded to an intentionally invalid or inactive account combination.",
      "test_data": "Distribution Account: 01-000-7420-0000-000 (invalid)",
      "expected_result": "Distributions are saved and total matches the invoice amount, pending account validation.",
      "validation_type": "action"
    },
    {
      "step_number": 3,
      "step_name": "Submit invoice for Validation",
      "action": "Run the Validate action on the invoice to trigger matching, account, duplicate, and budgetary control checks.",
      "test_data": "",
      "expected_result": "Oracle Fusion evaluates all configured validation, matching, and budgetary rules against the invoice.",
      "validation_type": "action"
    },
    {
      "step_number": 4,
      "step_name": "System applies quantity matching hold",
      "action": "System detects invoiced quantity exceeds the ordered/receipted quantity beyond the configured tolerance and applies a matching hold.",
      "test_data": "Tolerance: \u00b15%; Variance: 15%",
      "expected_result": "Invoice status shows Needs Revalidation with hold \"Qty Ord\" recorded on the invoice.",
      "validation_type": "action",
      "note": "System-detected exception, not a manual user action."
    },
    {
      "step_number": 5,
      "step_name": "System applies invalid account hold",
      "action": "System detects the distribution references an invalid or inactive account combination and applies an accounting hold.",
      "test_data": "Account: 01-000-7420-0000-000",
      "expected_result": "Hold \"Invalid Account\" is recorded and the invoice is blocked from Create Accounting.",
      "validation_type": "action"
    },
    {
      "step_number": 6,
      "step_name": "System applies duplicate invoice hold",
      "action": "System compares invoice number, invoice date, and amount against existing invoices for the same supplier and detects a match.",
      "test_data": "Duplicate of Invoice HOLD-INV-2000",
      "expected_result": "Hold \"Duplicate Invoice\" is recorded on the invoice.",
      "validation_type": "action"
    },
    {
      "step_number": 7,
      "step_name": "System applies budgetary control hold",
      "action": "System performs a funds check against the available budget for the invoice distribution and finds insufficient funds.",
      "test_data": "Available Budget: $3,200; Distribution: $5,000",
      "expected_result": "Hold \"Insufficient Funds\" is recorded and the invoice cannot be accounted until funds are available or overridden.",
      "validation_type": "action"
    },
    {
      "step_number": 8,
      "step_name": "AP specialist applies manual hold",
      "action": "AP specialist places a manual hold on the invoice header pending internal review, independent of any system-detected exception.",
      "test_data": "Hold Name: Hold for Investigation",
      "expected_result": "Manual hold is recorded with reason and applied-by user captured.",
      "validation_type": "action"
    },
    {
      "step_number": 9,
      "step_name": "Verify held invoice excluded from payment",
      "action": "Attempt to include the held invoice in a Create Payment Process Request selection batch.",
      "test_data": "",
      "expected_result": "Invoice is correctly excluded from the payment selection while any hold remains active.",
      "validation_type": "action"
    },
    {
      "step_number": 10,
      "step_name": "Correct matching exception",
      "action": "Receiving updates the receipt to reflect the actual delivered quantity, bringing the invoice within matching tolerance.",
      "test_data": "Corrected Receipt Quantity: 110 units",
      "expected_result": "Quantity variance is now within the configured \u00b15% tolerance.",
      "validation_type": "action"
    },
    {
      "step_number": 11,
      "step_name": "Correct distribution account",
      "action": "Finance updates the distribution line to a valid, active account combination.",
      "test_data": "Corrected Account: 01-000-7420-1000-000",
      "expected_result": "Distribution now references a valid account combination.",
      "validation_type": "action"
    },
    {
      "step_number": 12,
      "step_name": "Resolve duplicate invoice condition",
      "action": "AP specialist confirms the invoice is not a true duplicate and corrects the invoice number, or cancels the true duplicate.",
      "test_data": "Corrected Invoice Number: HOLD-INV-2001-A",
      "expected_result": "Invoice no longer matches an existing invoice on number, date, and amount.",
      "validation_type": "action"
    },
    {
      "step_number": 13,
      "step_name": "Resolve budgetary shortfall",
      "action": "Budget owner increases available funds or records an authorized budgetary override for the distribution.",
      "test_data": "Override Approved: Budget Manager",
      "expected_result": "Funds check condition for the distribution is satisfied.",
      "validation_type": "action"
    },
    {
      "step_number": 14,
      "step_name": "Manually release non-system-releasable hold",
      "action": "AP specialist releases the manual \"Hold for Investigation\" hold via Manage Holds after completing internal review.",
      "test_data": "Release Reason: Review complete, no exception found",
      "expected_result": "Manual hold is released with release reason, user, and date captured.",
      "validation_type": "action"
    },
    {
      "step_number": 15,
      "step_name": "Revalidate invoice",
      "action": "Resubmit the invoice for Validation after all triggering conditions have been corrected.",
      "test_data": "",
      "expected_result": "Qty Ord, Invalid Account, Duplicate Invoice, and Insufficient Funds holds are automatically released; invoice status becomes Validated.",
      "validation_type": "action"
    },
    {
      "step_number": 16,
      "step_name": "Confirm invoice fully released and eligible for downstream processing",
      "action": "Verify the invoice carries no active holds and is eligible for Create Accounting and payment selection, with a complete hold history retained.",
      "test_data": "",
      "expected_result": "Invoice status is Validated with zero active holds; hold-applied and hold-released events are fully recorded in the audit trail.",
      "validation_type": "business_assertion"
    }
  ],
  "expected_results": [
    "Invoice remains in a held / Needs Revalidation status until every applicable hold is released.",
    "Qty Ord hold is correctly applied when invoiced quantity exceeds ordered/receipted quantity beyond tolerance.",
    "Invalid Account hold is correctly applied and blocks accounting until the account combination is corrected.",
    "Duplicate Invoice hold is correctly applied for genuine duplicate invoice number, date, and amount matches.",
    "Insufficient Funds (budgetary control) hold is correctly applied when budget is unavailable for a distribution.",
    "Manual hold is correctly applied and enforced against payment selection independent of system checks.",
    "Held invoices are excluded from Create Payment Process Request and Create Accounting until all holds clear.",
    "Each hold is released only after its specific triggering condition is genuinely corrected, never prematurely.",
    "Revalidation clears resolved holds without re-triggering unrelated exceptions on the same invoice.",
    "Hold history (applied by, applied date, released by, released date, reason) is retained for audit."
  ],
  "validation_checkpoints": [
    "Invoice header status transitions correctly: Incomplete -> Needs Revalidation -> Validated.",
    "Hold name, hold type, and hold reason recorded match the specific triggering exception.",
    "Manage Holds page lists all active holds with an accurate system-releasable versus manual-release-required indicator.",
    "Held invoice cannot be selected in Create Payment Process Request while any hold is active.",
    "Held invoice cannot be transferred to General Ledger via Create Accounting until released.",
    "Matching holds clear automatically on revalidation after the underlying PO or receipt correction.",
    "Invalid Account hold clears only after the distribution references a valid, active account combination.",
    "Duplicate Invoice hold requires explicit resolution (correction or cancellation) and never auto-clears.",
    "Budgetary control hold clears when the funds check passes or an authorized override is recorded.",
    "Manual hold clears only via an explicit release action by an authorized user, never automatically on revalidation.",
    "Hold audit trail (applied/released timestamps, user, reason) is complete and accurate for every hold.",
    "Invoice line and distribution amounts remain unchanged by hold application or release."
  ]
}