P3: dated 1099 decisions, payment methods and the card exception (defects 23, 12, 18, D-40)
A vendor's 1099 decision is its own dated fact (files NEC or MISC, not reportable with its reason, or undetermined), applied by each payment's date. Payment methods are recorded; card and network payments are left out and listed; a member's check through financing counts; a bank payment with no method counts (D-40); $2,000 for payments after 2025. One worksheet for the tool, the viewer and the CPA package. 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
52555262a8
commit
249e216fc0
9 files changed
+848
-16
No files matched your search
@@ -103,9 +103,9 @@ the side gives the direction.
|
||||
- `cash_accounts`, `financing_accounts`, `investing_accounts` (in
|
||||
`[setup]`): arrays of account codes, the statement of cash flows'
|
||||
account roles (ASC 230-10-45-10 to 45-15). The cash and financing
|
||||
accounts are also what a payee is paid from, for `vendor_1099_paid` (a
|
||||
payment card is neither: its charges go on Form 1099-K; rules.md B-19);
|
||||
with the cards, what party money is, for
|
||||
accounts are also what a payee is paid from, for `vendor_1099_paid` and
|
||||
`vendor_1099` (a payment card is neither: its charges go on Form
|
||||
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
|
||||
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).
|
||||
@@ -138,6 +138,20 @@ the side gives the direction.
|
||||
return from the beginning, `form` `"1099-NEC"` or `"1099-MISC"`; each
|
||||
name once. A payee in `setup.parties` with the `vendor` role is that
|
||||
party's vendor record; any other is a vendor record of its own.
|
||||
- `[[setup.status_changes]]` `{ payee, effective, decision, reason_kind?,
|
||||
reason? }`: a payee's 1099 decision from `effective` (`YYYY-MM-DD`) on
|
||||
(rules.md B-19, D-40: an LLC's corporate election, say): `decision`
|
||||
`"1099-NEC"`, `"1099-MISC"`, `"undetermined"` or `"not_reportable"`,
|
||||
the last with `reason_kind` (`corporation`, `tax_exempt`,
|
||||
`united_states`, `state`, `foreign_government`, `foreign_person`,
|
||||
`merchandise`, `employee`, `other`) and the facts in words (`reason`).
|
||||
Each payment takes the decision in force on its date.
|
||||
- `[[setup.instruments]]` `{ label, kind, account, last4?, owner? }`: a
|
||||
payment method (B-19): `kind` `bank`, `business_card`, `member_card`,
|
||||
`member_cash_or_check` or `platform`; `account` the code it pays
|
||||
through; `owner` a party's name (informational). A business card's
|
||||
liability is a card account (B-35 item 5): while none is recorded, a
|
||||
liability whose name says "card", not "gift card", is.
|
||||
- `payee` on an event: the payee (by name, one of `setup.payees`) the
|
||||
entry paid. Not on a reversal, which takes its original's, nor on a
|
||||
close.
|
||||
@@ -148,7 +162,9 @@ the side gives the direction.
|
||||
capital lines or income shares for several: B-35). An entry naming a
|
||||
party with a vendor record is tagged with that payee too; with
|
||||
`payee` as well, the payee's party is one of the parties.
|
||||
Not on a reversal, which takes its original's.
|
||||
- `instrument` on an event: the payment method (a `setup.instruments`
|
||||
label) the entry was paid with. Neither `parties` nor `instrument` on a
|
||||
reversal, which takes its original's.
|
||||
- `close = { start, to, rounding? }` as an event: closes the period from
|
||||
`start` through the event's `date` (rules.md B-11, B-13), `to`
|
||||
`"members"` (split by share, in the order listed) or
|
||||
@@ -174,14 +190,22 @@ the side gives the direction.
|
||||
the changes made after it), not after the last event and every change
|
||||
(1 to the number of events; not on a format query).
|
||||
|
||||
Party totals and the 1099 worksheet answer different questions (B-35
|
||||
item 9): a member paying a contractor through the members' financing
|
||||
account is, in party totals, paid to the contractor (money, the
|
||||
members' financing being money) and nothing to the member until the
|
||||
company reimburses them; on the 1099 worksheet it is the company's
|
||||
payment, counted toward the contractor's 1099 unless it was made by card
|
||||
(B-19), and undetermined until its payment method is recorded.
|
||||
|
||||
### Queries and their values
|
||||
|
||||
A query over a period takes `from` and `to`; a query as of a day takes
|
||||
`as_of`; the other is refused. A date left out is resolved by the one
|
||||
rule (rules.md B-30) on `setup.today`: an omitted `to` is today, an
|
||||
omitted `from` the first day of the fiscal year that holds `to`, an
|
||||
omitted `as_of` today (`vendor_1099_paid`, `party_totals` and the
|
||||
format queries give theirs). A query no crate
|
||||
omitted `as_of` today (`vendor_1099_paid`, `vendor_1099`,
|
||||
`party_totals` and the format queries give theirs). A query no crate
|
||||
answers is refused, never skipped.
|
||||
|
||||
| query | dates | values | checked by |
|
||||
@@ -194,6 +218,7 @@ answers is refused, never skipped.
|
||||
| `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` |
|
||||
| `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` |
|
||||
| `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_totals` | `party`, `basis` (`cash` or `all`), `from`, `to` | what was `paid` to the party and `received` from it over the period (B-35 item 4: basis `cash` money, `all` money and property in kind; each entry on its first original's side), both given | `ledger-core` `tests/bookspec.rs` |
|
||||
| `party_tin_last4` | `party`, no dates | `tin_last4`: the party's TIN facts' last four, else its W-9's, `""` for none (B-26) | `ledger-core` `tests/bookspec.rs` |
|
||||
@@ -208,8 +233,8 @@ answers is refused, never skipped.
|
||||
A figure query is a table (`[expect.values]`, or `values = { ... }`); a
|
||||
format query, and `uncategorized_accounts`, an array (`values = [ ...
|
||||
]`). `period`, `day` and `calendar_year` give dates and a year,
|
||||
`account_names` names, `party_part`'s `direction` and
|
||||
`party_tin_last4` words, not figures.
|
||||
`account_names` names, `party_part`'s `direction`, `vendor_1099`'s
|
||||
`status` and `party_tin_last4` words, not figures.
|
||||
|
||||
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
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
id = "1099-a-dated-status-applies-by-payment-date"
|
||||
title = "A payee's 1099 status applies to each payment as of the payment's date"
|
||||
rule = """
|
||||
Whether a payee is exempt (a corporation) is judged as of each payment: the
|
||||
payer may treat a payee as a corporation when the condition is met before
|
||||
the payment is made. An LLC that elects to be taxed as a corporation keeps
|
||||
its EIN and becomes a corporation on the election's effective date (the
|
||||
date its Form 8832 specifies). Payments before that date count toward its
|
||||
1099-NEC; payments from it on are payments to a corporation, for which no
|
||||
return is required. (A payee that incorporates is a new legal person: a new
|
||||
payee, with its own W-9.)
|
||||
"""
|
||||
status = "AUTHORITY"
|
||||
sources = [
|
||||
"Treas. Reg. §1.6041-3(p)(1) (docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"Treas. Reg. §1.6049-4(c)(1)(ii)(A) (\"before a payment is made\")",
|
||||
"Treas. Reg. §301.7701-2(b)(2), §301.7701-3(c)(1)(iii)",
|
||||
"DECISION D-40 (wanderbooks owner, 2026-10-20): dated statuses",
|
||||
]
|
||||
tags = ["1099", "dated-status", "corporation", "election"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Harbor Design LLC"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[setup.status_changes]]
|
||||
payee = "Harbor Design LLC"
|
||||
effective = "2026-07-01"
|
||||
decision = "not_reportable"
|
||||
reason_kind = "corporation"
|
||||
reason = "elected to be taxed as a corporation (Form 8832), effective July 1"
|
||||
|
||||
[[events]]
|
||||
date = "2026-03-01"
|
||||
description = "Design work"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1500.00" },
|
||||
{ account = "1000", side = "credit", amount = "1500.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-06-30"
|
||||
description = "Design work, the day before the election"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1000.00" },
|
||||
{ account = "1000", side = "credit", amount = "1000.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-07-01"
|
||||
description = "Design work, the election's day"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "800.00" },
|
||||
{ account = "1000", side = "credit", amount = "800.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-09-15"
|
||||
description = "Design work"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1200.00" },
|
||||
{ account = "1000", side = "credit", amount = "1200.00" },
|
||||
]
|
||||
|
||||
# By hand: before July 1, 1,500.00 + 1,000.00 = 2,500.00 counts (at least
|
||||
# 2,000.00: reportable); from July 1 on, 800.00 + 1,200.00 = 2,000.00 paid
|
||||
# to a corporation, not reportable.
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Harbor Design LLC"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "reportable", threshold = "2000.00", paid = "2500.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "2000.00" }
|
||||
@@ -0,0 +1,99 @@
|
||||
id = "1099-a-members-check-through-financing-counts"
|
||||
title = "A member's own check for the company counts toward the payee's 1099; their card doesn't; unknown stays unknown"
|
||||
rule = """
|
||||
The payer is the person who makes the payment in the course of its trade or
|
||||
business. A person paying on another's behalf is the payer only if it
|
||||
performs management or oversight functions or has a significant economic
|
||||
interest; writing checks at another's direction is neither. A member who
|
||||
pays a company bill from their own funds at the company's direction, the
|
||||
company bearing the cost through its liability to the member, leaves the
|
||||
company the payer: the member's check counts toward the payee's 1099. The
|
||||
member's personal card is a payment card: excluded (Form 1099-K). A
|
||||
member's payment whose method isn't recorded is undetermined, never
|
||||
guessed; the payee is reportable only if what certainly counts reaches the
|
||||
threshold.
|
||||
"""
|
||||
status = "AUTHORITY"
|
||||
sources = [
|
||||
"Treas. Reg. §1.6041-1(a)(1)(i), (e)(1) (docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"Treas. Reg. §1.6041-1(a)(1)(iv)",
|
||||
"26 U.S.C. §6041(a), as amended by Pub. L. 119-21 §70433 (docs/spec/sources/irs-1099-thresholds.md)",
|
||||
]
|
||||
tags = ["1099", "financing", "member-paid", "instruments"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
financing_accounts = ["2100"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2100"
|
||||
name = "Due to Members"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Riley's checks"
|
||||
kind = "member_cash_or_check"
|
||||
account = "2100"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Riley's Visa"
|
||||
kind = "member_card"
|
||||
account = "2100"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Dana Studio"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[events]]
|
||||
date = "2026-05-01"
|
||||
description = "Logo, paid by a member's personal check"
|
||||
payee = "Dana Studio"
|
||||
instrument = "Riley's checks"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "2500.00" },
|
||||
{ account = "2100", side = "credit", amount = "2500.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-06-01"
|
||||
description = "Icons, charged to a member's personal card"
|
||||
payee = "Dana Studio"
|
||||
instrument = "Riley's Visa"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "800.00" },
|
||||
{ account = "2100", side = "credit", amount = "800.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-07-01"
|
||||
description = "Revisions, paid by a member (how not recorded)"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "300.00" },
|
||||
{ account = "2100", side = "credit", amount = "300.00" },
|
||||
]
|
||||
|
||||
# By hand: counts 2,500.00 (the member's check); excluded 800.00 (their
|
||||
# card); undetermined 300.00. What certainly counts, 2,500.00, is at least
|
||||
# 2,000.00 however the 300.00 turns out: reportable, on 2,500.00 (or
|
||||
# 2,800.00 once the 300.00 is known to be a check).
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Dana Studio"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "reportable", threshold = "2000.00", paid = "2500.00", excluded_card = "800.00", undetermined = "300.00", not_reportable = "0.00" }
|
||||
@@ -0,0 +1,219 @@
|
||||
# How a payee's party totals and its 1099 amount relate (wanderbooks
|
||||
# rules.md B-35 item 9, B-19): a member paying a contractor for the
|
||||
# company through the members' financing account, by check, by their own
|
||||
# card and with no method recorded; a company card charge; a company
|
||||
# check; then the member reimbursed. Party totals count every payment as
|
||||
# paid to the contractor, in money; the 1099 worksheet counts the
|
||||
# company's payments that aren't by card, and holds the unrecorded one
|
||||
# undetermined. The shape: bookspec/README.md.
|
||||
|
||||
id = "1099-and-party-totals-for-a-members-payment"
|
||||
title = "A payee's party total is its 1099 amount plus its card payments plus its payments of unknown method"
|
||||
rule = """
|
||||
A member who pays a payee for the company from their own funds, the
|
||||
company owing them for it through its financing account, leaves the
|
||||
company the payer: on the 1099 worksheet the member's own cash or check
|
||||
counts toward the payee's 1099, the member's own card is excluded (Form
|
||||
1099-K), and a payment whose method isn't recorded is undetermined. Party
|
||||
totals report what moved with each party, whoever handled the money: every
|
||||
one of those payments is paid to the payee, in money, on its date, and the
|
||||
member is paid when the company reimburses them. So the payee's party
|
||||
total paid is its 1099 amount plus what was paid by card or payment
|
||||
network plus what is undetermined; the reimbursement is paid to the
|
||||
member and pays no payee.
|
||||
"""
|
||||
status = "CHOICE"
|
||||
sources = [
|
||||
"Treas. Reg. §1.6041-1(e)(1): a person paying on another's behalf who only writes the check at its direction isn't the payor (wanderbooks docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"Treas. Reg. §1.6041-1(a)(1)(iv): a payment card transaction is reported under §6050W, not §6041 (docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"DECISION (owner, 2026-10-20): money is cash, cards, the members' financing and loans (wanderbooks rules.md B-35 item 5)",
|
||||
"DECISION D-40 (owner, 2026-10-20): payment methods; an untagged payment through financing is undetermined (rules.md B-19)",
|
||||
]
|
||||
tags = ["1099", "parties", "member-paid", "instruments", "cards"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
financing_accounts = ["2100"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Checking"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2050"
|
||||
name = "Company Visa"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2100"
|
||||
name = "Due to Members"
|
||||
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 = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.parties]]
|
||||
name = "Tobin Harlow"
|
||||
roles = ["member"]
|
||||
|
||||
[[setup.parties]]
|
||||
name = "Morgan Ellis"
|
||||
roles = ["member"]
|
||||
|
||||
[[setup.parties]]
|
||||
name = "Dana Studio"
|
||||
roles = ["vendor", "contractor"]
|
||||
|
||||
[[setup.members]]
|
||||
name = "Tobin Harlow"
|
||||
capital_account = "3000"
|
||||
share = "0.5"
|
||||
|
||||
[[setup.members]]
|
||||
name = "Morgan Ellis"
|
||||
capital_account = "3001"
|
||||
share = "0.5"
|
||||
|
||||
# The contractor's vendor record, marked for a 1099-NEC.
|
||||
[[setup.payees]]
|
||||
name = "Dana Studio"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Company Visa"
|
||||
kind = "business_card"
|
||||
account = "2050"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Tobin's checks"
|
||||
kind = "member_cash_or_check"
|
||||
account = "2100"
|
||||
owner = "Tobin Harlow"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Tobin's Visa"
|
||||
kind = "member_card"
|
||||
account = "2100"
|
||||
owner = "Tobin Harlow"
|
||||
|
||||
# 1. Tobin pays the contractor by personal check.
|
||||
[[events]]
|
||||
date = "2026-03-02"
|
||||
description = "Design work, paid by Tobin's check"
|
||||
parties = [{ party = "Dana Studio" }]
|
||||
instrument = "Tobin's checks"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1500.00" },
|
||||
{ account = "2100", side = "credit", amount = "1500.00" },
|
||||
]
|
||||
|
||||
# 2. Tobin pays on his own card.
|
||||
[[events]]
|
||||
date = "2026-04-01"
|
||||
description = "Icons, charged to Tobin's own card"
|
||||
parties = [{ party = "Dana Studio" }]
|
||||
instrument = "Tobin's Visa"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "400.00" },
|
||||
{ account = "2100", side = "credit", amount = "400.00" },
|
||||
]
|
||||
|
||||
# 3. Tobin pays; how is not recorded.
|
||||
[[events]]
|
||||
date = "2026-05-01"
|
||||
description = "Revisions, paid by Tobin"
|
||||
parties = [{ party = "Dana Studio" }]
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "300.00" },
|
||||
{ account = "2100", side = "credit", amount = "300.00" },
|
||||
]
|
||||
|
||||
# 4. Charged to the company card.
|
||||
[[events]]
|
||||
date = "2026-06-01"
|
||||
description = "Banner, on the company card"
|
||||
parties = [{ party = "Dana Studio" }]
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "200.00" },
|
||||
{ account = "2050", side = "credit", amount = "200.00" },
|
||||
]
|
||||
|
||||
# 5. The company's own check.
|
||||
[[events]]
|
||||
date = "2026-06-15"
|
||||
description = "Brochure, company check"
|
||||
parties = [{ party = "Dana Studio" }]
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "600.00" },
|
||||
{ account = "1000", side = "credit", amount = "600.00" },
|
||||
]
|
||||
|
||||
# 6. The company reimburses Tobin for events 1 to 3.
|
||||
[[events]]
|
||||
date = "2026-07-01"
|
||||
description = "Tobin reimbursed"
|
||||
parties = [{ party = "Tobin Harlow" }]
|
||||
lines = [
|
||||
{ account = "2100", side = "debit", amount = "2200.00" },
|
||||
{ account = "1000", side = "credit", amount = "2200.00" },
|
||||
]
|
||||
|
||||
[[expect]]
|
||||
query = "party_part"
|
||||
entry = 2
|
||||
party = "Dana Studio"
|
||||
values = { resolved = "400.00", direction = "paid", cash = "400.00", in_kind = "0.00" }
|
||||
|
||||
# By hand: 1,500.00 + 400.00 + 300.00 + 200.00 + 600.00 = 3,000.00, every
|
||||
# payment paid to the contractor, in money.
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Dana Studio"
|
||||
basis = "cash"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { paid = "3000.00", received = "0.00" }
|
||||
|
||||
# By hand: counts 1,500.00 (Tobin's check) + 600.00 (the company's check)
|
||||
# = 2,100.00; excluded 400.00 (Tobin's card) + 200.00 (the company card)
|
||||
# = 600.00; undetermined 300.00. 2,100.00 + 600.00 + 300.00 = 3,000.00,
|
||||
# the party total. What certainly counts, 2,100.00, is at least 2,000.00:
|
||||
# reportable.
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Dana Studio"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "reportable", threshold = "2000.00", paid = "2100.00", excluded_card = "600.00", undetermined = "300.00", not_reportable = "0.00" }
|
||||
|
||||
# The reimbursement is paid to Tobin, and pays no payee.
|
||||
[[expect]]
|
||||
query = "party_totals"
|
||||
party = "Tobin Harlow"
|
||||
basis = "cash"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { paid = "2200.00", received = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "vendor_1099_paid"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { "Dana Studio" = "2100.00" }
|
||||
@@ -0,0 +1,101 @@
|
||||
id = "1099-card-payments-are-excluded"
|
||||
title = "Payments by card are left off Form 1099-NEC, and listed"
|
||||
rule = """
|
||||
A payment made by payment card (credit, debit or stored-value) or through a
|
||||
third party payment network that section 6041 would otherwise cover is
|
||||
reported by the payment settlement entity on Form 1099-K under section 6050W,
|
||||
not by the payer on Form 1099-NEC or 1099-MISC, whoever's card it was. A
|
||||
payment by check, ACH or transfer counts toward the payee's 1099-NEC. A
|
||||
bank payment with no payment method recorded is presumed a check, ACH or
|
||||
transfer; a debit-card payment from the bank is excluded once tagged with
|
||||
the card.
|
||||
"""
|
||||
status = "AUTHORITY"
|
||||
sources = [
|
||||
"Treas. Reg. §1.6041-1(a)(1)(iv) (docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"Treas. Reg. §1.6050W-1(b)(1), (b)(3) (payment card; accepted as payment)",
|
||||
"IRS, Understanding your Form 1099-K (credit, debit or stored value cards)",
|
||||
"Instructions for Forms 1099-MISC and 1099-NEC (Rev. 12/2026), Form 1099-K",
|
||||
"DECISION D-40 (wanderbooks owner, 2026-10-20): an untagged bank payment counts",
|
||||
]
|
||||
tags = ["1099", "payment-card", "instruments"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
financing_accounts = ["2100"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2050"
|
||||
name = "Company card"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2100"
|
||||
name = "Due to Members"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Harbor Visa"
|
||||
kind = "business_card"
|
||||
account = "2050"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Harbor debit card"
|
||||
kind = "business_card"
|
||||
account = "1000"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Harbor Design LLC"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[events]]
|
||||
date = "2026-02-10"
|
||||
description = "Design work, charged to the company card"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "2500.00" },
|
||||
{ account = "2050", side = "credit", amount = "2500.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-03-10"
|
||||
description = "Design work, paid with the debit card"
|
||||
payee = "Harbor Design LLC"
|
||||
instrument = "Harbor debit card"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1200.00" },
|
||||
{ account = "1000", side = "credit", amount = "1200.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-04-10"
|
||||
description = "Design work, paid by check"
|
||||
payee = "Harbor Design LLC"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "900.00" },
|
||||
{ account = "1000", side = "credit", amount = "900.00" },
|
||||
]
|
||||
|
||||
# By hand: counts 900.00 (the check); excluded 2,500.00 + 1,200.00 =
|
||||
# 3,700.00 (the card's account, and the bank payment tagged with the debit
|
||||
# card); 900.00 < 2,000.00: no 1099 is due.
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Harbor Design LLC"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "under_threshold", threshold = "2000.00", paid = "900.00", excluded_card = "3700.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
@@ -0,0 +1,92 @@
|
||||
id = "1099-money-between-own-accounts-pays-no-one"
|
||||
title = "Paying the card bill, reimbursing a member, or paying down a loan pays no payee"
|
||||
rule = """
|
||||
A 1099 reports payments made to the payee. Money moved between the payer's
|
||||
own payment sources (its bank paying its card's balance, reimbursing a
|
||||
member who paid for it, paying down a loan's principal) pays no payee, even
|
||||
when the entry is tagged with the card issuer, the member's payee record or
|
||||
the lender: the movement out of one source is offset by the movement into
|
||||
the other.
|
||||
"""
|
||||
status = "CONVENTION"
|
||||
sources = [
|
||||
"26 U.S.C. §6041(a) (payments made to the payee: docs/spec/sources/irs-1099-thresholds.md)",
|
||||
"wanderbooks P3 review R1 (2026-10-20): netting an entry's payment buckets",
|
||||
]
|
||||
tags = ["1099", "netting"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
financing_accounts = ["2100", "2500"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2050"
|
||||
name = "Company card"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2100"
|
||||
name = "Due to Members"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2500"
|
||||
name = "Equipment loan"
|
||||
type = "liability"
|
||||
|
||||
[[setup.instruments]]
|
||||
label = "Harbor Visa"
|
||||
kind = "business_card"
|
||||
account = "2050"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Harbor Card Services"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Harbor Equipment Finance"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[events]]
|
||||
date = "2026-05-25"
|
||||
description = "Card bill paid from the bank"
|
||||
payee = "Harbor Card Services"
|
||||
lines = [
|
||||
{ account = "2050", side = "debit", amount = "1200.00" },
|
||||
{ account = "1000", side = "credit", amount = "1200.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-06-01"
|
||||
description = "Loan principal"
|
||||
payee = "Harbor Equipment Finance"
|
||||
lines = [
|
||||
{ account = "2500", side = "debit", amount = "3000.00" },
|
||||
{ account = "1000", side = "credit", amount = "3000.00" },
|
||||
]
|
||||
|
||||
# By hand: the bill: +1,200.00 out of the bank, −1,200.00 into the card's
|
||||
# account: nets to 0.00 in every bucket. The loan: +3,000.00 out of the
|
||||
# bank, −3,000.00 into the loan (a financing account): 0.00.
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Harbor Card Services"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "under_threshold", threshold = "2000.00", paid = "0.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Harbor Equipment Finance"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "under_threshold", threshold = "2000.00", paid = "0.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
@@ -0,0 +1,108 @@
|
||||
id = "1099-money-from-a-payee-is-netted-only-as-a-refund"
|
||||
title = "Money received from a payee lowers its 1099 only when it refunds what was paid"
|
||||
rule = """
|
||||
A 1099 reports the payments the payer made to the payee in the calendar
|
||||
year. Money the payee gives back of a payment (a refund crediting the
|
||||
expense, or a deposit returned) reduces what was paid. Money received from
|
||||
the payee for anything else (its payment of the payer's invoice, a sale to
|
||||
it, an asset disposed of to it, a loan from it) is not a refund of a
|
||||
payment and is not netted against the payments; it is listed beside them.
|
||||
"""
|
||||
status = "CONVENTION"
|
||||
sources = [
|
||||
"26 U.S.C. §6041(a) (payments made in the course of the trade or business: docs/spec/sources/irs-1099-thresholds.md)",
|
||||
"wanderbooks P3 review R6 (2026-10-20): a sale to a payee doesn't lower its 1099",
|
||||
]
|
||||
tags = ["1099", "netting", "refund"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1200"
|
||||
name = "Accounts Receivable"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1400"
|
||||
name = "Deposits"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "2600"
|
||||
name = "Loan payable"
|
||||
type = "liability"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Dana Studio"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[events]]
|
||||
date = "2026-02-01"
|
||||
description = "Design work"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "3000.00" },
|
||||
{ account = "1000", side = "credit", amount = "3000.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-03-01"
|
||||
description = "Dana Studio pays the company's invoice"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "1000", side = "debit", amount = "450.00" },
|
||||
{ account = "1200", side = "credit", amount = "450.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-04-01"
|
||||
description = "Dana Studio lends the company money"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "1000", side = "debit", amount = "1000.00" },
|
||||
{ account = "2600", side = "credit", amount = "1000.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-05-01"
|
||||
description = "Deposit for the next project"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "1400", side = "debit", amount = "500.00" },
|
||||
{ account = "1000", side = "credit", amount = "500.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-06-01"
|
||||
description = "Deposit returned: the project was cancelled"
|
||||
payee = "Dana Studio"
|
||||
lines = [
|
||||
{ account = "1000", side = "debit", amount = "500.00" },
|
||||
{ account = "1400", side = "credit", amount = "500.00" },
|
||||
]
|
||||
|
||||
# By hand: paid 3,000.00 + 500.00 (the deposit, paid when made) − 500.00
|
||||
# (its return, a refund) = 3,000.00: reportable. The invoice payment
|
||||
# (450.00) and the loan (1,000.00) are listed, not netted (netting them
|
||||
# would leave 1,550.00, under the threshold).
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Dana Studio"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "reportable", threshold = "2000.00", paid = "3000.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
@@ -0,0 +1,92 @@
|
||||
id = "1099-the-threshold-is-the-years"
|
||||
title = "The 1099-NEC threshold is the one in force for the year the payments were made"
|
||||
rule = """
|
||||
A payer reports payments to a payee aggregating the threshold or more in a
|
||||
calendar year: $600 for payments made through December 31, 2025, and
|
||||
$2,000 ("of $2,000 or more") for payments made after it (indexed for
|
||||
inflation for calendar years after 2026, not yet known: never guessed). The
|
||||
threshold is met at exactly the amount.
|
||||
"""
|
||||
status = "AUTHORITY"
|
||||
sources = [
|
||||
"26 U.S.C. §6041(a), (h), §6041A(a)(2) (docs/spec/sources/irs-1099-thresholds.md)",
|
||||
"Pub. L. 119-21 §70433(a), (f): \"shall apply with respect to payments made after December 31, 2025\" (docs/spec/sources/irs-1099-payment-method.md)",
|
||||
"Instructions for Forms 1099-MISC and 1099-NEC (Rev. April 2025): $600",
|
||||
]
|
||||
tags = ["1099", "threshold"]
|
||||
|
||||
[setup]
|
||||
currency = "USD"
|
||||
fiscal_year_start = "01-01"
|
||||
basis = "cash"
|
||||
rounding = "half-away-from-zero"
|
||||
cash_accounts = ["1000"]
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "1000"
|
||||
name = "Bank"
|
||||
type = "asset"
|
||||
|
||||
[[setup.accounts]]
|
||||
code = "6000"
|
||||
name = "Contract Labor"
|
||||
type = "expense"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Riley Chen"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[setup.payees]]
|
||||
name = "Cedar Studio"
|
||||
form = "1099-NEC"
|
||||
|
||||
[[events]]
|
||||
date = "2025-11-01"
|
||||
description = "Illustration"
|
||||
payee = "Riley Chen"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "600.00" },
|
||||
{ account = "1000", side = "credit", amount = "600.00" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-02-01"
|
||||
description = "Illustration"
|
||||
payee = "Riley Chen"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "1999.99" },
|
||||
{ account = "1000", side = "credit", amount = "1999.99" },
|
||||
]
|
||||
|
||||
[[events]]
|
||||
date = "2026-02-01"
|
||||
description = "Photography"
|
||||
payee = "Cedar Studio"
|
||||
lines = [
|
||||
{ account = "6000", side = "debit", amount = "2000.00" },
|
||||
{ account = "1000", side = "credit", amount = "2000.00" },
|
||||
]
|
||||
|
||||
# By hand: 2025, Riley 600.00 against $600: reportable (exactly the
|
||||
# threshold). 2026, Riley 1,999.99 against $2,000: under; Cedar 2,000.00:
|
||||
# reportable.
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Riley Chen"
|
||||
from = "2025-01-01"
|
||||
to = "2025-12-31"
|
||||
values = { status = "reportable", threshold = "600.00", paid = "600.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Riley Chen"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "under_threshold", threshold = "2000.00", paid = "1999.99", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
|
||||
[[expect]]
|
||||
query = "vendor_1099"
|
||||
payee = "Cedar Studio"
|
||||
from = "2026-01-01"
|
||||
to = "2026-12-31"
|
||||
values = { status = "reportable", threshold = "2000.00", paid = "2000.00", excluded_card = "0.00", undetermined = "0.00", not_reportable = "0.00" }
|
||||
@@ -1,7 +1,7 @@
|
||||
# P3 defect 24 and the card rule (found in review, 2026-10-21): the
|
||||
# company's cards are the liabilities whose names say "card", so a gift
|
||||
# card the company sold (deferred revenue) read as money: received when
|
||||
# sold and again when redeemed. Regression
|
||||
# P3 defect 24 and the card rule (found in review, 2026-10-21): with no
|
||||
# business card recorded, the company's cards are the liabilities whose
|
||||
# names say "card", so a gift card the company sold (deferred revenue)
|
||||
# read as money: received when sold and again when redeemed. Regression
|
||||
# test: ledger-core tests/spec_party_totals.rs
|
||||
# defect24_a_gift_card_sold_is_received_once.
|
||||
# The shape: bookspec/README.md.
|
||||
@@ -9,10 +9,12 @@
|
||||
id = "p3-party-gift-card-is-a-promise"
|
||||
title = "A gift card the company sold is a promise, not a card it pays with"
|
||||
rule = """
|
||||
The company's cards are liability accounts whose names say "card", but not
|
||||
"gift card": gift cards the company sold are revenue it owes its customers
|
||||
in service (deferred revenue), a promise. Selling one is money received
|
||||
from the buyer; redeeming it moves no money and counts nothing.
|
||||
The company's cards are the business cards its books record as payment
|
||||
methods; while they record none, the liability accounts whose names say
|
||||
"card", but not "gift card": gift cards the company sold are revenue it
|
||||
owes its customers in service (deferred revenue), a promise. Selling one
|
||||
is money received from the buyer; redeeming it moves no money and counts
|
||||
nothing.
|
||||
"""
|
||||
status = "CONVENTION"
|
||||
sources = [
|
||||
|
||||
Reference in new issue
Block a user