DEV Community

Cover image for Managing Custom Invoice Hold for Under Paypables Invoicing in Oracle Fusion Payables Using REST APIs
Himanshu
Himanshu

Posted on

Managing Custom Invoice Hold for Under Paypables Invoicing in Oracle Fusion Payables Using REST APIs

Introduction

Purchase order matching is an important part of invoice processing in Oracle Fusion Cloud Payables. It helps organizations validate supplier invoices against purchase orders and receiving transactions before payment.

However, not every business requirement can be addressed through standard matching rules.

Consider a scenario where a purchase order has been created for 10 units and the complete quantity has already been received. During invoice creation, the user matches only 4 units against the purchase order.

From a standard matching perspective, this is generally an acceptable transaction. The invoiced quantity does not exceed the received quantity.

But suppose the business requires an additional control: once the full purchase order quantity has been received, an invoice matched for a lower quantity should be placed on hold for review.

In this article, I will walk through how this requirement can be addressed using Oracle Fusion Payables, a custom invoice hold, and REST API-based validation.

The focus is on extending standard invoice controls without changing the underlying purchase order matching process.

1. Understanding the Business Requirement

Let's consider the following transaction.

Transaction Quantity
Purchase Order Quantity 10
Received Quantity 10
Invoice Matched Quantity 4
Quantity Difference 6

The purchase order has been fully received, but the invoice has been matched for only part of the received quantity.

The business expects the system to identify this difference and apply a custom hold to the invoice.

The invoice should remain unavailable for payment until the discrepancy has been reviewed and the hold is released.

Why is an additional control required?

Oracle Payables supports partial invoicing. A supplier may legitimately invoice fewer units than those received.

For example, if 10 units have been received but the supplier invoices only 4 units, standard matching does not necessarily consider this an exception.

In this particular scenario, however, the business wants to review such transactions before payment.

The requirement is therefore not to replace standard invoice matching, but to introduce an additional validation based on the organization's invoicing policy.

PO Landing Page

PO Purchase Order

2. Standard Oracle Payables Matching vs. Custom Validation

Before configuring the solution, it is important to distinguish between standard matching and the proposed custom control.

Oracle Fusion Payables supports different matching options, including two-way, three-way, and four-way matching.

Under three-way matching, the invoice is validated against purchase order and receipt information, subject to the configured matching rules and tolerances.

Standard quantity matching is primarily concerned with situations where invoiced quantities exceed the permitted ordered or received quantities.

In our example:

Received Quantity = 10

Invoiced Quantity = 4

The invoiced quantity is lower than the received quantity.

Therefore, a standard quantity matching hold would not normally be applied solely because of this difference.

The custom requirement is different:

If the invoiced quantity is less than the applicable received quantity, identify the transaction and place the invoice on hold for review.

This condition will be evaluated through a custom integration.

3. Solution Design

The proposed solution involves Oracle Fusion Procurement, Receiving, Payables, and REST APIs.

The overall process is:

Process

The REST API integration will be responsible for retrieving the required information, performing the comparison, and applying the configured invoice hold.

4. Create the Purchase Order

The first step is to create a purchase order in Oracle Fusion Procurement.

For this demonstration, I will use a single purchase order line with a quantity of 10 units.

Attribute Value
Purchase Order US165400
Item Item001
Quantity 10 Units
Unit Price $40
Total Amount $400

After entering the required details, submit the purchase order for approval.

Once approved, the purchase order will be available for receiving.

Screenshot 1: Approved Purchase Order with Quantity of 10 Units

5. Complete the Receiving Transaction

The next step is to perform the receiving transaction against the purchase order.

For this scenario, the complete quantity of 10 units will be received.

The transaction will have the following details:

Description Quantity
Ordered Quantity 10
Received Quantity 10
Remaining Quantity to Receive 0

The receipt must be successfully processed before proceeding with invoice matching.

This is important because the custom validation will compare the invoiced quantity with the applicable received quantity.

Screenshot 2: Receipt Completed for 10 Units

6. Create the PO-Matched Payables Invoice

Once the receiving transaction is completed, navigate to Oracle Fusion Payables.

Navigation:

Payables → Invoices → Create Invoice

Create an invoice for the supplier and select the purchase order for matching.

Although the purchase order has been received for 10 units, enter an invoice quantity of 4 units.

Assuming a unit price of $100, the invoice amount will be $400.

Attribute Value
Invoice Number INVOICE_101
Purchase Order US165400
Received Quantity 10
Invoice Quantity 4
Invoice Amount $400

Save the invoice and complete the applicable matching steps.

At this point, the invoice is matched for a quantity lower than the received quantity.

Under standard matching rules, this difference alone would not normally result in a quantity matching hold.

Our custom validation will now evaluate the transaction.

Screenshot 3: Payables Invoice Matched for 4 Units

7. Configure the Custom Invoice Hold

The next step is to define a custom invoice hold in Oracle Fusion Payables.

Navigation:

Setup and Maintenance → Manage Invoice Holds and Releases

Custom Hold

For this scenario, the proposed hold name is:HB_Invoice_Hold

Partial PO Invoice Quantity Hold

The hold will be used to identify invoices that require additional review because the matched invoice quantity is lower than the received quantity.

A user-defined hold name can be associated with a supported hold type, such as Invoice Hold Reason.

The hold configuration should be reviewed to determine whether accounting is permitted while the invoice is on hold.

For this example, the primary requirement is to restrict payment processing.

One important distinction is that defining a hold name does not automatically evaluate the difference between invoiced and received quantities.

The custom integration will perform that validation and explicitly apply the configured hold.

Partial PO Invoice

Screenshot 4: Custom Invoice Hold Configuration

8. Retrieve Invoice Details Using REST API

Once the invoice is created, the integration needs to retrieve the relevant invoice information.

Oracle Fusion Cloud Financials provides REST APIs for accessing Payables invoice data.

The Payables Invoices REST resource can be accessed using the following endpoint:

GET /fscmRestApi/resources/11.13.18.05/invoices
Enter fullscreen mode Exit fullscreen mode

The integration should identify the invoice using the appropriate invoice reference and retrieve its matched line information.

The required business data includes:

  • Invoice identifier
  • Invoice number
  • Purchase order reference
  • Purchase order line or schedule reference
  • Matched invoice quantity

The quantity should be retrieved from the relevant invoice line or matching information, rather than assuming it is an invoice header attribute.

For this scenario, the matched invoice quantity is 4 units.

Screenshot 5: REST API Response Showing Invoice Details

9. Retrieve the Receiving Quantity

The integration also needs to retrieve the receiving information associated with the purchase order.

The required information includes the purchase order reference, receiving transaction details, and applicable received quantity.

For our example:

Purchase Order: PO-1001

Received Quantity: 10 Units

The integration must ensure that the invoice quantity and received quantity belong to the same purchase order matching reference.

This becomes particularly important when a purchase order contains multiple lines, schedules, or receipts.

For the current demonstration, we are considering a single purchase order line with one completed receipt.

Screenshot 6: Receiving Information Retrieved Through REST API

10. Perform the Custom Quantity Validation

Once the invoice and receiving quantities have been retrieved, the integration will compare them.

The validation condition is:

IF Invoiced Quantity < Received Quantity

THEN
    Identify Invoice for Custom Hold

ELSE
    No Custom Hold Required
Enter fullscreen mode Exit fullscreen mode

For our example:

Received Quantity = 10

Invoiced Quantity = 4

Quantity Difference = 6
Enter fullscreen mode Exit fullscreen mode

Since 4 is less than 10, the condition is satisfied.

The invoice will therefore be identified for custom hold processing.

This validation represents the business requirement rather than standard Oracle Payables matching behavior.

For a production implementation, the rule should also define whether the comparison is based on the current invoice or cumulative quantities across all relevant invoices.

11. Apply the Invoice Hold Using REST API

Oracle Fusion Cloud Financials provides an Invoice Holds REST resource that supports creating and managing invoice holds.

The create operation uses:

POST /fscmRestApi/resources/11.13.18.05/invoiceHolds
Enter fullscreen mode Exit fullscreen mode

The integration will use the appropriate invoice identifier and configured hold name to apply the hold.

For this scenario:

Attribute Value
Invoice INVOICE_101
Hold Name Partial PO Invoice Quantity Hold
Received Quantity 10
Invoiced Quantity 4
Quantity Difference 6
Expected Action Apply Invoice Hold

The actual request payload must follow the Oracle REST API schema supported by the environment.

Before creating a hold, the integration should check whether the same active hold already exists against the invoice.

This avoids creating duplicate holds if the integration is executed more than once.

Once the request is processed successfully, the integration should capture the response and verify that the hold was created.

Invoice Hold

PostMan Hold

Validate Invoice

Screenshot 7: REST API Request and Successful Response

12. Verify the Invoice Hold in Payables

After applying the hold through REST API, navigate back to Oracle Fusion Payables.

Navigation:

Payables → Invoices → Manage Invoices

Search for the invoice and open the Holds section.

The expected result is:

Description Expected Result
Invoice Number INVOICE_101
Invoice Quantity 4 Units
Received Quantity 10 Units
Custom Hold Applied
Payment Processing Restricted

The custom hold should be visible against the invoice.

INVOICE_HOLD

The invoice will remain restricted from payment while the hold is active.

It is important to distinguish this from preventing further invoice entry. A manual invoice hold does not, by itself, prevent users from editing invoices or creating additional invoices against the purchase order.

If the business requires those restrictions, they must be addressed separately.

Screenshot 8: Custom Hold Visible Against the Invoice

13. Release the Invoice Hold

The final step is to define how the invoice hold will be released.

The hold should remain active until the quantity difference has been reviewed and the required business action has been completed.

For example, the supplier may submit another invoice for the remaining quantity, or the existing invoice may require correction.

The integration should not assume that receiving or invoicing additional quantities automatically releases a manually applied hold.

The release process must be explicitly designed and tested.

Depending on the business requirement, the hold may be released manually by an authorized user or through the supported REST API functionality.

RELEASE HOLD

Screenshot 9: Invoice Hold Released After Review

14. Additional Considerations for Production Implementation

The example above uses a single purchase order line to explain the process.

In actual implementations, there are several additional conditions to consider.

Multiple Purchase Order Lines

The integration should compare quantities at the appropriate purchase order line or schedule level.

Comparing only purchase order header totals may lead to incorrect results.

Multiple Receiving Transactions

A purchase order line may be received through several transactions.

The calculation should consider the applicable net received quantity, including corrections and returns where required.

Multiple Payables Invoices

A supplier may submit multiple invoices against the same purchase order.

The business must decide whether the hold should be based on the current invoice quantity or cumulative invoiced quantity.

Duplicate Hold Prevention

The integration should check for an existing active hold before applying another hold to the same invoice.

Integration Timing

The timing of the REST API validation is important.

If the integration runs after invoice creation, the business must ensure that the invoice cannot be paid before the validation and hold application have completed.

Hold Release Controls

The release process should be documented and restricted to the appropriate users or integration process.

These considerations become important when moving the solution from a demonstration scenario to a production environment.

Key Takeaways

The main points from this scenario are:

  1. Oracle Fusion Payables generally supports partial invoicing against purchase orders.
  2. Standard matching does not normally place an invoice on hold simply because the invoiced quantity is lower than the received quantity.
  3. A custom invoice hold can be configured to support an additional business review requirement.
  4. REST APIs can be used to retrieve invoice information, compare quantities, and apply the configured hold.
  5. The custom validation should use the appropriate purchase order matching references.
  6. Hold creation, duplicate prevention, and release should be considered as part of the overall integration design.
  7. A manual invoice hold restricts payment but does not automatically prevent additional invoice entry or editing.

Final Thoughts

In this article, I have covered a business scenario where a purchase order is created for 10 units, the complete quantity is received, but the Payables invoice is matched for only 4 units.

While Oracle Fusion Payables generally allows this type of partial invoicing, some organizations may require an additional review before allowing the invoice to proceed to payment.

The proposed solution uses REST APIs to retrieve the invoice and receiving information, compare the quantities, and apply a configured invoice hold when the business condition is satisfied.

The important part of this approach is understanding where standard Oracle matching ends and where a business-specific validation needs to be introduced.

This is particularly relevant when implementing additional financial controls without changing the standard purchase order and invoice matching process.

Have you worked on similar invoice validation requirements in Oracle Fusion Payables? Feel free to share your experience or connect with me to discuss other approaches.

Top comments (0)