Skip to main content

Overview

Fiscal periods divide the fiscal year into manageable accounting periods. Accountability supports:
  • 12 regular periods (typically monthly)
  • 1 adjustment period (Period 13) for year-end adjustments
  • Period status tracking (Open, Closed)
  • Period locking for compliance and control
Fiscal periods are company-specific. Each company defines its own fiscal year end, and periods are automatically generated based on that date.

Fiscal Year Data Model

packages/core/src/fiscal/FiscalYear.ts
export class FiscalYear extends Schema.Class<FiscalYear>("FiscalYear")({
  id: FiscalYearId,
  companyId: CompanyId,
  name: Schema.NonEmptyTrimmedString,
  year: Schema.Number,  // e.g., 2025
  startDate: LocalDate,
  endDate: LocalDate,
  status: FiscalYearStatus,
  includesAdjustmentPeriod: Schema.Boolean,
  createdAt: Timestamp,
  updatedAt: Timestamp
})
year
number
required
The fiscal year number (2025, 2026, etc.) - named after the calendar year in which the fiscal year ends
startDate
LocalDate
required
First day of the fiscal year (calculated from fiscal year end)
endDate
LocalDate
required
Last day of the fiscal year (from company’s fiscal year end setting)
status
FiscalYearStatus
required
Current status: “Open” or “Closed”
includesAdjustmentPeriod
boolean
required
Whether Period 13 exists for year-end adjustments

Fiscal Period Data Model

packages/core/src/fiscal/FiscalPeriod.ts
export class FiscalPeriod extends Schema.Class<FiscalPeriod>("FiscalPeriod")({
  id: FiscalPeriodId,
  fiscalYearId: FiscalYearId,
  periodNumber: Schema.Number,  // 1-13
  name: Schema.NonEmptyTrimmedString,
  periodType: FiscalPeriodType,
  startDate: LocalDate,
  endDate: LocalDate,
  status: FiscalPeriodStatus,
  closedBy: Schema.OptionFromNullOr(UserId),
  closedAt: Schema.OptionFromNullOr(Timestamp),
  createdAt: Timestamp,
  updatedAt: Timestamp
})
periodNumber
number
required
Period number within fiscal year (1-12 for regular periods, 13 for adjustment)
periodType
FiscalPeriodType
required
“Regular” (1-12) or “Adjustment” (13)
status
FiscalPeriodStatus
required
Current status: “Open” or “Closed”

Period Types

packages/core/src/fiscal/FiscalPeriodType.ts
export const FiscalPeriodType = Schema.Literal("Regular", "Adjustment")
Standard monthly accounting periods
  • Correspond to calendar months (or fiscal months)
  • Used for normal business transactions
  • Typically opened at start of month, closed at end
Examples:
  • P1 (January 1-31 for calendar year)
  • P12 (December 1-31 for calendar year)
Mandatory Period 13: All companies must have Period 13 for year-end adjustments. The includesAdjustmentPeriod flag on fiscal years is always true.

Period Status

packages/core/src/fiscal/FiscalPeriodStatus.ts
export const FiscalPeriodStatus = Schema.Literal("Open", "Closed")
1

Open

Period accepts new journal entries
  • Users can create, edit, and post entries
  • Normal operations allowed
2

Closed

Period is locked - no modifications allowed
  • Cannot create new journal entries
  • Cannot edit or delete existing entries
  • Cannot reverse posted entries
  • Requires “Reopen Period” permission to unlock

Period Close Workflow

1

Review Period Activity

Verify all transactions are recorded and balanced
  • Run trial balance report
  • Review outstanding items
  • Reconcile bank accounts
2

Post Adjusting Entries

Record any period-end adjustments
  • Accruals and deferrals
  • Depreciation
  • Corrections
3

Close Period

Change period status from Open to Closed
  • Records closedBy (user ID)
  • Records closedAt (timestamp)
  • Period becomes read-only
4

Open Next Period

Open the following period for new transactions
  • Period 1 opens Period 2
  • Period 12 opens Period 13 (adjustment)
  • Period 13 close finalizes the fiscal year

Fiscal Period Reference

Journal entries reference fiscal periods using FiscalPeriodRef:
packages/core/src/fiscal/FiscalPeriodRef.ts
export class FiscalPeriodRef extends Schema.Class<FiscalPeriodRef>("FiscalPeriodRef")({
  year: Schema.Number,   // 2025
  period: Schema.Number  // 1-13
})

Helper Methods

const ref = FiscalPeriodRef.make({ year: 2025, period: 3 })

ref.isRegularPeriod       // true (1-12)
ref.isAdjustmentPeriod    // false (period !== 13)
ref.toString()            // "FY2025-P03"
ref.toShortString()       // "2025.03"

Period Navigation

import { nextPeriod, previousPeriod } from "@accountability/core/fiscal/FiscalPeriodRef"

const p3 = FiscalPeriodRef.make({ year: 2025, period: 3 })
const p4 = nextPeriod(p3)       // { year: 2025, period: 4 }
const p2 = previousPeriod(p3)   // { year: 2025, period: 2 }

// Wrap at year boundary
const p12 = FiscalPeriodRef.make({ year: 2025, period: 12 })
const p1_2026 = nextPeriod(p12)  // { year: 2026, period: 1 }

// Period 13 handling
const p13 = FiscalPeriodRef.make({ year: 2025, period: 13 })
const next = nextPeriod(p13)      // { year: 2026, period: 1 }
const prev = previousPeriod(p13)  // { year: 2025, period: 12 }

Period Ordering

import { isBefore, isAfter, equals } from "@accountability/core/fiscal/FiscalPeriodRef"

const p1 = FiscalPeriodRef.make({ year: 2025, period: 1 })
const p2 = FiscalPeriodRef.make({ year: 2025, period: 2 })

isBefore(p1, p2)  // true
isAfter(p1, p2)   // false
equals(p1, p1)    // true

Period 13 (Adjustment Period)

Period 13 is a mandatory adjustment period for year-end entries:
Why Period 13?After closing Period 12 (December), accountants often discover:
  • Audit adjustments
  • Late vendor invoices
  • Tax accruals
  • Final depreciation entries
Period 13 provides a “staging area” for these adjustments without reopening P12.

Using Period 13

1

Close Period 12

Lock the final regular period
  • All normal business activity is complete
  • Regular month-end close performed
2

Post to Period 13

Record year-end adjusting entries
  • Entry type: “Adjusting”
  • Transaction date: Fiscal year end date
  • Fiscal period: Year 2025, Period 13
Note: Transaction date remains fiscal year end (e.g., Dec 31), but fiscal period is 13
3

Close Period 13

Lock adjustment period
  • Finalizes the fiscal year
  • No further adjustments allowed
4

Open Next Fiscal Year

Open Period 1 of FY2026
  • Begins new fiscal year
  • Carries forward balance sheet balances

UI Workflow for Period 13

When creating a journal entry with a transaction date on the fiscal year end:
packages/web/src/components/forms/JournalEntryForm.tsx
{canPostToAdjustmentPeriod && (
  <div>
    <label>
      <input
        type="checkbox"
        checked={useAdjustmentPeriod}
        onChange={(e) => setUseAdjustmentPeriod(e.target.checked)}
      />
      Post to adjustment period (P13)
    </label>
    <p>Use for year-end adjustments and audit entries</p>
  </div>
)}
Period 13 Restrictions:
  • Only available when P12 is closed and P13 is open
  • All entries must use entry type “Adjusting”, “Closing”, or “Revaluation”
  • Do not post regular business transactions to P13

Period Reopening

Closed periods can be reopened with proper authorization:
// Reopen audit entry
interface PeriodReopenAuditEntry {
  id: PeriodReopenAuditEntryId
  periodId: FiscalPeriodId
  reason: string
  reopenedBy: UserId
  reopenedAt: Timestamp
  previousStatus: FiscalPeriodStatus
}
1

Authorization Check

User must have “Reopen Closed Period” permissionTypically restricted to Controllers or above
2

Provide Reason

Required justification for reopeningExample: “Discovered unrecorded invoice #12345”
3

Reopen Period

Period status changes from Closed → OpenAudit entry created with reason and user
4

Make Corrections

Post correcting entries
5

Re-Close Period

Close period again after corrections
All period reopen events are logged in the audit trail with:
  • Who reopened the period
  • When it was reopened
  • Why it was reopened
  • Previous status
This maintains compliance and accountability.

Fiscal Period Assignment

Journal entry fiscal periods are automatically computed from the transaction date and company fiscal year end:
packages/web/src/components/forms/JournalEntryForm.tsx
function computeFiscalPeriod(
  dateStr: string,
  fiscalYearEnd: FiscalYearEnd
): ComputedPeriod {
  // Determines fiscal year
  // Calculates period number (1-12) based on months from FY start
  // Returns computed period
}

Calendar Year Example

Company with December 31 fiscal year end:
Transaction DateFiscal YearPeriod
Jan 15, 20252025P1
Jun 30, 20252025P6
Dec 31, 20252025P12

Non-Calendar Year Example

Company with March 31 fiscal year end:
Transaction DateFiscal YearPeriod
Apr 1, 20242025P1
Dec 15, 20242025P9
Mar 31, 20252025P12
Apr 1, 20252026P1
Fiscal year is named after the calendar year in which it ends. A fiscal year ending March 31, 2025 is “FY2025”, even though it starts in April 2024.

Period Validation

When posting journal entries, the system validates:
The fiscal period must exist for the company✓ Valid: Posting to P3 FY2025 when period exists ✗ Invalid: Posting to P5 FY2026 when FY2026 hasn’t been created yet
The period status must be “Open”✓ Valid: Posting to open period ✗ Invalid: Posting to closed period (returns error)
Transaction date must fall within period date range (except P13)✓ Valid: March 15 posting to P3 (March period) ✗ Invalid: March 15 posting to P4 (April period)Exception: P13 allows any date on fiscal year end

Period Deadlines

Organizations often set internal deadlines for period close:
Target: 5-7 business days after month end
  • Day 1-3: Transaction review and reconciliation
  • Day 4-5: Adjusting entries and accruals
  • Day 6-7: Period close and reporting

Best Practices

Before closing each period:
  1. Reconciliations: Bank, credit card, intercompany
  2. Accruals: Recognize expenses/revenues earned but not invoiced
  3. Deferrals: Defer revenue/expenses to future periods
  4. Depreciation: Record monthly depreciation
  5. Trial Balance: Review account balances for anomalies
  6. Management Review: Controllers review before close
DO use P13 for:
  • Audit adjustments
  • Reclassifications discovered after P12 close
  • Final tax accruals
  • Year-end depreciation adjustments
DON’T use P13 for:
  • Regular business transactions
  • Anything that should have been in P1-P12
  • New fiscal year activity (use P1 of next FY)
Establish clear policies:
  1. Authorization: Who can approve reopening? (Controller, CFO)
  2. Documentation: Required justification and supporting docs
  3. Timeline: How far back can periods be reopened?
  4. Notification: Inform accounting team when periods reopen
  5. Re-close: Set deadline for corrections and re-close

Build docs developers (and LLMs) love