@voyantjs/finance 0.75.6 → 0.76.0

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.
package/dist/service.js CHANGED
@@ -17,6 +17,18 @@ export class PaymentValidationError extends Error {
17
17
  this.details = details;
18
18
  }
19
19
  }
20
+ export class InvoiceNumberAllocationError extends Error {
21
+ code;
22
+ scope;
23
+ seriesId;
24
+ constructor(code, details) {
25
+ super(code);
26
+ this.name = "InvoiceNumberAllocationError";
27
+ this.code = code;
28
+ this.scope = details.scope;
29
+ this.seriesId = details.seriesId;
30
+ }
31
+ }
20
32
  function bookingItemToInvoiceLine(item, taxes, sortOrder) {
21
33
  const quantity = Math.max(item.quantity, 1);
22
34
  const totalCents = item.totalSellAmountCents ?? (item.unitSellAmountCents ?? 0) * Math.max(item.quantity, 1);
@@ -105,6 +117,72 @@ function formatNumber(prefix, separator, padLength, sequence) {
105
117
  const padded = String(sequence).padStart(padLength, "0");
106
118
  return `${prefix}${separator}${padded}`;
107
119
  }
120
+ function invoiceScopeForType(invoiceType) {
121
+ return invoiceType === "proforma" ? "proforma" : "invoice";
122
+ }
123
+ function pendingExternalInvoiceNumber(scope) {
124
+ const uuid = globalThis.crypto?.randomUUID?.().replace(/-/g, "") ?? randomId();
125
+ return `PENDING-${scope.toUpperCase()}-${uuid.slice(0, 32)}`;
126
+ }
127
+ function randomId() {
128
+ return `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`.padEnd(32, "0");
129
+ }
130
+ async function resolveInvoiceNumberForBooking(db, data) {
131
+ const scope = invoiceScopeForType(data.invoiceType);
132
+ if (data.invoiceNumber) {
133
+ return {
134
+ invoiceNumber: data.invoiceNumber,
135
+ seriesId: data.seriesId ?? null,
136
+ sequence: null,
137
+ status: "draft",
138
+ };
139
+ }
140
+ const series = data.seriesId
141
+ ? await financeService.getInvoiceNumberSeriesById(db, data.seriesId)
142
+ : await financeService.resolveDefaultInvoiceNumberSeries(db, scope);
143
+ if (!series) {
144
+ throw new InvoiceNumberAllocationError(data.seriesId ? "invoice_number_series_not_found" : "no_active_series_for_scope", { scope, seriesId: data.seriesId });
145
+ }
146
+ if (!series.active) {
147
+ throw new InvoiceNumberAllocationError("invoice_number_series_inactive", {
148
+ scope,
149
+ seriesId: series.id,
150
+ });
151
+ }
152
+ if (series.scope !== scope) {
153
+ throw new InvoiceNumberAllocationError("invoice_number_series_scope_mismatch", {
154
+ scope,
155
+ seriesId: series.id,
156
+ });
157
+ }
158
+ if (series.externalProvider) {
159
+ return {
160
+ invoiceNumber: pendingExternalInvoiceNumber(scope),
161
+ seriesId: series.id,
162
+ sequence: null,
163
+ status: "pending_external_allocation",
164
+ };
165
+ }
166
+ const allocated = await financeService.allocateInvoiceNumber(db, series.id);
167
+ if (allocated.status === "not_found") {
168
+ throw new InvoiceNumberAllocationError("invoice_number_series_not_found", {
169
+ scope,
170
+ seriesId: series.id,
171
+ });
172
+ }
173
+ if (allocated.status === "inactive") {
174
+ throw new InvoiceNumberAllocationError("invoice_number_series_inactive", {
175
+ scope,
176
+ seriesId: series.id,
177
+ });
178
+ }
179
+ return {
180
+ invoiceNumber: allocated.formattedNumber,
181
+ seriesId: allocated.seriesId,
182
+ sequence: allocated.sequence,
183
+ status: "draft",
184
+ };
185
+ }
108
186
  export function renderInvoiceBody(body, bodyFormat, variables) {
109
187
  return renderStructuredTemplate(body, bodyFormat, variables);
110
188
  }
@@ -1846,6 +1924,7 @@ export const financeService = {
1846
1924
  },
1847
1925
  async createInvoiceFromBooking(db, data, bookingData) {
1848
1926
  const { booking, items } = bookingData;
1927
+ const numberAssignment = await resolveInvoiceNumberForBooking(db, data);
1849
1928
  const itemIds = items.map((item) => item.id);
1850
1929
  const taxes = itemIds.length === 0
1851
1930
  ? []
@@ -1907,12 +1986,14 @@ export const financeService = {
1907
1986
  const [invoice] = await tx
1908
1987
  .insert(invoices)
1909
1988
  .values({
1910
- invoiceNumber: data.invoiceNumber,
1989
+ invoiceNumber: numberAssignment.invoiceNumber,
1911
1990
  invoiceType: data.invoiceType,
1991
+ seriesId: numberAssignment.seriesId,
1992
+ sequence: numberAssignment.sequence,
1912
1993
  bookingId: booking.id,
1913
1994
  personId: booking.personId,
1914
1995
  organizationId: booking.organizationId,
1915
- status: "draft",
1996
+ status: numberAssignment.status,
1916
1997
  currency: booking.sellCurrency,
1917
1998
  baseCurrency: booking.baseCurrency,
1918
1999
  fxRateSetId: booking.fxRateSetId,
@@ -2534,36 +2615,76 @@ export const financeService = {
2534
2615
  .limit(1);
2535
2616
  return row ?? null;
2536
2617
  },
2537
- async createInvoiceNumberSeries(db, data) {
2618
+ async resolveDefaultInvoiceNumberSeries(db, scope) {
2538
2619
  const [row] = await db
2539
- .insert(invoiceNumberSeries)
2540
- .values({
2541
- code: data.code,
2542
- name: data.name,
2543
- prefix: data.prefix,
2544
- separator: data.separator,
2545
- padLength: data.padLength,
2546
- currentSequence: data.currentSequence,
2547
- resetStrategy: data.resetStrategy,
2548
- resetAt: toTimestamp(data.resetAt),
2549
- scope: data.scope,
2550
- active: data.active,
2551
- })
2552
- .returning();
2620
+ .select()
2621
+ .from(invoiceNumberSeries)
2622
+ .where(and(eq(invoiceNumberSeries.scope, scope), eq(invoiceNumberSeries.active, true)))
2623
+ .orderBy(desc(invoiceNumberSeries.isDefault), desc(invoiceNumberSeries.updatedAt), desc(invoiceNumberSeries.createdAt))
2624
+ .limit(1);
2553
2625
  return row ?? null;
2554
2626
  },
2627
+ async createInvoiceNumberSeries(db, data) {
2628
+ return db.transaction(async (tx) => {
2629
+ const isDefault = data.active === false ? false : data.isDefault;
2630
+ if (isDefault) {
2631
+ await tx
2632
+ .update(invoiceNumberSeries)
2633
+ .set({ isDefault: false, updatedAt: new Date() })
2634
+ .where(eq(invoiceNumberSeries.scope, data.scope));
2635
+ }
2636
+ const [row] = await tx
2637
+ .insert(invoiceNumberSeries)
2638
+ .values({
2639
+ code: data.code,
2640
+ name: data.name,
2641
+ prefix: data.prefix,
2642
+ separator: data.separator,
2643
+ padLength: data.padLength,
2644
+ currentSequence: data.currentSequence,
2645
+ resetStrategy: data.resetStrategy,
2646
+ resetAt: toTimestamp(data.resetAt),
2647
+ scope: data.scope,
2648
+ isDefault,
2649
+ externalProvider: data.externalProvider ?? null,
2650
+ externalConfigKey: data.externalConfigKey ?? null,
2651
+ active: data.active,
2652
+ })
2653
+ .returning();
2654
+ return row ?? null;
2655
+ });
2656
+ },
2555
2657
  async updateInvoiceNumberSeries(db, id, data) {
2556
- const { resetAt, ...rest } = data;
2557
- const [row] = await db
2558
- .update(invoiceNumberSeries)
2559
- .set({
2560
- ...rest,
2561
- ...(resetAt !== undefined ? { resetAt: toTimestamp(resetAt) } : {}),
2562
- updatedAt: new Date(),
2563
- })
2564
- .where(eq(invoiceNumberSeries.id, id))
2565
- .returning();
2566
- return row ?? null;
2658
+ return db.transaction(async (tx) => {
2659
+ const [existing] = await tx
2660
+ .select()
2661
+ .from(invoiceNumberSeries)
2662
+ .where(eq(invoiceNumberSeries.id, id))
2663
+ .limit(1);
2664
+ if (!existing)
2665
+ return null;
2666
+ const { resetAt, ...rest } = data;
2667
+ const nextScope = rest.scope ?? existing.scope;
2668
+ const nextActive = rest.active ?? existing.active;
2669
+ const nextIsDefault = nextActive === false ? false : (rest.isDefault ?? existing.isDefault);
2670
+ if (nextIsDefault) {
2671
+ await tx
2672
+ .update(invoiceNumberSeries)
2673
+ .set({ isDefault: false, updatedAt: new Date() })
2674
+ .where(and(eq(invoiceNumberSeries.scope, nextScope), ne(invoiceNumberSeries.id, id)));
2675
+ }
2676
+ const [row] = await tx
2677
+ .update(invoiceNumberSeries)
2678
+ .set({
2679
+ ...rest,
2680
+ isDefault: nextIsDefault,
2681
+ ...(resetAt !== undefined ? { resetAt: toTimestamp(resetAt) } : {}),
2682
+ updatedAt: new Date(),
2683
+ })
2684
+ .where(eq(invoiceNumberSeries.id, id))
2685
+ .returning();
2686
+ return row ?? null;
2687
+ });
2567
2688
  },
2568
2689
  async deleteInvoiceNumberSeries(db, id) {
2569
2690
  const [row] = await db
@@ -2608,6 +2729,24 @@ export const financeService = {
2608
2729
  };
2609
2730
  });
2610
2731
  },
2732
+ async applyExternalInvoiceAllocation(db, invoiceId, data) {
2733
+ const [existing] = await db.select().from(invoices).where(eq(invoices.id, invoiceId)).limit(1);
2734
+ if (!existing)
2735
+ return { status: "not_found" };
2736
+ if (existing.status !== "pending_external_allocation") {
2737
+ return { status: "not_pending_external_allocation", invoice: existing };
2738
+ }
2739
+ const [invoice] = await db
2740
+ .update(invoices)
2741
+ .set({
2742
+ invoiceNumber: data.invoiceNumber,
2743
+ status: data.status ?? "sent",
2744
+ updatedAt: new Date(),
2745
+ })
2746
+ .where(eq(invoices.id, invoiceId))
2747
+ .returning();
2748
+ return invoice ? { status: "applied", invoice } : { status: "not_found" };
2749
+ },
2611
2750
  // ============================================================================
2612
2751
  // Invoice templates
2613
2752
  // ============================================================================
@@ -100,6 +100,7 @@ export declare const insertInvoiceSchema: z.ZodObject<{
100
100
  organizationId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
101
101
  status: z.ZodDefault<z.ZodEnum<{
102
102
  draft: "draft";
103
+ pending_external_allocation: "pending_external_allocation";
103
104
  sent: "sent";
104
105
  partially_paid: "partially_paid";
105
106
  paid: "paid";
@@ -132,6 +133,7 @@ export declare const updateInvoiceSchema: z.ZodObject<{
132
133
  organizationId: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
133
134
  status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
134
135
  draft: "draft";
136
+ pending_external_allocation: "pending_external_allocation";
135
137
  sent: "sent";
136
138
  partially_paid: "partially_paid";
137
139
  paid: "paid";
@@ -174,6 +176,7 @@ export declare const invoiceListSortDirSchema: z.ZodEnum<{
174
176
  export declare const invoiceListQuerySchema: z.ZodObject<{
175
177
  status: z.ZodOptional<z.ZodEnum<{
176
178
  draft: "draft";
179
+ pending_external_allocation: "pending_external_allocation";
177
180
  sent: "sent";
178
181
  partially_paid: "partially_paid";
179
182
  paid: "paid";
@@ -206,7 +209,8 @@ export declare const invoiceListQuerySchema: z.ZodObject<{
206
209
  }, z.core.$strip>;
207
210
  export declare const invoiceFromBookingSchema: z.ZodObject<{
208
211
  bookingId: z.ZodString;
209
- invoiceNumber: z.ZodString;
212
+ invoiceNumber: z.ZodOptional<z.ZodString>;
213
+ seriesId: z.ZodOptional<z.ZodString>;
210
214
  issueDate: z.ZodString;
211
215
  dueDate: z.ZodString;
212
216
  notes: z.ZodNullable<z.ZodOptional<z.ZodString>>;
@@ -214,6 +218,12 @@ export declare const invoiceFromBookingSchema: z.ZodObject<{
214
218
  invoice: "invoice";
215
219
  proforma: "proforma";
216
220
  }>>;
221
+ wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
222
+ none: "none";
223
+ pdf: "pdf";
224
+ any: "any";
225
+ }>>>;
226
+ waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
217
227
  }, z.core.$strip>;
218
228
  export declare const insertInvoiceLineItemSchema: z.ZodObject<{
219
229
  bookingItemId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
@@ -309,6 +319,9 @@ export declare const insertInvoiceNumberSeriesSchema: z.ZodObject<{
309
319
  proforma: "proforma";
310
320
  credit_note: "credit_note";
311
321
  }>>;
322
+ isDefault: z.ZodDefault<z.ZodBoolean>;
323
+ externalProvider: z.ZodNullable<z.ZodOptional<z.ZodString>>;
324
+ externalConfigKey: z.ZodNullable<z.ZodOptional<z.ZodString>>;
312
325
  active: z.ZodDefault<z.ZodBoolean>;
313
326
  }, z.core.$strip>;
314
327
  export declare const updateInvoiceNumberSeriesSchema: z.ZodObject<{
@@ -329,6 +342,9 @@ export declare const updateInvoiceNumberSeriesSchema: z.ZodObject<{
329
342
  proforma: "proforma";
330
343
  credit_note: "credit_note";
331
344
  }>>>;
345
+ isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
346
+ externalProvider: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
347
+ externalConfigKey: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
332
348
  active: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
333
349
  }, z.core.$strip>;
334
350
  export declare const invoiceNumberSeriesListQuerySchema: z.ZodObject<{
@@ -662,6 +678,7 @@ export declare const polledInvoiceSettlementResultSchema: z.ZodObject<{
662
678
  invoiceId: z.ZodString;
663
679
  invoiceStatus: z.ZodEnum<{
664
680
  draft: "draft";
681
+ pending_external_allocation: "pending_external_allocation";
665
682
  sent: "sent";
666
683
  partially_paid: "partially_paid";
667
684
  paid: "paid";
@@ -695,6 +712,12 @@ export declare const renderInvoiceInputSchema: z.ZodObject<{
695
712
  xml: "xml";
696
713
  }>>;
697
714
  language: z.ZodNullable<z.ZodOptional<z.ZodString>>;
715
+ wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
716
+ none: "none";
717
+ pdf: "pdf";
718
+ any: "any";
719
+ }>>>;
720
+ waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
698
721
  }, z.core.$strip>;
699
722
  export declare const generateInvoiceDocumentInputSchema: z.ZodObject<{
700
723
  templateId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
@@ -705,8 +728,22 @@ export declare const generateInvoiceDocumentInputSchema: z.ZodObject<{
705
728
  xml: "xml";
706
729
  }>>;
707
730
  language: z.ZodNullable<z.ZodOptional<z.ZodString>>;
731
+ wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
732
+ none: "none";
733
+ pdf: "pdf";
734
+ any: "any";
735
+ }>>>;
736
+ waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
708
737
  replaceExisting: z.ZodDefault<z.ZodBoolean>;
709
738
  }, z.core.$strip>;
739
+ export declare const invoiceDocumentWaitQuerySchema: z.ZodObject<{
740
+ wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
741
+ none: "none";
742
+ pdf: "pdf";
743
+ any: "any";
744
+ }>>>;
745
+ waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
746
+ }, z.core.$strip>;
710
747
  export declare const generatedInvoiceDocumentResultSchema: z.ZodObject<{
711
748
  invoiceId: z.ZodString;
712
749
  renderedBodyFormat: z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"validation-billing.d.ts","sourceRoot":"","sources":["../src/validation-billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-billing.d.ts","sourceRoot":"","sources":["../src/validation-billing.ts"],"names":[],"mappings":"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"}
@@ -80,9 +80,21 @@ export const invoiceListQuerySchema = z.object({
80
80
  limit: z.coerce.number().int().min(1).max(100).default(50),
81
81
  offset: z.coerce.number().int().min(0).default(0),
82
82
  });
83
+ const invoiceDocumentWaitModeSchema = z.preprocess((value) => {
84
+ if (value === true || value === "true")
85
+ return "pdf";
86
+ if (value === false || value === "false")
87
+ return "none";
88
+ return value;
89
+ }, z.enum(["none", "pdf", "any"]));
90
+ const invoiceDocumentWaitFieldsSchema = z.object({
91
+ wait: invoiceDocumentWaitModeSchema.optional(),
92
+ waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
93
+ });
83
94
  export const invoiceFromBookingSchema = z.object({
84
95
  bookingId: z.string().min(1),
85
- invoiceNumber: z.string().min(1).max(50),
96
+ invoiceNumber: z.string().min(1).max(50).optional(),
97
+ seriesId: z.string().min(1).optional(),
86
98
  issueDate: z.string().min(1),
87
99
  dueDate: z.string().min(1),
88
100
  notes: z.string().optional().nullable(),
@@ -92,6 +104,8 @@ export const invoiceFromBookingSchema = z.object({
92
104
  * payment lands and a real invoice replaces it.
93
105
  */
94
106
  invoiceType: z.enum(["invoice", "proforma"]).default("invoice"),
107
+ wait: invoiceDocumentWaitModeSchema.optional(),
108
+ waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
95
109
  });
96
110
  const lineItemCoreSchema = z.object({
97
111
  bookingItemId: z.string().optional().nullable(),
@@ -147,6 +161,9 @@ const invoiceNumberSeriesCoreSchema = z.object({
147
161
  resetStrategy: invoiceNumberResetStrategySchema.default("never"),
148
162
  resetAt: z.string().optional().nullable(),
149
163
  scope: invoiceNumberSeriesScopeSchema.default("invoice"),
164
+ isDefault: z.boolean().default(false),
165
+ externalProvider: z.string().min(1).max(100).optional().nullable(),
166
+ externalConfigKey: z.string().min(1).max(100).optional().nullable(),
150
167
  active: z.boolean().default(true),
151
168
  });
152
169
  export const insertInvoiceNumberSeriesSchema = invoiceNumberSeriesCoreSchema;
@@ -333,10 +350,13 @@ export const renderInvoiceInputSchema = z.object({
333
350
  templateId: z.string().optional().nullable(),
334
351
  format: invoiceRenditionFormatSchema.default("pdf"),
335
352
  language: z.string().optional().nullable(),
353
+ wait: invoiceDocumentWaitModeSchema.optional(),
354
+ waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
336
355
  });
337
356
  export const generateInvoiceDocumentInputSchema = renderInvoiceInputSchema.extend({
338
357
  replaceExisting: z.boolean().default(true),
339
358
  });
359
+ export const invoiceDocumentWaitQuerySchema = invoiceDocumentWaitFieldsSchema;
340
360
  export const generatedInvoiceDocumentResultSchema = z.object({
341
361
  invoiceId: z.string(),
342
362
  renderedBodyFormat: invoiceTemplateBodyFormatSchema,
@@ -269,6 +269,7 @@ export declare const publicFinanceBookingDocumentSchema: z.ZodObject<{
269
269
  }>;
270
270
  invoiceStatus: z.ZodEnum<{
271
271
  draft: "draft";
272
+ pending_external_allocation: "pending_external_allocation";
272
273
  sent: "sent";
273
274
  partially_paid: "partially_paid";
274
275
  paid: "paid";
@@ -313,6 +314,7 @@ export declare const publicBookingFinanceDocumentsSchema: z.ZodObject<{
313
314
  }>;
314
315
  invoiceStatus: z.ZodEnum<{
315
316
  draft: "draft";
317
+ pending_external_allocation: "pending_external_allocation";
316
318
  sent: "sent";
317
319
  partially_paid: "partially_paid";
318
320
  paid: "paid";
@@ -356,6 +358,7 @@ export declare const publicFinanceDocumentLookupSchema: z.ZodObject<{
356
358
  }>;
357
359
  invoiceStatus: z.ZodEnum<{
358
360
  draft: "draft";
361
+ pending_external_allocation: "pending_external_allocation";
359
362
  sent: "sent";
360
363
  partially_paid: "partially_paid";
361
364
  paid: "paid";
@@ -1 +1 @@
1
- {"version":3,"file":"validation-public.d.ts","sourceRoot":"","sources":["../src/validation-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,8BAA8B;;;;EAAiD,CAAA;AAC5F,eAAO,MAAM,uCAAuC;;;;;;EAMlD,CAAA;AACF,eAAO,MAAM,iCAAiC;;;;;EAAyC,CAAA;AAEvF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;iBAM1C,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB1C,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;iBAMtC,CAAA;AAEF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWrC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;iBAQ7C,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;iBAWvC,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW5C,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCrC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB7C,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE5C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY5C,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG7C,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;iBA4BxC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAC/F,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAA;AACD,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAC5F,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AACpF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
1
+ {"version":3,"file":"validation-public.d.ts","sourceRoot":"","sources":["../src/validation-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,8BAA8B;;;;EAAiD,CAAA;AAC5F,eAAO,MAAM,uCAAuC;;;;;;EAMlD,CAAA;AACF,eAAO,MAAM,iCAAiC;;;;;EAAyC,CAAA;AAEvF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;iBAM1C,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB1C,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;iBAMtC,CAAA;AAEF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWrC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;iBAQ7C,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;iBAWvC,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW5C,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCrC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2B7C,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE5C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY5C,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG7C,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;iBA4BxC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAC/F,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAA;AACD,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAC5F,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AACpF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
@@ -128,7 +128,15 @@ export const publicFinanceBookingDocumentSchema = z.object({
128
128
  invoiceId: z.string(),
129
129
  invoiceNumber: z.string(),
130
130
  invoiceType: publicFinanceInvoiceTypeSchema,
131
- invoiceStatus: z.enum(["draft", "sent", "partially_paid", "paid", "overdue", "void"]),
131
+ invoiceStatus: z.enum([
132
+ "draft",
133
+ "pending_external_allocation",
134
+ "sent",
135
+ "partially_paid",
136
+ "paid",
137
+ "overdue",
138
+ "void",
139
+ ]),
132
140
  currency: z.string(),
133
141
  totalCents: z.number().int(),
134
142
  paidCents: z.number().int(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export declare const invoiceStatusSchema: z.ZodEnum<{
3
3
  draft: "draft";
4
+ pending_external_allocation: "pending_external_allocation";
4
5
  sent: "sent";
5
6
  partially_paid: "partially_paid";
6
7
  paid: "paid";
@@ -187,12 +188,13 @@ export declare const financeAggregatesQuerySchema: z.ZodObject<{
187
188
  }>>>>>;
188
189
  status: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodUnion<readonly [z.ZodEnum<{
189
190
  draft: "draft";
191
+ pending_external_allocation: "pending_external_allocation";
190
192
  sent: "sent";
191
193
  partially_paid: "partially_paid";
192
194
  paid: "paid";
193
195
  overdue: "overdue";
194
196
  void: "void";
195
- }>, z.ZodLiteral<"issued">]>>, z.ZodTransform<("draft" | "sent" | "partially_paid" | "paid" | "overdue" | "void")[], ("draft" | "sent" | "partially_paid" | "paid" | "overdue" | "void" | "issued")[]>>>>>;
197
+ }>, z.ZodLiteral<"issued">]>>, z.ZodTransform<("draft" | "pending_external_allocation" | "sent" | "partially_paid" | "paid" | "overdue" | "void")[], ("draft" | "pending_external_allocation" | "sent" | "partially_paid" | "paid" | "overdue" | "void" | "issued")[]>>>>>;
196
198
  outstandingTopLimit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
197
199
  }, z.core.$strip>;
198
200
  //# sourceMappingURL=validation-shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-shared.d.ts","sourceRoot":"","sources":["../src/validation-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;;EAO9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;;;;;;EAU9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;EAAyD,CAAA;AACzF,eAAO,MAAM,0BAA0B;;;;;;;;;EASrC,CAAA;AACF,eAAO,MAAM,8BAA8B;;;;;;;;EAQzC,CAAA;AACF,eAAO,MAAM,2BAA2B;;;;;;;;;EAStC,CAAA;AACF,eAAO,MAAM,gCAAgC;;;;;;;EAO3C,CAAA;AACF,eAAO,MAAM,6BAA6B;;;;;;EAMxC,CAAA;AACF,eAAO,MAAM,gCAAgC;;;;;;;;EAQ3C,CAAA;AACF,eAAO,MAAM,0BAA0B;;;;;;EAMrC,CAAA;AACF,eAAO,MAAM,iBAAiB;;;EAAkC,CAAA;AAChE,eAAO,MAAM,sBAAsB;;;;EAAyC,CAAA;AAC5E,eAAO,MAAM,yBAAyB;;;;;;EAMpC,CAAA;AACF,eAAO,MAAM,2BAA2B;;;;;;;EAOtC,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;;;;;EAS9B,CAAA;AACF,eAAO,MAAM,qBAAqB;;;;;;;EAOhC,CAAA;AACF,eAAO,MAAM,cAAc;;;;EAA+C,CAAA;AAC1E,eAAO,MAAM,6BAA6B;;;;;;;;EAQxC,CAAA;AACF,eAAO,MAAM,qBAAqB;;;;;EAAmD,CAAA;AACrF,eAAO,MAAM,sBAAsB;;;;;;EAA4D,CAAA;AAE/F,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;EAAoD,CAAA;AACpF,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;iBAwDvC,CAAA"}
1
+ {"version":3,"file":"validation-shared.d.ts","sourceRoot":"","sources":["../src/validation-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;;;EAQ9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;;;;;;EAU9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;EAAyD,CAAA;AACzF,eAAO,MAAM,0BAA0B;;;;;;;;;EASrC,CAAA;AACF,eAAO,MAAM,8BAA8B;;;;;;;;EAQzC,CAAA;AACF,eAAO,MAAM,2BAA2B;;;;;;;;;EAStC,CAAA;AACF,eAAO,MAAM,gCAAgC;;;;;;;EAO3C,CAAA;AACF,eAAO,MAAM,6BAA6B;;;;;;EAMxC,CAAA;AACF,eAAO,MAAM,gCAAgC;;;;;;;;EAQ3C,CAAA;AACF,eAAO,MAAM,0BAA0B;;;;;;EAMrC,CAAA;AACF,eAAO,MAAM,iBAAiB;;;EAAkC,CAAA;AAChE,eAAO,MAAM,sBAAsB;;;;EAAyC,CAAA;AAC5E,eAAO,MAAM,yBAAyB;;;;;;EAMpC,CAAA;AACF,eAAO,MAAM,2BAA2B;;;;;;;EAOtC,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;;;;;EAS9B,CAAA;AACF,eAAO,MAAM,qBAAqB;;;;;;;EAOhC,CAAA;AACF,eAAO,MAAM,cAAc;;;;EAA+C,CAAA;AAC1E,eAAO,MAAM,6BAA6B;;;;;;;;EAQxC,CAAA;AACF,eAAO,MAAM,qBAAqB;;;;;EAAmD,CAAA;AACrF,eAAO,MAAM,sBAAsB;;;;;;EAA4D,CAAA;AAE/F,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;EAAoD,CAAA;AACpF,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDvC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export const invoiceStatusSchema = z.enum([
3
3
  "draft",
4
+ "pending_external_allocation",
4
5
  "sent",
5
6
  "partially_paid",
6
7
  "paid",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/finance",
3
- "version": "0.75.6",
3
+ "version": "0.76.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -59,14 +59,14 @@
59
59
  "drizzle-orm": "^0.45.2",
60
60
  "hono": "^4.12.10",
61
61
  "zod": "^4.3.6",
62
- "@voyantjs/action-ledger": "0.75.6",
63
- "@voyantjs/bookings": "0.75.6",
64
- "@voyantjs/core": "0.75.6",
65
- "@voyantjs/db": "0.75.6",
66
- "@voyantjs/hono": "0.75.6",
67
- "@voyantjs/products": "0.75.6",
68
- "@voyantjs/utils": "0.75.6",
69
- "@voyantjs/storage": "0.75.6"
62
+ "@voyantjs/action-ledger": "0.76.0",
63
+ "@voyantjs/bookings": "0.76.0",
64
+ "@voyantjs/core": "0.76.0",
65
+ "@voyantjs/db": "0.76.0",
66
+ "@voyantjs/hono": "0.76.0",
67
+ "@voyantjs/products": "0.76.0",
68
+ "@voyantjs/utils": "0.76.0",
69
+ "@voyantjs/storage": "0.76.0"
70
70
  },
71
71
  "devDependencies": {
72
72
  "typescript": "^6.0.2",