# Reporting periods

## Purpose

**Reporting periods** bound **which journal lines** belong to performance reports (P&L) and **which cumulative history** shapes position reports (balance sheet) and **trial balance** windows. Period logic must be **single-sourced**: the same definitions drive close, TB, statutory packs, and management reporting.

## Monthly / yearly (and sub-monthly)

- **Fiscal calendar:** each tenant defines fiscal year start month, optional **4-4-5** or other retail calendars, and **period labels** (e.g., `2026-05` for May). All reports declare the **calendar version** they use.
- **Monthly:** P&L and management TB are typically **inclusive** of all posted lines with `book_date` in `[period_start, period_end]` where ends are **end-of-day** in the tenant’s reporting timezone (fixed and stored per run metadata).
- **Yearly:** aggregation of the same rules over fiscal year; **YTD** on the balance sheet is not a separate truth—it is TB-as-of date with the same cut-off.
- **Sub-monthly** (weekly, management flash): still **journal-only**; narrower windows must not pull operational deltas unless those deltas are **already posted** in the window.

## Period closing rules

**Closed period:** a period for which policy forbids **new or back-dated** postings that would change reported results without an explicit **reopening** or **adjustment** workflow (audited). Implementation choices vary, but the architectural rule is:

- **No silent mutation** of posted lines (per [journal-entry-model.md](./journal-entry-model.md)).
- **Corrections** to closed periods appear as **posted entries** in the current or designated adjustment period, with links to original entries—not edits to prior-period display caches alone.

**Close checklist (conceptual):**

1. TB for the period **balances** (debits = credits).
2. **Suspense and clearing** accounts are cleared or explained.
3. **Reconciliations** (see [reporting-reconciliation.md](./reporting-reconciliation.md)) pass or are waived with authority.
4. **Closing entries** (if used) are posted journals that reclassify P&L into equity; they are not UI-only flags.

## Cut-off handling

**Accruals and deferrals:** economic events that **belong** in period *T* but are **recognized** via journal in *T* or *T+1* must follow **posted book date**. Cut-off is enforced by:

- **Posting discipline** (when was the entry recognized in the ledger), not by changing report SQL to “pretend” a different date.
- **Cut-off reports** list **all** entries with book date in *T* and optionally **flag** entries posted after a logical “freeze” timestamp for management review—without double-counting.

**Inventory / revenue cut-off:** operational events trigger **postings**; reporting reads **book date** on resulting lines. If operations and finance disagree on period, resolution is **operational correction + compensating journal**, per [accounting-invariants.md](./accounting-invariants.md).

## Determinism

Given the same **posted journal population** and **period boundary definition** (including timezone and inclusive/exclusive endpoints), all period-scoped reports must **reproduce** bit-for-bit at the numeric level (subject only to declared rounding).

## Self validation (this document)

- Monthly/yearly and sub-period behavior anchored on book date and fiscal calendar.
- Closing and cut-off rules aligned with immutability and journal-only truth.
- No operational override of period membership for official statements.
