{
  "test_id": "ORCL.P2P.AP.INV.VALIDATE",
  "scenario_name": "Invoice Validation",
  "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-validation/",
  "objective": {
    "intro": "Invoice Validation tests confirm that Oracle Fusion Payables' validation engine correctly checks a submitted invoice for distribution completeness, valid accounting, matching tolerance, tax accuracy, open-period status, and (where applicable) available budget before allowing the invoice to progress. This is a control-gate scenario, not a data-entry scenario.",
    "confirms": [
      "Distribution lines sum to 100% of the invoice header amount and reference valid, active GL account combinations",
      "The invoice accounting date falls within an open or future-enterable GL period for the ledger",
      "PO-matched invoices are evaluated against configured price, quantity, and receipt tolerance sets",
      "Tax lines calculate correctly against the assigned tax classification code and reconcile to the invoice total",
      "Foreign-currency invoices resolve a valid exchange rate for the specified rate type and conversion date",
      "Budgetary control funds checks are enforced correctly where the business unit has budgetary control enabled",
      "Invoices that fail any check are stopped with the correct, specifically named hold rather than validating silently",
      "Invoices that pass all checks transition cleanly to Validated status and become eligible for approval routing",
      "Hold reasons and variance details are visible and traceable on the invoice Holds and Distributions tabs"
    ],
    "scope_note": "This scenario tests Oracle's validation engine against an invoice that already exists; it does not cover invoice header or line creation, which is exercised separately in Create Standard Invoice."
  },
  "preconditions": [
    "Supplier and supplier site are active and not on payment or invoice hold",
    "Invoice header and at least one distribution line already exist, created via Create Standard Invoice or PO-matched entry",
    "The GL accounting period for the invoice's accounting date is open or future-enterable, or deliberately closed for negative testing",
    "For matched invoices, a valid purchase order and, where 3-way matching is required, a receipt exist in Oracle Fusion Procurement",
    "Matching tolerance sets (price, quantity, tax) are configured at the applicable business unit or supplier level",
    "Tax classification codes and associated tax determination rules are configured and active",
    "Exchange rate type and daily or period rates are loaded for foreign-currency test scenarios",
    "Budgetary control and funds check are enabled and configured for the business unit, where applicable to the scenario",
    "Test user has the Accounts Payable Invoice role with validation privileges for the business unit"
  ],
  "test_data": [
    {
      "field": "Invoice Number",
      "example": "INV-VAL-100245"
    },
    {
      "field": "Supplier",
      "example": "Meridian Office Supplies Inc."
    },
    {
      "field": "Invoice Amount",
      "example": "18,450.00 USD"
    },
    {
      "field": "Distribution Account (CCID)",
      "example": "01-410-7420-0000-000"
    },
    {
      "field": "Match Type",
      "example": "3-Way"
    },
    {
      "field": "PO Number",
      "example": "PO-0098234"
    },
    {
      "field": "Receipt Number",
      "example": "RCV-0044120"
    },
    {
      "field": "Tax Classification Code",
      "example": "STANDARD-US-SALES-TAX"
    },
    {
      "field": "Accounting Date",
      "example": "15-AUG-2026"
    },
    {
      "field": "Ledger Currency",
      "example": "USD"
    },
    {
      "field": "Invoice Currency",
      "example": "EUR"
    },
    {
      "field": "Exchange Rate Type",
      "example": "Corporate"
    }
  ],
  "business_steps": [
    {
      "step_number": 1,
      "step_name": "Open invoice for validation",
      "action": "Search for and open the invoice that is ready to be validated",
      "test_data": "Invoice Number: INV-VAL-100245",
      "expected_result": "Invoice opens in Incomplete or Needs Revalidation status with header and distributions visible",
      "validation_type": "action"
    },
    {
      "step_number": 2,
      "step_name": "Review invoice header and distributions",
      "action": "Confirm supplier, amount, and distribution lines are populated as expected before triggering validation",
      "test_data": "Amount: 18,450.00 USD",
      "expected_result": "Header and distribution totals are visible and consistent with entered data",
      "validation_type": "action"
    },
    {
      "step_number": 3,
      "step_name": "Initiate validation",
      "action": "Trigger the Validate action on the invoice",
      "test_data": "",
      "expected_result": "Validation engine begins processing and invoice status updates to reflect in-progress validation",
      "validation_type": "action"
    },
    {
      "step_number": 4,
      "step_name": "System validates distributions",
      "action": "Oracle checks that distribution lines sum to 100% of the invoice amount and reference valid, active GL account combinations",
      "test_data": "Distribution Account: 01-410-7420-0000-000",
      "expected_result": "Distributions confirmed complete and valid, or a Distribution Variance / Invalid Account hold is applied",
      "validation_type": "action",
      "note": "Applies to every invoice regardless of match type"
    },
    {
      "step_number": 5,
      "step_name": "System validates accounting period",
      "action": "Oracle checks the invoice accounting date against the GL period status for the ledger",
      "test_data": "Accounting Date: 15-AUG-2026",
      "expected_result": "Period confirmed open/future-enterable, or invoice is stopped with a period-related hold",
      "validation_type": "action"
    },
    {
      "step_number": 6,
      "step_name": "System validates matching (if PO-matched)",
      "action": "Oracle compares invoice price, quantity, and receipt data against the purchase order within configured tolerances",
      "test_data": "PO: PO-0098234, Match Type: 3-Way",
      "expected_result": "Invoice matched within tolerance, or a matching hold (price, quantity, or receipt variance) is applied",
      "validation_type": "action",
      "note": "Skipped entirely for non-matched standard invoices"
    },
    {
      "step_number": 7,
      "step_name": "System validates tax",
      "action": "Oracle recalculates tax lines against the assigned tax classification and reconciles to the invoice total",
      "test_data": "Tax Code: STANDARD-US-SALES-TAX",
      "expected_result": "Tax lines reconcile correctly, or a tax exception hold is applied",
      "validation_type": "action"
    },
    {
      "step_number": 8,
      "step_name": "System validates currency and exchange rate",
      "action": "For foreign-currency invoices, Oracle resolves the exchange rate type and rate for the accounting date",
      "test_data": "Currency: EUR, Rate Type: Corporate",
      "expected_result": "A valid rate is applied and converted amounts calculate correctly, or a missing/invalid rate hold is applied",
      "validation_type": "action",
      "note": "Not applicable to invoices in the ledger currency"
    },
    {
      "step_number": 9,
      "step_name": "System validates budgetary control (where applicable)",
      "action": "Where the business unit has budgetary control enabled, Oracle performs a funds availability check against the distribution accounts",
      "test_data": "Budget Check: enabled",
      "expected_result": "Funds confirmed available, or an insufficient funds / budgetary control exception hold is applied",
      "validation_type": "action",
      "note": "Applicable only where customer configuration enables budgetary control for the business unit"
    },
    {
      "step_number": 10,
      "step_name": "System aggregates validation results",
      "action": "Oracle consolidates the outcomes of all checks into a final invoice status",
      "test_data": "",
      "expected_result": "Invoice status updates to Validated, or Needs Revalidation with one or more holds recorded",
      "validation_type": "action"
    },
    {
      "step_number": 11,
      "step_name": "Review Holds tab (if applicable)",
      "action": "Open the Holds tab to review any hold names, reasons, and affected lines",
      "test_data": "",
      "expected_result": "Each hold is displayed with a specific, correct reason code tied to the failed check",
      "validation_type": "action"
    },
    {
      "step_number": 12,
      "step_name": "Confirm final validation outcome",
      "action": "Confirm the invoice's end state matches the expected business outcome for the scenario",
      "test_data": "",
      "expected_result": "Invoice is either Validated and ready for approval routing, or correctly held with an accurate, traceable hold reason",
      "validation_type": "business_assertion"
    }
  ],
  "expected_results": [
    "Clean invoices reach Validated status with zero holds",
    "Distribution errors (invalid account, variance, missing lines) are caught and correctly named",
    "Invoices dated into closed periods are blocked from validating",
    "Matched invoices outside price, quantity, or receipt tolerance are held with the correct variance reason",
    "Tax exceptions are caught and do not silently pass validation",
    "Foreign-currency invoices without a resolvable exchange rate are held rather than validated with a default or zero rate",
    "Budgetary control exceptions occur only where budgetary control is configured for the business unit",
    "Hold reasons are specific and traceable to the exact failed check, not generic",
    "Validated invoices are immediately visible and available for approval routing",
    "No invoice reaches Validated status while a known data or configuration exception exists"
  ],
  "validation_checkpoints": [
    "Distribution total equals invoice header amount before validation completes",
    "All referenced GL account combinations are active and valid at the accounting date",
    "Accounting date falls within an open or future-enterable period",
    "PO match variance, where present, is compared correctly against configured tolerance percentages",
    "Receipt quantities are checked against invoiced quantities for 3-way matched invoices",
    "Calculated tax equals the sum of tax amounts on the invoice",
    "Exchange rate applied matches the configured rate type and date for foreign-currency invoices",
    "Funds available balance is checked against invoice distribution amounts where budgetary control applies",
    "Invoice status field accurately reflects Validated vs. Needs Revalidation",
    "Each applied hold references the correct, specific hold name",
    "No unexpected system errors occur during the validation process itself",
    "Validated invoices are queryable and visible in the approval worklist immediately after validation"
  ]
}