You are on page 1of 4

FINANCIALS AR/AP REPORTS

This document is a technical description of how the AR/AP reports in the opentaps Financials
module are implemented.
Change Log

November
10, 2006

Updated and added information about the Days Outstanding (DSO) Reports

May 1 2006

Updated for opentaps 0.9

2006 Open Source Strategies, Inc. All Rights Reserved.


Page 1 of 4

FINANCIALS AR/AP REPORTS


Background
Accounts Receivables (AR) and Accounts Payables (AP) reports are used to help a company's
controller, treasurer, or bookkeeper figure out how much is owed by various customers and
vendors. Three typical reports are:
1. Balances report shows the net balance due from customers (AR) or to vendors (AP) by
customer or by vendor.
2. Aging report shows how many days outstanding the customer (AR) or vendor (AP) invoices
are and groups them into many buckets.
3. Statement shows a history of the invoices and payments of a customer or vendor and how
the total balance has changed over time.
4. Days Outstanding shows average number of days an invoice was outstanding for a
customer or vendor, and the average days outstanding for all invoices.
The reports are actually symmetrical - with minor modifications, the same report are used for
both AR and AP.
In the opentaps Financials module, you can access the AR/AP Reports from [Financials] >
[Receivables] and [Financials] > [Payables].
Note
organizationPartyId is gotten from the session in Financials module
Balances Report
An example of a balances report would be:
Customer A
$1,000.00
Customer B
$200.00
Customer C
$0.00
Parameters:
organizationPartyId (from session)
asOfDateTime (set to nowTimestamp)
Type = CUSTOMER or VENDOR
If type = CUSTOMER (AR):
Query on all transaction entries where glAccountTypeId=ACCOUNTS_RECEIVABLE
If type = VENDOR (AP):
Query on all transaction entries where glAccountTypeId=ACCOUNTS_RECEIVABLE
Get the DebitAmount: find partyId, sum(Amount) for all AcctgTransAndEntries where
organizationPartyId = organizationPartyId, glAccountId = glAccountId from above,
transactionDate <= asOfDateTime, debitCreditFlag = D, group by partyId
Get the CreditAmount: find partyId, sum(Amount) for all AcctgTransAndEntries where
organizationPartyId = organizationPartyId, glAccountId = glAccountId from above,
transactionDate <= asOfDateTime, debitCreditFlag = C, group by partyId
2006 Open Source Strategies, Inc. All Rights Reserved.
Page 2 of 4

FINANCIALS AR/AP REPORTS


Customer Balance Statement is a report which shows a list of:
Customer PartyId - amount
where amount = DebitAmount CreditAmount if type = CUSTOMER
or amount = CreditAmount DebitAmount if type = VENDOR
Aging Report
Aging report shows a break down of outstanding invoices and their amounts, like this:
0 30 days
Invoice 1 Customer A - $10.00
Invoice 2 Customer B - $25.00
Total: $35.00
30 60 days
Invoice 3 Customer C - $100.00
Total: $100.00
60 90 days
...
90+ days
...
An aging report can be generated by doing a find on Invoice entity with parameters
partyIdFrom = organizationPartyId
statusId != INVOICE_PAID
if type = CUSTOMER
or:
partyId = organizationPartyId
then based on Invoice.invoiceDate UtilDateTime.nowTimestamp() assign it to the different
buckets of aging.
Customer/Vendor Statement
Parameters: from date, thru date, customer or vendor partyId, type of statement (hidden)
if customer (vendor) statement, get all ActgTransAndEntries for partyId, organizationPartyId,
glAccountTypeId = ACCOUNTS_RECEIVABLE (ACCOUNTS_PAYABLE) during from date to
thru date
Show beginning and end balances same as those for customer and vendor balances before
at the beginning and end of the report
Show each AcctgTransAndEntries entry during the interim, with link to invoice or payment. Show
balance changing after each entry: each entry causes an amount to be added to the previous
balance. The first balance is the initial balance.
2006 Open Source Strategies, Inc. All Rights Reserved.
Page 3 of 4

FINANCIALS AR/AP REPORTS


For Customer (vendor) statement, if debitOrCreditFlag is D (C), then add amount, otherwise
subtract the amount.
Final balance should equal the ending balance.
Days Outstanding Report
Days outstanding is based on a lookup of all invoices which are not CANCELLED or WRITEOFF
and calculates their dates outstanding based on invoiceDate and paidDate if the invoice is PAID
and the current date if the invoice is not PAID. If the invoice is PAID and has no paidDate, it
assumes it was paid at the same time as invoiceDate. It then displays the following information:
Number invoices
Total value of all invoices
Average days outstanding (DSO) for each customer, where DSO is paidDate invoiceDate in days for invoices with paidDate != null and currentDate invoiceDate for invoices with paidDate == null, averaged
over the number of invoices (Sum of each invoice's DSO divided by total
number of invoices)
Value weighted DSO: (Sum of (invoice DSO x invoice Value)) / (Total value of
invoices)
Note that this report does not do currency translation, so if the various invoices are in different
currencies, the value weighted DSO may be incorrect.

2006 Open Source Strategies, Inc. All Rights Reserved.


Page 4 of 4

You might also like