@timbra-ec/pdf 0.1.0-dev.20260403050717

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 (64) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/dist/generate-ride-pdf.d.ts +3 -0
  3. package/dist/generate-ride-pdf.d.ts.map +1 -0
  4. package/dist/generate-ride-pdf.js +103 -0
  5. package/dist/generate-ride-pdf.js.map +1 -0
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/layout/additional-info.d.ts +6 -0
  11. package/dist/layout/additional-info.d.ts.map +1 -0
  12. package/dist/layout/additional-info.js +35 -0
  13. package/dist/layout/additional-info.js.map +1 -0
  14. package/dist/layout/buyer-info.d.ts +4 -0
  15. package/dist/layout/buyer-info.d.ts.map +1 -0
  16. package/dist/layout/buyer-info.js +41 -0
  17. package/dist/layout/buyer-info.js.map +1 -0
  18. package/dist/layout/footer.d.ts +3 -0
  19. package/dist/layout/footer.d.ts.map +1 -0
  20. package/dist/layout/footer.js +30 -0
  21. package/dist/layout/footer.js.map +1 -0
  22. package/dist/layout/header.d.ts +4 -0
  23. package/dist/layout/header.d.ts.map +1 -0
  24. package/dist/layout/header.js +110 -0
  25. package/dist/layout/header.js.map +1 -0
  26. package/dist/layout/items-table.d.ts +4 -0
  27. package/dist/layout/items-table.d.ts.map +1 -0
  28. package/dist/layout/items-table.js +53 -0
  29. package/dist/layout/items-table.js.map +1 -0
  30. package/dist/layout/payment-info.d.ts +4 -0
  31. package/dist/layout/payment-info.d.ts.map +1 -0
  32. package/dist/layout/payment-info.js +50 -0
  33. package/dist/layout/payment-info.js.map +1 -0
  34. package/dist/layout/tax-summary.d.ts +4 -0
  35. package/dist/layout/tax-summary.d.ts.map +1 -0
  36. package/dist/layout/tax-summary.js +65 -0
  37. package/dist/layout/tax-summary.js.map +1 -0
  38. package/dist/parse-authorized-xml.d.ts +7 -0
  39. package/dist/parse-authorized-xml.d.ts.map +1 -0
  40. package/dist/parse-authorized-xml.js +96 -0
  41. package/dist/parse-authorized-xml.js.map +1 -0
  42. package/dist/qr.d.ts +6 -0
  43. package/dist/qr.d.ts.map +1 -0
  44. package/dist/qr.js +14 -0
  45. package/dist/qr.js.map +1 -0
  46. package/dist/types.d.ts +74 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +37 -0
  51. package/scripts/test-ride.mjs +161 -0
  52. package/src/generate-ride-pdf.ts +119 -0
  53. package/src/index.ts +10 -0
  54. package/src/layout/additional-info.ts +37 -0
  55. package/src/layout/buyer-info.ts +46 -0
  56. package/src/layout/footer.ts +31 -0
  57. package/src/layout/header.ts +125 -0
  58. package/src/layout/items-table.ts +58 -0
  59. package/src/layout/payment-info.ts +55 -0
  60. package/src/layout/tax-summary.ts +75 -0
  61. package/src/parse-authorized-xml.ts +115 -0
  62. package/src/qr.ts +18 -0
  63. package/src/types.ts +90 -0
  64. package/tsconfig.json +8 -0
@@ -0,0 +1,4 @@
1
+
2
+ > @timbra-ec/pdf@0.1.1 build /home/runner/work/timbra-app/timbra-app/packages/pdf
3
+ > tsc
4
+
@@ -0,0 +1,3 @@
1
+ import type { GenerateRidePdfOptions, GenerateRidePdfParams } from './types';
2
+ export declare function generateRidePdf(params: GenerateRidePdfParams, options?: GenerateRidePdfOptions): Promise<Uint8Array>;
3
+ //# sourceMappingURL=generate-ride-pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-ride-pdf.d.ts","sourceRoot":"","sources":["../src/generate-ride-pdf.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AA+B5E,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
@@ -0,0 +1,103 @@
1
+ import { buildAdditionalInfo } from './layout/additional-info';
2
+ import { buildBuyerInfo } from './layout/buyer-info';
3
+ import { buildFooter } from './layout/footer';
4
+ import { buildHeader } from './layout/header';
5
+ import { buildItemsTable } from './layout/items-table';
6
+ import { buildPaymentInfo } from './layout/payment-info';
7
+ import { buildTaxSummary } from './layout/tax-summary';
8
+ import { parseComprobanteXml } from './parse-authorized-xml';
9
+ import { generateQrDataUrl } from './qr';
10
+ let pdfmakeInitialized = false;
11
+ async function getPdfMake() {
12
+ // pdfmake is CJS — dynamic import for ESM compat
13
+ const pdfmake = (await import('pdfmake')).default ?? (await import('pdfmake'));
14
+ if (!pdfmakeInitialized) {
15
+ // Load fonts via virtualfs — works in Node.js, Deno, and Cloudflare Workers
16
+ // (no filesystem access needed, unlike the previous createRequire/fs approach)
17
+ const vfsFontsModule = await import('pdfmake/build/vfs_fonts.js');
18
+ const vfsFonts = (vfsFontsModule.default ?? vfsFontsModule);
19
+ const vfs = pdfmake.virtualfs;
20
+ for (const [filename, base64Data] of Object.entries(vfsFonts)) {
21
+ if (typeof base64Data === 'string') {
22
+ vfs.storage[filename] = Buffer.from(base64Data, 'base64');
23
+ }
24
+ }
25
+ pdfmake.addFonts({
26
+ Roboto: {
27
+ normal: 'Roboto-Regular.ttf',
28
+ bold: 'Roboto-Medium.ttf',
29
+ italics: 'Roboto-Italic.ttf',
30
+ bolditalics: 'Roboto-MediumItalic.ttf',
31
+ },
32
+ });
33
+ pdfmakeInitialized = true;
34
+ }
35
+ return pdfmake;
36
+ }
37
+ export async function generateRidePdf(params, options) {
38
+ const data = parseComprobanteXml(params.comprobante, {
39
+ numeroAutorizacion: params.numeroAutorizacion,
40
+ fechaAutorizacion: params.fechaAutorizacion,
41
+ ambiente: params.ambiente,
42
+ });
43
+ const qrDataUrl = await generateQrDataUrl(data.claveAcceso, data.numeroAutorizacion, data.fechaAutorizacion);
44
+ let logoDataUrl = null;
45
+ if (options?.orgLogo) {
46
+ const base64 = Buffer.from(options.orgLogo).toString('base64');
47
+ logoDataUrl = `data:image/png;base64,${base64}`;
48
+ }
49
+ const isTestEnvironment = data.ambiente === '1';
50
+ const docDefinition = {
51
+ pageSize: 'A4',
52
+ pageMargins: [40, 40, 40, 40],
53
+ ...(isTestEnvironment
54
+ ? {
55
+ watermark: {
56
+ text: 'SIN VALIDEZ TRIBUTARIA',
57
+ color: '#dc2626',
58
+ opacity: 0.15,
59
+ bold: true,
60
+ fontSize: 48,
61
+ angle: -45,
62
+ },
63
+ }
64
+ : {}),
65
+ content: [
66
+ buildHeader(data, logoDataUrl),
67
+ buildBuyerInfo(data),
68
+ buildItemsTable(data.items),
69
+ buildTaxSummary(data),
70
+ buildPaymentInfo(data.pagos),
71
+ buildAdditionalInfo(data.infoAdicional),
72
+ buildFooter(qrDataUrl),
73
+ ],
74
+ styles: {
75
+ companyName: { fontSize: 11, bold: true, color: '#18181b' },
76
+ companyTrade: { fontSize: 9, color: '#52525b' },
77
+ docType: { fontSize: 12, bold: true, color: '#18181b' },
78
+ docInfoBold: { fontSize: 9, bold: true, color: '#18181b' },
79
+ docInfoLabel: { fontSize: 7, color: '#71717a' },
80
+ docInfoSmall: { fontSize: 7, color: '#18181b' },
81
+ claveAcceso: { fontSize: 6, color: '#18181b', font: 'Roboto' },
82
+ sectionTitle: { fontSize: 9, bold: true, color: '#18181b' },
83
+ label: { fontSize: 8, color: '#52525b' },
84
+ value: { fontSize: 8, color: '#18181b' },
85
+ tableHeader: { fontSize: 7, bold: true, color: '#18181b', fillColor: '#f4f4f5' },
86
+ tableCell: { fontSize: 7, color: '#18181b' },
87
+ summaryLabel: { fontSize: 8, color: '#52525b' },
88
+ summaryValue: { fontSize: 8, color: '#18181b' },
89
+ summaryLabelBold: { fontSize: 8, bold: true, color: '#18181b' },
90
+ summaryValueBold: { fontSize: 9, bold: true, color: '#18181b' },
91
+ small: { fontSize: 7, color: '#52525b' },
92
+ },
93
+ defaultStyle: {
94
+ font: 'Roboto',
95
+ fontSize: 8,
96
+ },
97
+ };
98
+ const pdfmake = await getPdfMake();
99
+ const pdfDoc = pdfmake.createPdf(docDefinition);
100
+ const buffer = await pdfDoc.getBuffer();
101
+ return new Uint8Array(buffer);
102
+ }
103
+ //# sourceMappingURL=generate-ride-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-ride-pdf.js","sourceRoot":"","sources":["../src/generate-ride-pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { generateRidePdf } from './generate-ride-pdf';
2
+ export { parseComprobanteXml } from './parse-authorized-xml';
3
+ export type { GenerateRidePdfParams, GenerateRidePdfOptions, RideData, RideItem, RidePayment, RideTaxTotal, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,SAAS,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { generateRidePdf } from './generate-ride-pdf';
2
+ export { parseComprobanteXml } from './parse-authorized-xml';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ export declare function buildAdditionalInfo(infoAdicional: {
3
+ nombre: string;
4
+ valor: string;
5
+ }[]): Content;
6
+ //# sourceMappingURL=additional-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"additional-info.d.ts","sourceRoot":"","sources":["../../src/layout/additional-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAkC/F"}
@@ -0,0 +1,35 @@
1
+ export function buildAdditionalInfo(infoAdicional) {
2
+ if (infoAdicional.length === 0)
3
+ return { text: '' };
4
+ const rows = infoAdicional.map((item) => [
5
+ { text: item.nombre, style: 'label' },
6
+ { text: item.valor, style: 'value' },
7
+ ]);
8
+ return {
9
+ stack: [
10
+ {
11
+ text: 'Informacion Adicional',
12
+ style: 'sectionTitle',
13
+ margin: [0, 0, 0, 4],
14
+ },
15
+ {
16
+ table: {
17
+ widths: [120, '*'],
18
+ body: rows,
19
+ },
20
+ layout: {
21
+ hLineWidth: () => 0.5,
22
+ vLineWidth: () => 0.5,
23
+ hLineColor: () => '#d4d4d8',
24
+ vLineColor: () => '#d4d4d8',
25
+ paddingTop: () => 3,
26
+ paddingBottom: () => 3,
27
+ paddingLeft: () => 6,
28
+ paddingRight: () => 6,
29
+ },
30
+ },
31
+ ],
32
+ margin: [0, 0, 0, 16],
33
+ };
34
+ }
35
+ //# sourceMappingURL=additional-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"additional-info.js","sourceRoot":"","sources":["../../src/layout/additional-info.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,aAAkD;IACpF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAEnD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;QACrC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;KACrC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAqC;aACzD;YACD;gBACE,KAAK,EAAE;oBACL,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;oBAClB,IAAI,EAAE,IAAI;iBACX;gBACD,MAAM,EAAE;oBACN,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;oBACrB,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;oBACrB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;oBAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;oBAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;oBACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;iBACtB;aACF;SACF;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAqC;KAC1D,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ import type { RideData } from '../types';
3
+ export declare function buildBuyerInfo(data: RideData): Content;
4
+ //# sourceMappingURL=buyer-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-info.d.ts","sourceRoot":"","sources":["../../src/layout/buyer-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAaxC,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA+BtD"}
@@ -0,0 +1,41 @@
1
+ const borderLayout = {
2
+ hLineWidth: (i, node) => (i === 0 || i === node.table.body.length ? 0.5 : 0),
3
+ vLineWidth: (i, node) => (i === 0 || i === (node.table.widths?.length ?? 0) ? 0.5 : 0),
4
+ hLineColor: () => '#d4d4d8',
5
+ vLineColor: () => '#d4d4d8',
6
+ paddingTop: () => 4,
7
+ paddingBottom: () => 4,
8
+ paddingLeft: () => 6,
9
+ paddingRight: () => 6,
10
+ };
11
+ export function buildBuyerInfo(data) {
12
+ const rows = [
13
+ [
14
+ { text: 'Razon Social / Nombres:', style: 'label' },
15
+ { text: data.razonSocialComprador, style: 'value' },
16
+ ],
17
+ [
18
+ { text: 'Identificacion:', style: 'label' },
19
+ { text: data.identificacionComprador, style: 'value' },
20
+ ],
21
+ [
22
+ { text: 'Fecha de Emision:', style: 'label' },
23
+ { text: data.fechaEmision, style: 'value' },
24
+ ],
25
+ ];
26
+ if (data.direccionComprador) {
27
+ rows.push([
28
+ { text: 'Direccion:', style: 'label' },
29
+ { text: data.direccionComprador, style: 'value' },
30
+ ]);
31
+ }
32
+ return {
33
+ table: {
34
+ widths: [120, '*'],
35
+ body: rows,
36
+ },
37
+ layout: borderLayout,
38
+ margin: [0, 0, 0, 16],
39
+ };
40
+ }
41
+ //# sourceMappingURL=buyer-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-info.js","sourceRoot":"","sources":["../../src/layout/buyer-info.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAgB;IAChC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;IAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;IAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;CACtB,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,IAAI,GAAgB;QACxB;YACE,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE;YACnD,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;SACpD;QACD;YACE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3C,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE;SACvD;QACD;YACE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE;YAC7C,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;SAC5C;KACF,CAAA;IAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC;YACR,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;YACtC,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE;SAClD,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YAClB,IAAI,EAAE,IAAI;SACX;QACD,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAqC;KAC1D,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ export declare function buildFooter(qrDataUrl: string): Content;
3
+ //# sourceMappingURL=footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../src/layout/footer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA4BtD"}
@@ -0,0 +1,30 @@
1
+ export function buildFooter(qrDataUrl) {
2
+ return {
3
+ columns: [
4
+ {
5
+ width: 100,
6
+ image: qrDataUrl,
7
+ fit: [90, 90],
8
+ },
9
+ {
10
+ width: '*',
11
+ stack: [
12
+ {
13
+ text: 'DOCUMENTO ELECTRONICO',
14
+ style: 'small',
15
+ bold: true,
16
+ margin: [8, 0, 0, 4],
17
+ },
18
+ {
19
+ text: 'Autorizado por el Servicio de Rentas Internas. Representacion impresa del comprobante electronico.',
20
+ style: 'small',
21
+ color: '#71717a',
22
+ margin: [8, 0, 0, 0],
23
+ },
24
+ ],
25
+ },
26
+ ],
27
+ margin: [0, 8, 0, 0],
28
+ };
29
+ }
30
+ //# sourceMappingURL=footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/layout/footer.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;aACd;YACD;gBACE,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAqC;qBACzD;oBACD;wBACE,IAAI,EAAE,oGAAoG;wBAC1G,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAqC;qBACzD;iBACF;aACF;SACF;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAqC;KACzD,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ import type { RideData } from '../types';
3
+ export declare function buildHeader(data: RideData, logoDataUrl: string | null): Content;
4
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/layout/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CA6G/E"}
@@ -0,0 +1,110 @@
1
+ export function buildHeader(data, logoDataUrl) {
2
+ const fiscalLines = [];
3
+ if (data.contribuyenteEspecial) {
4
+ fiscalLines.push(`Contribuyente Especial Nro: ${data.contribuyenteEspecial}`);
5
+ }
6
+ fiscalLines.push(`OBLIGADO A LLEVAR CONTABILIDAD: ${data.obligadoContabilidad ? 'SI' : 'NO'}`);
7
+ if (data.regimenRimpe) {
8
+ fiscalLines.push(`CONTRIBUYENTE REGIMEN RIMPE`);
9
+ }
10
+ const leftColumn = [];
11
+ if (logoDataUrl) {
12
+ leftColumn.push({ image: logoDataUrl, width: 120, margin: [0, 0, 0, 8] });
13
+ }
14
+ leftColumn.push({ text: data.razonSocial, style: 'companyName' });
15
+ if (data.nombreComercial && data.nombreComercial !== data.razonSocial) {
16
+ leftColumn.push({ text: data.nombreComercial, style: 'companyTrade', margin: [0, 2, 0, 0] });
17
+ }
18
+ leftColumn.push({
19
+ text: `Dir. Matriz: ${data.direccionMatriz}`,
20
+ style: 'small',
21
+ margin: [0, 6, 0, 0],
22
+ });
23
+ if (data.direccionEstablecimiento) {
24
+ leftColumn.push({
25
+ text: `Dir. Establecimiento: ${data.direccionEstablecimiento}`,
26
+ style: 'small',
27
+ margin: [0, 2, 0, 0],
28
+ });
29
+ }
30
+ for (const line of fiscalLines) {
31
+ leftColumn.push({ text: line, style: 'small', margin: [0, 2, 0, 0] });
32
+ }
33
+ const ambienteLabel = data.ambiente === '2' ? 'PRODUCCION' : 'PRUEBAS';
34
+ const docTypeLabel = getDocTypeLabel(data.codDoc);
35
+ const rightColumn = {
36
+ table: {
37
+ widths: ['*'],
38
+ body: [
39
+ [{ text: `R.U.C.: ${data.ruc}`, style: 'docInfoBold', alignment: 'center' }],
40
+ [{ text: docTypeLabel, style: 'docType', alignment: 'center' }],
41
+ [
42
+ {
43
+ text: `No. ${data.estab}-${data.ptoEmi}-${data.secuencial}`,
44
+ style: 'docInfoBold',
45
+ alignment: 'center',
46
+ },
47
+ ],
48
+ [
49
+ {
50
+ text: [
51
+ { text: 'NUMERO DE AUTORIZACION\n', style: 'docInfoLabel' },
52
+ { text: data.numeroAutorizacion, style: 'docInfoSmall' },
53
+ ],
54
+ alignment: 'center',
55
+ },
56
+ ],
57
+ [
58
+ {
59
+ text: [
60
+ { text: 'FECHA Y HORA DE AUTORIZACION\n', style: 'docInfoLabel' },
61
+ { text: data.fechaAutorizacion, style: 'docInfoSmall' },
62
+ ],
63
+ alignment: 'center',
64
+ },
65
+ ],
66
+ [{ text: `AMBIENTE: ${ambienteLabel}`, style: 'small', alignment: 'center' }],
67
+ [{ text: 'EMISION: NORMAL', style: 'small', alignment: 'center' }],
68
+ [
69
+ {
70
+ text: [
71
+ { text: 'CLAVE DE ACCESO\n', style: 'docInfoLabel' },
72
+ { text: data.claveAcceso, style: 'claveAcceso' },
73
+ ],
74
+ alignment: 'center',
75
+ },
76
+ ],
77
+ ],
78
+ },
79
+ layout: {
80
+ hLineWidth: () => 0.5,
81
+ vLineWidth: () => 0.5,
82
+ hLineColor: () => '#d4d4d8',
83
+ vLineColor: () => '#d4d4d8',
84
+ paddingTop: () => 4,
85
+ paddingBottom: () => 4,
86
+ paddingLeft: () => 6,
87
+ paddingRight: () => 6,
88
+ },
89
+ };
90
+ return {
91
+ columns: [
92
+ { width: '55%', stack: leftColumn },
93
+ { width: '45%', ...rightColumn },
94
+ ],
95
+ columnGap: 16,
96
+ margin: [0, 0, 0, 16],
97
+ };
98
+ }
99
+ function getDocTypeLabel(codDoc) {
100
+ const labels = {
101
+ '01': 'FACTURA',
102
+ '03': 'LIQUIDACION DE COMPRA',
103
+ '04': 'NOTA DE CREDITO',
104
+ '05': 'NOTA DE DEBITO',
105
+ '06': 'GUIA DE REMISION',
106
+ '07': 'COMPROBANTE DE RETENCION',
107
+ };
108
+ return labels[codDoc] ?? 'DOCUMENTO';
109
+ }
110
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/layout/header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ import type { RideItem } from '../types';
3
+ export declare function buildItemsTable(items: RideItem[]): Content;
4
+ //# sourceMappingURL=items-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items-table.d.ts","sourceRoot":"","sources":["../../src/layout/items-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAkD1D"}
@@ -0,0 +1,53 @@
1
+ export function buildItemsTable(items) {
2
+ const headerRow = [
3
+ { text: 'Cod. Principal', style: 'tableHeader' },
4
+ { text: 'Descripcion', style: 'tableHeader' },
5
+ { text: 'Cant.', style: 'tableHeader', alignment: 'right' },
6
+ { text: 'P. Unitario', style: 'tableHeader', alignment: 'right' },
7
+ { text: 'Descuento', style: 'tableHeader', alignment: 'right' },
8
+ { text: 'P. Total', style: 'tableHeader', alignment: 'right' },
9
+ ];
10
+ const dataRows = items.map((item, i) => {
11
+ const fillColor = i % 2 === 0 ? '#fafafa' : null;
12
+ return [
13
+ { text: item.codigoPrincipal, style: 'tableCell', fillColor },
14
+ { text: item.descripcion, style: 'tableCell', fillColor },
15
+ { text: fmt(item.cantidad), style: 'tableCell', alignment: 'right', fillColor },
16
+ {
17
+ text: fmt(item.precioUnitario),
18
+ style: 'tableCell',
19
+ alignment: 'right',
20
+ fillColor,
21
+ },
22
+ { text: fmt(item.descuento), style: 'tableCell', alignment: 'right', fillColor },
23
+ {
24
+ text: fmt(item.precioTotalSinImpuesto),
25
+ style: 'tableCell',
26
+ alignment: 'right',
27
+ fillColor,
28
+ },
29
+ ];
30
+ });
31
+ return {
32
+ table: {
33
+ headerRows: 1,
34
+ widths: [60, '*', 40, 60, 55, 60],
35
+ body: [headerRow, ...dataRows],
36
+ },
37
+ layout: {
38
+ hLineWidth: () => 0.5,
39
+ vLineWidth: () => 0.5,
40
+ hLineColor: () => '#d4d4d8',
41
+ vLineColor: () => '#d4d4d8',
42
+ paddingTop: () => 3,
43
+ paddingBottom: () => 3,
44
+ paddingLeft: () => 4,
45
+ paddingRight: () => 4,
46
+ },
47
+ margin: [0, 0, 0, 16],
48
+ };
49
+ }
50
+ function fmt(n) {
51
+ return n.toFixed(2);
52
+ }
53
+ //# sourceMappingURL=items-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items-table.js","sourceRoot":"","sources":["../../src/layout/items-table.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,SAAS,GAAG;QAChB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE;QAChD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;QAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;QACpE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;QAC1E,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;QACxE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;KACxE,CAAA;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;QAChD,OAAO;YACL,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE;YAC7D,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE;YACzD,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAgB,EAAE,SAAS,EAAE;YACxF;gBACE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC9B,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,OAAgB;gBAC3B,SAAS;aACV;YACD,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAgB,EAAE,SAAS,EAAE;YACzF;gBACE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBACtC,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,OAAgB;gBAC3B,SAAS;aACV;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,EAAE;YACL,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACjC,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC;SAC/B;QACD,MAAM,EAAE;YACN,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;YAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;YAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAqC;KAC1D,CAAA;AACH,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ import type { RidePayment } from '../types';
3
+ export declare function buildPaymentInfo(pagos: RidePayment[]): Content;
4
+ //# sourceMappingURL=payment-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-info.d.ts","sourceRoot":"","sources":["../../src/layout/payment-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAc3C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAuC9D"}
@@ -0,0 +1,50 @@
1
+ /** Official SRI payment method labels */
2
+ const PAYMENT_METHOD_LABELS = {
3
+ '01': 'SIN UTILIZACION DEL SISTEMA FINANCIERO',
4
+ '15': 'COMPENSACION DE DEUDAS',
5
+ '16': 'TARJETA DE DEBITO',
6
+ '17': 'DINERO ELECTRONICO',
7
+ '18': 'TARJETA PREPAGO',
8
+ '19': 'TARJETA DE CREDITO',
9
+ '20': 'OTROS CON UTILIZACION DEL SISTEMA FINANCIERO',
10
+ '21': 'ENDOSO DE TITULOS',
11
+ };
12
+ export function buildPaymentInfo(pagos) {
13
+ if (pagos.length === 0)
14
+ return { text: '' };
15
+ const headerRow = [
16
+ { text: 'Forma de Pago', style: 'tableHeader' },
17
+ { text: 'Valor', style: 'tableHeader', alignment: 'right' },
18
+ { text: 'Plazo', style: 'tableHeader', alignment: 'right' },
19
+ { text: 'Tiempo', style: 'tableHeader' },
20
+ ];
21
+ const dataRows = pagos.map((p) => [
22
+ { text: PAYMENT_METHOD_LABELS[p.formaPago] ?? p.formaPago, style: 'tableCell' },
23
+ { text: p.total.toFixed(2), style: 'tableCell', alignment: 'right' },
24
+ {
25
+ text: p.plazo != null ? String(p.plazo) : '-',
26
+ style: 'tableCell',
27
+ alignment: 'right',
28
+ },
29
+ { text: p.unidadTiempo ?? '-', style: 'tableCell' },
30
+ ]);
31
+ return {
32
+ table: {
33
+ headerRows: 1,
34
+ widths: ['*', 60, 40, 50],
35
+ body: [headerRow, ...dataRows],
36
+ },
37
+ layout: {
38
+ hLineWidth: () => 0.5,
39
+ vLineWidth: () => 0.5,
40
+ hLineColor: () => '#d4d4d8',
41
+ vLineColor: () => '#d4d4d8',
42
+ paddingTop: () => 3,
43
+ paddingBottom: () => 3,
44
+ paddingLeft: () => 4,
45
+ paddingRight: () => 4,
46
+ },
47
+ margin: [0, 0, 0, 16],
48
+ };
49
+ }
50
+ //# sourceMappingURL=payment-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-info.js","sourceRoot":"","sources":["../../src/layout/payment-info.ts"],"names":[],"mappings":"AAGA,yCAAyC;AACzC,MAAM,qBAAqB,GAA2B;IACpD,IAAI,EAAE,wCAAwC;IAC9C,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,8CAA8C;IACpD,IAAI,EAAE,mBAAmB;CAC1B,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAE3C,MAAM,SAAS,GAAG;QAChB,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE;QAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;QACpE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAgB,EAAE;QACpE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;KACzC,CAAA;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE;QAC/E,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAgB,EAAE;QAC7E;YACE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;YAC7C,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,OAAgB;SAC5B;QACD,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,IAAI,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE;KACpD,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,EAAE;YACL,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC;SAC/B;QACD,MAAM,EAAE;YACN,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;YAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;YAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAqC;KAC1D,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Content } from 'pdfmake/interfaces';
2
+ import type { RideData } from '../types';
3
+ export declare function buildTaxSummary(data: RideData): Content;
4
+ //# sourceMappingURL=tax-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tax-summary.d.ts","sourceRoot":"","sources":["../../src/layout/tax-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAmEvD"}