bookspec/spec holds the first edition: the model and the five laws (00-model.md) and one file per area, each B-rule a section with its status, a MUST/MAY statement, sources pinned either to a vendored source with a verbatim quotation or to an exact external paragraph, its symbolic form, its examples and its applicability. B-39, B-40, B-43 and B-45 are reserved sections (allocated, not yet stated in rules.md); B-44 is stated in rules.md and now carries its bookspec id and CONVENTION status. Eight new examples show the laws that had none, each figure worked by hand: an unbalanced entry is refused (Pacioli ch. 36, Pub. 583), a negative or zero line is refused, a fraction of a cent is refused (ISO 4217), a child account takes its parent's type, the trial balance and the accounting equation on one small book (cash 6550.25 = loan 2000 + capital 5000 + (sales 750.50 - rent 1200.25)), a reversal leaves the original standing and a second reversal is refused, a close sweeps revenue and expenses into Retained Earnings (3999) and the closed quarter takes no late entry, and cents add exactly. The refusal vocabulary gains unbalanced, negative_amount, zero_amount, too_few_lines, finer_than_minor_unit, parent_type_mismatch, already_reversed and period_closed; a refused entry may carry a non-positive amount. The checker's spec.rs fails the build on a rule without its section, a statement without MUST/SHOULD/MAY, a pin that is not verbatim in its vendored source, examples that differ from the catalogue, or more than 60 pages. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp
56 lines
1.5 KiB
TOML
56 lines
1.5 KiB
TOML
events = []
|
|
|
|
id = "ledger-a-child-account-has-its-parents-type"
|
|
title = "An account under a parent has the parent's type"
|
|
rule = "An account MUST be one of the five elements (asset, liability, equity, revenue, expense), and an account under a parent MUST have its parent's type, so a rollup never mixes elements."
|
|
status = "AUTHORITY"
|
|
sources = [
|
|
"FASB Concepts Statement 8, Ch. 4, E16, E37, E61, E80, E81: the five elements (docs/spec/sources/fasb-asc.md)",
|
|
"CHOICE, the owner, 2026-10-13 (docs/spec/rules.md B-4): a child takes its parent's type",
|
|
]
|
|
tags = ["accrual", "book", "us", "ledger", "chart"]
|
|
|
|
[setup]
|
|
currency = "USD"
|
|
fiscal_year_start = "01-01"
|
|
basis = "accrual"
|
|
rounding = "half-even"
|
|
|
|
[[setup.accounts]]
|
|
code = "6000"
|
|
name = "Operating"
|
|
type = "expense"
|
|
header = true
|
|
|
|
[[setup.accounts]]
|
|
code = "6150"
|
|
name = "Software"
|
|
type = "expense"
|
|
parent = "6000"
|
|
tax_category = "office_expense"
|
|
|
|
[[setup.accounts]]
|
|
code = "1000"
|
|
name = "Cash"
|
|
type = "asset"
|
|
|
|
# A revenue account under an expense header would mix two elements.
|
|
[[expect]]
|
|
query = "add_account"
|
|
account = { code = "6200", name = "Refunds", type = "revenue", parent = "6000", tax_category = "gross_receipts" }
|
|
refused = "parent_type_mismatch"
|
|
|
|
# An expense under the expense header is a child of the same element.
|
|
[[expect]]
|
|
query = "add_account"
|
|
account = { code = "6200", name = "Hosting", type = "expense", parent = "6000", tax_category = "office_expense" }
|
|
accepted = true
|
|
|
|
[[expect]]
|
|
query = "trial_balance"
|
|
as_of = "2026-12-31"
|
|
[expect.values]
|
|
"6000" = "0.00"
|
|
"6150" = "0.00"
|
|
"1000" = "0.00"
|