From 9a1f009f98ae39c00d71cf9fcae81b73f1305ce3 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Wed, 14 Oct 2026 14:11:59 -0600 Subject: [PATCH] spec: ASC paragraphs read directly (360, 340, 210, 230, 606); all confirm the rules Read in the ASC basic view and vendored as short quotes with paragraph numbers (docs/spec/sources/fasb-asc.md). Depreciation: any systematic and rational allocation of cost less salvage (360-10-35-4); prepaids are current assets with no prescribed expensing method (340-10-05-4, 210-10-45-1/2); cash flows gross and classified three ways, owners' advances financing (230-10-45-7/10/14(b)/15(b)); a principal's revenue is gross (606-10-55-37B). Citation fixed: 230-10-45-14(b), not (2). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX --- crates/ledger-config/src/lib.rs | 2 +- crates/ledger-core/src/reports.rs | 2 +- crates/ledger-core/tests/statements.rs | 2 +- crates/ledger-mcp/src/types.rs | 2 +- docs/mcp-interface.md | 2 +- docs/spec/README.md | 8 ++-- docs/spec/rules.md | 23 +++++++--- docs/spec/sources/fasb-asc.md | 59 ++++++++++++++++++++++++++ docs/testing.md | 4 +- 9 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 docs/spec/sources/fasb-asc.md diff --git a/crates/ledger-config/src/lib.rs b/crates/ledger-config/src/lib.rs index 40e5f52..6aac8db 100644 --- a/crates/ledger-config/src/lib.rs +++ b/crates/ledger-config/src/lib.rs @@ -102,7 +102,7 @@ pub struct BooksSettings { pub cash_accounts: Vec, /// `[books] financing_accounts`: liability account codes the cash flow /// statement treats as financing (loans, and what owners advanced: - /// ASC 230-10-45-14(2)). Empty: callers decide. + /// ASC 230-10-45-14(b)). Empty: callers decide. pub financing_accounts: Vec, /// `[books] investing_accounts`: asset account codes the cash flow /// statement treats as investing (loans the company makes, investments diff --git a/crates/ledger-core/src/reports.rs b/crates/ledger-core/src/reports.rs index 0a519c0..809719c 100644 --- a/crates/ledger-core/src/reports.rs +++ b/crates/ledger-core/src/reports.rs @@ -1091,7 +1091,7 @@ pub struct CashFlowParams { /// Accounts treated as cash. Their net change is the reconciling total. pub cash_accounts: Vec, /// Liability accounts treated as financing (debt, including what the - /// owners advanced: ASC 230-10-45-14(2) "other short- or long-term + /// owners advanced: ASC 230-10-45-14(b) "other short- or long-term /// borrowing"). Default empty: all liabilities are operating working /// capital. All equity is financing. pub financing_accounts: Vec, diff --git a/crates/ledger-core/tests/statements.rs b/crates/ledger-core/tests/statements.rs index b5f282b..659057d 100644 --- a/crates/ledger-core/tests/statements.rs +++ b/crates/ledger-core/tests/statements.rs @@ -1332,7 +1332,7 @@ fn lines(ls: &[ledger_core::reports::CashFlowLine]) -> Vec<(String, Decimal)> { /// Oracle: ASC 230-10-45-7 ("information about the gross amounts of cash /// receipts and cash payments during a period is more relevant than -/// information about the net amounts"), 230-10-45-14(2) (proceeds from +/// information about the net amounts"), 230-10-45-14(b) (proceeds from /// "other short- or long-term borrowing") and 45-15(2) ("Repayments of /// amounts borrowed"): borrowing and repayment are separate lines. #[test] diff --git a/crates/ledger-mcp/src/types.rs b/crates/ledger-mcp/src/types.rs index 56011ce..f8c6aef 100644 --- a/crates/ledger-mcp/src/types.rs +++ b/crates/ledger-mcp/src/types.rs @@ -650,7 +650,7 @@ pub struct CashFlowParams { #[serde(default)] pub cash_accounts: Vec, /// Account codes for liabilities treated as financing (loans, and what - /// owners advanced: ASC 230-10-45-14(2)). Defaults to `[books] + /// owners advanced: ASC 230-10-45-14(b)). Defaults to `[books] /// financing_accounts`, else empty (liabilities are working capital). #[serde(default)] pub financing_accounts: Vec, diff --git a/docs/mcp-interface.md b/docs/mcp-interface.md index c76a41c..9b0062b 100644 --- a/docs/mcp-interface.md +++ b/docs/mcp-interface.md @@ -38,7 +38,7 @@ footers, and `[books] receipt_threshold` sets the receipt policy unless and `close_sweep` (draw, distribution, or dividend accounts closed into it). The cash flow statement's account roles are `[books] cash_accounts` (what it reconciles to), `financing_accounts` (loans, and money the owners -advanced, such as a "Due to owners" liability: ASC 230-10-45-14(2)), and +advanced, such as a "Due to owners" liability: ASC 230-10-45-14(b)), and `investing_accounts` (loans the company makes, investments it buys: ASC 230-10-20); the tools and the viewer both read them, and a call may pass its own (docs/spec/rules.md B-14). diff --git a/docs/spec/README.md b/docs/spec/README.md index 56dc559..a2e1947 100644 --- a/docs/spec/README.md +++ b/docs/spec/README.md @@ -61,8 +61,6 @@ later; new commands go through the checked ones. Pinned by Read on 2026-10-13 through Deloitte's free DART roadmaps, which reproduce ASC text: ASC 230-10-45-16 and -28, 326-20-55-37/38, 606-10-25-23, 45-2, -55-37/38, 830-20-30-1. Not yet verified (the ASC's free basic view needs a -login): ASC 360-10-35-4 (depreciation), 340-10 (prepaids), 230-10-45-10, -606-10-55-37B, 210 (balance sheet). Until someone with a FASB basic-view -account reads them, the rules that would cite them cite the textbook and -say so. +55-37/38, 830-20-30-1. Read directly in the ASC basic view on 2026-10-14 +(`sources/fasb-asc.md`): 360-10-35-4, 340-10-05-2/4/5, 210-10-45-1/2/5, +230-10-45-7/10/12/13/14/15, 606-10-55-36 through 55-38. None left open. diff --git a/docs/spec/rules.md b/docs/spec/rules.md index 291ef75..6eeecac 100644 --- a/docs/spec/rules.md +++ b/docs/spec/rules.md @@ -257,14 +257,16 @@ inflows from operating activities: Cash receipts from sales of goods or services…". A closing entry is not income or spending (B-11), so period statements exclude it. -Investing and financing are gross (ASC 230-10-45-7, via Deloitte DART: +Investing and financing are gross (ASC 230-10-45-7, read directly +2026-10-14, `sources/fasb-asc.md`: "information about the gross amounts of cash receipts and cash payments during a period is more relevant than information about the net amounts"; 45-8 allows netting only where "the turnover is quick, the amounts are large, and the maturities are short"). Financing inflows include "Proceeds from issuing equity instruments" and "other short- or -long-term borrowing" (45-14(1), (2)); outflows include "distributions to -owners" and "Repayments of amounts borrowed" (45-15(1), (2)). Investing +long-term borrowing" (45-14(a), (b)); outflows include "distributions to +owners" and "Repayments of amounts borrowed" (45-15(a), (b)). Every cash +flow is investing, financing, or operating (45-10). Investing "include[s] making and collecting loans and acquiring and disposing of debt or equity instruments and property, plant, and equipment" (ASC 230-10-20). Which accounts hold loans made, investments, and debt is a @@ -300,7 +302,11 @@ life of the asset," with "(Cost – salvage value)/Useful life"; partial periods: "A common method is to allocate depreciation expense based on the number of months the asset is owned in a year." wanderbooks prorates partial months by days, including a schedule through a mid-month date -(DECISION, Stephen 2026-10-13). ASC 360-10-35-4 not yet verified (see README). +(DECISION, Stephen 2026-10-13). ASC 360-10-35-4 (read 2026-10-14, +`sources/fasb-asc.md`) prescribes no method: cost less salvage is spread +over the useful life "in a systematic and rational manner," as equitably +as possible to the periods served; straight line by days is one such +allocation. Tax conventions (half-year, mid-month, mid-quarter): IRS Pub. 946 (`sources/irs-depreciation.md`), for the CPA. @@ -316,7 +322,10 @@ ASC 606-10-45-2 (cited): payment before transfer → "the entity shall present the contract as a contract liability"; 606-10-25-23: "An entity shall recognize revenue when (or as) the entity satisfies a performance obligation by transferring a promised good or service." Prepaids: OpenStax -§4.2 (cited). Tax: the 12-month rule, Treas. Reg. §1.263(a)-4(f) +§4.2 (cited); ASC 340-10-05-4 and 210-10-45-1(g), -2 (read 2026-10-14, +`sources/fasb-asc.md`): a prepaid is an asset paid in advance of its use, +current within the operating cycle; the ASC prescribes no expensing +method, so monthly expensing stays a convention. Tax: the 12-month rule, Treas. Reg. §1.263(a)-4(f) (`sources/irs-capitalization.md`). **Enforced:** `schedules`. **Checked:** `a_prepaid_expense_is_expensed_month_by_month`, @@ -329,7 +338,9 @@ obligation by transferring a promised good or service." Prepaids: OpenStax ASC 606-10-55-37 (cited): "An entity is a principal if it controls the specified good or service before that good or service is transferred to a customer." 606-10-55-38: an agent "recognizes revenue in the amount of any -fee or commission to which it expects to be entitled." Whether an app +fee or commission to which it expects to be entitled." 606-10-55-37B +(read 2026-10-14, `sources/fasb-asc.md`): a principal recognizes revenue +"in the gross amount of consideration." Whether an app developer is principal for app-store sales is a judgment under 55-39; the CPA confirms. diff --git a/docs/spec/sources/fasb-asc.md b/docs/spec/sources/fasb-asc.md new file mode 100644 index 0000000..f66f58b --- /dev/null +++ b/docs/spec/sources/fasb-asc.md @@ -0,0 +1,59 @@ +# FASB Accounting Standards Codification: paragraphs read directly + +Read 2026-10-14 in the ASC's basic view (asc.fasb.org, Stephen's login). +The Codification is copyrighted by the Financial Accounting Foundation, +so this file keeps only short quotes and paraphrase, with the paragraph +numbers to look up. Earlier ASC paragraphs were read through Deloitte's +DART roadmaps (see README). + +## 360-10-35-4 (Property, plant, and equipment: depreciation) + +A productive facility's cost is spread over its expected useful life, +allocated "as equitably as possible" to the periods that get its +services. Depreciation distributes cost, "less salvage (if any)", over +the estimated useful life "in a systematic and rational manner"; it is +"a process of allocation, not of valuation." No method is prescribed. +→ B-15: straight line, salvage never depreciated, partial months by +days (each day of service bears the same cost) is one systematic and +rational allocation. + +## 340-10-05-2, -05-4, -05-5 (Other assets and deferred costs: prepaids) + +Prepaid expenses are assets "typically used up or expire within the +normal operating cycle," paid "in advance of their use or consumption" +(05-4); examples include insurance, interest, rents, taxes, and +advertising not yet received (05-5). The Subtopic covers only their +nature (05-2): it prescribes no expensing method. +→ B-16: a prepaid is an asset, expensed over the months it covers +(a convention; the ASC is silent on the method). + +## 210-10-45-1, -45-2, -45-5 (Balance sheet: current assets and liabilities) + +Prepaid expenses are among current assets (45-1(g)), not because they +become cash but because they would otherwise use current assets in the +operating cycle (45-2). A total of current liabilities "shall be +presented in classified balance sheets" (45-5): the rule applies when a +balance sheet is classified. +→ wanderbooks' balance sheet is unclassified (by element), which this +Subtopic permits; a classified layout would need current/noncurrent +account roles. + +## 230-10-45-7, -10, -12(a), -13(a), -14(b), -15(b) (Statement of cash flows) + +Gross amounts are "more relevant" than net (45-7). Cash receipts and +payments are classified "as resulting from investing, financing, or +operating activities" (45-10). Collections on, and disbursements for, +loans the entity makes are investing (45-12(a), 45-13(a)). Proceeds of +"other short- or long-term borrowing" are financing inflows (45-14(b)); +"repayments of amounts borrowed" are financing outflows (45-15(b)). +→ B-14: money owners advance (Due to Shareholders) is borrowing, so +financing, gross; a loan the company makes is investing, gross. + +## 606-10-55-36 through 55-38 (Revenue: principal or agent) + +An entity controlling the specified good or service before transfer is +the principal (55-37) and recognizes revenue "in the gross amount of +consideration" it expects (55-37B); an agent recognizes only its fee or +commission (55-38). +→ B-17: an app seller is the principal for its app, so its revenue is +the gross price; the platform's commission is an expense. diff --git a/docs/testing.md b/docs/testing.md index 63d8d57..61ac2c8 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -89,7 +89,7 @@ accounting question), CHANGE (a source says otherwise; work pending). | 6 | Reconciliation balances | CONFIRMED | Signed by the account's normal side (a card reads as owed), as statements show it; `reconciling_a_card_reads_its_normal_side_...` | | 7 | A member's ending on one equity statement may differ by a cent from the next statement's beginning | CHANGED 2026-10-13 | A capital account is one running balance (Form 1065 K-1 instructions, Item L). Undistributed earnings now split cumulatively as of each date, so each member's capital chains exactly (`each_members_capital_chains_across_statements`; it fails on the old code); rules.md B-13 | | 8 | Cash flow nets one line per account; investing comes only from registered assets | CHANGED 2026-10-13 | ASC 230-10-45-7: gross receipts and payments "more relevant" than net; 45-8 limits netting to quick-turnover items. Financing and investing are now gross; loans made and investments bought are investing (230-10-20, 45-13) via `[books] investing_accounts`. Owner-advanced expenses: PwC 6.9.3.1 constructive treatment via `[books] financing_accounts` (rules.md B-14) | -| 9 | An asset's life ends at purchase + life months, that day not held; day-count proration | CONVENTION | Exactly N months of service; day proration and the mid-month convention are both accepted book policies (ASC 360-10-35-4 not read: login) | +| 9 | An asset's life ends at purchase + life months, that day not held; day-count proration | CONVENTION | Exactly N months of service; day proration and the mid-month convention are both accepted book policies (ASC 360-10-35-4, read 2026-10-14: any systematic and rational allocation) | | 10 | A payroll entry has one line per account total | CONFIRMED | The per-employee detail the IRS requires ("Amounts and dates of all wage ... payments", Employment Tax Recordkeeping) is kept in the run; a summary entry is standard | | 11 | A period with exactly the dates of an existing one is allowed | DESIGN | Nothing governs duplicate periods; harmless (the second close locks only). Refusing exact duplicates is an option | | 12 | Each close into members' capital rounds on its own (ties to the earlier member) | CHANGED 2026-10-13 | Twelve monthly 50/50 closes could leave one member several cents ahead. A run of members closes now splits cumulatively (rules.md B-13; Lean `runPart_telescopes`; property `each_member_stays_within_a_cent_of_their_share` fails on the per-close rule); journaled `"cumulative"`, older closes replay as booked | @@ -110,7 +110,7 @@ B-14) are the first. | Security properties | SKIP for the core (no roles, no secrets) | the first permission concept, or a secret-bearing field | | Concurrency stress | SKIP for the core (no shared state); DONE for the store's writer + viewer (found the false "differs") | the first `Arc`, atomic, or lock in the core; the MCP server's HTTP transport shares one store across sessions (next) | | Lean: apportion's sum law for any n | DONE (2026-10-14) | verify/lean/Wanderbooks/Apportion.lean: ranks are a permutation of 0..n-1 (strict total order + pigeonhole, core Lean only), so exactly u parts get a unit and one the fraction; `apportion_sum` and `apportion_sum_of_shortfall`, standard axioms only | -| ASC paragraphs not yet read | OPEN | ASC 360-10-35-4, 340-10, 230-10-45-10, 606-10-55-37B, 210: needs a FASB basic-view login | +| ASC paragraphs not yet read | DONE (2026-10-14) | read in the ASC basic view (`docs/spec/sources/fasb-asc.md`): all confirm the rules; one citation fixed (230-10-45-14(b), not (2)) | | GnuCash's own close | OPEN | the oracle books closes as ordinary entries; comparing GnuCash's Close Book needs its Scheme API | | Import: spec-blind suite, footing properties, mutation | DONE | sources vendored (Intuit bank CSV and IIF, ECMA-376/Excel numbers, IRS form lines); specs on every module; tests/spec_import.rs (spec-blind, footing and round-trip properties, XLSX read back from its XML, layout and styles); fuzz_import_csv; templates checked against the engine's control accounts; mutation one equivalent left | | MCP, config, GUI crates | NEXT | the same playbook |