P3: party totals by what moved the money, once (defects 14, 11, 24)
Each party's part of an entry is signed as its own account would show it, with a direction and its cash and in-kind amounts; a reversal is its original negated. Totals on a cash or all basis: for a member, all equals the members' equity statement and cash the K-1's cash. Money is cash, cards and the financing accounts, and a liability credit never pays its own creditor (creditor_of), so accruals and declared distributions count once. tin_last4 from the TIN or W-9 facts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
1 parent
06347159f0
commit
52555262a8
9 files changed
+1415
-20
No files matched your search
@@ -0,0 +1,200 @@
|
||||
# P3 defect 24 in a member's entry (found in review, 2026-10-21): a
|
||||
# distribution declared to a liability that isn't money counted as paid
|
||||
# when declared and again when paid. A distribution's cash is the money it
|
||||
# paid, its in kind the property it gave; the rest is still owed. Regression
|
||||
# tests: ledger-core tests/spec_party_totals.rs
|
||||
# defect24_a_distribution_declared_to_a_payable_counts_once_when_paid and
|
||||
# a_distribution_of_money_and_depreciated_property_splits_by_what_moved.
|
||||
# The shape: bookspec/README.md.
|
||||
|
||||
id = "p3-party-distribution-still-owed"
|
||||
title = "A distribution counts the money it paid and the property it gave; what is still owed counts when paid"
|
||||
rule = """
|
||||
An entry naming only members that moves their capital counts what moved
|
||||
it. Of a distribution, the cash is the money it paid (through the cash
|
||||
accounts, a card, the members' financing or a loan), the in kind the
|
||||
property it gave up (at what the books carried it), and the rest, credited
|
||||
to a liability that isn't money for the entry (distributions payable, or
|
||||
what the members are owed when they are named its creditors), is a
|
||||
promise: it counts nothing until it is paid, then once, as paid. The
|
||||
statement of members' equity counts a distribution when it is declared,
|
||||
so party totals catch up with it when it is paid.
|
||||
"""
|
||||
status = "AUTHORITY"
|
||||
sources = [
|
||||
"Helvering v. Price, 309 U.S. 409, 412-413 (1940): a promise to pay is not payment (wanderbooks docs/spec/sources/helvering-v-price-1940.md)",
|
||||
"Treas. Reg. §1.704-1(b)(2)(iv)(b)(4)-(5): a partner's capital account falls by the money and the property distributed (docs/spec/sources/irs-capital-accounts.md)",
|
||||
"DECISION (owner, 2026-10-20): a member's entry counts what moved their capital; money is cash, cards, the members' financing and loans (rules.md B-35)",
|
||||
]
|
||||
tags = ["parties", "members", "distributions", "promises", "in-kind", "money"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "accrual"
|
||||
rounding = "half-even"
|
||||
cash_accounts = ["1000"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Checking"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1500"
|
||||
name = "Equipment"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1510"
|
||||
name = "Accumulated Depreciation — Equipment"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2150"
|
||||
name = "Distributions Payable"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "3000"
|
||||
name = "Capital — Tobin Harlow"
|
||||
type = "equity"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "3001"
|
||||
name = "Capital — Morgan Ellis"
|
||||
type = "equity"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "3100"
|
||||
name = "Distributions — Tobin Harlow"
|
||||
type = "equity"
|
||||
|
||||
[[setup.parties]]
|
||||
name = "Tobin Harlow"
|
||||
roles = ["member"]
|
||||
|
||||
[[setup.parties]]
|
||||
name = "Morgan Ellis"
|
||||
roles = ["member"]
|
||||
|
||||
[[setup.members]]
|
||||
name = "Tobin Harlow"
|
||||
share = "0.5"
|
||||
capital_account = "3000"
|
||||
distributions_account = "3100"
|
||||
|
||||
[[setup.members]]
|
||||
name = "Morgan Ellis"
|
||||
share = "0.5"
|
||||
capital_account = "3001"
|
||||
|
||||
# 1. A distribution declared to Tobin: still owed, counts nothing.
|
||||
[[events]]
|
||||
date = "2026-06-30"
|
||||
description = "Distribution declared"
|
||||
parties = [{ party = "Tobin Harlow" }]
|
||||
lines = [
|
||||
{ account = "3100", side = "debit", amount = "200.00" },
|
||||
{ account = "2150", side = "credit", amount = "200.00" },
|
||||
]
|
||||
|
||||
# 2. It is paid: paid, money, once.
|
||||
[[events]]
|
||||
date = "2026-07-15"
|
||||
description = "Distribution paid"
|
||||
parties = [{ party = "Tobin Harlow" }]
|
||||
lines = [
|
||||
{ account = "2150", side = "debit", amount = "200.00" },
|
||||
{ account = "1000", side = "credit", amount = "200.00" },
|
||||
]
|
||||
|
||||
# 3. Declared and partly paid at once: the money now, the rest when paid.
|
||||
[[events]]
|
||||
date = "2026-08-31"
|
||||
description = "Distribution, part paid"
|
||||
parties = [{ party = "Tobin Harlow" }]
|
||||
lines = [
|
||||
{ account = "3100", side = "debit", amount = "300.00" },
|
||||
{ account = "1000", side = "credit", amount = "100.00" },
|
||||
{ account = "2150", side = "credit", amount = "200.00" },
|
||||
]
|
||||
|
||||
# 4. Equipment carried at 1,000.00 less 300.00 depreciated, with 100.00 in
|
||||
# cash, distributed to Morgan: 100.00 cash, 700.00 in kind.
|
||||
[[events]]
|
||||
date = "2026-09-01"
|
||||
description = "Equipment and cash distributed"
|
||||
parties = [{ party = "Morgan Ellis" }]
|
||||
lines = [
|
||||
{ account = "3001", side = "debit", amount = "800.00" },
|
||||
{ account = "1510", side = "debit", amount = "300.00" },
|
||||
{ account = "1500", side = "credit", amount = "1000.00" },
|
||||
{ account = "1000", side = "credit", amount = "100.00" },
|
||||
]
|
||||
|
||||
[[expect]]
|
||||
query = "party_part"
|
||||
entry = 1
|
||||
party = "Tobin Harlow"
|
||||
values = { resolved = "200.00", direction = "neither", cash = "0.00", in_kind = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "party_part"
|
||||
entry = 3
|
||||
party = "Tobin Harlow"
|
||||
values = { resolved = "300.00", direction = "paid", cash = "100.00", in_kind = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "party_part"
|
||||
entry = 4
|
||||
party = "Morgan Ellis"
|
||||
values = { resolved = "800.00", direction = "paid", cash = "100.00", in_kind = "700.00" }
|
||||
|
||||
# Before the review: 700.00 (event 1's 200.00 and the 200.00 still owed
|
||||
# on event 3 counted as paid, and event 2 paid the first again).
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Tobin Harlow"
|
||||
basis = "cash"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { paid = "300.00", received = "0.00" }
|
||||
|
||||
# Through June: declared, not yet paid. The statement counts it already.
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Tobin Harlow"
|
||||
basis = "all"
|
||||
from = "2026-01-01"
|
||||
to = "2026-06-30"
|
||||
values = { paid = "0.00", received = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "members_equity"
|
||||
from = "2026-01-01"
|
||||
to = "2026-06-30"
|
||||
values = { "Tobin Harlow.contributions" = "0.00", "Tobin Harlow.distributions" = "200.00" }
|
||||
|
||||
# Before the review: 0.00 cash, 800.00 in kind.
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Morgan Ellis"
|
||||
basis = "cash"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { paid = "100.00", received = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Morgan Ellis"
|
||||
basis = "all"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { paid = "800.00", received = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "members_equity"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { "Morgan Ellis.contributions" = "0.00", "Morgan Ellis.distributions" = "800.00" }
|
||||
Reference in new issue
Block a user