Professional Documents
Culture Documents
1. Introduction
The objective of this white paper is to discuss the functional and technical aspects of Oracle
Receivables standard functionality on Daily Revenue Recognition and the detailed setups that are
required to implement Daily Revenue Recognition. The first section of this paper offers the case for
implementing Daily Revenue Rules and how Daily Rules differ from the standard rate offering a
solution framework that is closest to GAAP compliance on Revenue Recognition. The next section
of this paper will discuss building blocks for Daily Revenue Recognition and the configuration that
is required for implementing Daily Revenue Rules. The last section of this paper offers drilldown
on possible Daily Revenue scenarios and solution options on addressing these scenarios. Appendix
A & B to this paper offers technical insights to readers on how to use to Deferred Revenue
Accounting API [supported by a FAQ] and a case study on how VeriSign was able to implement an
automated solution to a unique revenue scenario by working around the possibilities that exists
with Revenue Accounting API.
Collaborate 10
Page <1>
Collaborate 10
Page <2>
3.1.2.Variable Duration used where the schedule is variable. This type of rule offers best
flexibility in terms of leverage one variable for transactions required different schedule.
The duration however, needs to be provided at the time of manually creating an invoice or
at the time of populating the record in Auto-Invoice Table
Collaborate 10
Page <3>
Note # 1: Though Daily Revenue rules calculate revenue at a daily rate, they dont really create
accounting distributions for every calendar day. The accounting distributions are created the
same manner as the standard rules just that the revenue amount recorded will be different.
Note # 2: Daily Rate Rules are standard functionality in Release 12. This functionality was backported to Release 11 via one-off Patch 5684129 [Metalink Note: 401000.1]. However, Financials
Family Pack G is an absolute pre-requisite for the above 11i patch.
Note # 3: The core daily revenue functionality in AR works fine in Release 11. However the
daily rules are not extensible in other applications like Order Management, Service Contracts
etc. This requires extensive patching on Release 11 and you may contact Oracle Support for the
exact patch requirements.
Daily Rate Revenue Rules come in two flavors:
3.3.1. Daily Revenue Rate, All Periods: Use Daily Revenue Rate, All Periods to have
Receivables use a daily revenue rate to calculate the precise amount of revenue for each full
and partial period in the schedule. This accounting rule type provides you with the most
precise revenue recognition schedule possible. Use rules of this type in cases where you
must meet strict revenue accounting standards for partial accounting periods.
3.3.2. Daily / Partial Periods: Use Daily Revenue Rate, Partial Periods to have Receivables
use daily revenue rate to calculate the precise amount of revenue for only partial period in
the schedule. This rule provides you with an even, prorated revenue distribution across
the schedule's full periods.
Note: See Section 4.2 for calculation differences between Daily Rate / All Periods and Daily
Rate / Partial Periods Rules.
Collaborate 10
Page <4>
The Initial Accounting created at the time of creation of the Invoice will be as follows:
Receivables Account
Unearned Account
Tax Account
Debit XXXX
Credit
XXXX
Credit
XXXX
Revenue Amount is staged in Deferred (Unearned) Account until Revenue is triggered either
manually via Revenue accounting form (details in the next Section 5.2 of the paper) or using
Revenue Accounting API (details in Appendix B of this paper) as may be the case.
Revenue could be triggered partially or fully, for all line or selected invoice lines which will
generate the revenue accounting as follows:
Note # 1: Daily Deferred rules could be Daily Rate / All Periods or Daily Rate / Partial Periods
rules. See Section 4.2 for calculation differences between Daily Rate / All Periods and Daily
Rate / Partial Periods Rules.
Note # 2: In Oracle 11i, there is a bug in terms of how the Revenue Accounting Form creates
revenue distribution calculations when DAILY DEFERRED rules are used. The per month
amount calculation goes out of whack for a couple of periods when you trigger revenue via the
revenue accounting Form. Please work with Oracle to obtain a patch for this bug.
Collaborate 10
Page <5>
Immediate
Recognition
@ Invoicing
All At Once
Deferred &
Recognize
Later
Page <6>
Collaborate 10
Page <7>
For ease of discussion, we have captured the Daily Revenue Recognition scenarios in the following 2X2
matrix in 4 distinct quadrants. Lets study each scenario in detail.
Rev Rec
Scenarios
S2
1. Standard [i.e. NonDeferred] Revenue
Recognition Scenario
2. Use Standard Daily
Revenue Rule
3. Minimum complexity
Rule
Duration
Known
S3
Rule
Duration
Unknown
1st Month Revenue = [# of Calendar Days in the Month Rule Start Date] X Total Revenue
# Of Calendar Days in the Year
While Rule Start is known at the time of invoicing, the rule start date could, depending on the
nature of the transaction, be a (a) date in the current open period or (b) a date in the prior period
or (c) a date in a future period.
Date in the current open period is the most common scenario and represents a simple and
straight forward daily revenue scenario.
A software company could let customers renew its licenses 90 days in advance and invoice the
customer in advance but may want to recognize revenue only from license renewal effective
date. In this scenario, you may have rule start dates which are in future passed as part of an
Collaborate 10
Page <8>
Invoice that is billed in Advance. The point to note is that since the rule start date is known,
Receivables will build the revenue schedule for the entire duration beginning from a future GL
Date.
A security company may permit late renewals of licenses and may want revenue recognition be
effective retrospectively. These cases, the rule start date could be in past. The point to note is
though the revenue recognition program will try to do a catch-up on revenue, it will end up
posting all revenue in the current open period if prior AR periods are in closed status
Point to note is that in all the above cases, revenue schedule is built in the period of invoicing
though the actual distribution entries may begin on a future date.
Lin
e#
Revenue
Amount
1
2
3
1200
1200
1200
Current
Open
Period
Mar-10
Mar-10
Mar-10
Duration
Rule Start
Date
12 Mo
12 Mo
12 Mo
16-Mar-10
16-Jan-10
16-May-10
First Month
of Revenue
Recognition
Mar-10
Mar-10
May-10
No of
Calendar
Days
16
75 [16+28+31]
16
First
Month
Rev
52.60
246.57
52.60
Collaborate 10
Page <9>
or where revenue contingencies are being used, you may let Revenue Contingency Analyzer
program trigger revenue on expiration of contingencies.
a) Using Revenue Accounting Form: Use Revenue Accounting Form to schedule revenue
for transaction lines for which revenue has been deferred. This standard Oracle form
provides users easy front end access to trigger revenue in a 5-step process.
The Form allows search for transactions by Transaction Number, Customer
Number, Transaction Date, Source, Customer etc. ONLY Transactions that are
associated with a deferred revenue rule and for which accounting has been
created are available via this Form to schedule revenue
Navigation: Receivables -> Control -> Accounting -> Revenue Accounting
Once you found the transaction to schedule revenue, you can review the
transaction distribution lines and revenue summary to identify how much
revenue is available for scheduling.
Collaborate 10
Page <10>
Next steps are identifying which lines to adjust and the percent or amount of
revenue that needs to be scheduled. Amend GL Date if required. You may pass a
GL date in the current period or a past or a future period as may be relevant.
Final step is reviewing the distribution lines and the revenue calculations and
either cancel or save the transactions. Immediately after saving, the system
updates the Invoice Distributions with the scheduled revenue. No need to run
Revenue Recognition program to update the distributions. GL transfer is not
automatically triggered though. The revenue entries are transferred to GL only
after General Ledger Transfer program is run from AR.
Collaborate 10
Page <11>
b) Using Revenue Accounting API: Alternatively, you may use Revenue Accounting API
to have the system trigger revenue based on a defined trigger point. Revenue
Accounting API offers much more flexibility in terms of scheduling revenue than on the
form; however you will need to write some custom code to call the API and pass
relevant input values. Please refer to Appendix B for technical details around how to use
the Revenue Accounting API in a FAQ [Frequently Asked Questions] format.
c) Revenue Contingency Analyzer: In case of contingencies, Revenue Contingency
Analyzer program can automatically trigger revenue when the contingency expires or
payment or acceptance event occurs. Revenue for payment based contingencies is
automatically triggered when payment is applied to the Invoice.
Collaborate 10
Page <12>
to change the accounting rule duration. Accounting rule duration once associated with the
invoice cannot be changed at the time of triggering revenue.
Tip: The only workaround is to use a 01 month Deferred Accounting rule on the Invoice and
to use the Revenue Accounting API to trigger revenue once the duration is known. You could
tweak the Revenue Accounting API to pass amounts with GL Date in such a manner that
revenue is recognized over the new duration determined and at a daily rate. This requires
some custom coding however could be worked out only if 1 Month Deferred Accounting
rule is used. Please refer to Appendix A that will discuss a couple of VeriSign scenarios where
we have provided an automated solution using Revenue Accounting API
6. Conclusion
There are several factors that contribute to a successful solution implementation. Perhaps the
most important is the understanding of existing functionality offered by the system and
designing solutions that meet the business requirements. That is the objective of this white
paper and discussion of revenue scenarios in 2X2 matrix.
Obviously, there is more technical stuff to Daily Rate Revenue Recognition than thats discussed
in this paper. The authors have added Appendix A & Appendix B to address some of the
technical questions you may have and offer some thoughts on how to approach them.
Appendix A is a write-up on the technical solution design on a couple of very challenging
revenue S4 scenarios at VeriSign where rule start date and rule duration were both unknown at
the time of invoice creation. Appendix B is a technical FAQ [Frequently Asked Questions] on
Revenue Accounting API providing guidance how you could use them. Though not elaborate,
authors have tried to address some basic questions and more information could be obtained
from the Oracle implementation guides and technical manuals.
About the Authors:
Anil Madhireddy is the Manager Business Systems Analysis and the IT lead for Order to Cash
business process at VeriSign. He has a combined 10+ years of Accounting, Audit and Oracle
Financials ERP implementations experience.
Gautam Ramakrishna is a Senior Developer at VeriSign. He has extensively worked on
providing automated solutions using Revenue Accounting API for VeriSign and the author for
Appendix A & B.
Collaborate 10
Page <13>
Collaborate 10
Page <14>
Case where coupons are expired: - Since the coupon has expired without being
redeemed, the entire transaction line amount will need to be recognized in the same
period in which the data is sent. This will need a single API call with the entire
transaction line amount being passed in the same call.
Example:
Following is the example of revenue distributions lines created by the API based on the above
approach in a case where the coupon has a 6 month accounting rule and the transaction line
amount is $1000. Consider that the coupon is redeemed on Feb 05, 2010.
Revenue Adjustment
Number
80001
80002
80003
80004
80005
80006
GL Date
05-Feb-10
05-Mar-10
05-Apr-10
05-May-10
05-Jun-10
05-Jul-10
Revenue Adjustment
Amount
167
167
167
167
167
165
VeriSign Scenario # 2
Scenario
Procurement orders are created for procuring the tokens on behalf of Reseller/Direct customers.
These procurement orders will flow through the Order Management workflow and
procurement invoices will be created. Revenue will not be recognized on the invoice lines until
the tokens are shipped and fulfilled. Revenue recognition should happen only for the 'Actual'
quantity of the tokens shipped in a month. The revenue should be evenly distributed over the
months that are left in the original accounting duration defined on the token item.
Challenge:
This case ties with the S4 Revenue Scenario mentioned in the Section 5 of the white paper. Here
the rule start date (i.e. the date on which the tokens would be fulfilled) is unknown. Also the
duration over which the revenue would need to be recognized is unknown as it would depend
on how much of the rule duration is remaining from the token service fulfillment date. Ex: Lets say the accounting duration defined on the token item SKU is 48 months. If the token
services are fulfilled on the 28th month, then the duration over which the revenue should be
recognized is from 28th month to 48th month - duration of 21 months.
Approach
We create the transaction lines for the procurement invoice with a deferred accounting rule
having one month duration. When the revenue recognition program is run the transaction line
amount is transferred to an unearned account.
The number of tokens shipped and fulfilled for a customer for the entire month is consolidated
into a monthly order. This monthly order will flow through the Order Management workflow
and monthly invoices will be created. The monthly invoice line will be a zero dollar line and
Collaborate 10
Page <15>
will have the quantity which represents the total number of tokens shipped and fulfilled for the
customer. Using the token item and the customer from the monthly invoice we will fetch the
matching procurement invoices having the same customer and token item in a FIFO manner
meaning the earliest created procurement invoices will be fetched first. The amount to be
recognized on the procurement invoice is determined by multiplying the unit selling price on
procurement invoice with the quantity available on the monthly invoice. The duration over
which the revenue will need to be distributed is determined by checking the number of periods
remaining in the original accounting duration defined on the token item. The revenue
accounting API will be called as many times as the number of periods over which the revenue
amount needs to be distributed.
Amount to be passed to the last API call = (Total transaction line amount Sum of the amount passed to the API
previous calls)
in the
Example:
1) The procurement invoice "1000" is created on 01-Jan-2010 for 1000 tokens for customer "XYZ
Corporation". The unit selling price for each token is 5$.
2) The accounting duration of the accounting rule on the token item is 48 months.
3) 500 tokens are shipped and fulfilled for "XYZ Corporation" on 01-Jan-2013. This would
mean that we have a monthly invoice "1001" with quantity as 500 and the amount on the
line would be 0$.
4) The duration over which the revenue would need to be recognized for the procurement
invoice "1000" can be calculated as below.
Number of periods between (A) and (B) including (A) and (B).
(A) End date of the accounting duration on the invoice "1000"
(B) Rule start date of the invoice "1001"
(A) In turn can be calculated by adding the accounting rule duration on the token to the rule
start date of the invoice 1000.
In our case following will be the value for the components.
(A) => 31-Dec-2013
(B) => 01-Jan-2013
Number of periods = 12.
Revenue Amount to be recognized = 500 * 5 = 2500.
Distributions will be created as below.
Revenue Adjustment
Number
80001
Collaborate 10
GL Date
01-Jan-13
Revenue Adjustment
Amount
208.33
Page <16>
80002
80003
80004
80005
80006
80007
80008
80009
80010
80011
80012
01-Feb-13
01-Mar-13
01-Apr-13
01-May-13
01-Jun-13
01-Jul-13
01-Aug-13
01-Sep-13
01-Oct-13
01-Nov-13
01-Dec-13
208.33
208.33
208.33
208.33
208.33
208.33
208.33
208.33
208.33
208.33
208.37
Type
Data Type
Required
Default
Value
p_api_version
IN
NUMBER
Yes
p_init_msg_list
IN
VARCHAR2
No
p_commit
IN
VARCHAR2
No
Used to compare
version numbers
of incoming calls
to its current
version
number. For the
current version the
value that should
be passed for this
parameter is 2.0.
FND_API.G_ To initialize the
FALSE
message list.
FND_API.G_ To commit the
FALSE
processing done
Collaborate 10
Description
Page <17>
p_rev_adj_rec
IN
x_return_status OUT
AR_Revenue_ Yes
Adjustment_
PVT.Rev_Adj_
Rec_Type
VARCHAR2
x_msg_count
OUT
NUMBER
x_msg_data
OUT
VARCHAR2
x_adjustment_
id
OUT
NUMBER
x_adjustment_
number
OUT
VARCHAR2
by the API.
Revenue
Adjustment record
type.
Overall API return
status.
Number of
messages in the
API message list.
Actual message
date in the stack.
The ID of the
resulting revenue
adjustment.
The number of the
resulting revenue
adjustment.
4) What are some of the important values in the revenue adjustment record that need to be
passed to the API?
Parameter
p_rev_adj_rec.customer_trx_id
Description
The transaction on which the
revenue accounting needs to be
triggered.
p_rev_adj_rec.from_cust_trx_line_id The transaction line on which
the revenue accounting needs to
be triggered.
p_rev_adj_rec.reason_code
Lookup code for revenue
adjustment reason.
Ex: - RA Revenue Adjustment
p_rev_adj_rec.amount_mode
The amount mode specifies
whether an amount, a
percentage (of total value of
selected lines), or all adjustable
revenue is to be adjusted.
Possible
values are:
p_rev_adj_rec.gl_date
p_rev_adj_rec.line_selection_mode
Collaborate 10
Page <18>
p_rev_adj_rec.amount
p_rev_adj_rec.percent
S Specific line
A All Transaction lines
I Specific Item
C Specific Category
The amount of revenue to be
adjusted.
To be passed if the amount
mode value is A.
The percentage of total selected
transaction line value to be
adjusted.
To be passed if the amount
mode value is P.
Page <19>
user can then call the API any number of times with each call having the desired amount
to be distributed in a particular GL period and GL Date indicating the period in which
the distribution needs to be transferred to GL.
8) Can we use Revenue Accounting API for transactions that already have contingencies
applied on it?
Yes, the revenue accounting API can be used to recognize revenue on transactions that
have contingencies applied on it. For time-based contingencies, while Revenue
Contingency Analyzer program can trigger full revenue, Revenue Accounting API
provides the flexibility to trigger revenue partially as well.
9) What needs to be kept in mind while using the API in our custom programs?
The total amount or the total percent for all the distribution records that we are
attempting to create using the API should not exceed the total revenue amount on the
transaction line or 100% of the total revenue amount on the transaction line.
10) What is the advantage of passing amount over percentage as input parameter to the
API?
It has been observed on instances passing the percentage creates rounding issues. Even
when we prorate the percentage accurately and pass to the API, the sum of percentage
on all distribution records exceeds 100% resulting in the API throwing an exception.
This can be overcome by passing amount to the API after appropriately prorating to take
care that the sum total of the distribution revenue amount does not exceed the total
revenue amount on the transaction line.
11) What are some of the warning and error messages from API?
Message Code
AR_RA_AMT_EXCEEDS_
AVAIL_REV
Message Text
The amount entered is greater than
&TOT_AVAIL_REV, the total available
revenue on the lines selected.
AR_RA_CATEGORY_NOT_
There are no lines with items for category ID
ON_TRX
&CATEGORY_ID on this transaction.
AR_RA_CB_DISALLOWED
Revenue cannot be adjusted on chargebacks.
AR_RA_DEP_DISALLOWED
Revenue cannot be adjusted on deposits.
AR_RA_DM_DISALLOWED
Revenue cannot be adjusted on debit memos
or debit memo Reversals.
AR_RA_FULL_CREDIT
One or more credit memos have been applied
for the full amount of this invoice.
AR_RA_GL_DATE_CHANGED
GL date, &GL_DATE, is not in an open or
future-enterable period. GL date has been
changed to &NEW_GL_DATE.
AR_RA_GUAR_DISALLOWED
Revenue cannot be adjusted on guarantees.
AR_RA_INVALID_AMOUNT_MODE Amount mode &AMOUNT_MODE is
invalid.
Collaborate 10
Page <20>
Type
E
E
E
E
E
E
W
E
E
AR_RA_INVALID_LINE_ID
AR_RA_INVALID_LINE_MODE
AR_RA_INVALID_REASON
AR_RA_NO_REV_TO_ADJUST
AR_RA_PARTIAL_CREDIT
AR_RA_PCT_EXCEEDS_AVAIL_PCT
AR_RA_TRX_NOTFOUND
AR_RA_ZERO_AMOUNT
AR_TAPI_TRANS_NOT_EXIST
Collaborate 10
Page <21>
E
E
E
E
W
E
E
E