P3: assets' posted and scheduled depreciation, their bases, and the K-1 on the tax basis (defect 13, D-41)

Book value is cost less what the books posted; the schedule's figure is
apart. An asset's acquired date comes from its entry. Contributed
property keeps its section 723 carryover basis apart from its depreciable
basis (the lower of value and adjusted basis), with its 704(c) built-in
gain and method. The K-1 worksheet reports tax-basis capital (Form 1065
Item L) beside the book figures, leaving open what only the CPA knows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-21 14:04:12 -06:00
1 parent aa884d35d1
commit ea14dfc986
8 files changed
+780 -10

No files matched your search

+39 -10
View File
@@ -124,11 +124,14 @@ the side gives the direction.
1099-K; rules.md B-19); with the cards, what party money is, for 1099-K; rules.md B-19); with the cards, what party money is, for
`party_part` and `party_totals` (B-35 item 5: no `cash_accounts`, every `party_part` and `party_totals` (B-35 item 5: no `cash_accounts`, every
asset account but receivables); the cash accounts are what the K-1 asset account but receivables); the cash accounts are what the K-1
worksheet reads as money (`k1`) and an IIF file's bank accounts (B-34). worksheet reads as money (`k1`, `k1_tax_basis`, `k1_reconciliation`)
and an IIF file's bank accounts (B-34).
- `[[setup.fixed_assets]]` `{ cost_account, accumulated_account, - `[[setup.fixed_assets]]` `{ cost_account, accumulated_account,
expense_account }`: accounts that hold property and equipment (their expense_account }`: accounts that hold property and equipment (their
cost and accumulated depreciation are investing; ASC 230-10-45-12(c), cost and accumulated depreciation are investing; ASC 230-10-45-12(c),
45-13(c)). 45-13(c)), for an example no asset's own figures matter to. An asset
with its figures is a `[[setup.assets]]` entry (below), whose accounts
hold property and equipment too.
- `[[setup.assets]]`: fixed assets registered before the first event, - `[[setup.assets]]`: fixed assets registered before the first event,
each named by its `id` in the events and queries that ask about it each named by its `id` in the events and queries that ask about it
(rules.md B-15): (rules.md B-15):
@@ -145,10 +148,24 @@ the side gives the direction.
cost_account = "1500" cost_account = "1500"
accumulated_account = "1510" accumulated_account = "1510"
expense_account = "6200" expense_account = "6200"
acquired_by = 2 # optional: the event whose entry put it
# on the books (B-15 rule 7)
basis = { rule = "personal_use_conversion",
contributor_adjusted_basis = "1688.40",
fmv_at_contribution = "1440.00",
sec704c_method = "traditional" } # optional (B-25)
``` ```
Registering an asset posts nothing: the entry that buys it is an event Registering an asset posts nothing: the entry that buys it is an event
of its own. of its own. `acquired_by = N` links that entry, event N's, once the
event is applied: its date is the asset's acquired date, which puts it
on the register (before it, the in-service date does). `basis` records
how the company got it and the facts its tax figures follow from, as
the asset is registered: `rule` `"purchase"`, `"carryover_723"` or
`"personal_use_conversion"`; a contribution's
`contributor_adjusted_basis` and `fmv_at_contribution`; the §704(c)
method if chosen (`"traditional"`, `"traditional_with_curative"`,
`"remedial"`).
- `[[setup.schedules]]`, and `register_schedule = { ... }` as an event: a - `[[setup.schedules]]`, and `register_schedule = { ... }` as an event: a
prepaid expense or deferred revenue recognized over its months (rules.md prepaid expense or deferred revenue recognized over its months (rules.md
B-16), named by its `id`: B-16), named by its `id`:
@@ -172,8 +189,9 @@ the side gives the direction.
distributions_account? }`: the members of a multi-member LLC. `share` distributions_account? }`: the members of a multi-member LLC. `share`
is the member's share of income, an exact decimal fraction (`"0.5"`, is the member's share of income, an exact decimal fraction (`"0.5"`,
`"0.3333"`); every member has one or none does, and the shares sum to `"0.3333"`); every member has one or none does, and the shares sum to
1. A close to the members, `members_equity` and `k1` need them. 1. A close to the members, `members_equity`, `k1`, `k1_tax_basis` and
`distributions_account`: the member's distributions account (B-13). A `k1_reconciliation` need them. `distributions_account`: the member's
distributions account (B-13). A
member whose `name` is a party's in `setup.parties` with the `member` member whose `name` is a party's in `setup.parties` with the `member`
role is that party, as the company's settings name them: an entry's role is that party, as the company's settings name them: an entry's
parties' shares resolve with those members (B-35), and so does the parties' shares resolve with those members (B-35), and so does the
@@ -239,10 +257,14 @@ the side gives the direction.
- `refused = "<reason>"` on a reversal or a command: the books refuse it, - `refused = "<reason>"` on a reversal or a command: the books refuse it,
for that reason (below); it changes nothing, posts nothing, and the for that reason (below); it changes nothing, posts nothing, and the
example goes on without it. example goes on without it.
- `[[changes]]` `{ after, rename?, require_tax_category? }`: a change - `[[changes]]` `{ after, rename?, require_tax_category?, correct_asset?
that posts no entry, exactly one of `rename = { code, name }` (rename }`: a change that posts no entry, exactly one of `rename = { code, name
the account `code`, B-31) and `require_tax_category = "warn"` or }` (rename the account `code`, B-31), `require_tax_category = "warn"`
`"refuse"` (the policy, B-32; the books start at `warn`). It is made or `"refuse"` (the policy, B-32; the books start at `warn`) and
`correct_asset = { asset, cost?, salvage?, life_months?, in_service?,
reason }` (a registration mistake corrected: each figure given replaces
the asset's, the rest stay; refused while the books carry depreciation
for it). It is made
right after event `after` (1 to the number of events), once the right after event `after` (1 to the number of events), once the
expectations asked after that event are checked, in the order listed. expectations asked after that event are checked, in the order listed.
- `after = N` on an expectation: asked of the books after event N (before - `after = N` on an expectation: asked of the books after event N (before
@@ -276,6 +298,8 @@ answers is refused, never skipped.
| `balances` | `as_of` | each account named by code, its balance on its normal side (a member's capital after a loss is negative); the example names the accounts it shows | `ledger-core` `tests/bookspec.rs` | | `balances` | `as_of` | each account named by code, its balance on its normal side (a member's capital after a loss is negative); the example names the accounts it shows | `ledger-core` `tests/bookspec.rs` |
| `members_equity` | `from`, `to` | the statement of changes in members' equity (rules.md B-13): `"<member>.beginning"`, `.contributions`, `.net_income`, `.distributions`, `.other`, `.ending`; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` | | `members_equity` | `from`, `to` | the statement of changes in members' equity (rules.md B-13): `"<member>.beginning"`, `.contributions`, `.net_income`, `.distributions`, `.other`, `.ending`; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` |
| `k1` | `from`, `to` | the K-1 worksheet (B-13; Schedule K-1 Item L): `"<member>.beginning"`, `.contributions_cash`, `.contributions_property`, `.net_income`, `.distributions`, `.other`, `.ending`; the example names the figures it shows (`cash_accounts` required) | `ledger-core` `tests/bookspec.rs` | | `k1` | `from`, `to` | the K-1 worksheet (B-13; Schedule K-1 Item L): `"<member>.beginning"`, `.contributions_cash`, `.contributions_property`, `.net_income`, `.distributions`, `.other`, `.ending`; the example names the figures it shows (`cash_accounts` required) | `ledger-core` `tests/bookspec.rs` |
| `k1_tax_basis` | `from`, `to` | the K-1 worksheet on the tax basis (B-36; Schedule K-1 Item L, tax-basis method), beside `k1`'s book figures: `"<member>.beginning"`, `.contributions_cash`, `.contributions_property`, `.net_income`, `.other`, `.distributions`, `.ending`; a line the books can't know is `"open"`, with what they know so far as `"<member>.known_<line>"`; the example names the figures it shows (`cash_accounts` required) | `ledger-core` `tests/bookspec.rs` |
| `k1_reconciliation` | `from`, `to` | each member's book capital less tax-basis capital at `to`, by cause (B-36): `"<member>.beginning"`, `.built_in_gain_704c`, `.property_without_basis`, `.property_distributed`, `.total`; the example names the members it shows, each with every cause (`cash_accounts` required) | `ledger-core` `tests/bookspec.rs` |
| `vendor_1099_paid` | `from` (January 1 of `to`'s year), `to` | each payee's payments that count toward its 1099, by name: out of the cash and financing accounts (`cash_accounts` required), a card's or payment network's left out (B-19), every payee listed | `ledger-core` `tests/bookspec.rs` | | `vendor_1099_paid` | `from` (January 1 of `to`'s year), `to` | each payee's payments that count toward its 1099, by name: out of the cash and financing accounts (`cash_accounts` required), a card's or payment network's left out (B-19), every payee listed | `ledger-core` `tests/bookspec.rs` |
| `vendor_1099` | `payee`; `from` (January 1 of `to`'s year), `to` | one payee's line of the 1099 worksheet (B-19): `status` (`reportable`, `under_threshold`, `not_reportable` or `undetermined`), `threshold`, `paid` (counts toward its 1099), `excluded_card` (a card's or payment network's: Form 1099-K), `undetermined` (through a financing account, its payment method not recorded), `not_reportable` (paid while decided not reportable), every one given | `ledger-core` `tests/bookspec.rs` | | `vendor_1099` | `payee`; `from` (January 1 of `to`'s year), `to` | one payee's line of the 1099 worksheet (B-19): `status` (`reportable`, `under_threshold`, `not_reportable` or `undetermined`), `threshold`, `paid` (counts toward its 1099), `excluded_card` (a card's or payment network's: Form 1099-K), `undetermined` (through a financing account, its payment method not recorded), `not_reportable` (paid while decided not reportable), every one given | `ledger-core` `tests/bookspec.rs` |
| `party_part` | `entry = N`, `party`, no dates | entry N's part for the party (B-35): `resolved`, signed as a line on the party's own account would be (paid or given positive, received negative), the entry's `direction` (`paid`, `received` or `neither`), and what of it moved as money (`cash`) and as property (`in_kind`), every one given | `ledger-core` `tests/bookspec.rs` | | `party_part` | `entry = N`, `party`, no dates | entry N's part for the party (B-35): `resolved`, signed as a line on the party's own account would be (paid or given positive, received negative), the entry's `direction` (`paid`, `received` or `neither`), and what of it moved as money (`cash`) and as property (`in_kind`), every one given | `ledger-core` `tests/bookspec.rs` |
@@ -289,6 +313,9 @@ answers is refused, never skipped.
| `run` | `event = N`, no dates | what the `run_depreciation` event N posted: `amount` (zero when nothing was due, or the month had its run already), and `caught_up`, what of it is beyond the month's own depreciation (B-15); both listed | `ledger-core` `tests/bookspec.rs` | | `run` | `event = N`, no dates | what the `run_depreciation` event N posted: `amount` (zero when nothing was due, or the month had its run already), and `caught_up`, what of it is beyond the month's own depreciation (B-15); both listed | `ledger-core` `tests/bookspec.rs` |
| `disposal` | `asset`, no dates | what the asset's disposal took (B-15), every figure listed: `final_depreciation` (posted in its own entry), `catch_up_depreciation` and `excess_depreciation` (charged, and credited back, in the disposal entry), `accumulated` (cleared), `book_value`, `gain_loss` (a gain positive) | `ledger-core` `tests/bookspec.rs` | | `disposal` | `asset`, no dates | what the asset's disposal took (B-15), every figure listed: `final_depreciation` (posted in its own entry), `catch_up_depreciation` and `excess_depreciation` (charged, and credited back, in the disposal entry), `accumulated` (cleared), `book_value`, `gain_loss` (a gain positive) | `ledger-core` `tests/bookspec.rs` |
| `depreciation_schedule` | `asset`, `as_of` | the asset's schedule through the day (B-15): each month named (`"YYYY-MM"`) its depreciation, `"0.00"` for a month it doesn't reach; `accumulated` and `book_value` through the day; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` | | `depreciation_schedule` | `asset`, `as_of` | the asset's schedule through the day (B-15): each month named (`"YYYY-MM"`) its depreciation, `"0.00"` for a month it doesn't reach; `accumulated` and `book_value` through the day; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` |
| `register_row` | `asset`, `as_of` | the asset's row of the fixed asset register (B-15 rules 7 and 8, B-24): `acquired`, `in_service` (`YYYY-MM-DD`), `cost`, `accumulated_scheduled` (the schedule's), `accumulated_posted` (what the books carry), `unposted` (the one less the other), `book_value` (cost less posted), each `"0.00"` once disposed; the example names the figures it shows; an asset acquired after the day is refused | `ledger-core` `tests/bookspec.rs` |
| `register_totals` | `as_of` | the register's totals over the assets held (B-24, B-25): `total_cost`, `total_accumulated_scheduled`, `total_accumulated_posted`, `total_book_value`, `total_depreciable_basis`, `total_tax_basis_723`, `missing_basis` (a count), and how it ties to the books: `unregistered_cost`, `unposted_depreciation`, `unattributed_accumulated`; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` |
| `asset_basis` | `asset`, no dates | the asset's basis facts and the tax figures they give (B-25): `rule`, `contributor_adjusted_basis`, `fmv_at_contribution`, `tax_basis_723`, `depreciable_basis`, `built_in_gain_704c` (a loss negative), each `"none"` where it has none, and `sec704c_1c` (`"true"` for a built-in loss, which counts only for the contributor); the example names the figures it shows | `ledger-core` `tests/bookspec.rs` |
| `schedule_plan` | `schedule`, no dates | the schedule's plan (B-16): what it recognizes at each month end named (`"YYYY-MM-DD"`), `"0.00"` at one it doesn't post; `total`, all it recognizes; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` | | `schedule_plan` | `schedule`, no dates | the schedule's plan (B-16): what it recognizes at each month end named (`"YYYY-MM-DD"`), `"0.00"` at one it doesn't post; `total`, all it recognizes; the example names the figures it shows | `ledger-core` `tests/bookspec.rs` |
| `iif_lines` | `as_of` | formats appendix: the file's lines in order, each its fields joined by tabs, without the CR LF that ends each | `ledger-package` `the_bookspec_iif_example_matches_the_engine` | | `iif_lines` | `as_of` | formats appendix: the file's lines in order, each its fields joined by tabs, without the CR LF that ends each | `ledger-package` `the_bookspec_iif_example_matches_the_engine` |
| `iif_changes` | `as_of` | formats appendix: each text the file writes differently from the books, in file order, as `[what, books' text, file's text]` (the example's header gives `what`) | `ledger-package` `the_bookspec_iif_example_matches_the_engine` | | `iif_changes` | `as_of` | formats appendix: each text the file writes differently from the books, in file order, as `[what, books' text, file's text]` (the example's header gives `what`) | `ledger-package` `the_bookspec_iif_example_matches_the_engine` |
@@ -297,7 +324,9 @@ A figure query is a table (`[expect.values]`, or `values = { ... }`); a
format query, and `uncategorized_accounts`, an array (`values = [ ... format query, and `uncategorized_accounts`, an array (`values = [ ...
]`). `period`, `day` and `calendar_year` give dates and a year, ]`). `period`, `day` and `calendar_year` give dates and a year,
`account_names` names, `party_part`'s `direction`, `vendor_1099`'s `account_names` names, `party_part`'s `direction`, `vendor_1099`'s
`status` and `party_tin_last4` words, not figures. `status` and `party_tin_last4` words, not figures; `register_row` gives
dates beside its figures, `asset_basis` a rule's name, `"none"` and
`"true"` or `"false"`, and a `k1_tax_basis` line `"open"`, beside them.
A command is tried on a copy of the books, as the books' own command A command is tried on a copy of the books, as the books' own command
does it, and changes nothing checked after it. It shows no values: it is does it, and changes nothing checked after it. It shows no values: it is
@@ -0,0 +1,72 @@
# P3 defect 13, named regression 4
# (personal_use_contribution_keeps_its_723_basis_apart_from_depreciable_basis).
id = "assets-723-basis-apart-from-depreciable-basis"
title = "Property contributed from personal use: the §723 basis apart from the depreciable basis"
rule = "The partnership's basis in property a partner contributes is the partner's adjusted basis (IRC §723). Its depreciable basis, for property converted from personal use, is the lesser of fair market value and that adjusted basis at conversion (CHOICE recorded by the owner as D-41, the CPA to confirm). The §704(c) built-in gain or loss is fair market value less the §723 basis at contribution; a built-in loss counts only for the contributing partner (IRC §704(c)(1)(C))."
status = "AUTHORITY"
sources = [
"26 U.S.C. §723",
"Treas. Reg. §1.168(i)-4(b)(1): 'the lesser of its fair market value or its adjusted depreciable basis'",
"IRS Pub. 946 (2025), Property changed from personal use",
"Treas. Reg. §1.704-3(a)(3)(ii)",
"26 U.S.C. §704(c)(1)(C)",
]
tags = ["fixed-assets", "tax-basis", "partnerships", "704c"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "3000"
name = "Capital"
type = "equity"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
# A laptop a member contributes from personal use: worth 1,440.00, held by
# the member at an adjusted basis of 1,688.40. (Nothing rounds here.)
[[setup.assets]]
id = "laptop"
description = "Laptop"
cost = "1440.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1688.40", fmv_at_contribution = "1440.00" }
[[events]]
date = "2026-01-01"
description = "Laptop contributed at its value"
lines = [
{ account = "1500", side = "debit", amount = "1440.00" },
{ account = "3000", side = "credit", amount = "1440.00" },
]
# Hand check: §723 basis 1,688.40 (the member's adjusted basis).
# Depreciable: the lesser of 1,440.00 and 1,688.40 = 1,440.00. Built-in
# gain: 1,440.00 - 1,688.40 = -248.40, a loss (§704(c)(1)(C)).
[[expect]]
query = "asset_basis"
asset = "laptop"
values = { tax_basis_723 = "1688.40", depreciable_basis = "1440.00", built_in_gain_704c = "-248.40", sec704c_1c = "true" }
@@ -0,0 +1,95 @@
# P3 defect 13, named regression 2 (a_reversed_depreciation_run_is_not_posted), its
# posted figure; a reversal of the reversal reinstates the run.
id = "assets-a-reversed-run-is-not-posted"
title = "A reversed depreciation run is no longer posted; reversing the reversal reinstates it"
rule = "The accumulated depreciation the books carry for an asset counts each run while its entry stands: a reversal takes the run back from the reversal's date, and a reversal of that reversal puts it back from its own date."
status = "AUTHORITY"
sources = [
"wanderbooks docs/spec/rules.md B-8, B-9 (a correction is an opposite entry; reversing the reversal reinstates the original)",
"wanderbooks docs/spec/rules.md B-24",
]
tags = ["fixed-assets", "depreciation", "reversal"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1000"
name = "Bank"
type = "asset"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
# 1,200.00, no salvage, 12 months from 2026-01-01: 100.00 a month.
[[setup.assets]]
id = "printer"
description = "Printer"
cost = "1200.00"
salvage = "0.00"
life_months = 12
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
[[events]]
date = "2026-01-01"
description = "Printer bought"
lines = [
{ account = "1500", side = "debit", amount = "1200.00" },
{ account = "1000", side = "credit", amount = "1200.00" },
]
# January's run: 100.00, dated Jan 31.
[[events]]
run_depreciation = { asset = "printer", period = "2026-01" }
[[events]]
date = "2026-02-01"
description = "Reversal of the January run"
reverses = 2
[[events]]
date = "2026-02-02"
description = "Reversal of the reversal"
reverses = 3
# Hand check: on Jan 31 the books carry January's run, 100.00; on Feb 1 its
# reversal takes it back, 0.00, while the schedule through Feb 1 is
# 100.00 + 100.00 x 1/28 = 103.57 (all of it unposted); on Feb 2 the
# reversal of the reversal puts the run back, 100.00.
[[expect]]
query = "register_row"
asset = "printer"
as_of = "2026-01-31"
values = { accumulated_posted = "100.00", book_value = "1100.00" }
[[expect]]
query = "register_row"
asset = "printer"
as_of = "2026-02-01"
values = { accumulated_posted = "0.00", accumulated_scheduled = "103.57", unposted = "103.57", book_value = "1200.00" }
[[expect]]
query = "register_row"
asset = "printer"
as_of = "2026-02-02"
values = { accumulated_posted = "100.00", book_value = "1100.00" }
@@ -0,0 +1,83 @@
# P3 defect 13, named regression 3
# (an_asset_bought_before_it_is_in_service_is_on_the_register_from_acquisition).
id = "assets-acquired-before-in-service"
title = "An asset is on the register from acquisition and depreciates from its in-service date"
rule = "Depreciation starts on the day the asset is placed in service; the asset is on the register (and the books carry its cost) from the day the company acquired it, the date of the entry that put it on the books."
status = "AUTHORITY"
sources = [
"ASC 360-10-35-4 (cost allocated over the periods the asset serves)",
"IRS Pub. 946 (2025), Placed in Service: 'ready and available for a specific use' (for tax depreciation, the CPA's)",
"wanderbooks docs/spec/rules.md B-15, B-24",
]
tags = ["fixed-assets", "dates"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1000"
name = "Bank"
type = "asset"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
# A kiln bought 2026-03-10 for 3,000.00, placed in service 2026-04-01, 36
# months, no salvage.
[[setup.assets]]
id = "kiln"
description = "Kiln"
cost = "3000.00"
salvage = "0.00"
life_months = 36
in_service = "2026-04-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
[[events]]
date = "2026-03-10"
description = "Kiln bought"
lines = [
{ account = "1500", side = "debit", amount = "3000.00" },
{ account = "1000", side = "credit", amount = "3000.00" },
]
# Hand check: on the register from Mar 10 (its entry's date), nothing
# accrued before Apr 1 (a March charge from the purchase date would have
# been 3,000.00 / 36 x 22/31 = 59.14: none is due), and the register
# carries the cost the books do.
[[expect]]
query = "register_row"
asset = "kiln"
as_of = "2026-03-31"
values = { acquired = "2026-03-10", in_service = "2026-04-01", accumulated_scheduled = "0.00", accumulated_posted = "0.00", book_value = "3000.00" }
[[expect]]
query = "register_totals"
as_of = "2026-03-31"
values = { total_cost = "3000.00", unregistered_cost = "0.00" }
# April: 3,000.00 / 36 = 83.333... -> 83.33.
[[expect]]
query = "depreciation_schedule"
asset = "kiln"
as_of = "2026-04-30"
values = { "2026-03" = "0.00", "2026-04" = "83.33" }
@@ -0,0 +1,86 @@
# P3 defect 13, named regression 1 (list_assets_book_value_is_what_the_books_carry).
id = "assets-book-value-is-what-the-books-carry"
title = "Book value is cost less the depreciation posted, never the schedule's"
rule = "An asset's carrying amount is its cost less the accumulated depreciation the books have recorded for it; what the depreciation schedule says is due through a date is a second figure, reported beside it, and their difference is depreciation not yet posted."
status = "AUTHORITY"
sources = [
"ASC 360-10-35-4 (cost less salvage allocated over the periods the asset serves)",
"wanderbooks docs/spec/rules.md B-24 (the register reconciles to the general ledger)",
]
tags = ["fixed-assets", "depreciation", "posted-vs-scheduled"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "3000"
name = "Capital"
type = "equity"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
# A laptop contributed 2026-05-15 at 1,440.00, in service that day, 36
# months, no salvage: 40.00 a month.
[[setup.assets]]
id = "laptop"
description = "Laptop"
cost = "1440.00"
salvage = "0.00"
life_months = 36
in_service = "2026-05-15"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
[[events]]
date = "2026-05-15"
description = "Laptop contributed"
lines = [
{ account = "1500", side = "debit", amount = "1440.00" },
{ account = "3000", side = "credit", amount = "1440.00" },
]
# May's run, dated the month's last day: 40.00 x 17/31 = 21.9355 -> 21.94.
[[events]]
run_depreciation = { asset = "laptop", period = "2026-05" }
[[expect]]
query = "run"
event = 2
[expect.values]
amount = "21.94"
caught_up = "0.00"
# Hand check: through May 20, 6 days of May, 40.00 x 6/31 = 7.7419 ->
# 7.74 is due; the run is dated May 31, so nothing is posted yet, and the
# book value is the cost (before P3 the tool called 1,432.26 book value).
[[expect]]
query = "register_row"
asset = "laptop"
as_of = "2026-05-20"
values = { accumulated_posted = "0.00", accumulated_scheduled = "7.74", unposted = "7.74", book_value = "1440.00" }
[[expect]]
query = "register_row"
asset = "laptop"
as_of = "2026-05-31"
values = { accumulated_posted = "21.94", accumulated_scheduled = "21.94", unposted = "0.00", book_value = "1418.06" }
@@ -0,0 +1,78 @@
# P3 defect 13, named regression 5 (built_in_gain_is_fixed_at_contribution_not_book_cost).
id = "assets-built-in-gain-fixed-at-contribution"
title = "The §704(c) built-in gain is fixed at contribution, whatever the book cost becomes"
rule = "The built-in gain on contributed property is the excess of its book value (its fair market value) over the contributing partner's adjusted tax basis upon contribution; correcting the book cost later never changes the figure at contribution."
status = "AUTHORITY"
sources = [
"Treas. Reg. §1.704-3(a)(3)(i)-(ii)",
]
tags = ["fixed-assets", "tax-basis", "704c"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "3000"
name = "Capital"
type = "equity"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
# A press contributed from business use: worth 1,000.00, held by the member
# at an adjusted basis of 400.00. (Nothing rounds here.)
[[setup.assets]]
id = "press"
description = "Press"
cost = "1000.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "carryover_723", contributor_adjusted_basis = "400.00", fmv_at_contribution = "1000.00" }
[[events]]
date = "2026-01-01"
description = "Press contributed at its value"
lines = [
{ account = "1500", side = "debit", amount = "1000.00" },
{ account = "3000", side = "credit", amount = "1000.00" },
]
# Hand check: §723 basis 400.00, depreciated from (carryover); built-in
# gain 1,000.00 - 400.00 = 600.00.
[[expect]]
query = "asset_basis"
asset = "press"
after = 1
values = { tax_basis_723 = "400.00", depreciable_basis = "400.00", built_in_gain_704c = "600.00" }
# The book cost corrected to 1,100.00 (costs to bring it to use): the gain
# at contribution stays 1,000.00 - 400.00 = 600.00, not 700.00.
[[changes]]
after = 1
correct_asset = { asset = "press", cost = "1100.00", reason = "costs to bring it to use" }
[[expect]]
query = "asset_basis"
asset = "press"
values = { tax_basis_723 = "400.00", fmv_at_contribution = "1000.00", built_in_gain_704c = "600.00" }
@@ -0,0 +1,155 @@
# P3 defect 13: four devices two members contribute from personal use, each at the
# lower of its value and its basis.
id = "assets-four-contributed-devices"
title = "Each contributed device takes the lower of its value and its basis; gains and losses are per property"
rule = "Each item of contributed property is its own: depreciable basis is the lesser of its fair market value and the contributor's adjusted basis; its built-in gain or loss is its own, and gains and losses of different properties are never netted."
status = "AUTHORITY"
sources = [
"Treas. Reg. §1.168(i)-4(b)(1)",
"Treas. Reg. §1.704-3(a)(2): section 704(c) applies 'on a property-by-property basis'",
"Treas. Reg. §1.704-3(a)(3)(ii)",
"26 U.S.C. §704(c)(1)(C)",
]
tags = ["fixed-assets", "tax-basis", "partnerships", "704c"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "half-away-from-zero"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "3000"
name = "Capital, Tobin Harlow"
type = "equity"
[[setup.accounts]]
code = "3001"
name = "Capital, Morgan Ellis"
type = "equity"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
[[setup.members]]
name = "Tobin Harlow"
capital_account = "3000"
share = "0.5"
[[setup.members]]
name = "Morgan Ellis"
capital_account = "3001"
share = "0.5"
# Four devices the two members contribute jointly from personal use, each
# at its value. (Nothing rounds here.)
[[setup.assets]]
id = "laptop"
description = "Laptop"
cost = "1400.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1750.40", fmv_at_contribution = "1400.00", sec704c_method = "traditional" }
[[setup.assets]]
id = "phone"
description = "Phone"
cost = "900.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1129.99", fmv_at_contribution = "900.00", sec704c_method = "traditional" }
[[setup.assets]]
id = "camera"
description = "Camera"
cost = "1300.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1080.00", fmv_at_contribution = "1300.00", sec704c_method = "traditional" }
[[setup.assets]]
id = "monitor"
description = "Monitor"
cost = "500.00"
salvage = "0.00"
life_months = 36
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 1
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "500.00", fmv_at_contribution = "500.00", sec704c_method = "traditional" }
[[events]]
date = "2026-01-01"
description = "Four devices contributed jointly"
lines = [
{ account = "1500", side = "debit", amount = "1400.00" },
{ account = "1500", side = "debit", amount = "900.00" },
{ account = "1500", side = "debit", amount = "1300.00" },
{ account = "1500", side = "debit", amount = "500.00" },
{ account = "3000", side = "credit", amount = "2050.00" },
{ account = "3001", side = "credit", amount = "2050.00" },
]
# Hand check, each device its own: the lesser of value and basis, and the
# value less the basis.
[[expect]]
query = "asset_basis"
asset = "laptop"
values = { tax_basis_723 = "1750.40", depreciable_basis = "1400.00", built_in_gain_704c = "-350.40", sec704c_1c = "true" }
[[expect]]
query = "asset_basis"
asset = "phone"
values = { tax_basis_723 = "1129.99", depreciable_basis = "900.00", built_in_gain_704c = "-229.99", sec704c_1c = "true" }
[[expect]]
query = "asset_basis"
asset = "camera"
values = { tax_basis_723 = "1080.00", depreciable_basis = "1080.00", built_in_gain_704c = "220.00", sec704c_1c = "false" }
[[expect]]
query = "asset_basis"
asset = "monitor"
values = { tax_basis_723 = "500.00", depreciable_basis = "500.00", built_in_gain_704c = "0.00", sec704c_1c = "false" }
# Totals: cost 1,400.00 + 900.00 + 1,300.00 + 500.00 = 4,100.00; §723
# 1,750.40 + 1,129.99 + 1,080.00 + 500.00 = 4,460.39; depreciable
# 1,400.00 + 900.00 + 1,080.00 + 500.00 = 3,880.00. The gains and losses
# are each property's own: the register totals none of them.
[[expect]]
query = "register_totals"
as_of = "2026-06-30"
values = { total_cost = "4100.00", total_tax_basis_723 = "4460.39", total_depreciable_basis = "3880.00", missing_basis = "0" }
@@ -0,0 +1,172 @@
# P3 (D-41): the K-1 worksheet reports tax-basis capital beside book capital.
id = "partnership-k1-tax-basis-capital"
title = "Schedule K-1 Item L on the tax basis: property contributed at its adjusted basis"
rule = "Each partner's capital account is reported on the tax basis: capital contributed is cash plus the adjusted tax basis of property contributed; the share of income is as figured for tax; distributions are cash plus the adjusted tax basis of property distributed. Book capital (property at fair market value) differs by the partner's share of the built-in gain or loss at contribution, and by every book-tax difference after; a figure the books cannot know (tax depreciation) is left to the preparer, never guessed."
status = "AUTHORITY"
sources = [
"Instructions for Form 1065 (2025), Item L, Tax-basis method: Capital contributed during the year; Current year net income (loss); Withdrawals and distributions",
"Instructions for Form 1065 (2020), Item L: 'you must use the tax basis method this year'",
"26 U.S.C. §723",
"Treas. Reg. §1.704-3(a)(3)(ii)",
]
tags = ["partnerships", "k1", "tax-basis", "capital"]
[setup]
currency = "USD"
fiscal_year_start = "01-01"
basis = "accrual"
rounding = "largest-remainder"
cash_accounts = ["1000"]
[[setup.accounts]]
code = "1000"
name = "Bank"
type = "asset"
[[setup.accounts]]
code = "1500"
name = "Equipment"
type = "asset"
[[setup.accounts]]
code = "1510"
name = "Accumulated Depreciation"
type = "asset"
[[setup.accounts]]
code = "3000"
name = "Capital, Tobin Harlow"
type = "equity"
[[setup.accounts]]
code = "3001"
name = "Capital, Morgan Ellis"
type = "equity"
[[setup.accounts]]
code = "4000"
name = "Sales"
type = "revenue"
[[setup.accounts]]
code = "6200"
name = "Depreciation Expense"
type = "expense"
[[setup.members]]
name = "Tobin Harlow"
capital_account = "3000"
share = "0.5"
[[setup.members]]
name = "Morgan Ellis"
capital_account = "3001"
share = "0.5"
# Two devices the members contribute jointly from personal use, 24-month
# lives: a laptop worth 1,440.00 (adjusted basis 1,688.40) and a camera
# worth 1,300.00 (adjusted basis 1,080.00).
[[setup.assets]]
id = "laptop"
description = "Laptop"
cost = "1440.00"
salvage = "0.00"
life_months = 24
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 2
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1688.40", fmv_at_contribution = "1440.00", sec704c_method = "traditional" }
[[setup.assets]]
id = "camera"
description = "Camera"
cost = "1300.00"
salvage = "0.00"
life_months = 24
in_service = "2026-01-01"
method = "straight_line"
cost_account = "1500"
accumulated_account = "1510"
expense_account = "6200"
acquired_by = 2
basis = { rule = "personal_use_conversion", contributor_adjusted_basis = "1080.00", fmv_at_contribution = "1300.00", sec704c_method = "traditional" }
[[events]]
date = "2026-01-01"
description = "Cash contributed"
lines = [
{ account = "1000", side = "debit", amount = "2000.00" },
{ account = "3000", side = "credit", amount = "1000.00" },
{ account = "3001", side = "credit", amount = "1000.00" },
]
[[events]]
date = "2026-01-01"
description = "Devices contributed jointly, at their values"
lines = [
{ account = "1500", side = "debit", amount = "1440.00" },
{ account = "1500", side = "debit", amount = "1300.00" },
{ account = "3000", side = "credit", amount = "1370.00" },
{ account = "3001", side = "credit", amount = "1370.00" },
]
[[events]]
date = "2026-02-01"
description = "Sale"
lines = [
{ account = "1000", side = "debit", amount = "600.00" },
{ account = "4000", side = "credit", amount = "600.00" },
]
# December's runs catch the year up (rules.md B-15): 1,440.00 x 12/24 =
# 720.00 and 1,300.00 x 12/24 = 650.00, dated Dec 31.
[[events]]
run_depreciation = { asset = "laptop", period = "2026-12" }
[[events]]
run_depreciation = { asset = "camera", period = "2026-12" }
[[events]]
date = "2026-12-15"
description = "Distributions"
lines = [
{ account = "3000", side = "debit", amount = "300.00" },
{ account = "3001", side = "debit", amount = "300.00" },
{ account = "1000", side = "credit", amount = "600.00" },
]
# Hand check, book, each: 1,000.00 cash + 1,370.00 property + (600.00 -
# 720.00 - 650.00) / 2 = -385.00 - 300.00 = 1,685.00.
[[expect]]
query = "k1"
from = "2026-01-01"
to = "2026-12-31"
values = { "Tobin Harlow.beginning" = "0.00", "Tobin Harlow.contributions_cash" = "1000.00", "Tobin Harlow.contributions_property" = "1370.00", "Tobin Harlow.net_income" = "-385.00", "Tobin Harlow.distributions" = "300.00", "Tobin Harlow.ending" = "1685.00" }
# Tax, each: property at its §723 basis, (1,688.40 + 1,080.00) / 2 =
# 1,384.20; income open (tax depreciation is the preparer's), known so far
# -385.00; ending known so far 1,000.00 + 1,384.20 - 385.00 - 300.00 =
# 1,699.20.
[[expect]]
query = "k1_tax_basis"
from = "2026-01-01"
to = "2026-12-31"
values = { "Tobin Harlow.beginning" = "0.00", "Tobin Harlow.contributions_cash" = "1000.00", "Tobin Harlow.contributions_property" = "1384.20", "Tobin Harlow.net_income" = "open", "Tobin Harlow.known_net_income" = "-385.00", "Tobin Harlow.distributions" = "300.00", "Tobin Harlow.ending" = "open", "Tobin Harlow.known_ending" = "1699.20" }
# Book less tax: the built-in gain share, ((1,440.00 - 1,688.40) +
# (1,300.00 - 1,080.00)) / 2 = (-248.40 + 220.00) / 2 = -14.20 =
# 1,685.00 - 1,699.20.
[[expect]]
query = "k1_reconciliation"
from = "2026-01-01"
to = "2026-12-31"
values = { "Tobin Harlow.beginning" = "0.00", "Tobin Harlow.built_in_gain_704c" = "-14.20", "Tobin Harlow.property_without_basis" = "0.00", "Tobin Harlow.property_distributed" = "0.00", "Tobin Harlow.total" = "-14.20" }
[[expect]]
query = "k1_tax_basis"
from = "2026-01-01"
to = "2026-12-31"
values = { "Morgan Ellis.contributions_property" = "1384.20", "Morgan Ellis.known_ending" = "1699.20" }