{
  "test_id": "ORCL.P2P.AP.INV.APPROVAL",
  "scenario_name": "Invoice Approval",
  "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-approval/",
  "objective": {
    "intro": "This test validates that Oracle Fusion Payables correctly routes invoices through their configured approval workflow and that every approve, reject, and exception outcome updates the invoice's approval status and downstream eligibility as expected.",
    "confirms": [
      "Invoice submission for approval correctly initiates an approval process instance",
      "Approval routing evaluates configured rules (amount, business unit, account, project) to determine the correct approver or approval chain",
      "Single-level approval chains route to and are actionable by exactly one designated approver",
      "Multi-level approval chains route sequentially through all required approvers before completion",
      "Approve actions update Approval Status to Approved and unlock downstream accounting and payment eligibility",
      "Reject actions update Approval Status to Rejected and return the invoice to the preparer with a recorded reason",
      "Request-information, reassignment, and escalation actions route correctly without breaking the approval chain",
      "Missing-approver and invalid routing configurations are surfaced as exceptions rather than stalling silently",
      "Approval history remains complete and auditable at every stage of the workflow"
    ],
    "scope_note": "This test focuses on approval routing and outcome behavior; invoice validation (matching, tax, tolerance holds) and accounting distribution are covered in related test scenarios."
  },
  "preconditions": [
    "Business unit is enabled for invoice approval workflow (Payables Options > Approval Options > \"Use Invoice Approval Workflow\")",
    "Approval rules are configured and activated in BPM Approval Management for task type FIN_AP_INVOICE_APPROVAL against the test business unit",
    "The supervisory or position hierarchy referenced by approval rules is current and complete for the accounts/cost centers used in test invoices",
    "Test approver users exist, are provisioned with the required approval duty roles, and have active BPM Worklist access",
    "Invoices exist in Incomplete or ready-for-submission status with header and distribution data matching the rule conditions being tested (amount, business unit, account, project)",
    "DataVault approval-rule dataset (thresholds, approver lists, hierarchy levels, escalation windows) is loaded and mapped to the test business unit",
    "Escalation timers used by escalation rules are known so response windows can be simulated or fast-forwarded in a non-production environment",
    "Jarvis AI test data generation is configured to reference DataVault-defined approval rules rather than fixed universal values",
    "User has the Accounts Payable Invoice Approval duty role (or equivalent) required to submit invoices for approval"
  ],
  "test_data": [
    {
      "field": "Invoice Number",
      "example": "INV-APR-1001"
    },
    {
      "field": "Business Unit",
      "example": "US1 Business Unit"
    },
    {
      "field": "Supplier",
      "example": "Acme Industrial Supply"
    },
    {
      "field": "Invoice Amount",
      "example": "${INVOICE_AMOUNT} (customer-configured test value)"
    },
    {
      "field": "Approval Amount Threshold",
      "example": "${AMOUNT_THRESHOLD} (customer-configured)"
    },
    {
      "field": "Distribution Account",
      "example": "${GL_ACCOUNT_CODE}"
    },
    {
      "field": "Project Number (where applicable)",
      "example": "${PROJECT_NUMBER}"
    },
    {
      "field": "Approval Rule Name",
      "example": "AP Invoice Approval - Multi-Level by Amount"
    },
    {
      "field": "Approval Hierarchy Type",
      "example": "Supervisory Hierarchy"
    },
    {
      "field": "Primary Approver",
      "example": "${APPROVER_1_USERNAME}"
    },
    {
      "field": "Secondary / Escalation Approver",
      "example": "${APPROVER_2_USERNAME}"
    },
    {
      "field": "Escalation Response Window",
      "example": "${ESCALATION_DAYS} days (customer-configured)"
    }
  ],
  "business_steps": [
    {
      "step_number": 1,
      "step_name": "Open Invoice for Approval Submission",
      "action": "Preparer opens the completed, validated invoice in the Invoices work area.",
      "test_data": "Invoice Number",
      "expected_result": "Invoice is displayed in Incomplete/Ready status with the Submit for Approval action available.",
      "validation_type": "action"
    },
    {
      "step_number": 2,
      "step_name": "Submit Invoice for Approval",
      "action": "Preparer selects Actions > Submit for Approval on the invoice.",
      "test_data": "Invoice Number",
      "expected_result": "Approval Status changes to Initiated/Pending and an approval process instance is created.",
      "validation_type": "action"
    },
    {
      "step_number": 3,
      "step_name": "Approval Rules Evaluated",
      "action": "Oracle Fusion evaluates the configured approval rules against the invoice's attributes.",
      "test_data": "Amount, Business Unit, Account, Project",
      "expected_result": "The correct rule set is selected and the matching approver or approval chain is determined based on DataVault-configured thresholds and hierarchy.",
      "validation_type": "action"
    },
    {
      "step_number": 4,
      "step_name": "Task Routed to First Approver",
      "action": "The approval task is routed to the first approver, or the invoice is auto-approved if it is below the configured threshold.",
      "test_data": "Approval Amount Threshold",
      "expected_result": "The correct approver receives a notification in BPM Worklist and email, or the invoice moves directly to Approved if auto-approval applies.",
      "validation_type": "action"
    },
    {
      "step_number": 5,
      "step_name": "Approver Reviews Invoice",
      "action": "Approver opens the notification and reviews the invoice header, lines, distributions, and any attachments.",
      "test_data": "",
      "expected_result": "Invoice details, comments, and prior approval history are visible to the approver before they act.",
      "validation_type": "action"
    },
    {
      "step_number": 6,
      "step_name": "Approver Approves (Positive Path)",
      "action": "Approver selects Approve, optionally adding a comment.",
      "test_data": "Primary Approver",
      "expected_result": "The task is marked Approved; if additional approval levels remain, the task routes to the next approver in the chain.",
      "validation_type": "action"
    },
    {
      "step_number": 7,
      "step_name": "Multi-Level Routing to Next Approver",
      "action": "For multi-level rules, the task routes to the second or subsequent approver per the hierarchy or amount-based rule.",
      "test_data": "Secondary / Escalation Approver",
      "expected_result": "The next approver receives a notification, and the approval history reflects the prior approver's action.",
      "validation_type": "action"
    },
    {
      "step_number": 8,
      "step_name": "Final Approval Recorded",
      "action": "The last required approver in the chain approves the invoice.",
      "test_data": "",
      "expected_result": "Invoice Approval Status updates to Approved, and the invoice becomes eligible for accounting and payment processing.",
      "validation_type": "action"
    },
    {
      "step_number": 9,
      "step_name": "Approver Rejects (Alternate Path)",
      "action": "Approver selects Reject and enters a rejection reason.",
      "test_data": "",
      "expected_result": "Approval Status updates to Rejected, and the invoice returns to the preparer for correction with the reason recorded.",
      "validation_type": "action"
    },
    {
      "step_number": 10,
      "step_name": "Approver Requests More Information",
      "action": "Approver selects Request Information and routes a question to the preparer or another user.",
      "test_data": "",
      "expected_result": "The task moves to an Information Requested state; the approval clock pauses until a response is provided.",
      "validation_type": "action"
    },
    {
      "step_number": 11,
      "step_name": "Approver Reassigns Task",
      "action": "Approver reassigns or delegates the approval task to another eligible approver.",
      "test_data": "",
      "expected_result": "Task ownership transfers to the new approver, who is notified, while the original approver is removed from the pending list.",
      "validation_type": "action"
    },
    {
      "step_number": 12,
      "step_name": "Escalation on No Action",
      "action": "The assigned approver does not act within the configured escalation response window.",
      "test_data": "Escalation Response Window",
      "expected_result": "The task automatically escalates to the next-level approver or supervisor per the configured escalation rule.",
      "validation_type": "action"
    },
    {
      "step_number": 13,
      "step_name": "Missing Approver Handling",
      "action": "The system attempts to route the task but the hierarchy or rule data is incomplete (for example, no manager on file for the account owner).",
      "test_data": "",
      "expected_result": "The approval process raises a routing exception and flags the invoice for administrator intervention rather than stalling silently.",
      "validation_type": "action"
    },
    {
      "step_number": 14,
      "step_name": "Verify Approval History",
      "action": "Reviewer opens the invoice's Approval History or workflow tab.",
      "test_data": "",
      "expected_result": "All approval actions (submit, approve, reject, request information, reassign, escalate) are logged with user, timestamp, and comments.",
      "validation_type": "action"
    },
    {
      "step_number": 15,
      "step_name": "Confirm Business Outcome",
      "action": "Confirm that the invoice's status, approval status, and downstream eligibility reflect the correct end-to-end outcome for the scenario under test.",
      "test_data": "",
      "expected_result": "Invoice state (Approved, Rejected, or Exception) matches the expected business outcome for the configured approval rule and scenario tested.",
      "validation_type": "business_assertion"
    }
  ],
  "expected_results": [
    "Invoices matching auto-approval criteria bypass manual approval and reach Approved status automatically",
    "Single-level approvals route to and are actionable by exactly one designated approver",
    "Multi-level approvals route sequentially through all required approvers before reaching Approved status",
    "Amount-based, business-unit-based, and account-based rules correctly select the applicable approval chain",
    "Reject actions return the invoice to the preparer with a recorded rejection reason and Rejected approval status",
    "Request-information and reassignment actions do not break or duplicate the approval chain",
    "Escalation rules correctly forward unactioned tasks to the next-level approver within the configured window",
    "Missing-approver and invalid-configuration scenarios are surfaced as exceptions, not silent failures",
    "Approval history is complete, accurate, and available for audit on every invoice",
    "Only fully approved invoices become eligible for accounting and payment processing"
  ],
  "validation_checkpoints": [
    "Approval Status field transitions correctly at each stage (Required > Initiated > Pending > Approved/Rejected)",
    "Correct approval rule or rule set is selected based on invoice attributes",
    "Correct approver(s) identified per DataVault-configured hierarchy and thresholds",
    "Notification is delivered to the correct approver in BPM Worklist",
    "Approve action updates status and advances the workflow to the next stage",
    "Reject action updates status, captures the reason, and returns the invoice to the preparer",
    "Request Information pauses the workflow without losing approval context",
    "Reassignment transfers task ownership without gaps in the approval chain",
    "Escalation triggers within the configured response window",
    "Missing-approver and invalid-configuration scenarios raise a visible, actionable exception",
    "Approval history log captures user, action, timestamp, and comments for every action",
    "Invoice does not become payment-eligible until fully approved"
  ]
}