arcli 1.3.0 → 1.5.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/CHANGELOG.md +48 -1
- package/README.md +3 -1
- package/dist/cli/commands/billing.command.batch.d.ts +22 -0
- package/dist/cli/commands/billing.command.batch.js +51 -0
- package/dist/cli/commands/billing.command.batch.js.map +1 -0
- package/dist/cli/commands/billing.command.options.js +7 -1
- package/dist/cli/commands/billing.command.options.js.map +1 -1
- package/dist/cli/commands/billing.command.output.d.ts +2 -0
- package/dist/cli/commands/billing.command.output.js +15 -1
- package/dist/cli/commands/billing.command.output.js.map +1 -1
- package/dist/cli/commands/billing.command.parser.d.ts +7 -0
- package/dist/cli/commands/billing.command.parser.js +96 -11
- package/dist/cli/commands/billing.command.parser.js.map +1 -1
- package/dist/cli/commands/billing.command.pdf.d.ts +24 -0
- package/dist/cli/commands/billing.command.pdf.js +130 -0
- package/dist/cli/commands/billing.command.pdf.js.map +1 -0
- package/dist/cli/commands/billing.command.shared.js +28 -12
- package/dist/cli/commands/billing.command.shared.js.map +1 -1
- package/dist/cli/commands/config.command.js +6 -6
- package/dist/cli/commands/config.command.js.map +1 -1
- package/dist/cli/commands/pdf.command.d.ts +2 -0
- package/dist/cli/commands/pdf.command.js +78 -0
- package/dist/cli/commands/pdf.command.js.map +1 -0
- package/dist/cli/commands/vouchers.command.d.ts +2 -0
- package/dist/cli/commands/vouchers.command.js +96 -0
- package/dist/cli/commands/vouchers.command.js.map +1 -0
- package/dist/cli/help.d.ts +1 -0
- package/dist/cli/help.js +23 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/advanced-options.d.ts +14 -0
- package/dist/cli/interactive/advanced-options.js +126 -0
- package/dist/cli/interactive/advanced-options.js.map +1 -0
- package/dist/cli/interactive/history.flow.js +10 -19
- package/dist/cli/interactive/history.flow.js.map +1 -1
- package/dist/cli/interactive/interactive-mode.js +2 -1
- package/dist/cli/interactive/interactive-mode.js.map +1 -1
- package/dist/cli/interactive/invoice.flow.d.ts +20 -0
- package/dist/cli/interactive/invoice.flow.js +120 -42
- package/dist/cli/interactive/invoice.flow.js.map +1 -1
- package/dist/cli/interactive/note.flow.d.ts +24 -0
- package/dist/cli/interactive/note.flow.js +205 -68
- package/dist/cli/interactive/note.flow.js.map +1 -1
- package/dist/cli/interactive/pdf.flow.d.ts +5 -0
- package/dist/cli/interactive/pdf.flow.js +89 -0
- package/dist/cli/interactive/pdf.flow.js.map +1 -0
- package/dist/cli/interactive/prompts.d.ts +8 -0
- package/dist/cli/interactive/prompts.js +22 -0
- package/dist/cli/interactive/prompts.js.map +1 -1
- package/dist/cli/interactive/session.d.ts +1 -1
- package/dist/cli/interactive/session.js +5 -1
- package/dist/cli/interactive/session.js.map +1 -1
- package/dist/cli/interactive/validators.d.ts +4 -0
- package/dist/cli/interactive/validators.js +18 -0
- package/dist/cli/interactive/validators.js.map +1 -1
- package/dist/cli/program.js +4 -0
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/modules/billing/billing.amounts.d.ts +1 -1
- package/dist/modules/billing/billing.amounts.js +34 -13
- package/dist/modules/billing/billing.amounts.js.map +1 -1
- package/dist/modules/billing/billing.batch.d.ts +23 -0
- package/dist/modules/billing/billing.batch.js +43 -0
- package/dist/modules/billing/billing.batch.js.map +1 -0
- package/dist/modules/billing/billing.display.js +12 -3
- package/dist/modules/billing/billing.display.js.map +1 -1
- package/dist/modules/billing/billing.schemas.d.ts +35 -0
- package/dist/modules/billing/billing.schemas.js +32 -6
- package/dist/modules/billing/billing.schemas.js.map +1 -1
- package/dist/modules/billing/billing.serialize.js +13 -0
- package/dist/modules/billing/billing.serialize.js.map +1 -1
- package/dist/modules/billing/billing.types.internal.d.ts +3 -0
- package/dist/modules/config/config-doctor.js +13 -0
- package/dist/modules/config/config-doctor.js.map +1 -1
- package/dist/modules/config/config-value-parser.d.ts +1 -1
- package/dist/modules/config/config-value-parser.js +43 -2
- package/dist/modules/config/config-value-parser.js.map +1 -1
- package/dist/modules/config/config.presenter.d.ts +6 -2
- package/dist/modules/config/config.presenter.js +25 -6
- package/dist/modules/config/config.presenter.js.map +1 -1
- package/dist/modules/config/config.schemas.d.ts +42 -0
- package/dist/modules/config/config.schemas.js +29 -0
- package/dist/modules/config/config.schemas.js.map +1 -1
- package/dist/modules/config/config.service.d.ts +8 -0
- package/dist/modules/config/config.service.js +21 -0
- package/dist/modules/config/config.service.js.map +1 -1
- package/dist/modules/examples/examples.js +1 -0
- package/dist/modules/examples/examples.js.map +1 -1
- package/dist/modules/interactive/equivalent-command.js +13 -0
- package/dist/modules/interactive/equivalent-command.js.map +1 -1
- package/dist/modules/interactive/wizard.d.ts +16 -0
- package/dist/modules/interactive/wizard.js +33 -0
- package/dist/modules/interactive/wizard.js.map +1 -0
- package/dist/modules/pdf/pdf-data.mapper.d.ts +4 -0
- package/dist/modules/pdf/pdf-data.mapper.js +117 -0
- package/dist/modules/pdf/pdf-data.mapper.js.map +1 -0
- package/dist/modules/pdf/pdf-decision.d.ts +14 -0
- package/dist/modules/pdf/pdf-decision.js +19 -0
- package/dist/modules/pdf/pdf-decision.js.map +1 -0
- package/dist/modules/pdf/pdf-file-name.d.ts +3 -0
- package/dist/modules/pdf/pdf-file-name.js +7 -0
- package/dist/modules/pdf/pdf-file-name.js.map +1 -0
- package/dist/modules/pdf/pdf-issuer.d.ts +8 -0
- package/dist/modules/pdf/pdf-issuer.js +43 -0
- package/dist/modules/pdf/pdf-issuer.js.map +1 -0
- package/dist/modules/pdf/pdf.errors.d.ts +10 -0
- package/dist/modules/pdf/pdf.errors.js +11 -0
- package/dist/modules/pdf/pdf.errors.js.map +1 -0
- package/dist/modules/pdf/pdf.types.d.ts +91 -0
- package/dist/modules/pdf/pdf.types.js +2 -0
- package/dist/modules/pdf/pdf.types.js.map +1 -0
- package/dist/modules/storybook/showcase.js +6 -2
- package/dist/modules/storybook/showcase.js.map +1 -1
- package/dist/modules/{interactive → vouchers}/voucher-history.d.ts +9 -0
- package/dist/modules/{interactive → vouchers}/voucher-history.js +1 -0
- package/dist/modules/vouchers/voucher-history.js.map +1 -0
- package/dist/modules/vouchers/voucher-history.presenter.d.ts +22 -0
- package/dist/modules/vouchers/voucher-history.presenter.js +108 -0
- package/dist/modules/vouchers/voucher-history.presenter.js.map +1 -0
- package/dist/services/arca/arca-voucher-history.gateway.d.ts +1 -1
- package/dist/services/arca/arca-voucher-history.gateway.js +9 -1
- package/dist/services/arca/arca-voucher-history.gateway.js.map +1 -1
- package/dist/services/pdf/pdf-browser.d.ts +5 -0
- package/dist/services/pdf/pdf-browser.js +54 -0
- package/dist/services/pdf/pdf-browser.js.map +1 -0
- package/dist/services/pdf/pdf-exporter.d.ts +19 -0
- package/dist/services/pdf/pdf-exporter.js +47 -0
- package/dist/services/pdf/pdf-exporter.js.map +1 -0
- package/dist/services/pdf/pdf-plugin.d.ts +50 -0
- package/dist/services/pdf/pdf-plugin.js +143 -0
- package/dist/services/pdf/pdf-plugin.js.map +1 -0
- package/dist/ui/presenters/errors.presenter.js +22 -1
- package/dist/ui/presenters/errors.presenter.js.map +1 -1
- package/dist/ui/presenters/errors.zod-presenter.d.ts +2 -0
- package/dist/ui/presenters/errors.zod-presenter.js +4 -0
- package/dist/ui/presenters/errors.zod-presenter.js.map +1 -1
- package/dist/ui/presenters/index.d.ts +2 -0
- package/dist/ui/presenters/index.js +2 -0
- package/dist/ui/presenters/index.js.map +1 -1
- package/dist/ui/presenters/pdf.presenter.d.ts +13 -0
- package/dist/ui/presenters/pdf.presenter.js +46 -0
- package/dist/ui/presenters/pdf.presenter.js.map +1 -0
- package/dist/ui/primitives/text.d.ts +5 -0
- package/dist/ui/primitives/text.js +10 -1
- package/dist/ui/primitives/text.js.map +1 -1
- package/llms.txt +25 -5
- package/package.json +1 -1
- package/dist/cli/interactive/voucher-format.d.ts +0 -4
- package/dist/cli/interactive/voucher-format.js +0 -28
- package/dist/cli/interactive/voucher-format.js.map +0 -1
- package/dist/modules/interactive/voucher-history.js.map +0 -1
package/dist/cli/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CACV,6HAA6H,CAC9H;SACA,OAAO,CAAC,WAAW,CAAC;SACpB,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;IAEpE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACzC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACtC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnG,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CACV,6HAA6H,CAC9H;SACA,OAAO,CAAC,WAAW,CAAC;SACpB,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;IAEpE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACzC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACtC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACtC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnG,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "1.
|
|
1
|
+
export declare const CLI_VERSION = "1.5.0";
|
package/dist/cli/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const CLI_VERSION = '1.
|
|
1
|
+
export const CLI_VERSION = '1.5.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -9,7 +9,7 @@ export interface TaxAmounts {
|
|
|
9
9
|
readonly netAmount: number;
|
|
10
10
|
readonly untaxedAmount: number;
|
|
11
11
|
}
|
|
12
|
-
type TaxAmountsInput = Pick<BillingCommandInput, 'exemptAmount' | 'ivaRate' | 'totalAmount' | 'untaxedAmount'>;
|
|
12
|
+
type TaxAmountsInput = Pick<BillingCommandInput, 'exemptAmount' | 'ivaRate' | 'ivaRateAmounts' | 'totalAmount' | 'untaxedAmount'>;
|
|
13
13
|
export declare function resolveIvaRateLabel(aliquotId: number): string | undefined;
|
|
14
14
|
/**
|
|
15
15
|
* Reparte el total entre no gravado, exento, neto gravado e IVA.
|
|
@@ -11,13 +11,15 @@ const IVA_RATE_DEFINITIONS = {
|
|
|
11
11
|
'27': { id: 6, rate: '0.27' },
|
|
12
12
|
};
|
|
13
13
|
export const DEFAULT_IVA_RATE = '21';
|
|
14
|
+
// Margen de ARCA para comparar importes (10048): un centavo.
|
|
15
|
+
const AMOUNT_TOLERANCE = 0.01;
|
|
14
16
|
export function resolveIvaRateLabel(aliquotId) {
|
|
15
17
|
const entry = Object.entries(IVA_RATE_DEFINITIONS).find(([, definition]) => definition.id === aliquotId);
|
|
16
18
|
return entry ? `${entry[0].replace('.', ',')}%` : undefined;
|
|
17
19
|
}
|
|
18
20
|
function validateLetterCAmounts(input, voucherKind) {
|
|
19
21
|
const flags = [
|
|
20
|
-
input.ivaRate ? '--alicuota' : undefined,
|
|
22
|
+
input.ivaRate || input.ivaRateAmounts ? '--alicuota' : undefined,
|
|
21
23
|
input.exemptAmount ? '--exento' : undefined,
|
|
22
24
|
input.untaxedAmount ? '--nogravado' : undefined,
|
|
23
25
|
].filter((flag) => Boolean(flag));
|
|
@@ -48,24 +50,43 @@ export function resolveTaxAmounts(input, voucherKind) {
|
|
|
48
50
|
if (taxedTotal.eq(0)) {
|
|
49
51
|
return { exemptAmount, ivaAmount: 0, netAmount: 0, untaxedAmount };
|
|
50
52
|
}
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
53
|
+
const parts = resolveTaxedParts(input, taxedTotal);
|
|
54
|
+
const iva = parts.map(({ amount, rate }) => {
|
|
55
|
+
const definition = IVA_RATE_DEFINITIONS[rate];
|
|
56
|
+
const BaseImp = roundAmount(amount.div(new Big(1).plus(definition.rate)));
|
|
57
|
+
return { BaseImp, Id: definition.id, Importe: roundAmount(amount.minus(BaseImp)) };
|
|
58
|
+
});
|
|
54
59
|
// Con neto mayor a cero el array de IVA es obligatorio, incluso al 0% (10070).
|
|
60
|
+
// La suma de BaseImp tiene que dar ImpNeto (10061).
|
|
55
61
|
return {
|
|
56
62
|
exemptAmount,
|
|
57
|
-
iva
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Id: definition.id,
|
|
61
|
-
Importe: ivaAmount,
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
ivaAmount,
|
|
65
|
-
netAmount,
|
|
63
|
+
iva,
|
|
64
|
+
ivaAmount: roundAmount(iva.reduce((sum, item) => sum.plus(item.Importe), new Big(0))),
|
|
65
|
+
netAmount: roundAmount(iva.reduce((sum, item) => sum.plus(item.BaseImp), new Big(0))),
|
|
66
66
|
untaxedAmount,
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Importe gravado (IVA incluido) de cada alicuota. Con una sola alicuota es todo lo gravado; con varias,
|
|
71
|
+
* los montos de cada una tienen que sumar lo gravado del total.
|
|
72
|
+
*/
|
|
73
|
+
function resolveTaxedParts(input, taxedTotal) {
|
|
74
|
+
if (!input.ivaRateAmounts?.length) {
|
|
75
|
+
return [{ amount: taxedTotal, rate: input.ivaRate ?? DEFAULT_IVA_RATE }];
|
|
76
|
+
}
|
|
77
|
+
const byRate = new Map();
|
|
78
|
+
for (const { amount, rate } of input.ivaRateAmounts) {
|
|
79
|
+
byRate.set(rate, (byRate.get(rate) ?? new Big(0)).plus(amount));
|
|
80
|
+
}
|
|
81
|
+
const sum = [...byRate.values()].reduce((total, amount) => total.plus(amount), new Big(0));
|
|
82
|
+
if (sum.minus(taxedTotal).abs().gt(AMOUNT_TOLERANCE)) {
|
|
83
|
+
throw new InputValidationError(`La suma de las alicuotas (${formatPlain(sum)}) no coincide con lo gravado del monto total (${formatPlain(taxedTotal)}). Revise --monto, --alicuota, --exento y --nogravado.`);
|
|
84
|
+
}
|
|
85
|
+
return [...byRate.entries()].map(([rate, amount]) => ({ amount, rate }));
|
|
86
|
+
}
|
|
87
|
+
function formatPlain(value) {
|
|
88
|
+
return value.round(2, Big.roundHalfUp).toFixed(2);
|
|
89
|
+
}
|
|
69
90
|
function roundAmount(value) {
|
|
70
91
|
return value.round(2, Big.roundHalfUp).toNumber();
|
|
71
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.amounts.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.amounts.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,QAAQ,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,6CAA6C;AAC7C,MAAM,oBAAoB,GAA2E;IACnG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;IACzB,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;IAC/B,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;IAChC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAmB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"billing.amounts.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.amounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AppError } from '../../lib/errors/app-error';
|
|
2
|
+
export interface BatchItemError {
|
|
3
|
+
/** Posicion en el lote, empezando en 1. */
|
|
4
|
+
readonly index: number;
|
|
5
|
+
readonly message: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function describeBatchItemError(error: unknown): string;
|
|
8
|
+
/** Uno o mas comprobantes del lote no pasan la validacion. Se detecta antes de emitir: no se emitio ninguno. */
|
|
9
|
+
export declare class BatchValidationError extends AppError {
|
|
10
|
+
constructor(errors: readonly BatchItemError[], total: number);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* La emision se corto a mitad del lote (red, ARCA). Los resultados ya emitidos se imprimen antes que este
|
|
14
|
+
* error, para que nadie los vuelva a cargar y los duplique.
|
|
15
|
+
*/
|
|
16
|
+
export declare class BatchEmissionError extends AppError {
|
|
17
|
+
constructor(options: {
|
|
18
|
+
readonly cause: unknown;
|
|
19
|
+
readonly emitted: number;
|
|
20
|
+
readonly failedIndex: number;
|
|
21
|
+
readonly total: number;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { AppError } from '../../lib/errors/app-error.js';
|
|
3
|
+
import { summarizeZodError } from '../../ui/index.js';
|
|
4
|
+
export function describeBatchItemError(error) {
|
|
5
|
+
if (error instanceof ZodError) {
|
|
6
|
+
return summarizeZodError(error);
|
|
7
|
+
}
|
|
8
|
+
return error instanceof Error ? error.message : String(error);
|
|
9
|
+
}
|
|
10
|
+
/** Uno o mas comprobantes del lote no pasan la validacion. Se detecta antes de emitir: no se emitio ninguno. */
|
|
11
|
+
export class BatchValidationError extends AppError {
|
|
12
|
+
constructor(errors, total) {
|
|
13
|
+
const lines = errors.map((item) => `#${item.index}: ${item.message}`);
|
|
14
|
+
super([`${errors.length} de ${total} comprobantes del lote tienen errores. No se emitio ninguno.`, '', ...lines].join('\n'), {
|
|
15
|
+
code: 'BATCH_VALIDATION_ERROR',
|
|
16
|
+
details: { comprobantes: errors.map((item) => ({ error: item.message, indice: item.index })) },
|
|
17
|
+
});
|
|
18
|
+
this.name = 'BatchValidationError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* La emision se corto a mitad del lote (red, ARCA). Los resultados ya emitidos se imprimen antes que este
|
|
23
|
+
* error, para que nadie los vuelva a cargar y los duplique.
|
|
24
|
+
*/
|
|
25
|
+
export class BatchEmissionError extends AppError {
|
|
26
|
+
constructor(options) {
|
|
27
|
+
const pending = Array.from({ length: options.total - options.failedIndex }, (_, offset) => options.failedIndex + 1 + offset);
|
|
28
|
+
super([
|
|
29
|
+
`El lote se interrumpio en el comprobante #${options.failedIndex}: ${describeBatchItemError(options.cause)}`,
|
|
30
|
+
`Procesados: ${options.emitted} de ${options.total}.${pending.length > 0 ? ` Sin procesar: ${pending.map((index) => `#${index}`).join(', ')}.` : ''}`,
|
|
31
|
+
].join('\n'), {
|
|
32
|
+
code: 'BATCH_EMISSION_ERROR',
|
|
33
|
+
details: {
|
|
34
|
+
procesados: options.emitted,
|
|
35
|
+
fallo: options.failedIndex,
|
|
36
|
+
sinProcesar: pending,
|
|
37
|
+
total: options.total,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
this.name = 'BatchEmissionError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=billing.batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.batch.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAQ7C,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,gHAAgH;AAChH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,YAAmB,MAAiC,EAAE,KAAa;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtE,KAAK,CACH,CAAC,GAAG,MAAM,CAAC,MAAM,OAAO,KAAK,8DAA8D,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAC7G,IAAI,CACL,EACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;SAC/F,CACF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAmB,OAKlB;QACC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,EAC/C,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,CAChD,CAAC;QAEF,KAAK,CACH;YACE,6CAA6C,OAAO,CAAC,WAAW,KAAK,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5G,eAAe,OAAO,CAAC,OAAO,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;SACtJ,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE;gBACP,UAAU,EAAE,OAAO,CAAC,OAAO;gBAC3B,KAAK,EAAE,OAAO,CAAC,WAAW;gBAC1B,WAAW,EAAE,OAAO;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB;SACF,CACF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -40,6 +40,17 @@ const FCE_OPTIONAL_LABELS = {
|
|
|
40
40
|
'2101': 'CBU',
|
|
41
41
|
'2102': 'Alias CBU',
|
|
42
42
|
};
|
|
43
|
+
/** Una alicuota: su tasa. Varias: el desglose de neto e IVA de cada una. */
|
|
44
|
+
function formatIvaRows(iva) {
|
|
45
|
+
if (iva.length === 0) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const label = (aliquotId) => resolveIvaRateLabel(aliquotId) ?? String(aliquotId);
|
|
49
|
+
if (iva.length === 1 && iva[0]) {
|
|
50
|
+
return [['Alicuota IVA', label(iva[0].Id)]];
|
|
51
|
+
}
|
|
52
|
+
return iva.map((item) => [`IVA ${label(item.Id)}`, `${formatMoneyLabel(item.Importe)} sobre ${formatMoneyLabel(item.BaseImp)}`]);
|
|
53
|
+
}
|
|
43
54
|
function formatFriendlyPayloadRows(result) {
|
|
44
55
|
const payload = result.payload;
|
|
45
56
|
const rows = [
|
|
@@ -62,9 +73,7 @@ function formatFriendlyPayloadRows(result) {
|
|
|
62
73
|
['Cotizacion', formatDecimalLabel(payload.MonCotiz)],
|
|
63
74
|
['Importe neto', formatMoneyLabel(payload.ImpNeto)],
|
|
64
75
|
['Importe IVA', formatMoneyLabel(payload.ImpIVA)],
|
|
65
|
-
...(payload.Iva
|
|
66
|
-
? [['Alicuota IVA', resolveIvaRateLabel(payload.Iva[0].Id) ?? String(payload.Iva[0].Id)]]
|
|
67
|
-
: []),
|
|
76
|
+
...formatIvaRows(payload.Iva ?? []),
|
|
68
77
|
['Importe tributos', formatMoneyLabel(payload.ImpTrib)],
|
|
69
78
|
['Importe exento', formatMoneyLabel(payload.ImpOpEx)],
|
|
70
79
|
['Importe no gravado', formatMoneyLabel(payload.ImpTotConc)],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.display.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.display.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"billing.display.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.display.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,12 @@ export declare const billingIvaConditionSchema: z.ZodEnum<{
|
|
|
23
23
|
"sujeto-exento": "sujeto-exento";
|
|
24
24
|
"sujeto-no-categorizado": "sujeto-no-categorizado";
|
|
25
25
|
}>;
|
|
26
|
+
declare const IVA_RATE_VALUES: readonly ["0", "2.5", "5", "10.5", "21", "27"];
|
|
27
|
+
/** Nombres con que ARCA llama a las alicuotas mas usadas; se aceptan igual que el numero. */
|
|
28
|
+
export declare const IVA_RATE_ALIASES: Readonly<Record<string, (typeof IVA_RATE_VALUES)[number]>>;
|
|
29
|
+
export declare const IVA_RATE_HINT = "general (21), reducida (10.5), incrementada (27), cero (0), 5 o 2.5";
|
|
30
|
+
/** Acepta el alias o el numero: "reducida", "10,5", "10.5" o "10.5%". */
|
|
31
|
+
export declare function normalizeIvaRateInput(value: unknown): unknown;
|
|
26
32
|
export declare const billingIvaRateSchema: z.ZodPreprocess<z.ZodEnum<{
|
|
27
33
|
0: "0";
|
|
28
34
|
5: "5";
|
|
@@ -31,6 +37,18 @@ export declare const billingIvaRateSchema: z.ZodPreprocess<z.ZodEnum<{
|
|
|
31
37
|
21: "21";
|
|
32
38
|
27: "27";
|
|
33
39
|
}>, unknown>;
|
|
40
|
+
/** Una alicuota con el importe que le corresponde, IVA incluido (igual que --monto). */
|
|
41
|
+
declare const billingIvaRateAmountSchema: z.ZodObject<{
|
|
42
|
+
amount: z.ZodNumber;
|
|
43
|
+
rate: z.ZodPreprocess<z.ZodEnum<{
|
|
44
|
+
0: "0";
|
|
45
|
+
5: "5";
|
|
46
|
+
2.5: "2.5";
|
|
47
|
+
10.5: "10.5";
|
|
48
|
+
21: "21";
|
|
49
|
+
27: "27";
|
|
50
|
+
}>, unknown>;
|
|
51
|
+
}, z.core.$strip>;
|
|
34
52
|
export declare const billingCommandSchema: z.ZodObject<{
|
|
35
53
|
associatedPeriod: z.ZodOptional<z.ZodObject<{
|
|
36
54
|
desde: z.ZodOptional<z.ZodString>;
|
|
@@ -73,6 +91,17 @@ export declare const billingCommandSchema: z.ZodObject<{
|
|
|
73
91
|
21: "21";
|
|
74
92
|
27: "27";
|
|
75
93
|
}>, unknown>>;
|
|
94
|
+
ivaRateAmounts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
95
|
+
amount: z.ZodNumber;
|
|
96
|
+
rate: z.ZodPreprocess<z.ZodEnum<{
|
|
97
|
+
0: "0";
|
|
98
|
+
5: "5";
|
|
99
|
+
2.5: "2.5";
|
|
100
|
+
10.5: "10.5";
|
|
101
|
+
21: "21";
|
|
102
|
+
27: "27";
|
|
103
|
+
}>, unknown>;
|
|
104
|
+
}, z.core.$strip>>>;
|
|
76
105
|
dueDay: z.ZodOptional<z.ZodNumber>;
|
|
77
106
|
ivaCondition: z.ZodEnum<{
|
|
78
107
|
"consumidor-final": "consumidor-final";
|
|
@@ -88,7 +117,11 @@ export declare const billingCommandSchema: z.ZodObject<{
|
|
|
88
117
|
"sujeto-no-categorizado": "sujeto-no-categorizado";
|
|
89
118
|
}>;
|
|
90
119
|
paymentDueDate: z.ZodOptional<z.ZodString>;
|
|
120
|
+
pdf: z.ZodOptional<z.ZodBoolean>;
|
|
121
|
+
pdfDescription: z.ZodOptional<z.ZodString>;
|
|
91
122
|
pointOfSale: z.ZodOptional<z.ZodNumber>;
|
|
123
|
+
receiverAddress: z.ZodOptional<z.ZodString>;
|
|
124
|
+
receiverName: z.ZodOptional<z.ZodString>;
|
|
92
125
|
sameCurrency: z.ZodDefault<z.ZodBoolean>;
|
|
93
126
|
serviceEndDate: z.ZodOptional<z.ZodString>;
|
|
94
127
|
serviceStartDate: z.ZodOptional<z.ZodString>;
|
|
@@ -104,4 +137,6 @@ export type BillingConcept = z.infer<typeof billingConceptSchema>;
|
|
|
104
137
|
export type BillingDocumentType = z.infer<typeof billingDocumentTypeSchema>;
|
|
105
138
|
export type BillingIvaCondition = z.infer<typeof billingIvaConditionSchema>;
|
|
106
139
|
export type BillingIvaRate = z.infer<typeof billingIvaRateSchema>;
|
|
140
|
+
export type BillingIvaRateAmount = z.infer<typeof billingIvaRateAmountSchema>;
|
|
107
141
|
export type BillingCommandInput = z.infer<typeof billingCommandSchema>;
|
|
142
|
+
export {};
|
|
@@ -32,12 +32,31 @@ export const billingIvaConditionSchema = z.enum([
|
|
|
32
32
|
'sujeto-no-categorizado',
|
|
33
33
|
]);
|
|
34
34
|
const IVA_RATE_VALUES = ['0', '2.5', '5', '10.5', '21', '27'];
|
|
35
|
-
|
|
36
|
-
export const
|
|
37
|
-
|
|
38
|
-
:
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
/** Nombres con que ARCA llama a las alicuotas mas usadas; se aceptan igual que el numero. */
|
|
36
|
+
export const IVA_RATE_ALIASES = {
|
|
37
|
+
cero: '0',
|
|
38
|
+
general: '21',
|
|
39
|
+
incrementada: '27',
|
|
40
|
+
reducida: '10.5',
|
|
41
|
+
};
|
|
42
|
+
export const IVA_RATE_HINT = 'general (21), reducida (10.5), incrementada (27), cero (0), 5 o 2.5';
|
|
43
|
+
/** Acepta el alias o el numero: "reducida", "10,5", "10.5" o "10.5%". */
|
|
44
|
+
export function normalizeIvaRateInput(value) {
|
|
45
|
+
if (typeof value === 'number') {
|
|
46
|
+
return String(value);
|
|
47
|
+
}
|
|
48
|
+
if (typeof value !== 'string') {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
const normalized = value.trim().toLowerCase();
|
|
52
|
+
return IVA_RATE_ALIASES[normalized] ?? normalized.replace(',', '.').replace(/%$/, '');
|
|
53
|
+
}
|
|
54
|
+
export const billingIvaRateSchema = z.preprocess(normalizeIvaRateInput, z.enum(IVA_RATE_VALUES, { message: `La alicuota debe ser ${IVA_RATE_HINT}.` }));
|
|
55
|
+
/** Una alicuota con el importe que le corresponde, IVA incluido (igual que --monto). */
|
|
56
|
+
const billingIvaRateAmountSchema = z.object({
|
|
57
|
+
amount: z.number().positive(),
|
|
58
|
+
rate: billingIvaRateSchema,
|
|
59
|
+
});
|
|
41
60
|
const billingAssociatedVoucherSchema = z
|
|
42
61
|
.object({
|
|
43
62
|
cuit: z
|
|
@@ -82,10 +101,17 @@ export const billingCommandSchema = z.object({
|
|
|
82
101
|
exchangeRate: z.number().positive().optional(),
|
|
83
102
|
exemptAmount: z.number().positive().optional(),
|
|
84
103
|
ivaRate: billingIvaRateSchema.optional(),
|
|
104
|
+
ivaRateAmounts: z.array(billingIvaRateAmountSchema).min(1).optional(),
|
|
85
105
|
dueDay: z.number().int().min(1).max(31).optional(),
|
|
86
106
|
ivaCondition: billingIvaConditionSchema,
|
|
87
107
|
paymentDueDate: z.string().trim().optional(),
|
|
108
|
+
/** `true` con --exportar-pdf, `false` con --sin-pdf; sin definir, decide la config. */
|
|
109
|
+
pdf: z.boolean().optional(),
|
|
110
|
+
/** Solo para el PDF: ARCA no guarda descripcion ni datos del receptor. */
|
|
111
|
+
pdfDescription: z.string().trim().min(1).max(200).optional(),
|
|
88
112
|
pointOfSale: z.number().int().positive().optional(),
|
|
113
|
+
receiverAddress: z.string().trim().min(1).max(200).optional(),
|
|
114
|
+
receiverName: z.string().trim().min(1).max(200).optional(),
|
|
89
115
|
sameCurrency: z.boolean().default(false),
|
|
90
116
|
serviceEndDate: z.string().trim().optional(),
|
|
91
117
|
serviceStartDate: z.string().trim().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.schemas.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,uBAAuB,GAAG;IAC9B,CAAC,EAAE,WAAW;IACd,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;IACtB,EAAE,EAAE,qBAAqB;IACzB,uBAAuB,EAAE,qBAAqB;IAC9C,qBAAqB,EAAE,qBAAqB;IAC5C,CAAC,EAAE,WAAW;IACd,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,UAAU,CAC9C,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnD,OAAO,uBAAuB,CAAC,eAAuD,CAAC,IAAI,KAAK,CAAC;AACnG,CAAC,EACD,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAC1D,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,sBAAsB;IACtB,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,uBAAuB;IACvB,gDAAgD;IAChD,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;IACzB,eAAe;IACf,wBAAwB;CACzB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAEvE,
|
|
1
|
+
{"version":3,"file":"billing.schemas.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,17 @@ function formatRawResponse(result) {
|
|
|
6
6
|
mensaje: 'Sin emision real. Use --emitir para obtener una respuesta de ARCA.',
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
+
// Aditivo: la clave `pdf` solo aparece si se intento generar el PDF.
|
|
10
|
+
function formatPdfOutcome(result) {
|
|
11
|
+
if (!result.pdf) {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
if ('path' in result.pdf) {
|
|
15
|
+
return { pdf: { ruta: result.pdf.path } };
|
|
16
|
+
}
|
|
17
|
+
const { code, message, suggestion } = result.pdf.error;
|
|
18
|
+
return { pdf: { error: { codigo: code, mensaje: message, sugerencia: suggestion ?? null } } };
|
|
19
|
+
}
|
|
9
20
|
function formatVoucherSummary(result) {
|
|
10
21
|
return {
|
|
11
22
|
atajo: result.voucherKind.shortcut,
|
|
@@ -18,6 +29,7 @@ function formatVoucherSummary(result) {
|
|
|
18
29
|
eventos: result.response.events,
|
|
19
30
|
observaciones: result.response.observaciones,
|
|
20
31
|
observacion: result.response.observacion,
|
|
32
|
+
...formatPdfOutcome(result),
|
|
21
33
|
solicitud: result.payload,
|
|
22
34
|
previsualizacion: result.dryRun,
|
|
23
35
|
resultado: result.response.resultado,
|
|
@@ -32,6 +44,7 @@ export function serializeBillingResult(result, options = {}) {
|
|
|
32
44
|
avisos: result.warnings ?? [],
|
|
33
45
|
comprobante: result.voucherKind.displayName,
|
|
34
46
|
solicitud: result.payload,
|
|
47
|
+
...formatPdfOutcome(result),
|
|
35
48
|
previsualizacion: result.dryRun,
|
|
36
49
|
respuesta: formatRawResponse(result),
|
|
37
50
|
sugerencias: result.response.suggestions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.serialize.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.serialize.ts"],"names":[],"mappings":"AAMA,SAAS,iBAAiB,CACxB,MAA8B;IAE9B,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,oEAAoE;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA8B;IAC1D,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;QAClC,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC7B,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;QACxB,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc;QAC9C,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW;QAC3C,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC/B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC9B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC/B,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa;QAC5C,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;QACxC,SAAS,EAAE,MAAM,CAAC,OAAO;QACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM;QAC/B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;QACpC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;QACxC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAA8B,EAC9B,UAAmC,EAAE;IAErC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;YAClC,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW;YAC3C,SAAS,EAAE,MAAM,CAAC,OAAO;YACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM;YAC/B,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC;YACpC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;SACzC,CAAC;IACJ,CAAC;IAED,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAiC,EACjC,UAAmC,EAAE;IAErC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;QAClC,MAAM,EAAE,KAAK,GAAG,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW;QAC3C,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC;KAC3C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAA8B;IAE9B,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"billing.serialize.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.serialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CreateVoucherResultDto } from '@arcasdk/core/lib/application/dto/electronic-billing';
|
|
2
2
|
import type { INextVoucher } from '@arcasdk/core/lib/domain/types/voucher.types';
|
|
3
|
+
import type { PdfOutcome } from '../pdf/pdf.types';
|
|
3
4
|
import type { VoucherKindDefinition } from './billing.types';
|
|
4
5
|
export interface BillingGateway {
|
|
5
6
|
createNextVoucher(payload: INextVoucher): Promise<CreateVoucherResultDto>;
|
|
@@ -21,6 +22,8 @@ export interface BillingExecutionResult {
|
|
|
21
22
|
readonly dryRun: boolean;
|
|
22
23
|
readonly environment: 'produccion' | 'testing';
|
|
23
24
|
readonly payload: INextVoucher;
|
|
25
|
+
/** Solo si se intento generar el PDF. */
|
|
26
|
+
readonly pdf?: PdfOutcome;
|
|
24
27
|
readonly response: BillingResponseSummary;
|
|
25
28
|
readonly voucherKind: VoucherKindDefinition;
|
|
26
29
|
readonly warnings?: readonly string[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isCertificateExpiringSoon, readCertificateExpiry } from '../../lib/security/certificate.js';
|
|
2
2
|
import { readPemFile } from '../../lib/security/pem.js';
|
|
3
|
+
import { listMissingIssuerKeys } from '../pdf/pdf-issuer.js';
|
|
3
4
|
const CERTIFICATE_EXPIRY_WARNING_DAYS = 30;
|
|
4
5
|
function buildCertificateExpiryCheck(label, certPath) {
|
|
5
6
|
if (!certPath) {
|
|
@@ -103,6 +104,18 @@ export function buildConfigDoctorReport(config, runtimeCheck) {
|
|
|
103
104
|
detail: `Respuesta bruta por defecto: ${config.output.brutoPorDefecto ? 'si' : 'no'}.`,
|
|
104
105
|
label: 'Bruto',
|
|
105
106
|
});
|
|
107
|
+
// Solo se avisa si el PDF se genera siempre: con "preguntar" (por defecto) los datos se piden al generarlo.
|
|
108
|
+
const missingIssuerKeys = listMissingIssuerKeys(config);
|
|
109
|
+
if (missingIssuerKeys.length === 0) {
|
|
110
|
+
checks.push({ category: 'ok', detail: 'Datos del emisor completos para el PDF.', label: 'PDF' });
|
|
111
|
+
}
|
|
112
|
+
else if (config.pdf === 'siempre') {
|
|
113
|
+
checks.push({
|
|
114
|
+
category: 'warning',
|
|
115
|
+
detail: `Con pdf=siempre faltan datos del emisor: ${missingIssuerKeys.join(', ')}. Configurelos con "arcli config establecer".`,
|
|
116
|
+
label: 'PDF',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
106
119
|
if (runtimeCheck?.validation) {
|
|
107
120
|
checks.push({
|
|
108
121
|
category: 'ok',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-doctor.js","sourceRoot":"","sources":["../../../src/modules/config/config-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"config-doctor.js","sourceRoot":"","sources":["../../../src/modules/config/config-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type CanonicalConfigKey = 'alicuotaPorDefecto' | 'aliasCbu' | 'cbu' | 'cert.produccion' | 'cert.testing' | 'conceptoPorDefecto' | 'cotizacionPorDefecto' | 'cuit' | 'entornoPorDefecto' | 'ivaReceptorPorDefecto' | 'key.produccion' | 'key.testing' | 'monedaPorDefecto' | 'output.emitirPorDefecto' | 'output.jsonPorDefecto' | 'output.brutoPorDefecto' | 'puntoVentaPorDefecto' | 'ticketPath' | 'verificarFce';
|
|
1
|
+
export type CanonicalConfigKey = 'alicuotaPorDefecto' | 'aliasCbu' | 'cbu' | 'cert.produccion' | 'cert.testing' | 'conceptoPorDefecto' | 'cotizacionPorDefecto' | 'cuit' | 'emisor.condicionIva' | 'emisor.domicilio' | 'emisor.iibb' | 'emisor.inicioActividades' | 'emisor.logo' | 'emisor.razonSocial' | 'entornoPorDefecto' | 'ivaReceptorPorDefecto' | 'key.produccion' | 'key.testing' | 'monedaPorDefecto' | 'output.emitirPorDefecto' | 'output.jsonPorDefecto' | 'output.brutoPorDefecto' | 'pdf' | 'pdfCarpeta' | 'pdfNavegador' | 'puntoVentaPorDefecto' | 'ticketPath' | 'verificarFce';
|
|
2
2
|
export declare function parseConfigValue(key: CanonicalConfigKey, value: string): boolean | number | string;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
|
|
1
4
|
import { readPemFile } from '../../lib/security/pem.js';
|
|
2
|
-
import {
|
|
5
|
+
import { IVA_RATE_HINT } from '../billing/billing.schemas.js';
|
|
6
|
+
import { arcliDefaultConceptSchema, arcliDefaultIvaConditionSchema, arcliDefaultIvaRateSchema, arcliEnvironmentSchema, arcliPdfModeSchema, } from './config.schemas.js';
|
|
3
7
|
function parseBoolean(value) {
|
|
4
8
|
const normalizedValue = value.trim().toLowerCase();
|
|
5
9
|
if (normalizedValue === 'true' || normalizedValue === '1' || normalizedValue === 'si' || normalizedValue === 'sí') {
|
|
@@ -20,7 +24,7 @@ function parseNonEmptyString(value) {
|
|
|
20
24
|
function parseIvaRate(value) {
|
|
21
25
|
const result = arcliDefaultIvaRateSchema.safeParse(value);
|
|
22
26
|
if (!result.success) {
|
|
23
|
-
throw new Error(`La alicuota "${value}" no es valida. Use
|
|
27
|
+
throw new Error(`La alicuota "${value}" no es valida. Use ${IVA_RATE_HINT}.`);
|
|
24
28
|
}
|
|
25
29
|
return result.data;
|
|
26
30
|
}
|
|
@@ -57,6 +61,27 @@ function parsePemPath(value, label) {
|
|
|
57
61
|
readPemFile(normalizedValue, label);
|
|
58
62
|
return normalizedValue;
|
|
59
63
|
}
|
|
64
|
+
// La fecha de inicio de actividades es vieja: se pide con anio para no completarla con el actual.
|
|
65
|
+
function parseFullDate(value) {
|
|
66
|
+
if (!/^\d{1,2}([-/])\d{1,2}\1(\d{2}|\d{4})$/.test(value.trim())) {
|
|
67
|
+
throw new Error(`La fecha "${value}" no es valida. Use D/MM/YYYY, por ejemplo 1/03/2020.`);
|
|
68
|
+
}
|
|
69
|
+
return parseArgentineDateInputAsArcaDate(value);
|
|
70
|
+
}
|
|
71
|
+
function parseExistingFile(value, label) {
|
|
72
|
+
const path = resolve(parseNonEmptyString(value));
|
|
73
|
+
if (!existsSync(path)) {
|
|
74
|
+
throw new Error(`No se encontro ${label} en "${path}".`);
|
|
75
|
+
}
|
|
76
|
+
return path;
|
|
77
|
+
}
|
|
78
|
+
function parseLogoPath(value) {
|
|
79
|
+
const path = parseExistingFile(value, 'el logo');
|
|
80
|
+
if (!/\.(png|jpe?g)$/i.test(path)) {
|
|
81
|
+
throw new Error('El logo debe ser un archivo PNG o JPG.');
|
|
82
|
+
}
|
|
83
|
+
return path;
|
|
84
|
+
}
|
|
60
85
|
export function parseConfigValue(key, value) {
|
|
61
86
|
switch (key) {
|
|
62
87
|
case 'alicuotaPorDefecto':
|
|
@@ -71,6 +96,16 @@ export function parseConfigValue(key, value) {
|
|
|
71
96
|
return parsePositiveNumber(value);
|
|
72
97
|
case 'cuit':
|
|
73
98
|
return value.trim();
|
|
99
|
+
case 'emisor.condicionIva':
|
|
100
|
+
return arcliDefaultIvaConditionSchema.parse(value.trim().toLowerCase());
|
|
101
|
+
case 'emisor.domicilio':
|
|
102
|
+
case 'emisor.iibb':
|
|
103
|
+
case 'emisor.razonSocial':
|
|
104
|
+
return parseNonEmptyString(value);
|
|
105
|
+
case 'emisor.inicioActividades':
|
|
106
|
+
return parseFullDate(value);
|
|
107
|
+
case 'emisor.logo':
|
|
108
|
+
return parseLogoPath(value);
|
|
74
109
|
case 'entornoPorDefecto':
|
|
75
110
|
return arcliEnvironmentSchema.parse(value.trim().toLowerCase());
|
|
76
111
|
case 'ivaReceptorPorDefecto':
|
|
@@ -82,6 +117,12 @@ export function parseConfigValue(key, value) {
|
|
|
82
117
|
case 'output.jsonPorDefecto':
|
|
83
118
|
case 'output.brutoPorDefecto':
|
|
84
119
|
return parseBoolean(value);
|
|
120
|
+
case 'pdf':
|
|
121
|
+
return arcliPdfModeSchema.parse(value.trim().toLowerCase());
|
|
122
|
+
case 'pdfCarpeta':
|
|
123
|
+
return resolve(parseNonEmptyString(value));
|
|
124
|
+
case 'pdfNavegador':
|
|
125
|
+
return parseExistingFile(value, 'el navegador');
|
|
85
126
|
case 'puntoVentaPorDefecto':
|
|
86
127
|
return parsePositiveInteger(value);
|
|
87
128
|
case 'ticketPath':
|