Each close into members' capital rounded on its own, ties to the earlier member, so twelve monthly 50/50 closes of odd-cent income could leave one member several cents ahead of half the year (docs/testing.md #12, found with the members' equity fix). - CloseTo::Members now splits cumulatively over a run (closes back to back with the same members and shares): each close gives a member allocate(run total so far) - allocate(run total before). Periods record their close order and a cumulative close's members and net (Period::close_seq, member_close) so the next close continues the run and replay recomputes it exactly. A close to anything else, or other shares, ends the run. - Journaled "rounding": "cumulative". The per-close rule is kept as CloseTo::MembersPerClose for closes journaled "largest_remainder"; older closes still replay with the last member absorbing it. - Lean: runPart_telescopes (a member's total from a run is their allocation of the run's total) and closePart_total (each close hands out exactly its net), audited to the standard axioms. - Tests: hand-computed three one-cent months (per close A 0.03 / B 0; cumulative A 0.02 / B 0.01), a run ending, a property that each member stays within a cent of their share (fails on the per-close rule), and a store contract that each rule journals and replays as itself. Wanderland's books have no closes yet, so all of theirs use the new rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX
This commit is contained in:
1 parent
f4381f170c
commit
fb3b4ab476
11 files changed
+416
-16
No files matched your search
+14
-2
@@ -217,6 +217,14 @@ closed period).
|
||||
- **No authority** says how to round a share to the cent. Largest
|
||||
remainder, ties to the earlier member: DECISION (Stephen, 2026-10-13).
|
||||
Closes made before then replay with the last member absorbing it.
|
||||
- Rounding never piles up: a run of members closes (same members and
|
||||
shares, back to back) splits cumulatively, each close giving a member
|
||||
their allocation of the run's total so far less their allocation before
|
||||
it, so each member's total from the run is within a cent of their exact
|
||||
share (follows from the running capital account below; found
|
||||
2026-10-13: closing each month on its own gave every tied cent to the
|
||||
earlier member). Journaled as `"rounding": "cumulative"`; closes
|
||||
journaled `"largest_remainder"` replay one at a time.
|
||||
- A capital account is one running balance: Form 1065 Schedule K-1
|
||||
instructions, Item L: "The partnership must report your beginning
|
||||
capital account and ending capital account for the year", "based on the
|
||||
@@ -229,8 +237,12 @@ closed period).
|
||||
|
||||
**Enforced:** `CloseTo::Members`, `periods::allocate`,
|
||||
`kernel::apportion`, `members_equity`. **Checked:** Kani
|
||||
`apportion_is_exact`, `apportion_is_fair`; properties `prop_split_*`,
|
||||
`each_members_capital_chains_across_statements`;
|
||||
`apportion_is_exact`, `apportion_is_fair`; Lean `runPart_telescopes`,
|
||||
`closePart_total`; properties `prop_split_*`,
|
||||
`each_members_capital_chains_across_statements`,
|
||||
`each_member_stays_within_a_cent_of_their_share`;
|
||||
`a_run_of_closes_never_piles_up_rounding`,
|
||||
`members_closes_replay_under_the_rule_they_were_journaled_with`;
|
||||
`closes_journaled_under_the_old_rule_replay_with_it`.
|
||||
|
||||
## B-14 Statements: P&L for a period; cash flow by the indirect method
|
||||
|
||||
Reference in new issue
Block a user