@ic-labs/invoice-kit 0.1.1

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +552 -0
  3. package/dist/core/document.d.ts +8 -0
  4. package/dist/core/document.d.ts.map +1 -0
  5. package/dist/core/document.js +22 -0
  6. package/dist/core/document.js.map +1 -0
  7. package/dist/core/factories.d.ts +7 -0
  8. package/dist/core/factories.d.ts.map +1 -0
  9. package/dist/core/factories.js +44 -0
  10. package/dist/core/factories.js.map +1 -0
  11. package/dist/core/types.d.ts +141 -0
  12. package/dist/core/types.d.ts.map +1 -0
  13. package/dist/core/types.js +2 -0
  14. package/dist/core/types.js.map +1 -0
  15. package/dist/core/validation.d.ts +3 -0
  16. package/dist/core/validation.d.ts.map +1 -0
  17. package/dist/core/validation.js +95 -0
  18. package/dist/core/validation.js.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/locales/ar.d.ts +3 -0
  24. package/dist/locales/ar.d.ts.map +1 -0
  25. package/dist/locales/ar.js +31 -0
  26. package/dist/locales/ar.js.map +1 -0
  27. package/dist/locales/fr.d.ts +3 -0
  28. package/dist/locales/fr.d.ts.map +1 -0
  29. package/dist/locales/fr.js +31 -0
  30. package/dist/locales/fr.js.map +1 -0
  31. package/dist/locales/index.d.ts +3 -0
  32. package/dist/locales/index.d.ts.map +1 -0
  33. package/dist/locales/index.js +8 -0
  34. package/dist/locales/index.js.map +1 -0
  35. package/dist/renderers/pdf.d.ts +3 -0
  36. package/dist/renderers/pdf.d.ts.map +1 -0
  37. package/dist/renderers/pdf.js +337 -0
  38. package/dist/renderers/pdf.js.map +1 -0
  39. package/dist/templates/definitions.d.ts +3 -0
  40. package/dist/templates/definitions.d.ts.map +1 -0
  41. package/dist/templates/definitions.js +12 -0
  42. package/dist/templates/definitions.js.map +1 -0
  43. package/dist/templates/delivery-note.d.ts +3 -0
  44. package/dist/templates/delivery-note.d.ts.map +1 -0
  45. package/dist/templates/delivery-note.js +11 -0
  46. package/dist/templates/delivery-note.js.map +1 -0
  47. package/dist/templates/invoice.d.ts +3 -0
  48. package/dist/templates/invoice.d.ts.map +1 -0
  49. package/dist/templates/invoice.js +11 -0
  50. package/dist/templates/invoice.js.map +1 -0
  51. package/dist/templates/purchase-order.d.ts +3 -0
  52. package/dist/templates/purchase-order.d.ts.map +1 -0
  53. package/dist/templates/purchase-order.js +11 -0
  54. package/dist/templates/purchase-order.js.map +1 -0
  55. package/dist/templates/quote.d.ts +3 -0
  56. package/dist/templates/quote.d.ts.map +1 -0
  57. package/dist/templates/quote.js +11 -0
  58. package/dist/templates/quote.js.map +1 -0
  59. package/dist/utils/formatting.d.ts +4 -0
  60. package/dist/utils/formatting.d.ts.map +1 -0
  61. package/dist/utils/formatting.js +18 -0
  62. package/dist/utils/formatting.js.map +1 -0
  63. package/dist/utils/math.d.ts +3 -0
  64. package/dist/utils/math.d.ts.map +1 -0
  65. package/dist/utils/math.js +14 -0
  66. package/dist/utils/math.js.map +1 -0
  67. package/dist/utils/taxes.d.ts +5 -0
  68. package/dist/utils/taxes.d.ts.map +1 -0
  69. package/dist/utils/taxes.js +44 -0
  70. package/dist/utils/taxes.js.map +1 -0
  71. package/package.json +58 -0
@@ -0,0 +1,337 @@
1
+ import PDFDocument from "pdfkit";
2
+ import { getLabels } from "../locales/index.js";
3
+ import { formatDate, formatMoney } from "../utils/formatting.js";
4
+ const PAGE = {
5
+ margin: 48,
6
+ width: 595.28,
7
+ height: 841.89,
8
+ footerOffset: 64,
9
+ headerTop: 48,
10
+ lineGap: 14
11
+ };
12
+ const collectPdf = async (doc) => new Promise((resolve, reject) => {
13
+ const chunks = [];
14
+ doc.on("data", (chunk) => {
15
+ chunks.push(chunk);
16
+ });
17
+ doc.on("end", () => {
18
+ resolve(new Uint8Array(Buffer.concat(chunks)));
19
+ });
20
+ doc.on("error", reject);
21
+ });
22
+ const isPngBuffer = (buffer) => buffer.length >= 8
23
+ && buffer[0] === 0x89
24
+ && buffer[1] === 0x50
25
+ && buffer[2] === 0x4e
26
+ && buffer[3] === 0x47;
27
+ const isJpegBuffer = (buffer) => buffer.length >= 3
28
+ && buffer[0] === 0xff
29
+ && buffer[1] === 0xd8
30
+ && buffer[2] === 0xff;
31
+ const fetchLogo = async (logoUrl) => {
32
+ const response = await fetch(logoUrl);
33
+ if (!response.ok) {
34
+ throw new Error(`Unable to fetch logo from ${logoUrl}: ${response.status} ${response.statusText}`);
35
+ }
36
+ const arrayBuffer = await response.arrayBuffer();
37
+ const buffer = Buffer.from(arrayBuffer);
38
+ if (isPngBuffer(buffer) || isJpegBuffer(buffer)) {
39
+ return buffer;
40
+ }
41
+ throw new Error(`Unsupported logo format at ${logoUrl}. Remote logos currently support PNG and JPEG only.`);
42
+ };
43
+ const useFont = (doc, fontPath, fallback) => {
44
+ if (fontPath) {
45
+ doc.font(fontPath);
46
+ return;
47
+ }
48
+ doc.font(fallback);
49
+ };
50
+ const requireArabicFontsIfNeeded = (document, options) => {
51
+ if (document.locale !== "ar-MA") {
52
+ return;
53
+ }
54
+ if (!options?.fonts?.regular || !options.fonts.bold) {
55
+ throw new Error("Arabic PDF rendering requires options.fonts.regular and options.fonts.bold pointing to Arabic-capable TTF/OTF font files.");
56
+ }
57
+ };
58
+ const truncateText = (doc, value, width) => {
59
+ if (doc.widthOfString(value) <= width) {
60
+ return value;
61
+ }
62
+ let truncated = value;
63
+ while (truncated.length > 0 && doc.widthOfString(`${truncated}...`) > width) {
64
+ truncated = truncated.slice(0, -1);
65
+ }
66
+ return truncated.length > 0 ? `${truncated}...` : "...";
67
+ };
68
+ const drawFixedText = (doc, text, x, y, options) => {
69
+ const previousX = doc.x;
70
+ const previousY = doc.y;
71
+ doc.x = x;
72
+ doc.y = y;
73
+ doc.text(text, x, y, options);
74
+ doc.x = previousX;
75
+ doc.y = previousY;
76
+ return y + doc.heightOfString(text, options);
77
+ };
78
+ const ensureSectionSpace = (doc, y, requiredHeight) => {
79
+ const contentBottom = PAGE.height - PAGE.margin - 8;
80
+ if (y + requiredHeight <= contentBottom) {
81
+ return y;
82
+ }
83
+ doc.addPage();
84
+ return PAGE.margin;
85
+ };
86
+ const drawLabelValue = (doc, x, y, label, value, width, align) => {
87
+ doc.fillColor("#1b2430").fontSize(10);
88
+ return drawFixedText(doc, `${label}: ${value}`, x, y, { width, align });
89
+ };
90
+ const buildSellerLines = (document, labels) => [
91
+ ...document.seller.addressLines,
92
+ [document.seller.city, document.seller.country].filter(Boolean).join(", "),
93
+ document.seller.phone ? `Tel: ${document.seller.phone}` : "",
94
+ document.seller.email ? `Email: ${document.seller.email}` : "",
95
+ document.seller.taxId ? `Tax ID: ${document.seller.taxId}` : "",
96
+ document.seller.ice ? `${labels.ice}: ${document.seller.ice}` : "",
97
+ document.seller.if ? `${labels.if}: ${document.seller.if}` : "",
98
+ document.seller.rc ? `${labels.rc}: ${document.seller.rc}` : ""
99
+ ].filter((line) => line.length > 0);
100
+ const buildClientLines = (document) => [
101
+ document.client.name,
102
+ ...document.client.addressLines,
103
+ [document.client.city, document.client.country].filter(Boolean).join(", "),
104
+ document.client.phone ? `Tel: ${document.client.phone}` : "",
105
+ document.client.email ? `Email: ${document.client.email}` : "",
106
+ document.client.taxId ? `Tax ID: ${document.client.taxId}` : ""
107
+ ].filter((line) => line.length > 0);
108
+ const buildBankLines = (bankInfo, labels) => {
109
+ const baseLines = [
110
+ `${labels.bankName}: ${bankInfo.bankName}`,
111
+ `${labels.holderName}: ${bankInfo.holderName}`
112
+ ];
113
+ if (bankInfo.type === "local") {
114
+ return [...baseLines, `${labels.rib}: ${bankInfo.rib}`];
115
+ }
116
+ return [...baseLines, `${labels.swiftCode}: ${bankInfo.swiftCode}`, `${labels.iban}: ${bankInfo.iban}`];
117
+ };
118
+ export const renderDocumentPdf = async (document, options) => {
119
+ requireArabicFontsIfNeeded(document, options);
120
+ const labels = getLabels(document.locale);
121
+ const isArabic = document.locale === "ar-MA";
122
+ const isDeliveryNote = document.type === "deliveryNote";
123
+ const align = isArabic ? "right" : "left";
124
+ const leftColumnX = PAGE.margin;
125
+ const rightColumnX = PAGE.margin + 275;
126
+ const columnWidth = 224;
127
+ const tableX = PAGE.margin;
128
+ const tableWidth = PAGE.width - PAGE.margin * 2;
129
+ // pdfkit is chosen because it stays lightweight while supporting custom TTF/OTF fonts,
130
+ // which is necessary for Arabic-capable PDF output in a Node-only library.
131
+ const doc = new PDFDocument({
132
+ size: "A4",
133
+ margin: PAGE.margin,
134
+ info: {
135
+ Title: `${document.title} ${document.number}`,
136
+ Author: document.seller.name,
137
+ Subject: document.title,
138
+ Keywords: `${document.type}, morocco, @ic-labs/invoice-kit`
139
+ }
140
+ });
141
+ const pdfBytesPromise = collectPdf(doc);
142
+ const logoBuffer = document.logo ? await fetchLogo(document.logo) : null;
143
+ if (logoBuffer) {
144
+ doc.image(logoBuffer, leftColumnX, PAGE.headerTop, {
145
+ fit: [72, 72]
146
+ });
147
+ }
148
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
149
+ doc.fillColor("#173d73").fontSize(18);
150
+ drawFixedText(doc, document.seller.name, leftColumnX + (logoBuffer ? 84 : 0), PAGE.headerTop, {
151
+ width: logoBuffer ? 156 : 240,
152
+ align
153
+ });
154
+ const sellerLines = buildSellerLines(document, labels);
155
+ const clientLines = buildClientLines(document);
156
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
157
+ doc.fillColor("#111827").fontSize(22);
158
+ const titleBottomY = drawFixedText(doc, document.title, rightColumnX, PAGE.headerTop, {
159
+ width: columnWidth,
160
+ align,
161
+ lineBreak: true
162
+ });
163
+ useFont(doc, options?.fonts?.regular, "Helvetica");
164
+ doc.fillColor("#4b5563").fontSize(10);
165
+ drawFixedText(doc, `${labels.number}: ${document.number}`, rightColumnX, titleBottomY + 6, {
166
+ width: columnWidth,
167
+ align
168
+ });
169
+ const headerBottomY = Math.max(titleBottomY + 22, PAGE.headerTop + 28);
170
+ const sectionsTopY = headerBottomY + 28;
171
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
172
+ doc.fillColor("#6b7280").fontSize(11);
173
+ drawFixedText(doc, labels.seller, leftColumnX, sectionsTopY, { width: columnWidth, align });
174
+ drawFixedText(doc, labels.client, rightColumnX, sectionsTopY, { width: columnWidth, align });
175
+ useFont(doc, options?.fonts?.regular, "Helvetica");
176
+ doc.fillColor("#111827").fontSize(10);
177
+ const sellerBottomY = drawFixedText(doc, [document.seller.name, ...sellerLines].join("\n"), leftColumnX, sectionsTopY + 18, {
178
+ width: columnWidth,
179
+ align,
180
+ lineGap: 2
181
+ });
182
+ const clientBottomY = drawFixedText(doc, clientLines.join("\n"), rightColumnX, sectionsTopY + 18, {
183
+ width: columnWidth,
184
+ align,
185
+ lineGap: 2
186
+ });
187
+ let y = Math.max(sellerBottomY, clientBottomY) + 20;
188
+ doc
189
+ .lineWidth(1)
190
+ .strokeColor("#d1d5db")
191
+ .rect(PAGE.margin, y, tableWidth, 44)
192
+ .stroke();
193
+ useFont(doc, options?.fonts?.regular, "Helvetica");
194
+ drawLabelValue(doc, PAGE.margin + 12, y + 14, labels.issueDate, formatDate(document.issueDate, document.locale), 145, align);
195
+ if (document.dueDate) {
196
+ drawLabelValue(doc, PAGE.margin + 170, y + 14, labels.dueDate, formatDate(document.dueDate, document.locale), 145, align);
197
+ }
198
+ if (!isDeliveryNote) {
199
+ drawLabelValue(doc, PAGE.margin + 328, y + 14, labels.currency, document.currency, 110, align);
200
+ }
201
+ y += 68;
202
+ if (!isDeliveryNote && document.bankInfo) {
203
+ const bankLines = buildBankLines(document.bankInfo, labels);
204
+ const bankHeight = 14 + doc.heightOfString(bankLines.join("\n"), { width: 270, align, lineGap: 2 }) + 18;
205
+ y = ensureSectionSpace(doc, y, bankHeight);
206
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
207
+ doc.fillColor("#6b7280").fontSize(10);
208
+ drawFixedText(doc, labels.bankDetails, leftColumnX, y, { width: 240, align });
209
+ useFont(doc, options?.fonts?.regular, "Helvetica");
210
+ doc.fillColor("#111827").fontSize(10);
211
+ y = drawFixedText(doc, bankLines.join("\n"), leftColumnX, y + 14, { width: 270, align, lineGap: 2 }) + 18;
212
+ }
213
+ doc.fillColor("#173d73").rect(tableX, y, tableWidth, 24).fill();
214
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
215
+ if (isDeliveryNote) {
216
+ const columns = {
217
+ itemX: tableX + 12,
218
+ itemWidth: 350,
219
+ quantityX: tableX + 400,
220
+ quantityWidth: 50
221
+ };
222
+ doc.fillColor("white").fontSize(10);
223
+ drawFixedText(doc, labels.item, columns.itemX, y + 7, { width: columns.itemWidth, align });
224
+ drawFixedText(doc, labels.quantity, columns.quantityX, y + 7, { width: columns.quantityWidth, align: "right" });
225
+ y += 24;
226
+ useFont(doc, options?.fonts?.regular, "Helvetica");
227
+ for (const item of document.items) {
228
+ doc.strokeColor("#d1d5db").lineWidth(1).rect(tableX, y, tableWidth, 26).stroke();
229
+ const itemLabel = item.description ? `${item.name} - ${item.description}` : item.name;
230
+ doc.fillColor("#111827").fontSize(10);
231
+ drawFixedText(doc, truncateText(doc, itemLabel, columns.itemWidth), columns.itemX, y + 8, {
232
+ width: columns.itemWidth,
233
+ align
234
+ });
235
+ drawFixedText(doc, `${item.quantity}${item.unit ? ` ${item.unit}` : ""}`, columns.quantityX, y + 8, {
236
+ width: columns.quantityWidth,
237
+ align: "right"
238
+ });
239
+ y += 26;
240
+ }
241
+ }
242
+ else {
243
+ const columns = {
244
+ itemX: tableX + 12,
245
+ itemWidth: 220,
246
+ quantityX: tableX + 240,
247
+ quantityWidth: 45,
248
+ unitPriceX: tableX + 300,
249
+ unitPriceWidth: 78,
250
+ amountX: tableX + 392,
251
+ amountWidth: 95
252
+ };
253
+ doc.fillColor("white").fontSize(10);
254
+ drawFixedText(doc, labels.item, columns.itemX, y + 7, { width: columns.itemWidth, align });
255
+ drawFixedText(doc, labels.quantity, columns.quantityX, y + 7, { width: columns.quantityWidth, align: "right" });
256
+ drawFixedText(doc, labels.unitPrice, columns.unitPriceX, y + 7, { width: columns.unitPriceWidth, align: "right" });
257
+ drawFixedText(doc, labels.amount, columns.amountX, y + 7, { width: columns.amountWidth, align: "right" });
258
+ y += 24;
259
+ useFont(doc, options?.fonts?.regular, "Helvetica");
260
+ for (const item of document.items) {
261
+ doc.strokeColor("#d1d5db").lineWidth(1).rect(tableX, y, tableWidth, 26).stroke();
262
+ const itemLabel = item.description ? `${item.name} - ${item.description}` : item.name;
263
+ doc.fillColor("#111827").fontSize(10);
264
+ drawFixedText(doc, truncateText(doc, itemLabel, columns.itemWidth), columns.itemX, y + 8, {
265
+ width: columns.itemWidth,
266
+ align
267
+ });
268
+ drawFixedText(doc, `${item.quantity}${item.unit ? ` ${item.unit}` : ""}`, columns.quantityX, y + 8, {
269
+ width: columns.quantityWidth,
270
+ align: "right"
271
+ });
272
+ drawFixedText(doc, truncateText(doc, formatMoney(item.unitPrice, document.locale, document.currency), columns.unitPriceWidth), columns.unitPriceX, y + 8, {
273
+ width: columns.unitPriceWidth,
274
+ align: "right"
275
+ });
276
+ drawFixedText(doc, truncateText(doc, formatMoney(item.lineTotal, document.locale, document.currency), columns.amountWidth), columns.amountX, y + 8, {
277
+ width: columns.amountWidth,
278
+ align: "right"
279
+ });
280
+ y += 26;
281
+ }
282
+ }
283
+ const notes = [];
284
+ if (!isDeliveryNote && document.paymentTerms?.label) {
285
+ notes.push(`${labels.paymentTerms}: ${document.paymentTerms.label}`);
286
+ }
287
+ if (!isDeliveryNote && document.paymentTerms?.notes) {
288
+ notes.push(document.paymentTerms.notes);
289
+ }
290
+ if (document.notes) {
291
+ notes.push(`${labels.notes}: ${document.notes}`);
292
+ }
293
+ if (!isDeliveryNote) {
294
+ const notesHeight = notes.length > 0
295
+ ? 24 + 16 + doc.heightOfString(notes.join("\n"), { width: tableWidth, align, lineGap: 2 }) + 12
296
+ : 0;
297
+ y = ensureSectionSpace(doc, y + 12, (24 * 5) + 12 + notesHeight) - 12;
298
+ const totalsX = PAGE.width - PAGE.margin - 220;
299
+ const totals = [
300
+ [labels.subtotal, formatMoney(document.totals.subtotal, document.locale, document.currency)],
301
+ [labels.discount, formatMoney(document.totals.discountTotal, document.locale, document.currency)],
302
+ [labels.taxableBase, formatMoney(document.totals.taxableBase, document.locale, document.currency)],
303
+ [`${labels.vat} (${(document.vatRate * 100).toFixed(0)}%)`, formatMoney(document.totals.vatAmount, document.locale, document.currency)],
304
+ [labels.total, formatMoney(document.totals.total, document.locale, document.currency)]
305
+ ];
306
+ y += 12;
307
+ totals.forEach(([label, value], index) => {
308
+ const isTotal = index === totals.length - 1;
309
+ doc.fillColor(isTotal ? "#173d73" : "white").rect(totalsX, y, 220, 24).fill();
310
+ doc.strokeColor("#d1d5db").lineWidth(1).rect(totalsX, y, 220, 24).stroke();
311
+ useFont(doc, isTotal ? options?.fonts?.bold : options?.fonts?.regular, isTotal ? "Helvetica-Bold" : "Helvetica");
312
+ doc.fillColor(isTotal ? "white" : "#111827").fontSize(10);
313
+ drawFixedText(doc, label, totalsX + 10, y + 7, { width: 105, align: "left" });
314
+ drawFixedText(doc, truncateText(doc, value, 85), totalsX + 125, y + 7, { width: 85, align: "right" });
315
+ y += 24;
316
+ });
317
+ }
318
+ if (notes.length > 0) {
319
+ y += 24;
320
+ useFont(doc, options?.fonts?.bold, "Helvetica-Bold");
321
+ doc.fillColor("#6b7280").fontSize(11);
322
+ drawFixedText(doc, labels.notes, PAGE.margin, y, { width: tableWidth, align });
323
+ useFont(doc, options?.fonts?.regular, "Helvetica");
324
+ doc.fillColor("#111827").fontSize(10);
325
+ drawFixedText(doc, notes.join("\n"), PAGE.margin, y + 16, { width: tableWidth, align, lineGap: 2 });
326
+ }
327
+ useFont(doc, options?.fonts?.regular, "Helvetica");
328
+ const actualPageHeight = doc.page.height ?? 841.89;
329
+ doc.fillColor("#9ca3af").fontSize(8);
330
+ drawFixedText(doc, `${document.title} ${document.number}`, PAGE.margin, actualPageHeight - PAGE.footerOffset, {
331
+ width: tableWidth,
332
+ align: isArabic ? "right" : "left"
333
+ });
334
+ doc.end();
335
+ return pdfBytesPromise;
336
+ };
337
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/renderers/pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DocumentType, TemplateDefinition } from "../core/types.js";
2
+ export declare const createTemplateDefinition: (type: DocumentType) => TemplateDefinition;
3
+ //# sourceMappingURL=definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/templates/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAazE,eAAO,MAAM,wBAAwB,GAAI,MAAM,YAAY,KAAG,kBAAqC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { deliveryNoteTemplate } from "./delivery-note.js";
2
+ import { invoiceTemplate } from "./invoice.js";
3
+ import { purchaseOrderTemplate } from "./purchase-order.js";
4
+ import { quoteTemplate } from "./quote.js";
5
+ const templates = {
6
+ invoice: invoiceTemplate,
7
+ quote: quoteTemplate,
8
+ purchaseOrder: purchaseOrderTemplate,
9
+ deliveryNote: deliveryNoteTemplate
10
+ };
11
+ export const createTemplateDefinition = (type) => templates[type];
12
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/templates/definitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,SAAS,GAA6C;IAC1D,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;IACpB,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,oBAAoB;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAkB,EAAsB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateDefinition } from "../core/types.js";
2
+ export declare const deliveryNoteTemplate: TemplateDefinition;
3
+ //# sourceMappingURL=delivery-note.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-note.d.ts","sourceRoot":"","sources":["../../src/templates/delivery-note.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,eAAO,MAAM,oBAAoB,EAAE,kBAKlC,CAAC"}
@@ -0,0 +1,11 @@
1
+ const titles = {
2
+ "fr-MA": "Bon de livraison",
3
+ "ar-MA": "وصل تسليم"
4
+ };
5
+ export const deliveryNoteTemplate = {
6
+ type: "deliveryNote",
7
+ getTitle(locale) {
8
+ return titles[locale];
9
+ }
10
+ };
11
+ //# sourceMappingURL=delivery-note.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-note.js","sourceRoot":"","sources":["../../src/templates/delivery-note.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA+B;IACzC,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,WAAW;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,IAAI,EAAE,cAAc;IACpB,QAAQ,CAAC,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateDefinition } from "../core/types.js";
2
+ export declare const invoiceTemplate: TemplateDefinition;
3
+ //# sourceMappingURL=invoice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/templates/invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,eAAO,MAAM,eAAe,EAAE,kBAK7B,CAAC"}
@@ -0,0 +1,11 @@
1
+ const titles = {
2
+ "fr-MA": "Facture",
3
+ "ar-MA": "فاتورة"
4
+ };
5
+ export const invoiceTemplate = {
6
+ type: "invoice",
7
+ getTitle(locale) {
8
+ return titles[locale];
9
+ }
10
+ };
11
+ //# sourceMappingURL=invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/templates/invoice.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA+B;IACzC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,IAAI,EAAE,SAAS;IACf,QAAQ,CAAC,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateDefinition } from "../core/types.js";
2
+ export declare const purchaseOrderTemplate: TemplateDefinition;
3
+ //# sourceMappingURL=purchase-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase-order.d.ts","sourceRoot":"","sources":["../../src/templates/purchase-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,eAAO,MAAM,qBAAqB,EAAE,kBAKnC,CAAC"}
@@ -0,0 +1,11 @@
1
+ const titles = {
2
+ "fr-MA": "Bon de commande",
3
+ "ar-MA": "طلب شراء"
4
+ };
5
+ export const purchaseOrderTemplate = {
6
+ type: "purchaseOrder",
7
+ getTitle(locale) {
8
+ return titles[locale];
9
+ }
10
+ };
11
+ //# sourceMappingURL=purchase-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase-order.js","sourceRoot":"","sources":["../../src/templates/purchase-order.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA+B;IACzC,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,IAAI,EAAE,eAAe;IACrB,QAAQ,CAAC,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateDefinition } from "../core/types.js";
2
+ export declare const quoteTemplate: TemplateDefinition;
3
+ //# sourceMappingURL=quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../src/templates/quote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,eAAO,MAAM,aAAa,EAAE,kBAK3B,CAAC"}
@@ -0,0 +1,11 @@
1
+ const titles = {
2
+ "fr-MA": "Devis",
3
+ "ar-MA": "عرض سعر"
4
+ };
5
+ export const quoteTemplate = {
6
+ type: "quote",
7
+ getTitle(locale) {
8
+ return titles[locale];
9
+ }
10
+ };
11
+ //# sourceMappingURL=quote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../src/templates/quote.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA+B;IACzC,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C,IAAI,EAAE,OAAO;IACb,QAAQ,CAAC,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { LocaleCode } from "../core/types.js";
2
+ export declare const formatDate: (date: Date, locale: LocaleCode) => string;
3
+ export declare const formatMoney: (amount: number, locale: LocaleCode, currency: string) => string;
4
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,QAAQ,UAAU,KAAG,MAW3D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,UAAU,EAAE,UAAU,MAAM,KAAG,MAOlF,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const formatDate = (date, locale) => {
2
+ const day = date.getDate().toString().padStart(2, "0");
3
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
4
+ const year = date.getFullYear().toString();
5
+ const formatted = `${day}/${month}/${year}`;
6
+ if (locale === "ar-MA") {
7
+ return formatted.replace(/\d/g, (digit) => "٠١٢٣٤٥٦٧٨٩"[Number(digit)] ?? digit);
8
+ }
9
+ return formatted;
10
+ };
11
+ export const formatMoney = (amount, locale, currency) => {
12
+ const formatter = new Intl.NumberFormat(locale, {
13
+ minimumFractionDigits: 2,
14
+ maximumFractionDigits: 2
15
+ });
16
+ return `${formatter.format(amount)} ${currency}`;
17
+ };
18
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,MAAkB,EAAU,EAAE;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;IAE5C,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,MAAkB,EAAE,QAAgB,EAAU,EAAE;IAC1F,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC9C,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;KACzB,CAAC,CAAC;IAEH,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;AACnD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const roundCurrency: (value: number) => number;
2
+ export declare const clampPercentage: (value: number) => number;
3
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAA0D,CAAC;AAEzG,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAc/C,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const roundCurrency = (value) => Math.round((value + Number.EPSILON) * 100) / 100;
2
+ export const clampPercentage = (value) => {
3
+ if (!Number.isFinite(value)) {
4
+ return 0;
5
+ }
6
+ if (value < 0) {
7
+ return 0;
8
+ }
9
+ if (value > 1) {
10
+ return 1;
11
+ }
12
+ return value;
13
+ };
14
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAEzG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { DiscountInput, DocumentTotals, LineItem, LineItemInput } from "../core/types.js";
2
+ export declare const MOROCCO_DEFAULT_VAT_RATE = 0.2;
3
+ export declare const computeLineItem: (item: LineItemInput) => LineItem;
4
+ export declare const computeTotals: (items: LineItem[], discounts: DiscountInput[], vatRate: number) => DocumentTotals;
5
+ //# sourceMappingURL=taxes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxes.d.ts","sourceRoot":"","sources":["../../src/utils/taxes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/F,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,KAAG,QAmBrD,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,QAAQ,EAAE,EACjB,WAAW,aAAa,EAAE,EAC1B,SAAS,MAAM,KACd,cA2BF,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { clampPercentage, roundCurrency } from "./math.js";
2
+ export const MOROCCO_DEFAULT_VAT_RATE = 0.2;
3
+ export const computeLineItem = (item) => {
4
+ const quantity = Number.isFinite(item.quantity) ? item.quantity : 0;
5
+ const resolvedUnitPrice = item.unitPrice ?? item.price;
6
+ const unitPrice = typeof resolvedUnitPrice === "number" && Number.isFinite(resolvedUnitPrice) ? resolvedUnitPrice : 0;
7
+ const subtotal = roundCurrency(quantity * unitPrice);
8
+ const discountRate = clampPercentage(item.discountRate ?? 0);
9
+ const discountAmount = roundCurrency(subtotal * discountRate);
10
+ return {
11
+ name: item.name,
12
+ quantity,
13
+ unitPrice,
14
+ discountRate,
15
+ lineSubtotal: subtotal,
16
+ lineDiscountAmount: discountAmount,
17
+ lineTotal: roundCurrency(subtotal - discountAmount),
18
+ ...(item.description ? { description: item.description } : {}),
19
+ ...(item.unit ? { unit: item.unit } : {})
20
+ };
21
+ };
22
+ export const computeTotals = (items, discounts, vatRate) => {
23
+ const subtotal = roundCurrency(items.reduce((sum, item) => sum + item.lineSubtotal, 0));
24
+ const lineDiscountTotal = roundCurrency(items.reduce((sum, item) => sum + item.lineDiscountAmount, 0));
25
+ const afterLineDiscounts = roundCurrency(subtotal - lineDiscountTotal);
26
+ const extraDiscountTotal = roundCurrency(discounts.reduce((sum, discount) => {
27
+ if (discount.type === "percentage") {
28
+ return sum + afterLineDiscounts * clampPercentage(discount.value);
29
+ }
30
+ return sum + Math.max(0, discount.value);
31
+ }, 0));
32
+ const discountTotal = roundCurrency(Math.min(afterLineDiscounts, lineDiscountTotal + extraDiscountTotal));
33
+ const taxableBase = roundCurrency(Math.max(0, subtotal - discountTotal));
34
+ const normalizedVatRate = clampPercentage(vatRate);
35
+ const vatAmount = roundCurrency(taxableBase * normalizedVatRate);
36
+ return {
37
+ subtotal,
38
+ discountTotal,
39
+ taxableBase,
40
+ vatAmount,
41
+ total: roundCurrency(taxableBase + vatAmount)
42
+ };
43
+ };
44
+ //# sourceMappingURL=taxes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxes.js","sourceRoot":"","sources":["../../src/utils/taxes.ts"],"names":[],"mappings":"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"}