Record O9 decision: expense materials at purchase (periodic inventory)

Owner decision: this is a service business that uses materials to deliver a service
rather than selling inventory, so powder/consumables are expensed at purchase (bill
to a COGS/expense account) and inventory is not capitalized on the Balance Sheet.

No code change required — the Balance Sheet already behaves this way, and the
perpetual consumption-COGS path (O6) is opt-in via item account mappings (set only
via CSV import) and stays dormant under this policy. Documents the double-count
footgun (do not both expense at purchase and map item COGS/Inventory accounts) and
locks the periodic choice into the ledger-refactor plan's Phase 5.

All accounting audit findings O1-O9 now resolved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 21:37:43 -04:00
parent 012f4d9a3e
commit 57ec3ed127
2 changed files with 24 additions and 16 deletions
+6 -3
View File
@@ -83,9 +83,12 @@ contra-revenue — all disappear because they are simply journal lines.
against the old numbers using the snapshot harness below.
- **Phase 4** — post conversion-balance JEs at the cutover date; delete the dead re-derivation code
(~1,000+ lines).
- **Phase 5** — decide **O9** (perpetual vs periodic inventory) and implement it as JE postings. Perpetual
falls out naturally: purchases DR Inventory, consumption DR COGS / CR Inventory (O6 already posts the
consumption half). This makes the Balance Sheet inventory line consistent with the Trial Balance / P&L.
- **Phase 5** — **O9 is already decided: expense at purchase (periodic).** Materials are used to deliver a
service, not sold, so they are expensed when purchased (bill → COGS/expense account); inventory is **not**
capitalized on the Balance Sheet. In the refactor, post material purchases as `DR COGS / CR AP` (expense
immediately) and do **not** emit a separate consumption JE. The opt-in perpetual path (item
`CogsAccountId` + `InventoryAccountId`) stays unused under this policy — keep those mappings empty to avoid
double-counting. No perpetual inventory asset/relief postings.
## Prerequisites before starting