@happyvertical/smrt-expenses 0.57.3 → 0.57.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/AGENTS.md +42 -3
  2. package/README.md +129 -9
  3. package/agents/financial-facts-test-matrix.md +57 -0
  4. package/agents/supplier-payable-test-matrix.md +24 -0
  5. package/dist/actions/expense-actions.d.ts +2 -0
  6. package/dist/actions/expense-actions.d.ts.map +1 -1
  7. package/dist/chunks/Expense-C_WC5VLF.js +1364 -0
  8. package/dist/chunks/Expense-C_WC5VLF.js.map +1 -0
  9. package/dist/chunks/{ExpenseReceiptCollection-y1SlmnBS.js → ExpenseReceiptCollection-BO5yvJLm.js} +2 -2
  10. package/dist/chunks/{ExpenseReceiptCollection-y1SlmnBS.js.map → ExpenseReceiptCollection-BO5yvJLm.js.map} +1 -1
  11. package/dist/chunks/{expense-actions-Ce5CBaBE.js → expense-actions-Bxzeb4s2.js} +8 -3
  12. package/dist/chunks/expense-actions-Bxzeb4s2.js.map +1 -0
  13. package/dist/collections/ExpenseCollection.d.ts +17 -1
  14. package/dist/collections/ExpenseCollection.d.ts.map +1 -1
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +43 -7
  18. package/dist/index.js.map +1 -1
  19. package/dist/manifest.json +304 -7
  20. package/dist/models/Expense.d.ts +35 -1
  21. package/dist/models/Expense.d.ts.map +1 -1
  22. package/dist/recipes.d.ts +9 -0
  23. package/dist/recipes.d.ts.map +1 -1
  24. package/dist/refund-position.d.ts +11 -0
  25. package/dist/refund-position.d.ts.map +1 -0
  26. package/dist/reimbursement-position.d.ts +20 -0
  27. package/dist/reimbursement-position.d.ts.map +1 -0
  28. package/dist/smrt-knowledge.json +267 -10
  29. package/dist/supplier-payable.d.ts +128 -0
  30. package/dist/supplier-payable.d.ts.map +1 -0
  31. package/dist/types.d.ts +46 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js.map +1 -1
  34. package/package.json +9 -9
  35. package/dist/chunks/Expense-7afLcUTn.js +0 -681
  36. package/dist/chunks/Expense-7afLcUTn.js.map +0 -1
  37. package/dist/chunks/expense-actions-Ce5CBaBE.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ /** Exact source identity and original author; author need not be a current user. */
2
+ export interface SupplierPayableSource {
3
+ namespace: string;
4
+ key: string;
5
+ version: string;
6
+ author: string | null;
7
+ }
8
+ /** Caller-reviewed evidence, independently attributed from original source authors. */
9
+ export interface SupplierPayableReview {
10
+ recordedByProfileId: string;
11
+ evidenceRef: string;
12
+ }
13
+ /** Dated ordering is explicit, including multiple events on one calendar day. */
14
+ export type SupplierPayableEventInput = {
15
+ effectiveOn: string;
16
+ sequence: number;
17
+ evidenceRef: string;
18
+ source?: SupplierPayableSource;
19
+ } & ({
20
+ kind: 'hold' | 'release' | 'settlement';
21
+ amountMinor: number;
22
+ } | {
23
+ kind: 'refund';
24
+ refundExpenseId: string;
25
+ payableReductionMinor: number;
26
+ retainedReductionMinor: number;
27
+ cashReturnedMinor: number;
28
+ });
29
+ /** Immutable original supplier payable snapshot; null basis is explicitly unknown. */
30
+ export interface RecordSupplierPayableInput extends SupplierPayableReview {
31
+ requestId: string;
32
+ currency: string;
33
+ source: SupplierPayableSource;
34
+ payableBasisMinor: number | null;
35
+ events: SupplierPayableEventInput[];
36
+ }
37
+ /** Append an evidenced current event. This records facts and never executes a payment. */
38
+ export interface RecordSupplierPayableEventInput extends SupplierPayableReview {
39
+ requestId: string;
40
+ currency: string;
41
+ event: SupplierPayableEventInput;
42
+ }
43
+ /** Complete unknown original basis once, preserving the original snapshot. */
44
+ export interface CompleteSupplierPayableBasisInput extends SupplierPayableReview {
45
+ requestId: string;
46
+ currency: string;
47
+ payableBasisMinor: number;
48
+ }
49
+ /** Concrete immutable child identity retained by the owning Expense command. */
50
+ export type SupplierPayableEvent = SupplierPayableEventInput & {
51
+ id: string;
52
+ authority: 'original' | 'current';
53
+ requestId: string;
54
+ requestFingerprint: string;
55
+ recordedByProfileId: string;
56
+ recordedAt: string;
57
+ refundFingerprint?: string;
58
+ };
59
+ /** Original and subsequent authority remain separate in public readback. */
60
+ export interface SupplierPayableState {
61
+ version: 1;
62
+ expenseId: string;
63
+ currency: string;
64
+ expenseFingerprint: string;
65
+ original: SupplierPayableReview & {
66
+ id: string;
67
+ requestId: string;
68
+ requestFingerprint: string;
69
+ source: SupplierPayableSource;
70
+ payableBasisMinor: number | null;
71
+ recordedAt: string;
72
+ };
73
+ completion: (CompleteSupplierPayableBasisInput & {
74
+ id: string;
75
+ requestFingerprint: string;
76
+ recordedAt: string;
77
+ }) | null;
78
+ events: SupplierPayableEvent[];
79
+ }
80
+ /** Position is separate from incurred expense, tax recovery and employee reimbursement. */
81
+ export interface SupplierPayablePosition {
82
+ expenseId: string;
83
+ currency: string;
84
+ asOfDate: string | null;
85
+ payableBasisMinor: number | null;
86
+ heldMinor: number;
87
+ releasedMinor: number;
88
+ retainedReductionMinor: number;
89
+ /** Recorded holds less recorded releases/reductions, before unresolved interpretation. */
90
+ recordedRetainedMinor: number;
91
+ retainedMinor: number | null;
92
+ settledMinor: number;
93
+ cashReturnedMinor: number;
94
+ netPaidMinor: number | null;
95
+ payableReductionMinor: number;
96
+ remainingPayableMinor: number | null;
97
+ unknownReasons: Array<'payable-basis-unknown' | 'refund-interpretation-required'>;
98
+ unresolvedRefundExpenseIds: string[];
99
+ authority: SupplierPayableState;
100
+ }
101
+ /** Owning model projection, not an alternative persistence API. */
102
+ export interface PayableExpense {
103
+ id?: string | null;
104
+ tenantId: string | null;
105
+ amount: number;
106
+ currency: string;
107
+ incurredOn: string;
108
+ refundOfId: string | null;
109
+ financialBreakdown: string | null;
110
+ refundRecipient: string | null;
111
+ vendorId: string | null;
112
+ costObjectType: string;
113
+ costObjectId: string;
114
+ paidBy: string;
115
+ paidByProfileId: string | null;
116
+ paidByName: string | null;
117
+ }
118
+ export declare function payableInvalid(message: string): never;
119
+ /** Stable canonical request identity; rejects non-JSON evidence rather than dropping it. */
120
+ export declare function payableDigest(value: unknown): string;
121
+ export declare function payableExpenseFingerprint(expense: PayableExpense): string;
122
+ export declare function parseSupplierPayable(stored: string | null): SupplierPayableState | null;
123
+ export declare function createSupplierPayable(expense: PayableExpense, input: RecordSupplierPayableInput, refunds: PayableExpense[]): SupplierPayableState;
124
+ export declare function appendSupplierPayableEvent(expense: PayableExpense, state: SupplierPayableState, input: RecordSupplierPayableEventInput, refunds: PayableExpense[]): SupplierPayableState;
125
+ export declare function completeSupplierPayable(expense: PayableExpense, state: SupplierPayableState, input: CompleteSupplierPayableBasisInput, refunds: PayableExpense[]): SupplierPayableState;
126
+ /** Revalidates every historical prefix, even when projecting an earlier date. */
127
+ export declare function supplierPayablePosition(expense: PayableExpense, state: SupplierPayableState, refunds: PayableExpense[], asOfDate?: string): SupplierPayablePosition;
128
+ //# sourceMappingURL=supplier-payable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supplier-payable.d.ts","sourceRoot":"","sources":["../src/supplier-payable.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -68,8 +68,50 @@ export interface ExpenseCostBasis {
68
68
  /** Subtotal plus non-recoverable tax. */
69
69
  costBasis: number;
70
70
  }
71
+ /** Exact refund capacity; cash magnitudes are positive, financial reversals signed. */
72
+ export interface ExpenseRefundPosition {
73
+ sourceId: string;
74
+ currency: string;
75
+ sourceAmount: number;
76
+ refundedAmount: number;
77
+ remainingAmount: number;
78
+ /** Every persisted linked refund reserves capacity, regardless of review state. */
79
+ refundIds: string[];
80
+ /** Null if any source/refund financial facts are unknown; never inferred zero. */
81
+ financialPosition: {
82
+ source: ExpenseFinancialBreakdown;
83
+ /** Negative cumulative reversal, with source component identities. */
84
+ refunded: ExpenseFinancialBreakdown;
85
+ remaining: ExpenseFinancialBreakdown;
86
+ } | null;
87
+ }
88
+ /** Who actually received a linked supplier refund; independent of original payer. */
89
+ export type ExpenseRefundRecipient = {
90
+ kind: 'company';
91
+ } | {
92
+ kind: 'person';
93
+ profileId: string;
94
+ } | {
95
+ kind: 'third-party';
96
+ name: string;
97
+ };
98
+ /** Cash reimbursement liability, distinct from supplier economic cost basis. */
99
+ export interface ExpenseReimbursementPosition {
100
+ sourceId: string;
101
+ currency: string;
102
+ sourceAmount: number;
103
+ personRefundAmount: number | null;
104
+ companyRefundAmount: number | null;
105
+ reimbursedAmount: number | null;
106
+ remainingAmount: number | null;
107
+ /** Separate receivable; never a negative reimbursement or automatic settlement. */
108
+ owedToCompany: number | null;
109
+ unknownReason: 'unknown-refund-recipient' | 'recipient-is-another-person' | 'unknown-third-party-recipient' | 'legacy-reimbursement-amount' | null;
110
+ }
71
111
  /** Constructor options for {@link Expense}. */
72
112
  export interface ExpenseOptions extends SmrtObjectOptions {
113
+ /** Hydration only; ordinary writes are rejected by the owning command guard. */
114
+ supplierPayableJson?: string | null;
73
115
  tenantId?: string | null;
74
116
  costObjectType?: string;
75
117
  costObjectId?: string;
@@ -92,6 +134,8 @@ export interface ExpenseOptions extends SmrtObjectOptions {
92
134
  commitmentId?: string | null;
93
135
  commitmentLineId?: string | null;
94
136
  reimbursable?: boolean;
137
+ refundRecipient?: string | null;
138
+ reimbursedAmount?: number | null;
95
139
  reimbursedAt?: Date | null;
96
140
  reimbursementReference?: string;
97
141
  }
@@ -142,6 +186,8 @@ export interface ReopenExpenseInput {
142
186
  }
143
187
  /** Arguments for `Expense.markReimbursed()`. */
144
188
  export interface MarkReimbursedInput {
189
+ /** Optional expected cash amount; must equal the full remaining claim. */
190
+ amount?: number;
145
191
  /** When the person was paid back; defaults to now. */
146
192
  at?: Date;
147
193
  /** Payroll line, payables reference, or transfer id. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["/**\n * Shared vocabulary, option shapes, and errors for smrt-expenses.\n *\n * @packageDocumentation\n */\n\nimport type { SmrtObjectOptions } from '@happyvertical/smrt-core';\nimport type { ExpenseReceipt } from './models/ExpenseReceipt.js';\n\n/**\n * Review state of an expense. Only `reviewed` expenses count toward a\n * commitment's drawdown or a cost roll-up of reviewed actuals.\n *\n * - `unreviewed` — recorded, not yet looked at (every expense starts here).\n * - `reviewed` — a reviewer accepted it as a real cost.\n * - `rejected` — a reviewer refused it (including as a duplicate).\n */\nexport type ExpenseReviewStatus = 'unreviewed' | 'reviewed' | 'rejected';\n\n/** Every {@link ExpenseReviewStatus}, in lifecycle order. */\nexport const EXPENSE_REVIEW_STATUSES: readonly ExpenseReviewStatus[] =\n Object.freeze(['unreviewed', 'reviewed', 'rejected']);\n\n/**\n * Who paid for an expense: the `company` (card, account, vendor terms) or a\n * named `person` out of pocket, or a named `third-party`. Only a person may\n * be owed an employee reimbursement.\n */\nexport type ExpensePayer = 'company' | 'person' | 'third-party';\n\n/** Every {@link ExpensePayer}. */\nexport const EXPENSE_PAYERS: readonly ExpensePayer[] = Object.freeze([\n 'company',\n 'person',\n 'third-party',\n]);\n\n/**\n * Suggested expense categories. `Expense.category` is an open string so a\n * vertical can add its own; these cover teamworks-os `JobExpense`\n * (`material | consumable | outside-service | freight | other`) plus the\n * common additions `equipment` and `travel`.\n */\nexport const SUGGESTED_EXPENSE_CATEGORIES: readonly string[] = Object.freeze([\n 'material',\n 'consumable',\n 'outside-service',\n 'freight',\n 'equipment',\n 'travel',\n 'other',\n]);\n\n/** Explicit supplier tax in signed integer minor units; no jurisdiction defaults. */\nexport interface ExpenseTaxComponent {\n /** Unique caller-defined lower-case kebab-case identifier. */\n code: string;\n /** Tax charged by the supplier, negative for a refund. */\n amount: number;\n /** Explicit recoverable portion, same sign and no larger than amount. */\n recoverableAmount: number;\n}\n\n/** Complete optional purchase facts; subtotal plus taxes must equal total. */\nexport interface ExpenseFinancialBreakdown {\n /** Exact ISO currency of the expense. */\n currency: string;\n /** Supplier amount before the explicit taxes. */\n subtotal: number;\n /** Explicit components; an empty array asserts no tax. */\n taxes: ExpenseTaxComponent[];\n /** Supplier total, exactly equal to Expense.amount. */\n total: number;\n}\n\n/** Exact retained basis; never implies customer markup or sales tax treatment. */\nexport interface ExpenseCostBasis {\n /** Currency shared by every value. */\n currency: string;\n /** Supplier subtotal. */\n subtotal: number;\n /** Sum of supplier tax components. */\n taxTotal: number;\n /** Explicit recoverable supplier tax. */\n recoverableTax: number;\n /** Supplier tax retained as cost. */\n nonRecoverableTax: number;\n /** Supplier gross total. */\n total: number;\n /** Subtotal plus non-recoverable tax. */\n costBasis: number;\n}\n\n/** Constructor options for {@link Expense}. */\nexport interface ExpenseOptions extends SmrtObjectOptions {\n tenantId?: string | null;\n costObjectType?: string;\n costObjectId?: string;\n category?: string;\n description?: string;\n amount?: number;\n currency?: string;\n /** Complete supplier facts as JSON text; absent means unknown. */\n financialBreakdown?: string | null;\n /** Required only for third-party payers. */\n paidByName?: string | null;\n /** Same-tenant/currency positive source required for a negative refund. */\n refundOfId?: string | null;\n incurredOn?: string;\n recordedAt?: Date | null;\n recordedByProfileId?: string | null;\n paidBy?: ExpensePayer;\n paidByProfileId?: string | null;\n vendorId?: string | null;\n commitmentId?: string | null;\n commitmentLineId?: string | null;\n reimbursable?: boolean;\n reimbursedAt?: Date | null;\n reimbursementReference?: string;\n}\n\n/** Constructor options for {@link ExpenseReceipt}. */\nexport interface ExpenseReceiptOptions extends SmrtObjectOptions {\n tenantId?: string | null;\n expenseId?: string;\n assetId?: string;\n uploadedByProfileId?: string | null;\n filename?: string;\n mimeType?: string;\n byteCount?: number;\n contentSha256?: string;\n}\n\n/** Arguments for `Expense.review()`. */\nexport interface ReviewExpenseInput {\n /** Profile id of the reviewer. Required: a review is always attributed. */\n reviewerProfileId: string;\n /** Optional note kept on the expense. */\n note?: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.reject()`. */\nexport interface RejectExpenseInput {\n /** Profile id of the reviewer. */\n reviewerProfileId: string;\n /** Why the expense was refused. Required. */\n reason: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.markDuplicate()`. */\nexport interface MarkDuplicateExpenseInput {\n /** Profile id of the reviewer. */\n reviewerProfileId: string;\n /** Id of the expense this one duplicates (same tenant, not itself). */\n duplicateOfId: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.reopen()`. */\nexport interface ReopenExpenseInput {\n /** Profile id of the person reopening the review. */\n reviewerProfileId: string;\n /** Optional note kept on the expense. */\n note?: string;\n}\n\n/** Arguments for `Expense.markReimbursed()`. */\nexport interface MarkReimbursedInput {\n /** When the person was paid back; defaults to now. */\n at?: Date;\n /** Payroll line, payables reference, or transfer id. */\n reference?: string;\n}\n\n/** Arguments for `ExpenseReceiptCollection.attachReceipt()`. */\nexport interface AttachReceiptInput {\n /** The expense the receipt proves. */\n expenseId: string;\n /** The smrt-assets `Asset` holding the file. */\n assetId: string;\n /** Lowercase hex SHA-256 of the file's bytes (see `computeContentSha256`). */\n contentSha256: string;\n /** Who uploaded the file. */\n uploadedByProfileId?: string | null;\n /** Original filename; defaults to the asset's name. */\n filename?: string;\n /** MIME type; defaults to the asset's MIME type. */\n mimeType?: string;\n /** Size of the file in bytes. */\n byteCount?: number;\n}\n\n/** Per-currency total. Amounts are integer minor units. */\nexport interface CurrencyTotal {\n /** Sum of `amount` in integer minor units. */\n amount: number;\n /** Number of expenses in the sum. */\n count: number;\n}\n\n/**\n * Totals keyed by ISO 4217 currency code. Amounts in different currencies\n * are never added together.\n */\nexport type CurrencyTotals = Record<string, CurrencyTotal>;\n\n/** Options for `ExpenseCollection.totalsByCurrency()`. */\nexport interface ExpenseTotalsOptions {\n /** Extra SMRT `where` filters (cost object, category, date range...). */\n where?: Record<string, unknown>;\n /**\n * Review states to include. Defaults to `['reviewed']`; expenses marked as\n * a duplicate are never included.\n */\n reviewStatuses?: readonly ExpenseReviewStatus[];\n}\n\n/** Open position of a commitment (or one of its lines). */\nexport interface CommitmentPosition {\n /** The commerce `Contract` (usually a `PurchaseOrder`) drawn down. */\n commitmentId: string;\n /** The line drawn down, when the position is for one line. */\n commitmentLineId: string | null;\n /** The commitment's currency; the only currency that draws it down. */\n currency: string;\n /** Committed amount: the contract's `totalAmount`, or the line's `amount`. */\n committed: number;\n /** Sum of reviewed, non-duplicate actuals in the commitment's currency. */\n drawn: number;\n /** `committed - drawn`, never below zero. */\n open: number;\n /** `drawn - committed` when actuals exceed the commitment, else zero. */\n overrun: number;\n /** Ids of the expenses counted in `drawn`, each exactly once. */\n countedExpenseIds: string[];\n /** Matched expenses not counted, by reason. */\n excluded: {\n unreviewed: number;\n rejected: number;\n duplicate: number;\n };\n /**\n * Reviewed actuals matched to this commitment in another currency. Shown,\n * never summed into `drawn` (expenses refuse a mismatched match on save, so\n * this only fills when a commitment's currency changes after matching).\n */\n otherCurrencies: CurrencyTotals;\n}\n\n/** A content hash attached to more than one expense. */\nexport interface DuplicateReceiptGroup {\n /** The shared SHA-256. */\n contentSha256: string;\n /** Distinct expenses carrying the file, sorted. */\n expenseIds: string[];\n /** Every receipt row carrying the file. */\n receipts: ExpenseReceipt[];\n}\n\n/** Options for `ExpenseReceiptCollection.findDuplicateReceipts()`. */\nexport interface FindDuplicateReceiptsOptions {\n /** Only report files that this expense shares with other expenses. */\n expenseId?: string;\n /** Maximum number of groups to return (default 100, at most 1,000). */\n limit?: number;\n}\n\n/** Stable error codes raised by this package. */\nexport type ExpenseErrorCode =\n | 'EXPENSE_INVALID'\n | 'EXPENSE_REVIEW_TRANSITION'\n | 'EXPENSE_REVIEW_FIELDS_LOCKED'\n | 'EXPENSE_COMMITMENT_MISMATCH'\n | 'EXPENSE_RECEIPT_INVALID'\n | 'EXPENSE_RECEIPT_DUPLICATE'\n | 'EXPENSE_IDENTITY_CONFLICT'\n | 'EXPENSE_VENDOR_MISMATCH';\n\n/**\n * Base error for this package. `code` is stable and safe to branch on.\n */\nexport class ExpenseError extends Error {\n readonly code: ExpenseErrorCode;\n\n constructor(code: ExpenseErrorCode, message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'ExpenseError';\n this.code = code;\n }\n}\n\n/**\n * Raised when the same file (same SHA-256) is attached to one expense twice.\n * The same file on two different expenses is allowed and reported by\n * `findDuplicateReceipts()` instead.\n */\nexport class DuplicateReceiptError extends ExpenseError {\n readonly expenseId: string;\n readonly contentSha256: string;\n\n constructor(\n expenseId: string,\n contentSha256: string,\n options?: ErrorOptions,\n ) {\n super(\n 'EXPENSE_RECEIPT_DUPLICATE',\n `Expense ${expenseId} already has a receipt with SHA-256 ` +\n `${contentSha256}; the same file cannot be attached twice.`,\n options,\n );\n this.name = 'DuplicateReceiptError';\n this.expenseId = expenseId;\n this.contentSha256 = contentSha256;\n }\n}\n"],"mappings":";AAoBO,IAAM,0BACX,OAAO,OAAO;CAAC;CAAc;CAAY;AAAU,CAAC;AAU/C,IAAM,iBAA0C,OAAO,OAAO;CACnE;CACA;CACA;AACF,CAAC;AAQM,IAAM,+BAAkD,OAAO,OAAO;CAC3E;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AA2OM,IAAM,eAAN,cAA2B,MAAM;CAC7B;CAET,YAAY,MAAwB,SAAiB,SAAwB;EAC3E,MAAM,SAAS,OAAO;EACtB,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;AAOO,IAAM,wBAAN,cAAoC,aAAa;CAC7C;CACA;CAET,YACE,WACA,eACA,SACA;EACA,MACE,6BACA,WAAW,UAAS,sCACf,cAAa,4CAClB,OACF;EACA,KAAK,OAAO;EACZ,KAAK,YAAY;EACjB,KAAK,gBAAgB;CACvB;AACF"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["/**\n * Shared vocabulary, option shapes, and errors for smrt-expenses.\n *\n * @packageDocumentation\n */\n\nimport type { SmrtObjectOptions } from '@happyvertical/smrt-core';\nimport type { ExpenseReceipt } from './models/ExpenseReceipt.js';\n\n/**\n * Review state of an expense. Only `reviewed` expenses count toward a\n * commitment's drawdown or a cost roll-up of reviewed actuals.\n *\n * - `unreviewed` — recorded, not yet looked at (every expense starts here).\n * - `reviewed` — a reviewer accepted it as a real cost.\n * - `rejected` — a reviewer refused it (including as a duplicate).\n */\nexport type ExpenseReviewStatus = 'unreviewed' | 'reviewed' | 'rejected';\n\n/** Every {@link ExpenseReviewStatus}, in lifecycle order. */\nexport const EXPENSE_REVIEW_STATUSES: readonly ExpenseReviewStatus[] =\n Object.freeze(['unreviewed', 'reviewed', 'rejected']);\n\n/**\n * Who paid for an expense: the `company` (card, account, vendor terms) or a\n * named `person` out of pocket, or a named `third-party`. Only a person may\n * be owed an employee reimbursement.\n */\nexport type ExpensePayer = 'company' | 'person' | 'third-party';\n\n/** Every {@link ExpensePayer}. */\nexport const EXPENSE_PAYERS: readonly ExpensePayer[] = Object.freeze([\n 'company',\n 'person',\n 'third-party',\n]);\n\n/**\n * Suggested expense categories. `Expense.category` is an open string so a\n * vertical can add its own; these cover teamworks-os `JobExpense`\n * (`material | consumable | outside-service | freight | other`) plus the\n * common additions `equipment` and `travel`.\n */\nexport const SUGGESTED_EXPENSE_CATEGORIES: readonly string[] = Object.freeze([\n 'material',\n 'consumable',\n 'outside-service',\n 'freight',\n 'equipment',\n 'travel',\n 'other',\n]);\n\n/** Explicit supplier tax in signed integer minor units; no jurisdiction defaults. */\nexport interface ExpenseTaxComponent {\n /** Unique caller-defined lower-case kebab-case identifier. */\n code: string;\n /** Tax charged by the supplier, negative for a refund. */\n amount: number;\n /** Explicit recoverable portion, same sign and no larger than amount. */\n recoverableAmount: number;\n}\n\n/** Complete optional purchase facts; subtotal plus taxes must equal total. */\nexport interface ExpenseFinancialBreakdown {\n /** Exact ISO currency of the expense. */\n currency: string;\n /** Supplier amount before the explicit taxes. */\n subtotal: number;\n /** Explicit components; an empty array asserts no tax. */\n taxes: ExpenseTaxComponent[];\n /** Supplier total, exactly equal to Expense.amount. */\n total: number;\n}\n\n/** Exact retained basis; never implies customer markup or sales tax treatment. */\nexport interface ExpenseCostBasis {\n /** Currency shared by every value. */\n currency: string;\n /** Supplier subtotal. */\n subtotal: number;\n /** Sum of supplier tax components. */\n taxTotal: number;\n /** Explicit recoverable supplier tax. */\n recoverableTax: number;\n /** Supplier tax retained as cost. */\n nonRecoverableTax: number;\n /** Supplier gross total. */\n total: number;\n /** Subtotal plus non-recoverable tax. */\n costBasis: number;\n}\n\n/** Exact refund capacity; cash magnitudes are positive, financial reversals signed. */\nexport interface ExpenseRefundPosition {\n sourceId: string;\n currency: string;\n sourceAmount: number;\n refundedAmount: number;\n remainingAmount: number;\n /** Every persisted linked refund reserves capacity, regardless of review state. */\n refundIds: string[];\n /** Null if any source/refund financial facts are unknown; never inferred zero. */\n financialPosition: {\n source: ExpenseFinancialBreakdown;\n /** Negative cumulative reversal, with source component identities. */\n refunded: ExpenseFinancialBreakdown;\n remaining: ExpenseFinancialBreakdown;\n } | null;\n}\n\n/** Who actually received a linked supplier refund; independent of original payer. */\nexport type ExpenseRefundRecipient =\n | { kind: 'company' }\n | { kind: 'person'; profileId: string }\n | { kind: 'third-party'; name: string };\n\n/** Cash reimbursement liability, distinct from supplier economic cost basis. */\nexport interface ExpenseReimbursementPosition {\n sourceId: string;\n currency: string;\n sourceAmount: number;\n personRefundAmount: number | null;\n companyRefundAmount: number | null;\n reimbursedAmount: number | null;\n remainingAmount: number | null;\n /** Separate receivable; never a negative reimbursement or automatic settlement. */\n owedToCompany: number | null;\n unknownReason:\n | 'unknown-refund-recipient'\n | 'recipient-is-another-person'\n | 'unknown-third-party-recipient'\n | 'legacy-reimbursement-amount'\n | null;\n}\n\n/** Constructor options for {@link Expense}. */\nexport interface ExpenseOptions extends SmrtObjectOptions {\n /** Hydration only; ordinary writes are rejected by the owning command guard. */\n supplierPayableJson?: string | null;\n tenantId?: string | null;\n costObjectType?: string;\n costObjectId?: string;\n category?: string;\n description?: string;\n amount?: number;\n currency?: string;\n /** Complete supplier facts as JSON text; absent means unknown. */\n financialBreakdown?: string | null;\n /** Required only for third-party payers. */\n paidByName?: string | null;\n /** Same-tenant/currency positive source required for a negative refund. */\n refundOfId?: string | null;\n incurredOn?: string;\n recordedAt?: Date | null;\n recordedByProfileId?: string | null;\n paidBy?: ExpensePayer;\n paidByProfileId?: string | null;\n vendorId?: string | null;\n commitmentId?: string | null;\n commitmentLineId?: string | null;\n reimbursable?: boolean;\n refundRecipient?: string | null;\n reimbursedAmount?: number | null;\n reimbursedAt?: Date | null;\n reimbursementReference?: string;\n}\n\n/** Constructor options for {@link ExpenseReceipt}. */\nexport interface ExpenseReceiptOptions extends SmrtObjectOptions {\n tenantId?: string | null;\n expenseId?: string;\n assetId?: string;\n uploadedByProfileId?: string | null;\n filename?: string;\n mimeType?: string;\n byteCount?: number;\n contentSha256?: string;\n}\n\n/** Arguments for `Expense.review()`. */\nexport interface ReviewExpenseInput {\n /** Profile id of the reviewer. Required: a review is always attributed. */\n reviewerProfileId: string;\n /** Optional note kept on the expense. */\n note?: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.reject()`. */\nexport interface RejectExpenseInput {\n /** Profile id of the reviewer. */\n reviewerProfileId: string;\n /** Why the expense was refused. Required. */\n reason: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.markDuplicate()`. */\nexport interface MarkDuplicateExpenseInput {\n /** Profile id of the reviewer. */\n reviewerProfileId: string;\n /** Id of the expense this one duplicates (same tenant, not itself). */\n duplicateOfId: string;\n /** Review time; defaults to now. */\n at?: Date;\n}\n\n/** Arguments for `Expense.reopen()`. */\nexport interface ReopenExpenseInput {\n /** Profile id of the person reopening the review. */\n reviewerProfileId: string;\n /** Optional note kept on the expense. */\n note?: string;\n}\n\n/** Arguments for `Expense.markReimbursed()`. */\nexport interface MarkReimbursedInput {\n /** Optional expected cash amount; must equal the full remaining claim. */\n amount?: number;\n /** When the person was paid back; defaults to now. */\n at?: Date;\n /** Payroll line, payables reference, or transfer id. */\n reference?: string;\n}\n\n/** Arguments for `ExpenseReceiptCollection.attachReceipt()`. */\nexport interface AttachReceiptInput {\n /** The expense the receipt proves. */\n expenseId: string;\n /** The smrt-assets `Asset` holding the file. */\n assetId: string;\n /** Lowercase hex SHA-256 of the file's bytes (see `computeContentSha256`). */\n contentSha256: string;\n /** Who uploaded the file. */\n uploadedByProfileId?: string | null;\n /** Original filename; defaults to the asset's name. */\n filename?: string;\n /** MIME type; defaults to the asset's MIME type. */\n mimeType?: string;\n /** Size of the file in bytes. */\n byteCount?: number;\n}\n\n/** Per-currency total. Amounts are integer minor units. */\nexport interface CurrencyTotal {\n /** Sum of `amount` in integer minor units. */\n amount: number;\n /** Number of expenses in the sum. */\n count: number;\n}\n\n/**\n * Totals keyed by ISO 4217 currency code. Amounts in different currencies\n * are never added together.\n */\nexport type CurrencyTotals = Record<string, CurrencyTotal>;\n\n/** Options for `ExpenseCollection.totalsByCurrency()`. */\nexport interface ExpenseTotalsOptions {\n /** Extra SMRT `where` filters (cost object, category, date range...). */\n where?: Record<string, unknown>;\n /**\n * Review states to include. Defaults to `['reviewed']`; expenses marked as\n * a duplicate are never included.\n */\n reviewStatuses?: readonly ExpenseReviewStatus[];\n}\n\n/** Open position of a commitment (or one of its lines). */\nexport interface CommitmentPosition {\n /** The commerce `Contract` (usually a `PurchaseOrder`) drawn down. */\n commitmentId: string;\n /** The line drawn down, when the position is for one line. */\n commitmentLineId: string | null;\n /** The commitment's currency; the only currency that draws it down. */\n currency: string;\n /** Committed amount: the contract's `totalAmount`, or the line's `amount`. */\n committed: number;\n /** Sum of reviewed, non-duplicate actuals in the commitment's currency. */\n drawn: number;\n /** `committed - drawn`, never below zero. */\n open: number;\n /** `drawn - committed` when actuals exceed the commitment, else zero. */\n overrun: number;\n /** Ids of the expenses counted in `drawn`, each exactly once. */\n countedExpenseIds: string[];\n /** Matched expenses not counted, by reason. */\n excluded: {\n unreviewed: number;\n rejected: number;\n duplicate: number;\n };\n /**\n * Reviewed actuals matched to this commitment in another currency. Shown,\n * never summed into `drawn` (expenses refuse a mismatched match on save, so\n * this only fills when a commitment's currency changes after matching).\n */\n otherCurrencies: CurrencyTotals;\n}\n\n/** A content hash attached to more than one expense. */\nexport interface DuplicateReceiptGroup {\n /** The shared SHA-256. */\n contentSha256: string;\n /** Distinct expenses carrying the file, sorted. */\n expenseIds: string[];\n /** Every receipt row carrying the file. */\n receipts: ExpenseReceipt[];\n}\n\n/** Options for `ExpenseReceiptCollection.findDuplicateReceipts()`. */\nexport interface FindDuplicateReceiptsOptions {\n /** Only report files that this expense shares with other expenses. */\n expenseId?: string;\n /** Maximum number of groups to return (default 100, at most 1,000). */\n limit?: number;\n}\n\n/** Stable error codes raised by this package. */\nexport type ExpenseErrorCode =\n | 'EXPENSE_INVALID'\n | 'EXPENSE_REVIEW_TRANSITION'\n | 'EXPENSE_REVIEW_FIELDS_LOCKED'\n | 'EXPENSE_COMMITMENT_MISMATCH'\n | 'EXPENSE_RECEIPT_INVALID'\n | 'EXPENSE_RECEIPT_DUPLICATE'\n | 'EXPENSE_IDENTITY_CONFLICT'\n | 'EXPENSE_VENDOR_MISMATCH';\n\n/**\n * Base error for this package. `code` is stable and safe to branch on.\n */\nexport class ExpenseError extends Error {\n readonly code: ExpenseErrorCode;\n\n constructor(code: ExpenseErrorCode, message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'ExpenseError';\n this.code = code;\n }\n}\n\n/**\n * Raised when the same file (same SHA-256) is attached to one expense twice.\n * The same file on two different expenses is allowed and reported by\n * `findDuplicateReceipts()` instead.\n */\nexport class DuplicateReceiptError extends ExpenseError {\n readonly expenseId: string;\n readonly contentSha256: string;\n\n constructor(\n expenseId: string,\n contentSha256: string,\n options?: ErrorOptions,\n ) {\n super(\n 'EXPENSE_RECEIPT_DUPLICATE',\n `Expense ${expenseId} already has a receipt with SHA-256 ` +\n `${contentSha256}; the same file cannot be attached twice.`,\n options,\n );\n this.name = 'DuplicateReceiptError';\n this.expenseId = expenseId;\n this.contentSha256 = contentSha256;\n }\n}\n"],"mappings":";AAoBO,IAAM,0BACX,OAAO,OAAO;CAAC;CAAc;CAAY;AAAU,CAAC;AAU/C,IAAM,iBAA0C,OAAO,OAAO;CACnE;CACA;CACA;AACF,CAAC;AAQM,IAAM,+BAAkD,OAAO,OAAO;CAC3E;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AA4RM,IAAM,eAAN,cAA2B,MAAM;CAC7B;CAET,YAAY,MAAwB,SAAiB,SAAwB;EAC3E,MAAM,SAAS,OAAO;EACtB,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;AAOO,IAAM,wBAAN,cAAoC,aAAa;CAC7C;CACA;CAET,YACE,WACA,eACA,SACA;EACA,MACE,6BACA,WAAW,UAAS,sCACf,cAAa,4CAClB,OACF;EACA,KAAK,OAAO;EACZ,KAAK,YAAY;EACjB,KAAK,gBAAgB;CACvB;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-expenses",
3
- "version": "0.57.3",
3
+ "version": "0.57.4",
4
4
  "description": "Expense records for the SMRT framework - reviewed costs against a cost object, deduplicated receipts, and commitment drawdown",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,16 +33,16 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@happyvertical/smrt-assets": "0.57.3",
37
- "@happyvertical/smrt-commerce": "0.57.3",
38
- "@happyvertical/smrt-core": "0.57.3",
39
- "@happyvertical/smrt-tenancy": "0.57.3",
40
- "@happyvertical/smrt-types": "0.57.3",
41
- "@happyvertical/smrt-ui": "0.57.3",
42
- "@happyvertical/smrt-users": "0.57.3"
36
+ "@happyvertical/smrt-assets": "0.57.4",
37
+ "@happyvertical/smrt-commerce": "0.57.4",
38
+ "@happyvertical/smrt-core": "0.57.4",
39
+ "@happyvertical/smrt-tenancy": "0.57.4",
40
+ "@happyvertical/smrt-types": "0.57.4",
41
+ "@happyvertical/smrt-ui": "0.57.4",
42
+ "@happyvertical/smrt-users": "0.57.4"
43
43
  },
44
44
  "devDependencies": {
45
- "@happyvertical/smrt-vitest": "0.57.3",
45
+ "@happyvertical/smrt-vitest": "0.57.4",
46
46
  "@types/node": "24.13.6",
47
47
  "typescript": "6.0.3",
48
48
  "vite": "8.1.4",