You are on page 1of 17

5/15/2019 Note: 1606530.

Note: 1606530.2
Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Channel Revenue Management : Funds Accrual Engine (FAE)

Overview

The Funds Accrual Engine (FAE) extracts all accrual and discount information from sales orders executed through any ordering channel. It handles the
following categories of events:

1. Ship-confirmed orders: calculates budget utilization and earnings based on ship confirmed orders. - Return orders: adjusts budget utilization and
earnings in the event of a return order. - Fully accrued budget accrue to customers: updates the budget and the utilized column of the budget with the
accrued amount.
2. Fully accrued budget accrue to sales: updates the budget,but does not update the committed and utilized columns of the budget.
3. Volume offer adjustments: calculates accruals for each sales order and makes the required accrual adjustments. - Accrual rates that are adjusted
retroactively: creates adjustments based on past sales order information.

So The following are the categories of Events handled by this engine:

Calculates budget utilization and earnings based on ship confirmed orders.


Handles a return orders' impact on budget utilization and earnings.
For fully accrued type of budgets with accrue to is 'customer', it updates Budget and Utilized columns with the accrued amount.
For budgets with accrue to 'Sales', it updates the Budget column but does not update the Committed and Utilized columns.
For Volume offer adjustments, it calculates the accruals for each sales order and makes accrual adjustments that are necessary as a result of volume
offers.
For accrual rates that are adjusted retroactively, it creates the adjustments based on sales order information in the pas

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 1/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Overview of Integration Hotspots

Funds Accural Engine Process Flow

Key Integration Modules


https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 2/17
5/15/2019 Note: 1606530.2

Key Integration Modules

Channel Revenue Management (ChRM)


Order Management (ONT)

When an offer is created in Channel Revenue Management, a modifer is created in Advanced Pricing (see Integration Troubleshooting : Trade Management
Offers (WIP) (Doc ID xxxxxx.2))

After the offer is applied to a sales order, an off-invoice discount or accrual adjustment is created for the order. AMS Funds Accrual Engine fetches the order
(and the related offer adjustment
information), ultimately updating the budget utilized column.

Navigation to Integration Point

Navigation To Integration Point

(R)Oracle Trade Management Administrator

You need to run the concurrent request Funds Accrual Engine with the following parameters;

Parameter Overview
Run Exception Messages Set to Y to run Order Capture (ASO) Exception Queue.
Run Budget Utilization for Adjusted Offer Set the adjustment parameter to 'Yes" to close Offer Adjustment.
Run Budget Utilization For Volume Offer Set to Yes for processing Volume Offer Adjustment for tier jumps
Repost Failed GL Posting Set to Yes for repost Failed postings
Run in Debug Mode Set to Yes for Debug messages on Concurrent Log File

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 3/17
5/15/2019 Note: 1606530.2

Oracle Documentation (1)

Links to Oracle Documentation related to Funds Accrual Engine

Oracle ChRM Implementation and Admin Guide : Integration Overview

Related Product Information Centers (3)

Product Information Centers for products related to Funds Accrual Engine

Information Center: Oracle Channel Revenue / Trade Management [Document 1269302.2]


Recommended and Latest Patch Listings for Sales & Marketing, Channel Revenue Management,Quoting, Order Capture and iStore. [Document
1599010.2]
Recommended and Latest Patch Listings for Sales & Marketing, Channel Revenue Management,Quoting, Order Capture and iStore. [Document
1599010.2]

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 4/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Integration Flow

Integration Flow

The following section provides an overview of the flow of data and control, from a technical perspective, when running the Funds Accrual Engine (FAE)

Accruals Process Flow

Action Integration Hotspot Description Troubleshooting

Order If any actions happen on the order check the stautus of the message in each
Created, lines containing Pricing Modifers, order runnign this query;
Booked OM populates the ASO advanced
and queue table
Shipped aso.aq$aso_order_feedback_t with the SELECT t.queue, t.enq_time, t.msg_state,
corresponding CREATE, UPDATE or t2.price_adjustment_id,
DELETE messages for each t2.operation, t2.line_id,
modifer/order line combination. t2.list_line_type_code,
t2.header_id, t2.applied_flag,
These messages are in READY state. t2.list_header_id,
When Funds Accrual Engine is run, it t2.adjusted_amount, t2.last_update_date
dequeues these messages and FROM aso.aq$aso_order_feedback_t t,
populates the funds utilization table Table(t.user_data.line_adj_varray) t2
with the accrual records. WHERE t.consumer_name = 'OZF'
The ASO message state changes to AND t2.header_id = (select header_id from
PROCESSED. apps.oe_order_headers_all
where order_number = <insert order
number> )

This is the query to be used to monitor the


backlog to be processed on the next FAE
execution

SELECT q.consumer_name, COUNT(*)


FROM aso.aq$aso_order_feedback_t q
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 5/17
5/15/2019 Note: 1606530.2

Where q.msg_state = 'READY'


GROUP BY q.consumer_name, q.msg_state
order by q.consumer_name, q.msg_state

Run call to
Funds OZF_ACCRUAL_ENGINE.ACCRUE_OFFERS > aso_order_feedback_pub.get_notice Get the Budget information for the business
Accrual : returns all of the data regarding event
Engine > get_message changes (inserts, updates and deletes)
>> aso_order_feedback_pub.get_notice to Order information - in our case we SELECT 'FUND' AccrualType,
>>>ASO_ORDER_FEEDBACK_GET_PVT.GET_NOTICE are concerned with offers, discounts util.utilization_id UtilizationId,
etc. associated with Order and Order util.fund_id FundId,
Lines
> adjust_accrual NVL(map.xref_line_id_value,oe.list_line_id)
>> post_accrual_to_gl DiscountLineId,
util.product_id ProductId,
if backdated adjustment or volume offer adjustment util.object_id OrderId,
> ozf_adjustment_ext_pvt.adjust_backdated_offer util.order_line_id OrderLineId,
NVL(line.invoiced_quantity,
> post_offinvoice_to_gl NVL(line.shipped_quantity, 0))
ShippedQuantity,
if volume offer adjustment (NVL(line.invoiced_quantity,
NVL(line.shipped_quantity,
> ozf_adjustment_ext_pvt.adjust_volume_offer 0))*line.unit_selling_price) Revenue,
NVL(util.plan_curr_amount,0)
if unposted GL AccrualAmount
FROM oe_order_lines_all line,
> reprocess_failed_gl_posting ozf_funds_utilized_all_b util,
ozf_offers off, oe_price_adjustments oe,
:
ozf_xref_map map
WHERE line.line_id = util.order_line_id
raise business event AND line.header_id = util.object_id
oracle.apps.ozf.order.accrual.info AND util.object_type = 'ORDER'
AND util.request_id =
fnd_global.conc_request_id
For AND util.plan_type = 'OFFR'
AND util.plan_id = off.qp_list_header_id
Budget Data AND util.price_adjustment_id =
Offer Data oe.price_adjustment_id
AND util.gl_posted_flag IN ('Y', 'X')
AND oe.list_line_id = map.list_line_id(+)
AND NVL(line.invoiced_quantity,
NVL(line.shipped_quantity, 0)) <> 0
AND NVL(off.budget_offer_yn, 'N') = 'Y'
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 6/17
5/15/2019 Note: 1606530.2

and the Offer information for the business


event;

SELECT 'OFFR' AccrualType,


util.utilization_id UtilizationId,
util.plan_id PromotionId,
util.fund_id FundId,

NVL(map.xref_line_id_value,oe.list_line_id)
DiscountLineId,
util.product_id ProductId,
util.object_id OrderId,
util.order_line_id OrderLineId,
util.cust_account_id CustomerId,
NVL(line.invoiced_quantity,
NVL(line.shipped_quantity, 0))
ShippedQuantity,
(NVL(line.invoiced_quantity,
NVL(line.shipped_quantity,
0))*line.unit_selling_price) Revenue,
NVL(util.plan_curr_amount,0)
AccrualAmount
FROM oe_order_lines_all line,
ozf_funds_utilized_all_b util,
ozf_offers off, oe_price_adjustments oe,
ozf_xref_map map
WHERE line.line_id = util.order_line_id
AND line.header_id = util.object_id
AND util.object_type = 'ORDER'
AND util.request_id =
fnd_global.conc_request_id
AND util.price_adjustment_id =
oe.price_adjustment_id
AND util.plan_type = 'OFFR'
AND util.plan_id = off.qp_list_header_id
AND util.price_adjustment_id =
oe.price_adjustment_id
AND util.gl_posted_flag = 'Y'
AND NVL(line.invoiced_quantity,
NVL(line.shipped_quantity, 0)) <> 0

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 7/17
5/15/2019 Note: 1606530.2

AND oe.list_line_id = map.list_line_id(+)


AND NVL(off.budget_offer_yn, 'N') = 'N'

Run the following query time to time to


check if accruals are being created in TM:

select *
from ozf_funds_utilized_all_vl
where utilization_id = (select
max(utilization_id)
from ozf_funds_utilized_all_b
where object_type = 'ORDER'
and object_id is not null
and utilization_type not in ('REQUEST',
'TRANSFER'))

Note it is also possible to check the


number of times FAE has been run and
how long it takes with the SQL;

select request_id, TO_CHAR(


actual_start_date, 'DD-MON-YYYY
HH24:MI:SS' )
actual_start_date, TO_CHAR(
actual_completion_date, 'DD-MON-
YYYY HH24:MI:SS' )
actual_completion_date
from fnd_concurrent_requests
where concurrent_program_id = (select
concurrent_program_id
from
fnd_concurrent_programs
where
concurrent_program_name =
'OZF_FUND_ACCRUAL')
order by 1

It is also possible to monitor progress as


FAE commits each transaction as it is
processed

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 8/17
5/15/2019 Note: 1606530.2

between READY to PROCESSED


SELECT q.msg_state, q.consumer_name,
COUNT(*)
FROM aso.aq$aso_order_feedback_t q
GROUP BY q.consumer_name,
q.msg_state
order by q.consumer_name, q.msg_state
Funds The following query will get the
Accrual offer/budget/order details for failed
Engine utilizations.
Complete

SELECT DISTINCT a.fund_id FUND_ID ,


d.short_name FUND_NAME , b.description
OFFER_NAME , c.order_number
ORDER_NUMBER
FROM ozf_funds_utilized_all_b a
, qp_list_headers_all b
, oe_order_headers_all c
, ozf_fund_details_v d
WHERE a.plan_id = b.list_header_id
AND a.object_id = c.header_id
AND a.fund_id = d.fund_id
AND a.gl_posted_flag = 'F';

IMPORTANT : When GL_POSTED_FLAG


is N, you can see the Utilized column is
updated in the Budget Checkbook. When
GL_POSTED_FLAG is Y, you can see the
Earned column is updated in the Budget
Checkbook. Only if GL_POSTED_FLAG is
Y, you can see the Offer being returned in
Associate Earnings of Claim

This is the meaning of this flag for all the


type.

For type = REQUEST or TRANSFER,


gl_posted_flag is meaningless. Please ignore.

For type = ACCRUAL or SALES


https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 9/17
5/15/2019 Note: 1606530.2

ACCRUAL
"X" : for fully accrual budget accrue to sales
or accrual to customer with
liability flag off

For type = UTILIZED,


A) if 'Create GL Entries for Off-Invoice
Discounts' is not checked in system
parameter page null
B) otherwise
"N" : order line is yet to invoice, and gl
posting is not initiated
"Y" : order line has been invoiced, and gl
posting succeeds
"F" : order line has been invoiced, but gl
posting fails

For all other types = ACCRUAL or SALES


ACCRUAL or ADJUSTMENT or
CHARGEBACK
"N" : order line is yet to ship/invoice, and gl
posting is not initiated
"Y" : order line has been shipped/invoiced,
and gl posting succeeds
"F" : order line has been shipped/invoiced,
but gl posting fails

Review Note.378290.1 Ext/Pub What Does


Each GL_POSTED_FLAG Value on
OZF_FUNDS_UTILIZED_ALL Table
Mean?:

Looking the orders detials on that

b) Order header details for all failed


utilizations:
SELECT a.*
FROM oe_order_headers_all a
WHERE EXISTS
(SELECT 1
FROM ozf_funds_utilized_all_b b
WHERE object_id = a.header_id AND
object_type like '%ORDER%'
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 10/17
5/15/2019 Note: 1606530.2

AND gl_posted_flag = 'F'


)
ORDER BY a.header_id;

c) Order line details of all failed utilizations:

SELECT a.flow_status_code,a.*
FROM oe_order_lines_all a
, oe_order_headers_all b
WHERE a.header_id = b.header_id
AND EXISTS
( SELECT 1
FROM ozf_funds_utilized_all_b c
WHERE c.object_id = b.header_id
AND c.gl_posted_flag = 'F'
)
ORDER BY a.header_id;

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 11/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Packages

The following packages may be called during the process flow. See the Technical Flow tab for details of when and why each package is called.

CS_Charge_Create_Order_PUB (csxpchob.pls)
CS_Charge_Create_Order_PVT (csxvchob.pls)
CS_CHARGE_DETAILS_CUHK (cschrs.pls)
ASO_ORDER_INT (asoiordb.pls)
OE_VALIDATE_LINE (OEXLLINB.pls)
ASO_MAP_QUOTE_ORDER_INT (asoimqob.pls)
ASO_CHECK_TCA_PVT (asovctcb.pls)

Updated Tables

The following tables are updated as the ChRM -> GL flow is processed :

ozf_act_budgets
ozf_funds_utilized_all_b
ozf_funds_utilized_all_tl
ozf_funds_all_b
ozf_object_fund_summary

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 12/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Setup Considerations

Overview
The following section highlights any specific pieces of setup that commonly affect the interaction between Channel Revenue Management and General
Ledger. It is not a guide to the complete product setup but highlights one or more areas that should be reviewed and confirmed.

To integrate both Subledger Accounting and General Ledger with Oracle Channel Revenue Management, complete the following procedures:

Setting System Profile Options


Setting Up The Subledger Accounting Method (SLAM)
Running Concurrent Programs
Setting Up General Ledger Accounts
Verifying General Ledger Periods
Verifying Sequence Assignment
Setting System Parameters
Setting Up Currency Conversion
Creating a Ledger

For more details see the Oracle Channel Revenuew Management Implementation and Administration Guide : Integrating with General Ledger via
Subledger Accounting.

Oracle Documentation (4)

Links to Oracle Documentation related to Channel Revenue Management

ChRM Implementation and Admin Guide : Integrating with GL via SLA


Oracle GL Implementation Guide
Oracle GL User Guide
Oracle Subledger Accounting Implementation Guide

Related Product Information Centers (1)

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 13/17
5/15/2019 Note: 1606530.2

Product Information Centers for products related to Claims

Information Center: Troubleshooting Oracle Trade Management Claims [Document 1483940.2]

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 14/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Key Profile Options

The following profile options are integral to the behaviour of Claims.

Profile Option Name Mandatory Possible Values Description

Account In order to debug the account generator workflow, set the profile Account Generator: Debug mode to Yes. The
Yes
Generator : Run in No workflow process can then be seen from the process editor and the owner of the workflow will be the user who
No
Debug Mode runs the concurrent program or performs an action which invokes accounting.

OZF : Create GL Shipped In this release, GL entries for accruals are created based on a profile option setting. The setting can be either
Yes
Entries for Orders Invoiced Shipped (Ship Confirmed) or Invoiced.

ASO: Order
Time in
Feedback Queue Yes Retention Time
seconds
Retention Time

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 15/17
5/15/2019 Note: 1606530.2

Copyright (c) 2019, Oracle. All rights reserved. Oracle Confidential.

Account Generator Workflow


Price Protection uses the Account Generator Workflow along with a set of default accounts to derive accounts for posting the inventory price drop or price increase journal entries. The Oracle
Price Protection application supports Standard Accrual Subledger Accounting method

The 'OZF: Use Account Generator Workflow' profile option is defined at site level only with default value as 'No'. The profile dictates the call of Account Generator Workflow for both
Accrual/Adjustment and Claim Settlement Flow.

For Accrual/Adjustment and Public API

In adjustment public API, Skip Account Generator flag is passed, then

1. If profile OZF: Use Account Generator Workflow is Yes and the value of this flag is passed as True, then account generator will be not be called.
2. If profile OZF: Use Account Generator Workflow is Yes and the value of this flag is passed as False, then account generator will be called.
3. If profile OZF: Use Account Generator Workflow is No, then account generator will be not be called irrespective of the value of this flag.

If the above condition set as 'true', then the account can be derived on the below sequence;

1. Accounts from Account Generator


2. Debit/Credit Accounts from Adjustment Public API Value would be null for accruals and adjustment from UI.
3. Accounts from Adjustment Types
4. Accounts from Budget
5. Accounts from Budget Category
6. Accounts from System Parameter

Paid Adjustment using Public API - Debit Account


a) Accounts from Account Generator
b) Debit Accounts from Adjustment Public API

If the above condition set as 'False', then account generator will not be called and the accounts can be derived based on the below setup.

1. Debit/Credit Accounts from Adjustment Public API Value would be null for accruals and adjustment from UI.
2. Accounts from Adjustment Types
3. Accounts from Budget
4. Accounts from Budget Category
5. Accounts from System Parameter
Paid Adjustment using Public API - Debit Account
a) Debit Accounts from Adjustment Public API

For Claim Settlement - Accrual Liability and Expense Account

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 16/17
5/15/2019 Note: 1606530.2
If the profile 'OZF: Use Account Generator Workflow' value is set as 'Yes', the account can be derived on the below sequence.

1. Accounts from Account Generator


2. Accounts from Claim Type
3. Accounts from System Parameter
If the profile 'OZF: Use Account Generator Workflow' value is set as 'No', the account can be derived on the below sequence.

1. Accounts from Claim Type


2. Accounts from System Parameter

https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=krop1ygc5_684&id=1606530.2 17/17

You might also like