A Revenue Recognition Schedule releases revenue you have already billed, but not yet earned, from a deferred-revenue account to an income account, one period at a time. You use it after the full amount has been posted to the deferred-revenue account (for example, an annual support contract invoiced up front). Then, each time a scheduled period arrives, a background job posts a journal that debits deferred revenue and credits revenue.
Overview
A schedule has two parts:
- The schedule header says what is being deferred: the company, the deferred-revenue and revenue GL accounts, the total amount and the recognition window. You maintain headers in the Finance Setup app.
- Schedule lines hold the plan, one line per period. Each line has a period date and a scheduled amount. When the period date arrives, the background job posts that line and marks it Recognized.
xMatix posts lines only. Saving a header does not create its lines, and the standard screens have no way to add them. Lines are created through the data API or an integration. Read How xMatix handles it before you rely on the feature.
When to use it
- You bill in advance for something you deliver over time, such as a subscription, a maintenance contract or an extended warranty, and your accounting policy recognises the income across the service period.
- You want each month's release to post on its own, without someone raising a manual journal every period.
If the amount or timing changes from period to period and you would rather post each release yourself, use a recurring journal or a manual journal instead.
How xMatix handles it
- The initial deferral is not part of the schedule. The schedule never posts the billed amount into the deferred-revenue account. That entry comes from the invoice or journal you post first, so make sure the invoice credits your deferred-revenue account rather than income.
- Nothing generates lines for you. Number Of Periods, Start Date, End Date and Method describe the plan, but no screen, save or background job turns them into lines. Whoever creates the lines decides their dates and amounts.
- Some header fields are not on the standard screens. The shipped create form and record page don't include Revenue GL Account. The create form doesn't include Total Amount (you set it on the record page). Neither form shows Status or Document Number. Without a revenue GL account, no line can post. An administrator should add these fields to the layouts (see Configuration).
- Posting is automatic and runs in the background. For tenants whose subscription includes the Finance product, the job checks for due lines every few minutes. A line is due when its Status is Pending, it has no journal, its Period Date is today or earlier, and its schedule is Active. "Today" is the current date in UTC, so in a time zone ahead of UTC, such as India (UTC+05:30), a line dated today becomes due a few hours into your day. Lines that fall due on the same date post in Period Number order. Each due line gets its own journal. There is no button to post a line or run recognition on demand.
- The journal is dated on the line's Period Date, so that date's fiscal period must be open. If no fiscal calendar covers the date, xMatix creates the fiscal year with open monthly periods. A closed or locked period blocks the line until the period is reopened.
- A schedule finishes itself. Each posted line adds its amount to the schedule's Recognized Amount. When the Recognized Amount reaches the Total Amount, the schedule's Status becomes Completed, and none of its other lines post after that.
Prerequisites
- The deferred-revenue liability account and the income account exist in your chart of accounts. Both must be active.
- The billed amount has been posted to the deferred-revenue account, normally by the customer's invoice.
- Your security profile gives you access to the Finance Setup app and to Revenue Recognition Schedule (see Permissions).
- An administrator has added Revenue GL Account to the schedule layouts, or sets it through the data API.
- Someone (an integration or an administrator using the data API) will create the schedule lines.
Procedure
Step 1 — Find a schedule
Open the Finance Setup app. Under Books & Posting, open Revenue Recognition Schedules. The All Revenue Recognitions view shows Name, Partner Account, Business Unit, Source Entity Name, Number Of Periods, Method, Deferred GL Account, Recognized Amount, Status, Created By, Created Date and Modified Date.
Use the Status column to see which schedules are still releasing (Active) and which are done (Completed).
Step 2 — Create the schedule header
- Select New.
- Choose the Partner Account (the company whose books the releases post to). On a tenant that runs only one company, this field is hidden.
- Optionally choose a Business Unit. If you leave it blank, xMatix fills it from the Deferred GL Account's default business unit when you save.
- Choose the Deferred GL Account, the liability account that holds the unearned balance.
- Under Details, enter Number Of Periods and Method (a free-text box; enter
StraightLineorMilestoneto record your intent). Optionally choose the Party Account (the customer) and enter the Source Entity Name (for example,Invoice). - Under Timeline, enter the Start Date and End Date of the recognition window.
- Save.
The schedule is named from the RC number series (for example RC-27102026-000001) and starts with Status Active. It has no lines yet, so nothing will post.
Step 3 — Set the total and the revenue account
- Open the schedule. The record page shows Basic Details (Deferred GL Account, Number Of Periods), Timeline (Start Date, End Date) and Amount Details (Total Amount, Recognized Amount).
- Under Amount Details, edit Total Amount in place and enter the full amount to be released. Always set it. A schedule with no Total Amount is marked Completed as soon as its first line posts, and stops releasing.
- Set Revenue GL Account, the income account each release credits. If your layouts don't show this field, ask your administrator to add it, or have the integration that creates the lines set it.
Leave Recognized Amount alone. Posting maintains it, and a hand edit changes when the schedule completes.
Step 4 — Add the period lines (integration or administrator)
Create one Revenue Recognition Schedule Line per period through the data API (POST /api/1.0/data/RevenueRecognitionScheduleLine). For each line, set:
- Name — a label of your choice, such as
Period 01. Lines have no number series, so a line without a name is refused with "Name is required"; - Schedule — the schedule header;
- Period Number — 1, 2, 3 …;
- Period Date — the date the release should post (it becomes the journal date);
- Scheduled Amount — the amount to release, greater than zero;
- Partner Account — the same company as the header.
Leave Status at its default of Pending, and leave Recognized Amount, Recognized Date and Journal empty. For a straight-line plan, divide the total evenly, round each line to two decimals, and put the rounding difference on the last line so the lines add up exactly to the Total Amount.
Step 5 — Let the releases post
You don't need to do anything for a period to post. Once a line's Period Date arrives, the background job posts a journal and updates the line:
- Status → Recognized;
- Recognized Amount → the scheduled amount;
- Recognized Date → the period date;
- Journal → the recognition journal.
The schedule's Recognized Amount goes up by the same amount. After the last release, the schedule's Status becomes Completed.
If a line's Period Date is already in the past when you create it, the line posts on the next run, dated on its Period Date.
Step 6 — Check the recognition journals
In the Finance app, open Journals and filter Source Entity Name on RevenueRecognitionSchedule. Each recognition journal is already Posted and has:
- Journal Date — the line's Period Date;
- Narration — "Revenue recognition: document number or schedule name period n";
- line 1 — debit the Deferred GL Account, narration "Deferred revenue released";
- line 2 — credit the Revenue GL Account, narration "Revenue recognized".
The journal has no branch. Each line takes its branch and business unit from its GL account's defaults, not from the schedule's Business Unit. See Working with journals.
Step 7 — Stop or correct a schedule
- Stop future releases. Set the schedule's Status to Cancelled (add the field to the layout, or use the data API), or delete the lines that haven't posted yet. Deleting the schedule also stops its lines from posting.
- Correct a release that already posted. Reverse the journal and post the corrected amount by manual journal. Reversing doesn't reset the line, which stays Recognized, or the schedule's Recognized Amount. A line can't post a second time.
- Clone copies the header only, not its lines, even though the confirmation message mentions line items. The copy keeps the original's Status and Recognized Amount, so reset both on the copy.
Fields
Revenue Recognition Schedule
| Field | What it means | Notes |
|---|---|---|
| Name | The schedule's number. | Set automatically when the schedule is created, from the RC series: RC- + the date as DDMMYYYY + a six-digit counter. Any value you type is replaced. |
| Partner Account | The company whose books the releases post to. | Becomes the journal's company, which decides which fiscal calendar applies. Hidden on single-company tenants. |
| Business Unit | The finance business unit the schedule belongs to. | Filled from the Deferred GL Account's default business unit if left blank. Not copied onto the recognition journals. |
| Deferred GL Account | The liability account holding the unearned balance. | Debited by every release. Required for posting. Must not be a control account, because recognition journals carry no party. |
| Number Of Periods | How many periods you plan to spread the amount over. | For your records only. It doesn't create lines. |
| Method | The intended plan, such as StraightLine or Milestone. | Free text. Defaults to StraightLine and has no effect on posting. |
| Party Account | The customer the deferred revenue relates to. | For your records only. It isn't put on the journal lines. |
| Source Entity Name | The kind of document the schedule came from, such as Invoice. | For your records only. It doesn't link to the document. |
| Start Date / End Date | The recognition window. | For your records only. Lines post on their own Period Dates. |
| Total Amount | The full amount to release. | On the record page, not the create form. When Recognized Amount reaches it, the schedule completes. |
| Recognized Amount | The total released so far. | Increased by each posted line. Read-only in practice. |
| Revenue GL Account | The income account each release credits. | Required for posting. Not on the standard layouts. |
| Status | Active, Completed or Cancelled. | Free text, defaults to Active. Only Active schedules (or schedules with no status) post. Set to Completed automatically. Not on the standard layouts. |
| Document Number | The source document's number. | Used in the journal label and narration instead of the schedule name when set. Not on the standard layouts. |
| Source Record | The source document's record id. | Set through the data API only. |
Revenue Recognition Schedule Line
| Field | What it means | Notes |
|---|---|---|
| Name | A label for the line. | Required. Not generated, so the request that creates the line must supply it. Not used in posting. |
| Schedule | The schedule this line belongs to. | Required for the line to post. |
| Period Number | The line's position in the plan. | Appears in the journal narration. Lines due on the same date post in this order. |
| Period Date | The date this release posts. | Becomes the journal date. Its fiscal period must be open. |
| Fiscal Period | A fiscal period you can record on the line. | Not used for posting. The journal finds its period from the Period Date. |
| Scheduled Amount | The amount to release in this period. | Must be greater than zero. Rounded to two decimals when posted. |
| Recognized Amount | The amount actually released. | Set when the line posts. |
| Recognized Date | The date the release was posted for. | Set when the line posts (the Period Date). |
| Journal | The recognition journal. | Set when the line posts. A line with a journal never posts again. |
| Status | Pending or Recognized. | Defaults to Pending. Set to Recognized when the line posts. |
| Partner Account | The company. | Keep it the same as the header's. |
Business rules
- Numbering. A new schedule's Name comes from the Revenue Recognition Schedules Settings number series: prefix RC, a hyphen, the creation date as DDMMYYYY, a hyphen and a six-digit counter. The counter is kept per date, so numbering starts again at 000001 each day. See Document numbering.
- Due date. The background job compares each line's Period Date with the current date in UTC.
- Business unit default. When you save a schedule that has a Deferred GL Account but no Business Unit, xMatix copies the account's default business unit.
- What makes a line due. The line's Status is Pending (or blank), it has no Journal, its Period Date is on or before today, its schedule is Active (or has no status), and neither the line nor the schedule has been deleted.
- What posting checks. The line isn't already recognized. The schedule has both a Deferred GL Account and a Revenue GL Account. The Scheduled Amount is greater than zero. Both GL accounts are active. The fiscal period for the Period Date is open. A deferred account flagged as a control account always fails, because the journal has no party.
- What posting writes. One posted journal per line (debit deferred, credit revenue, for the Scheduled Amount). The line is stamped Recognized with its amount, date and journal. The schedule's Recognized Amount increases, and Status becomes Completed once Recognized Amount is at least Total Amount.
- Failures retry. If posting fails, nothing is saved. The line stays Pending and is picked up again on a later run, until you fix the cause or the line is no longer due.
- No automatic reversal. Deleting a schedule, cancelling it or reversing a recognition journal never changes lines that have already posted.
Example
A customer pays 120,000.00 in April for a twelve-month support plan. The finance team invoices it to Deferred Support Revenue (a liability account), not to income.
- In Finance Setup → Books & Posting → Revenue Recognition Schedules, an accountant creates a schedule: Deferred GL Account Deferred Support Revenue, Number Of Periods 12, Method StraightLine, Source Entity Name Invoice, Start Date 1 April, End Date 31 March. It is saved as an RC-numbered schedule with Status Active.
- On the record page they set Total Amount to 120,000.00, and set Revenue GL Account to Support Income (the administrator has added the field to the layout).
- The billing integration creates twelve lines dated on the last day of each month, from April to March, each with a Scheduled Amount of 10,000.00, Status Pending.
- On 30 April, the background job posts the first journal (Dr Deferred Support Revenue 10,000.00, Cr Support Income 10,000.00). Line 1 becomes Recognized, and the schedule's Recognized Amount is 10,000.00.
- Each month repeats this. After the March line posts, Recognized Amount is 120,000.00 and the schedule's Status is Completed. The deferred account's balance for this contract is zero.
Training
Practice exercise
In a sandbox company with an open fiscal year:
- Create a schedule with a Deferred GL Account, Total Amount 3,000.00 and a Revenue GL Account.
- Using the data API, add three lines with Scheduled Amount 1,000.00 each: two with a Period Date in the past and one a month from now.
- Wait a few minutes, then open the schedule and the Journals list.
Expected result: two posted journals with Source Entity Name RevenueRecognitionSchedule, each dated on its line's Period Date. The two past lines are Recognized, the future line is still Pending, the schedule's Recognized Amount is 2,000.00, and its Status is still Active.
Quick reference
- Post the billed amount to the deferred-revenue account first. The schedule only releases it.
- Saving a header creates no lines. Lines come from the data API or an integration.
- Every schedule needs a Deferred GL Account, a Revenue GL Account and a Total Amount.
- Each line posts on its Period Date, in that date's fiscal period, which must be open.
- Posting is automatic. There is no "post now" button.
- Posted lines become Recognized and never post again.
- The schedule completes itself when Recognized Amount reaches Total Amount.
- To stop a schedule, set Status to Cancelled or delete the unposted lines.
- To correct a release, reverse its journal and post a manual journal.
Permissions
Access follows the user's security profile:
- App access. The Finance Setup app is granted to System Admin, Standard User and Sales Manager in the shipped profiles.
- Entity permissions. System Admin, Standard User and Sales Executive ship with full access to Revenue Recognition Schedule and Revenue Recognition Schedule Line. Sales Manager can open the app but has no permission on these entities until you grant it.
- Actions. New, Edit and Delete follow the entity permission. Clone is a server action, granted to System Admin, Standard User and Sales Executive.
- Background posting runs as the system. It doesn't need a user permission and isn't affected by who created the schedule.
A data API integration that creates lines needs create permission on Revenue Recognition Schedule Line. Review these grants under Setup → Access Control → Profiles so that only finance staff maintain schedules.
Configuration
- Add the missing fields to the layouts. The shipped create layout (RevenueRecognitionLayoutCreate) and record layout (RevenueRecognitionScheduleView) have no Revenue GL Account, Status or Document Number, and the create layout has no Total Amount. Add them in the form designer (see Design a form layout). Because Edit opens the create layout, a field you add there can be edited later too.
- Show the lines. Lines have no layout, no list and no app menu entry. To let users see a schedule's lines, add a related list of Revenue Recognition Schedule Lines to the record layout, or add the entity to an app (see Create an entity, step 7).
- Number series. The Revenue Recognition Schedules Settings document name setting controls the schedule Name (series RC, date format DDMMYYYY, six-digit counter). Change the series, date format or counter length there (see Document numbering).
- Fiscal calendar. Keep the periods your lines fall into Open until their releases have posted (see Closing a period).
- GL accounts. Use an active, non-control liability account for deferred revenue. Give it a default business unit if you want new schedules to pick one up.
- Subscription. The background job only runs for tenants whose subscription includes the Finance product.
- Line creation. Your integration owns the plan. Make it idempotent, so that a retry doesn't add a second set of lines, and make sure its line amounts add up to the Total Amount.
Common problems
A line's Period Date has passed but nothing posted
Check each condition in turn:
- the line's Status is Pending and its Journal is empty;
- the schedule's Status is Active (not Completed or Cancelled);
- the Scheduled Amount is greater than zero;
- the schedule has both GL accounts;
- the Period Date's fiscal period is open.
The job runs every few minutes, so allow a short delay. A line dated today waits until that date has started in UTC (05:30 in India). A line created with a blank Status is selected but then skipped, so set it to Pending.
"Schedule needs both a deferred-revenue and a revenue GL account."
The schedule has no Revenue GL Account (or no Deferred GL Account). The standard layouts don't show Revenue GL Account, so add it to the layout or set it through the data API. The line posts on the next run.
"Revenue recognition amount must be greater than zero."
The line's Scheduled Amount is empty, zero or negative. Correct the amount. To release nothing in a period, delete the line instead.
"Fiscal period '…' is Closed — posting is not allowed."
The line's Period Date falls in a closed or locked period. Either reopen the period, or change the line's Period Date to a date in an open period. The journal is always dated on the Period Date.
"Party Account is required on lines posting to a control account."
The Deferred GL Account is flagged as a control account. Recognition journals carry no party, so they can never post to it. Use a non-control liability account for deferred revenue.
"GL Account '…' is inactive. Please update the Posting Definition or journal line before posting."
One of the schedule's GL accounts has been deactivated. Reactivate it or choose another account on the schedule.
The schedule turned Completed after the first release
The schedule had no Total Amount (or too small a one), so the first posted line already reached it. Set Total Amount to the full amount and Status back to Active. The remaining lines will then post.
Creating a line fails with "Name is required"
Schedule lines aren't numbered automatically, so every line needs a Name in the create request. Add a short label to each line, such as Period 01, and send the request again. The name is only a label. Posting uses the Period Number and Period Date.
"Revenue recognition line is already recognized."
The line already has a journal or is Recognized. A line can't post twice. To change a release, reverse its journal and post a manual journal.
Common questions
Does creating a schedule spread the amount automatically?
No. Saving the header creates no lines, whatever you enter in Number Of Periods, Method, Start Date and End Date. Lines must be created through the data API or by an integration, one per period, with their own dates and amounts. Once they exist, posting each line on its date is fully automatic. If you need a fixed, equal release and would rather avoid an integration, a recurring journal that debits deferred revenue and credits income each month gives the same ledger result.
Can I post a release early or run recognition on demand?
No. There is no "recognize now" action on the schedule or its lines. The background job posts a line only once its Period Date has arrived, and it uses the Period Date as the journal date. To recognise earlier, change the line's Period Date to an earlier date in an open period. The job then picks the line up on its next run, within a few minutes.
Does the schedule post the original deferral?
No. The schedule only releases revenue: debit the deferred-revenue account, credit the revenue account. The billed amount has to reach the deferred-revenue account first, through the invoice or a journal you post yourself. If the invoice credited income directly, the recognition journals would count the same revenue twice.
Can a line post twice?
No. Posting refuses a line that is already Recognized or already has a journal, and the background job skips such lines. If a run fails part-way, nothing is saved for that line, and it is retried later. Reversing a recognition journal doesn't make the line eligible again, so post any correction as a manual journal.
Which business unit and branch do the recognition journals use?
The journal itself has no branch. Each journal line takes its branch and business unit from the defaults on its GL account. The schedule's own Business Unit field isn't copied onto the journal. To report releases by business unit, set default business units on the deferred-revenue and revenue accounts.
