---
id: CAP-ACC-BAT-019
title: Plan deferred revenue and adjust its remaining releases
feature: FEAT-ACC-BAT-05
product_area: accounting
module: batches
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
- inventory CAP-ACC-BAT-014
- inventory RUL-ACC-BAT-053
- inventory RUL-ACC-BAT-054
- inventory RUL-ACC-BAT-055
- inventory RUL-ACC-BAT-056
- inventory RUL-ACC-BAT-057
- journey ACT-ACC-0530
- journey ACT-ACC-0532
- journey ACT-ACC-0533
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
- services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12
- services-accounting:docs/milestones/ACCT-M3-batch-posting-and-ledger.md#Status history (2026-10-21 09:36, Andrew
  ruled the credit memo on a partly recognised line splits by schedule)
purpose: Posting plans releases of deferred revenue and adjusts remaining releases when a correction occurs.
outcomes:
- Deferred and correction plans expose dated amounts and current revenue balances.
concepts:
- CON-ACC-BAT-005
actors:
- ACT-ACC-012
- ACT-ACC-007
- ACT-ACC-013
surfaces:
- console
- api
- job
permissions:
- key: accounting.subledger-entries.read
  where_checked: api
  scope: tenant
- key: accounting.revenue-schedule-entries.query
  where_checked: service
  scope: tenant
rules:
- id: BR-CAP-ACC-BAT-019-01
  proved_by: [ATS-ACC-BAT-013-25, ATS-ACC-BAT-019-01, ATS-ACC-BAT-019-12, TST-ACC-BAT-019, TST-ACC-BAT-104]
  statement: An originating deferred line credits deferred revenue and receives dated releases over its recognition
    period, assigning the final entry any rounding remainder.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/posting/rebuilt-deferral.integration.spec.js#writes
    H a schedule of three monthly entries on the firsts of October, November and December, summing to 300.00
  origin: none
- id: BR-CAP-ACC-BAT-019-02
  proved_by: [ATS-ACC-BAT-019-02]
  statement: Fixed and matching relative-date strategies choose their own dates; period-based calculation prefers
    the line service period, then product-type period logic, with a year from the batch as fallback.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts:generateScheduleForOriginatingLine;
    services-accounting:modules/batches/services/rules/deferral-rules.ts:calculateRevenueRecognitionPeriod
  origin: none
- id: BR-CAP-ACC-BAT-019-03
  proved_by: [ATS-ACC-BAT-019-03, TST-ACC-BAT-020, TST-ACC-BAT-133]
  statement: A period-based service schedule divides the amount across every calendar month touched, including partial
    months, without changing its entries for the memo truncation setting.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/unit/rules/service-period-schedule.spec.js#gives a service
    period starting mid-month the calendar months it touches: thirteen entries from March 2026 to March 2027'
  origin: none
- id: BR-CAP-ACC-BAT-019-04
  proved_by: [ATS-ACC-BAT-019-04, ATS-ACC-BAT-019-15, TST-ACC-BAT-132]
  statement: Period calculation refuses a recognition period exceeding sixty months.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/unit/rules/schedule-truncation.spec.js#refuses a service period
    of more than 60 months
  origin: none
- id: BR-CAP-ACC-BAT-019-05
  proved_by: [ATS-ACC-BAT-019-05, TST-ACC-BAT-128]
  statement: Deferred splits release their shares through schedule entries, while non-deferred splits credit their
    destinations at posting.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/unit/rules/deferred-revenue-splits.spec.js#releases each period’s
    10% to the percentage split’s account, by the split
  origin: none
- id: BR-CAP-ACC-BAT-019-06
  proved_by: [ATS-ACC-BAT-019-17]
  statement: Any generated recognition date before the posting batch date is moved forward to the batch date.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/services/rules/posting-generation.ts
  origin: none
- id: BR-CAP-ACC-BAT-019-07
  proved_by: [ATS-ACC-BAT-019-06, TST-ACC-BAT-109, TST-ACC-BAT-132]
  statement: An effective-date memo applies the workspace’s posting-time truncation choice, weighting eligible entries
    by period or by days.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/integration/services/posting/rebuilt-service-periods.integration.spec.js#writes
    the memo''s schedule on A''s entries after the effective date alone: the 20 September primary and its split,
    −54.00 and −6.00'
  origin: services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12
- id: BR-CAP-ACC-BAT-019-08
  proved_by: [ATS-ACC-BAT-015-14, ATS-ACC-BAT-019-07, ATS-ACC-BAT-019-13, ATS-ACC-BAT-019-14, ATS-ACC-BAT-020-10, TST-ACC-BAT-021, TST-ACC-BAT-104, TST-ACC-BAT-132]
  statement: Corrections invert the applicable unrecognised share on its original schedule dates and leave already
    recognised entries unchanged.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/unit/rules/schedule-truncation.spec.js#inverts the nine unrecognised
    months at half each on their own dates and nothing for the recognised three
  origin: none
  note: The cited product record confirms a narrower policy; this full rule includes implementation details without
    a matching recorded decision and inherits proposed intent.
- id: BR-CAP-ACC-BAT-019-09
  proved_by: [ATS-ACC-BAT-019-08, TST-ACC-BAT-103, TST-ACC-BAT-129]
  statement: An added deferred debit-memo line gets its own schedule unless the invoice schedule already covers
    it, and a non-deferred line receives none.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/unit/rules/memo-split-by-schedule.spec.js#is written a schedule
    of its own under the memo’s id, summing to 30.00, which the invoice’s schedule does not cover
  origin: none
- id: BR-CAP-ACC-BAT-019-10
  proved_by: [ATS-ACC-BAT-019-11]
  statement: Cash-basis invoices create no schedules, but allocated payments can originate schedules for deferred
    products.
  kind: policy
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts:generateInvoiceSchedules;
    services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts:generatePaymentSchedules
  origin: none
- id: BR-CAP-ACC-BAT-019-11
  proved_by: [ATS-ACC-BAT-019-10]
  statement: Invoice schedule generation uses the line’s tax-inclusive total although the deferred credit excludes
    tax, allowing over-recognition on a taxed deferred line.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts (original_total); FND-ACC-BAT-015
  origin: none
- id: BR-CAP-ACC-BAT-019-12
  proved_by: [ATS-ACC-BAT-019-09, ATS-ACC-BAT-019-18, TST-ACC-BAT-109]
  statement: Entry-read permission allows inspection of an invoice line’s current schedules, entries and currency-bearing
    deferred and recognised totals.
  kind: calculation
  enforced_at:
  - api
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/posting/rebuilt-service-periods.integration.spec.js#answers
    A’s line with 240.00 still deferred across the invoice’s and the memo’s schedules, on the view and on the read
  origin: none
- id: BR-CAP-ACC-BAT-019-13
  proved_by: [ATS-ACC-BAT-019-18]
  statement: The schedule-entry dataset reports signed currency amounts, account and customer references and current-posting
    flags, with its own query permission declared.
  kind: calculation
  enforced_at:
  - database
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/integration/db/revenue-schedule-entries-view.integration.spec.js#sums
    the waterfall the recipe asks for: what is still deferred, by month and revenue account, the memo netted and
    V left out'
  origin: none
- id: BR-CAP-ACC-BAT-019-14
  proved_by: [ATS-ACC-BAT-019-16]
  statement: If effective-date truncation finds no eligible weights, it falls back to inverting the original schedule’s
    unrecognised entries.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts:truncationWeightsOf; services-accounting:modules/batches/services/rules/revenue-schedule-rules.ts:returnTruncatedRevenueRecognitionSchedule
  origin: none
scenarios:
- id: SC-CAP-ACC-BAT-019-01
  given: An annual membership is invoiced for one hundred twenty dollars.
  when: Accounting completes for the containing batch.
  then: The deferred line receives twelve monthly releases of ten dollars.
  provenance: test
  source: react-console:acceptance/accounting/playwright/journeys/batches-posting/ACT-ACC-0529.spec.ts#ACT-ACC-0529
- id: SC-CAP-ACC-BAT-019-02
  given: Three monthly releases have already been recognised.
  when: A half credit memo posts against the line.
  then: Its adjustment schedule reverses half of each remaining month without adjusting the recognised months.
  provenance: test
  source: react-console:acceptance/accounting/playwright/journeys/batches-posting/ACT-ACC-0531.spec.ts#ACT-ACC-0531
- id: SC-CAP-ACC-BAT-019-03
  given: A service period begins in mid-March and ends the following March.
  when: Its schedule is calculated under each memo truncation setting.
  then: Both schedules span thirteen calendar months, with truncation affecting corrections rather than those originating
    entries.
  provenance: test
  source: react-console:acceptance/accounting/playwright/journeys/batches-posting/ACT-ACC-0530.spec.ts#ACT-ACC-0530
edge_cases: []
constraints:
- Fiscal close performs recognition through the system-batch workflow.
depends_on:
- CAP-ACC-BAT-013
related:
- CAP-ACC-BAT-015
- CAP-ACC-BAT-020
journeys:
- JNY-ACC-BAT-005
open_questions:
- OQ-ACC-BAT-003
evidence:
- 'Pinned services-accounting (f47cb263), examined sources: services/rules/revenue-schedule-rules.ts, deferral-rules.ts,
  posting-generation.ts, services/persistence/revenue-recognition-schedules.ts, services/schedules/revenue-schedule-reads.ts,
  aws/api/revenue-schedules.routes.ts (describeInvoiceLineRevenue), db/revenue-recognition-schedules.table.ts, db/revenue-schedule-entries.view.ts,
  metadata/revenue-schedule-entries.object.ts, queries/revenue-schedule-entries.query.ts; tests integration/services/posting/rebuilt-deferral.integration.spec.js,
  rebuilt-service-periods.integration.spec.js, memo-split-by-schedule.integration.spec.js, integration/db/revenue-schedule-entries-view.integration.spec.js,
  unit/rules/schedule-truncation.spec.js, service-period-schedule.spec.js, deferred-revenue-splits.spec.js, memo-split-by-schedule.spec.js;
  docs/accounting/revenue-schedules.md.'
- 'Pinned react-console (baf6dae3), examined sources: journeys ACT-ACC-0529, 0530, 0531, 0532, 0533.'
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-CRY-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-AVL-001, TC-AVL-004, TC-MON-001, TC-MON-002, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-004, TC-PI-005]
exercised_by: [FAS-ACC-BAT-05-01, FAS-ACC-BAT-05-02, FAS-ACC-BAT-05-03, FAS-ACC-BAT-05-04, FAS-ACC-BAT-05-05]
suites: [TST-ACC-BAT-019, TST-ACC-BAT-020, TST-ACC-BAT-021, TST-ACC-BAT-103, TST-ACC-BAT-104, TST-ACC-BAT-109, TST-ACC-BAT-128, TST-ACC-BAT-129, TST-ACC-BAT-132, TST-ACC-BAT-133]
---

# Plan deferred revenue and adjust its remaining releases

## Purpose

Posting plans releases of deferred revenue and adjusts remaining releases when a correction occurs.

## How It Works

Posting identifies the lines whose financial treatment defers revenue. It computes dated schedule entries from the configured strategy and applicable service information. Revenue splits receive their own release shares. Corrections alter eligible remaining entries through inversion or effective-date truncation. Staff can inspect the current schedule and recognised totals for an invoice line. Tax-inclusive schedule generation remains an accounting defect requiring a settled decision and repair.

## Relationships

- Prerequisite: Run and monitor a batch posting job, which addresses the connected batch work.
- Related outcome: Produce document entries using the applicable accounting method, which addresses the connected batch work.
- Related outcome: Post and reverse fiscal-close system batches, which addresses the connected batch work.
