feat(bookspec): the specification text and an example for the ledger's own laws (P13 step 4)
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
This commit is contained in:
1 parent
055decf7e2
commit
1fbc1383cb
26 files changed
+1595
-36
No files matched your search
@@ -0,0 +1,23 @@
|
||||
# Area: format
|
||||
|
||||
Interchange formats and the journal's format gate.
|
||||
|
||||
### BS-format-1: The journal format gate: newer is not corrupt (B-27)
|
||||
|
||||
- **Status:** CHOICE (the owner, 2026-10-16; D-39, 2026-10-20)
|
||||
- **Statement:** A reader MUST distinguish a journal line it does not know because it is newer from one that is corrupt: a line's own hash is checked before it is called newer; a reader stops at the first line it cannot read and says the journal is newer; older books move to a newer format only with the owner's go-ahead.
|
||||
- **Sources:**
|
||||
- external: CHOICE only: the owner, 2026-10-16 (docs/spec/rules.md B-27); no authority governs a file format's evolution
|
||||
- **Symbolic form:** `hash_ok(line) and type(line) unknown implies newer`; `not hash_ok(line) implies corrupt`.
|
||||
- **Examples:** none yet. The example schema has no journal-file event; the gate is checked by wanderbooks' store tests.
|
||||
- **Applicability:** engines that persist a journal.
|
||||
|
||||
### BS-format-2: The QuickBooks Desktop file (IIF): plain ASCII, every entry through as_of, closes left out, classes carried (B-34)
|
||||
|
||||
- **Status:** AUTHORITY
|
||||
- **Statement:** An IIF file MUST be plain ASCII, tab-separated, with each line ending CR LF; lists (accounts, classes) MUST come before the transactions that use them; an account is identified by its name, a subaccount's name its path joined by colons; every entry through the as-of day MUST be in the file and closing entries left out; classes MUST be carried; text the file must write differently from the books (a name past 31 characters, a memo past 4,095) MUST be reported as a change.
|
||||
- **Sources:**
|
||||
- vendored `sources/intuit-iif.md`: "Accounts are identified by NAME"
|
||||
- **Symbolic form:** `file = header lists transactions`, `forall line: ascii(line) and tabs(line)`.
|
||||
- **Examples:** `iif-quickbooks-journal-file`
|
||||
- **Applicability:** exports to QuickBooks Desktop.
|
||||
Reference in new issue
Block a user