ADR 0015: Accounting Posting Foundation
Context
BooksPlus financial periods now provide durable period identity, status, and posting-date eligibility. The next accounting foundation is the central posting path that all workflows must use when they create ledger effects.
The canonical accounting model requires posting to enforce balanced entries, valid accounts, effective dates, period status, source references, attribution, and auditability. Close, imports, screens, and future feature workflows must prepare posting requests rather than writing ledger effects directly.
Decision
BooksPlus will implement the first accounting posting foundation around posted journal entries, active accounts, and one central posting service.
The first implementation slice is intentionally narrow:
- journal entries are created as posted records through the central posting path;
- draft journal entry workflow is deferred;
- human-visible journal entry numbering is deferred;
- manual routine posting does not require an idempotency key;
- source references are required but may initially be opaque
source_typeandsource_idvalues; - full Source Documents persistence and evidence storage are deferred to the Source Documents implementation;
- routine posting requires an open financial period;
- routine posting blocks planned, soft-closed, and hard-closed periods;
- soft-closed period correction and close-adjustment posting modes are deferred;
- posting uses the protected action name
journal_entry.post; - posting is a consequential action and must emit an attributable audit event.
Account Values
The initial account taxonomy uses these stable values:
- account types:
asset,liability,equity,income,expense; - normal balances:
debit,credit; - account statuses:
active,inactive,retired.
Routine posting requires active accounts. Historical journal lines preserve their original account references even if an account is later inactive or retired.
Journal Entry Values
The initial journal entry lifecycle has one persisted status:
posted
Drafts, reversals, adjustments, and close adjustments are later workflows. They must still use the central posting path or a central accounting correction path when implemented.
Money Precision
The initial persisted accounting amount precision is decimal precision 19, scale 4, with a three-letter ISO 4217 currency code stored with each amount.
Posting validation must not balance debits and credits across different currencies unless a later multi-currency policy explicitly defines that behavior.
Consequences
Positive consequences:
- Posting behavior has one enforcement point before close, imports, and feature workflows depend on it.
- Close can later coordinate ledger work without owning ledger mutation.
- The first implementation can validate period status and account status without designing every future journal workflow.
- Source references can be preserved immediately while full source-document evidence behavior remains owned by Source Documents.
Negative consequences:
- Users cannot save draft journal entries in the first posting slice.
- Human-readable entry numbering and richer journal review UX wait for a later slice.
- Manual posting idempotency is not solved beyond database identity and normal transactional behavior.
- Soft-close adjustments require a later authorization and posting-mode design.
Related truth pages
../../contracts/account.contract.md../../contracts/journal-entry.contract.md../../contracts/money.contract.md../../contracts/kernel.contract.md../../accounting/posting-and-reversal.md../../accounting/journal-entries.md../../accounting/accounts.md