Deferred Payments

A guide to managing deferred payments.

Overview

Fynapse provides the option to defer payments using the Deferral Calculator functionality.

How Does It Work?

An incoming Business Event is broken down into several payments posted in different Periods by the Deferral Calculator.

If any of the deferrals derived from a Business Event fails processing, the Business Event and all its derived deferrals are errored.

Example

A client has bought an internet plan for $20.00. The plan is active from January 2nd 2022 to April 2nd 2022. They pay in a single payment, which the vendor then enters into their books as three deferred amounts, one for each month of the 91-day period.

Fynapse will calculate the deferrals based on contract length and initial deferral amount.

The first deferral amount is posted on the day the transaction was made, the two subsequent ones on the first day of the next period:

  1. January 2nd 2022 - the initial deferral at the beginning of the contract, which amounts to $13.41
  2. February 1st - the second deferral, which amounts to $7.25
  3. March 1st - the third deferral, which amounts to $0.44

If the 1st day of any of the subsequent periods after the first falls on a non-working day, the deferral is posted on the next working day.

If you want the deferred payments to be posted as Reversing Journals, you have to provide the correct Journal Type configuration. For more details, refer to Journal Types.

The underlying calculations for this example are as follows:

The initial amount paid for the internet plan is $20.00.

This will be broken down into three deferral payments into the vendor’s books, as per the accounting practices of the vendor. The initial deferral amount is provided in the original Business Event (the initialDeferralAmountAttribute attribute in the configuration outlined below). The system then calculates the remaining deferral amounts.

The second and further installments are calculated as follows:

Deferral Amount = Previous Deferral Amount - Initial Deferral Amount*Number of days in period/(Total Number of days - Number of days in the first period)

So, in this example, the second deferral amount is calculated as:

13.41 - 13.41*28/(91-30) = 7.25 [after rounding]

And the third:

7.25 - 13.41*31/(91-30) = 0.44 [after rounding]

Start DateEnd DateNumber of days in the periodDeferral AmountActual RevenueTotal Revenue
01/02/202201/31/20223013.416.596.59
02/01/202202/28/2022287.256.1612.75
03/01/202203/31/2022310.446.8119.56
04/01/202204/02/2022200.4420.00
Total20

For the purpose of this example actual revenue is calculated as: Number of Days in Period*Daily Amount The Daily Amount is calculated as: Total Amount/Total Number of Days in Contract Here → 20.00/91 = 0.22 So for January this amounts to: 30*0.22 = 6.59 Note that these are control calculations for the purpose of this example. These calculations are not performed by Fynapse.

The aim of calculating the deferred revenue, which when summed up with the actual revenue should amount to the total amount of the contract:

  1. 20 - 13.41 = 6.59
  2. 20 - 7.25 = 12.75 → (6.59+6.16) → actual revenue for January + actual revenue for February
  3. 20 - 0.44 = 19.56 → (6.59+6.16+6.81) → actual revenue for January + actual revenue for February + actual revenue for March

So while the sum total of the recorded deferral amounts may appear inconsistent with the paid cash amount, they are in fact consistent when considering the implemented logic.

The way the installments are recorded in Fynapse is as follows:

CashRevenueDeferred Revenue
DRCRDRCRDRCR
01/02/202220.00-20.00
01/02/202213.41-13.41
02/01/20227.25-7.25
02/01/2022-13.4113.41
03/01/20220.44
03/01/2022-7.257.25
04/01/2022-0.440.44

You have three Accounts defined for these transactions:

  • 230033 - where you record the cash transaction of $20.00
  • 475100 - where you record the revenue
  • 230038 - where you record the deferred revenue

On January 2nd:

  1. The cash transaction of $20.00 is debited to the 230033 Cash Account
  2. The cash transaction of $20.00 is credited to the 475100 Revenue Account
  3. The first deferred payment of $13.41 is debited to the 475100 Revenue Account and credited to the 230038 Deferred Revenue Account.

On February 1st:

  1. The second deferred payment of $7.25 is debited to the 475100 Revenue Account and credited to the 230038 Deferred Revenue Account.
  2. The first deferred payment of $13.41 is credited to the 475100 Revenue Account and debited to the 230038 Deferred Revenue Account.

On March 1st:

  1. The third deferred payment of $0.44 is debited to the 475100 Revenue Account and credited to the 230038 Deferred Revenue Account.
  2. The second deferred payment of $7.25 is credited to the 475100 Revenue Account and debited to the 230038 Deferred Revenue Account.

On April 1st:

  1. The third deferred payment of $0.44 is credited to the 475100 Revenue Account and debited to the 230038 Deferred Revenue Account, completing the deferred payments for the initial $20.00 amount.

Deferral Calculator

The Deferral Calculator is an Accounting Engine service that allows you to calculate deferred payments.

In order to configure the Deferral Calculator, you have to define the following properties in the Configuration Data JSON file and then upload it via the Configuration Data screen:

  • enabled - determines whether the calculator is enabled
    • true - enables the calculator
    • false - disables the calculator
  • startDateAttribute - defines the start date of the contract for which deferrals should be posted
  • endDateAttribute - defines the end date of the contract for which deferrals should be posted

    The start date and end date have to be defined for different Periods.

  • initialDeferralAmountAttribute - the first posted amount

    The absolute value of the initialDeferralAmountAttribute has to be lower than the absolute value of the Transaction Amount of the Business Event.

  • logicalOperator - determines which defined filters should be considered when calculating deferrals
    • ANY - the first defined filter for which the criteria are met is taken into account
    • ALL - all defined filters are taken into account
  • attributeFilters - the properties required to define filters:
    • name - name of the attribute you want to filter by
    • operator - the condition for filtering, e.g. EQ - equal, or IN - includes
    • value - the value of the attribute
  • postingDateAttribute - the date attribute which refers to the Posting Date defined in the Accounting Rules Navigator for Debit and Credit Posting Patterns. Based on this attribute:
    • Fynapse will check if the startDateAttribute and endDateAttribute are in the future by comparing their values to the Business Event field value which was mapped to the postingDateAttribute in the Deferral Calculator
    • Fynapse will determine the Posting Date value of the first deferral, unless the initialPostingDateAttribute is set
  • Optional: initialPostingDateAttribute - overwrites the startDateAttribute of the Business Event

If the startDateAttribute, endDateAttribute and/or initialDeferralAmountAttribute, Fynapse will:

  • Create a permanent journal
  • Not create any deferrals
  • Not generate any errors

Overwrites

It is possible to overwrite Business Event fields when posting deferrals using the attributeOverrides property:

  • name - the name of the attribute you want to override
  • value - the value you want to insert
  • applyTo - determines which deferrals you want to override
    • all - overrides the attribute on all deferrals
    • allButFirst - overrides the attribute on all deferrals apart from the first
    • first - overrides the attribute only on the first deferral

If you enable the Deferral Calculator, you have to configure at least one filter. Otherwise, the JSON will not be uploaded into the system and an error will be thrown.

Validations

Errored Scenarios

The Deferral Calculator will throw an error and create no permanent journals or deferrals in the following scenarios:

Scenario 1

  • The Transaction Amount on the inbound Business Event is missing.

Scenario 2

  • initialDeferralAmountAttribute - is missing
  • startDateAttribute and endDateAttribute are within different periods

Scenario 3

  • startDateAttribute - is missing

Scenario 4

  • endDateAttribute - is missing

Scenario 5

  • startDateAttribute - is missing
  • endDateAttribute - is missing

Scenario 6

  • initialDeferralAmountAttribute - the Deferral Amount has the opposite sign to the Transaction Amount

Scenario 7

  • initialDeferralAmountAttribute - the Deferral Amount has the opposite sign to the Transaction Amount

Scenarios which Result in Permanent Journal to Be Created

The Calculator allows for the following scenarios:

Scenario 1

  • all deferral attributes are populated
  • startDateAttribute and endDateAttribute are within the same period

Scenario 2

  • initialDeferralAmountAttribute - is missing
  • startDateAttribute - is missing
  • endDateAttribute - is missing

Scenario 3

  • initialDeferralAmountAttribute - is missing
  • startDateAttribute and endDateAttribute are within the same period

Scenario 4

  • startDateAttribute and endDateAttribute are equal

Scenario 5

  • initialDeferralAmountAttribute - is 0
  • startDateAttribute - is missing
  • endDateAttribute - is missing

Scenario 6

  • endDateAttribute and postingDateAttribute are equal

If any of the three scenarios listed above occurs, Fynapse will:

  • Create a permanent journal
  • Not create any deferrals
  • Not generate any errors

Sample Deferral Calculator configuration for JSON

1{
2 "enabled": true,
3 "initialPostingDateAttribute": "date1",
4 "startDateAttribute": "date2",
5 "endDateAttribute": "date3",
6 "initialDeferralAmountAttribute": "amount1",
7 "logicalOperator": "ANY",
8 "attributeFilters": [ {
9 "name": "string1",
10 "operator": "EQ",
11 "value": {
12 "textValue": "AB"
13 }}, {
14 "name": "string2",
15 "operator": "IN",
16 "values":[ {
17 "textValue": "xx"
18 }, {
19 "textValue": "yy"
20 }, {
21 "textValue": "zz"
22 }]
23 }],
24 "attributeOverrides": [ {
25 "name": "string3",
26 "value": {
27 "textValue": "ABC"
28 },
29 "applyTo": "allButFirst"
30 }, {
31 "name": "amount3",
32 "value": {
33 "decimalValue": 0
34 },
35 "applyTo": "all"
36 }]
37}