@companyio/expenses
v0.1.6
Published
Universal expense package for multi-tenant CompanyIO products
Readme
@companyio/expenses
Universal expense lifecycle for CompanyIO products.
Expenses owns categories, lines, approval, payments, attachments, and operational totals. Contacts owns the payee. Accounting owns journals and the ledger.
Products pass opaque sourceModule / sourceType / sourceId. This package does not know stations, stores, or campuses.
Schema source is prisma/expenses.prisma. Migration source is prisma/migrations/0001_expenses_baseline. The host copy is apps/api/prisma/migrations/20260926000800_expenses_baseline. Expenses does not connect to PostgreSQL or run migrate. This package has no CLI source, so there is no expenses init to run. The host schema already contains the expenses block. Tenant columns are main_business_id and branch_id, with no Prisma relation back to Business or Branch.
attachExpenses(app, { prisma, authenticate, getContext, books });Financial retries use expenses:recognize:{expenseId} and expenses:payment:{idempotencyKey}.
applyExternalSettlement links an existing @companyio/payments payment to an expense by id. The payment row and its journal stay in Payments and Accounting. Expenses only updates paidAmount, status, and attributes.externalSettlements. POST /expenses/:id/external-settlements exposes that call. reverseExternalSettlement removes the link and the paid amount. It does not reverse a journal. Approval posts the recognition journal through Accounting.
