Deferred revenue
Some sales bring cash in today but the revenue belongs to a future period — an annual maintenance plan, a return-window guarantee, a six-month service warranty. Recording all of that as revenue at the till would inflate this month’s P&L and hollow out the next twelve. Deferred revenue is how Fexl Lite parks the cash on the balance sheet and recognises it month-by-month over the deferral period.
Turning it on
Deferred revenue is off by default at the tenant level. Two switches:
Enable the feature
Go to Settings → Sales and toggle Deferred revenue. Pick a default deferral period in days — 30 for a return window, 365 for an annual plan, anything in between.
Mark the product
Open the product in Products, scroll to the Deferred Revenue section, toggle Defer revenue. Optionally override the deferral period for this specific product (a 90-day extended warranty on a flagship phone, for example).
What posts at the till
A 1,200 maintenance plan with a 365-day deferral, paid in full at the register:
- DR 1010-xxx (cash sub-account) 1,200
- CR 2040 (Deferred Revenue) 1,200
Notice 4010 Revenue is not touched at sale time. The cash is on the books, but as a liability — the store owes the customer twelve months of service. The invoice item carries deferRevenue=true and a deferralExpiresAt timestamp computed from paidAt + deferralPeriodDays.
If the sale mixes deferred and non-deferred lines (a phone + a maintenance plan), the JE splits revenue cleanly:
- CR 4010 for the phone’s value (recognised today).
- CR 2040 for the plan’s value (deferred).
VAT, COGS, and discount lines are not affected — VAT is recognised against the cash side as usual, COGS only fires for tangible items.
The recognition runner
A scheduled runner walks the deferred items every day and recognises any whose deferral has elapsed (in monthly slices for plans longer than 30 days, in one shot for shorter return-window deferrals). Each recognition writes:
- DR 2040 (Deferred Revenue) — drains the liability
- CR 4010 (Sales Revenue) — recognises the period’s slice
The schedule lives in prepaid_expense_schedules (same table that powers prepaid-expense amortisation, just keyed differently). The deferred / recognised revenue rows on the P&L summarise both sides — recognised this period vs still-owed.
How it shows up in reports
- P&L — splits into Recognised revenue this period and Deferred (still on books). Only the recognised slice contributes to net profit.
- Balance sheet — 2040 Deferred Revenue appears as a current liability. Drains down each period as the runner fires.
- Trial balance —
2040carries a credit balance until fully recognised;4010rises in step. - Invoice list — items with
deferRevenue=trueshow a small Deferred chip with<days>d remainingunderneath, derived fromdeferralExpiresAt - now.
Quick worked example
A 1,200 annual maintenance plan, sold 1 January, 365-day deferral:
| Date | DR | CR | Note |
|---|---|---|---|
| 1 Jan | 1010 1,200 | 2040 1,200 | Sale posts; nothing to 4010 |
| 31 Jan | 2040 100 | 4010 100 | Runner recognises Jan slice (1/12) |
| 28 Feb | 2040 100 | 4010 100 | Feb slice |
| … | … | … | One slice per month |
| 31 Dec | 2040 100 | 4010 100 | Final slice; 2040 returns to 0 |
Sum of recognised revenue across the year: 1,200. Sum on the 4010 ledger: 1,200. Cash drawer effect on 1 Jan: +1,200 (correct). Net P&L impact in January: +100 (correct — only the January slice belongs to January).