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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { parseAmountInput } from '../../modules/interactive/amount-input.js';
|
|
2
|
+
import { BACK } from '../../modules/interactive/wizard.js';
|
|
3
|
+
import { askTextStep, chooseStep } from './prompts.js';
|
|
4
|
+
import { validateDate, validateExchangeRate, validateOptionalAmount } from './validators.js';
|
|
5
|
+
function describeCurrency(options) {
|
|
6
|
+
if (!options.currencyCode || options.currencyCode === 'PES' || options.currencyCode === 'ARS') {
|
|
7
|
+
return 'pesos';
|
|
8
|
+
}
|
|
9
|
+
return options.sameCurrency ? 'dolares, cotizacion oficial de ARCA' : `dolares, cotizacion ${options.exchangeRate}`;
|
|
10
|
+
}
|
|
11
|
+
function describeAmounts(options) {
|
|
12
|
+
const parts = [
|
|
13
|
+
options.exemptAmount ? `exento ${options.exemptAmount}` : undefined,
|
|
14
|
+
options.untaxedAmount ? `no gravado ${options.untaxedAmount}` : undefined,
|
|
15
|
+
].filter(Boolean);
|
|
16
|
+
return parts.length > 0 ? parts.join(', ') : 'sin exento ni no gravado';
|
|
17
|
+
}
|
|
18
|
+
async function askCurrency(current) {
|
|
19
|
+
const currency = await chooseStep('Moneda del comprobante:', [
|
|
20
|
+
{ name: 'Pesos', value: 'PES' },
|
|
21
|
+
{ name: 'Dolares (USD)', value: 'USD' },
|
|
22
|
+
]);
|
|
23
|
+
if (currency === BACK) {
|
|
24
|
+
return BACK;
|
|
25
|
+
}
|
|
26
|
+
if (currency === 'PES') {
|
|
27
|
+
return { ...current, currencyCode: 'ARS', exchangeRate: undefined, sameCurrency: false };
|
|
28
|
+
}
|
|
29
|
+
const payment = await chooseStep('¿Como te pagan?', [
|
|
30
|
+
{ description: 'Ingresas la cotizacion acordada', name: 'En pesos', value: 'pesos' },
|
|
31
|
+
{ description: 'Se usa la cotizacion oficial de ARCA', name: 'En dolares', value: 'dolares' },
|
|
32
|
+
]);
|
|
33
|
+
if (payment === BACK) {
|
|
34
|
+
return BACK;
|
|
35
|
+
}
|
|
36
|
+
if (payment === 'dolares') {
|
|
37
|
+
return { ...current, currencyCode: 'USD', exchangeRate: undefined, sameCurrency: true };
|
|
38
|
+
}
|
|
39
|
+
const rate = await askTextStep('Cotizacion del dolar:', { validate: validateExchangeRate });
|
|
40
|
+
return rate === BACK
|
|
41
|
+
? BACK
|
|
42
|
+
: { ...current, currencyCode: 'USD', exchangeRate: parseAmountInput(rate), sameCurrency: false };
|
|
43
|
+
}
|
|
44
|
+
async function askExemptAmounts(current) {
|
|
45
|
+
const exempt = await askTextStep('Parte exenta del monto total (vacio si no hay):', {
|
|
46
|
+
validate: validateOptionalAmount,
|
|
47
|
+
});
|
|
48
|
+
if (exempt === BACK) {
|
|
49
|
+
return BACK;
|
|
50
|
+
}
|
|
51
|
+
const untaxed = await askTextStep('Parte no gravada del monto total (vacio si no hay):', {
|
|
52
|
+
validate: validateOptionalAmount,
|
|
53
|
+
});
|
|
54
|
+
if (untaxed === BACK) {
|
|
55
|
+
return BACK;
|
|
56
|
+
}
|
|
57
|
+
return { ...current, exemptAmount: parseAmountInput(exempt), untaxedAmount: parseAmountInput(untaxed) };
|
|
58
|
+
}
|
|
59
|
+
async function askServicePeriod(current) {
|
|
60
|
+
const start = await askTextStep('Servicio desde:', { validate: validateDate });
|
|
61
|
+
if (start === BACK) {
|
|
62
|
+
return BACK;
|
|
63
|
+
}
|
|
64
|
+
const end = await askTextStep('Servicio hasta:', { validate: validateDate });
|
|
65
|
+
return end === BACK ? BACK : { ...current, serviceEndDate: end, serviceStartDate: start };
|
|
66
|
+
}
|
|
67
|
+
async function askPaymentDueDate(current) {
|
|
68
|
+
const due = await askTextStep('Vencimiento del pago:', { validate: validateDate });
|
|
69
|
+
return due === BACK ? BACK : { ...current, paymentDueDate: due };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Menu de opciones avanzadas antes de la vista previa. Cada opcion se puede cambiar varias veces;
|
|
73
|
+
* "Volver" en el menu vuelve al paso anterior del flujo, y "Volver" dentro de una opcion vuelve al menu.
|
|
74
|
+
*/
|
|
75
|
+
export async function askAdvancedOptions(initial, context) {
|
|
76
|
+
const usesService = context.concept !== 'productos';
|
|
77
|
+
const usesPaymentDue = usesService || context.voucherKind.family === 'factura-credito-electronica';
|
|
78
|
+
const allowsExempt = context.voucherKind.letter !== 'c';
|
|
79
|
+
let options = initial;
|
|
80
|
+
for (;;) {
|
|
81
|
+
const choice = await chooseStep('¿Agregamos algo mas?', [
|
|
82
|
+
{ name: 'No, ver la vista previa', value: 'listo' },
|
|
83
|
+
{ description: describeCurrency(options), name: 'Moneda extranjera', value: 'divisas' },
|
|
84
|
+
...(allowsExempt
|
|
85
|
+
? [{ description: describeAmounts(options), name: 'Importe exento o no gravado', value: 'exento' }]
|
|
86
|
+
: []),
|
|
87
|
+
...(usesService
|
|
88
|
+
? [
|
|
89
|
+
{
|
|
90
|
+
description: options.serviceStartDate
|
|
91
|
+
? `${options.serviceStartDate} al ${options.serviceEndDate}`
|
|
92
|
+
: 'hoy',
|
|
93
|
+
name: 'Periodo del servicio',
|
|
94
|
+
value: 'servicio',
|
|
95
|
+
},
|
|
96
|
+
]
|
|
97
|
+
: []),
|
|
98
|
+
...(usesPaymentDue
|
|
99
|
+
? [
|
|
100
|
+
{
|
|
101
|
+
description: options.paymentDueDate ?? 'por defecto',
|
|
102
|
+
name: 'Vencimiento del pago',
|
|
103
|
+
value: 'vencimiento',
|
|
104
|
+
},
|
|
105
|
+
]
|
|
106
|
+
: []),
|
|
107
|
+
]);
|
|
108
|
+
if (choice === BACK) {
|
|
109
|
+
return BACK;
|
|
110
|
+
}
|
|
111
|
+
if (choice === 'listo') {
|
|
112
|
+
return options;
|
|
113
|
+
}
|
|
114
|
+
const ask = {
|
|
115
|
+
divisas: askCurrency,
|
|
116
|
+
exento: askExemptAmounts,
|
|
117
|
+
servicio: askServicePeriod,
|
|
118
|
+
vencimiento: askPaymentDueDate,
|
|
119
|
+
}[choice];
|
|
120
|
+
const updated = await ask(options);
|
|
121
|
+
if (updated !== BACK) {
|
|
122
|
+
options = updated;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=advanced-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-options.js","sourceRoot":"","sources":["../../../src/cli/interactive/advanced-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
import { formatArcaDateAsArgentineDate } from '../../lib/dates/arca-date.js';
|
|
2
|
-
import { formatMoneyLabel } from '../../modules/billing/billing.labels.js';
|
|
3
1
|
import { invoiceKindChoices } from '../../modules/interactive/choices.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { BACK } from '../../modules/interactive/wizard.js';
|
|
3
|
+
import { listRecentVouchers } from '../../modules/vouchers/voucher-history.js';
|
|
4
|
+
import { formatVoucherListAsText } from '../../modules/vouchers/voucher-history.presenter.js';
|
|
5
|
+
import { writeTerminalOutput } from '../../ui/index.js';
|
|
6
6
|
import { startSpinner } from '../spinner.js';
|
|
7
|
-
import {
|
|
7
|
+
import { chooseStep } from './prompts.js';
|
|
8
8
|
import { requirePointOfSale } from './session.js';
|
|
9
|
-
import { formatReceiver, formatVoucherNumber } from './voucher-format.js';
|
|
10
9
|
export async function runHistoryFlow(session) {
|
|
11
10
|
const pointOfSale = requirePointOfSale(session);
|
|
12
11
|
if (!pointOfSale) {
|
|
13
12
|
return;
|
|
14
13
|
}
|
|
15
|
-
const voucherKind = await
|
|
16
|
-
|
|
17
|
-
const vouchers = await listRecentVouchers(session.historyGateway, pointOfSale, voucherKind.arcaType).finally(() => spinner?.stop());
|
|
18
|
-
if (vouchers.length === 0) {
|
|
19
|
-
writeTerminalOutput(noticePanel(`No hay ${voucherKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'muted'));
|
|
14
|
+
const voucherKind = await chooseStep('¿Que comprobantes queres ver?', invoiceKindChoices());
|
|
15
|
+
if (voucherKind === BACK) {
|
|
20
16
|
return;
|
|
21
17
|
}
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
formatReceiver(voucher).padEnd(20),
|
|
26
|
-
formatMoneyLabel(voucher.total).padStart(16),
|
|
27
|
-
voucher.cae ? `CAE ${voucher.cae}` : '',
|
|
28
|
-
].join(' '));
|
|
29
|
-
writeTerminalOutput(keyValuePanel(`Ultimas ${voucherKind.displayName} · PV ${pointOfSale} · ${session.runtime.environment}`, rows, undefined, 'wide', undefined, 'listing'));
|
|
18
|
+
const spinner = startSpinner('Consultando ARCA...');
|
|
19
|
+
const vouchers = await listRecentVouchers(session.historyGateway, pointOfSale, voucherKind.arcaType).finally(() => spinner?.stop());
|
|
20
|
+
writeTerminalOutput(formatVoucherListAsText({ environment: session.runtime.environment, pointOfSale, voucherKind, vouchers }));
|
|
30
21
|
}
|
|
31
22
|
//# sourceMappingURL=history.flow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/history.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"history.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/history.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAA2B,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,+BAA+B,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE5F,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAChH,OAAO,EAAE,IAAI,EAAE,CAChB,CAAC;IAEF,mBAAmB,CACjB,uBAAuB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAC1G,CAAC;AACJ,CAAC"}
|
|
@@ -54,7 +54,8 @@ function formatHeader(options) {
|
|
|
54
54
|
}
|
|
55
55
|
/** Asistente paso a paso encima del CLI. Ctrl+C cancela el flujo actual; en el menu, sale. */
|
|
56
56
|
export async function runInteractiveMode(options = {}) {
|
|
57
|
-
|
|
57
|
+
// Mismo aire debajo del logo que arriba: tres lineas en blanco.
|
|
58
|
+
writeTerminalOutput([renderLogo().trimEnd(), '', '', '', formatHeader(options)].join('\n'));
|
|
58
59
|
for (;;) {
|
|
59
60
|
let option;
|
|
60
61
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/cli/interactive/interactive-mode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/cli/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,22 @@
|
|
|
1
|
+
import { type BillingCommandInput } from '../../modules/billing/billing.schemas';
|
|
2
|
+
import type { VoucherKindDefinition } from '../../modules/billing/billing.types';
|
|
3
|
+
import { type WizardStep } from '../../modules/interactive/wizard';
|
|
4
|
+
import { type AdvancedOptions } from './advanced-options';
|
|
1
5
|
import { type InteractiveSession } from './session';
|
|
6
|
+
export interface InvoiceState {
|
|
7
|
+
readonly advanced: AdvancedOptions;
|
|
8
|
+
readonly cbu?: string;
|
|
9
|
+
readonly concept?: BillingCommandInput['concept'];
|
|
10
|
+
readonly documentNumber?: number;
|
|
11
|
+
readonly documentType?: BillingCommandInput['documentType'];
|
|
12
|
+
readonly ivaCondition?: BillingCommandInput['ivaCondition'];
|
|
13
|
+
readonly ivaRate?: BillingCommandInput['ivaRate'];
|
|
14
|
+
readonly totalAmount?: number;
|
|
15
|
+
readonly transferMode?: BillingCommandInput['transferMode'];
|
|
16
|
+
readonly voucherKind?: VoucherKindDefinition;
|
|
17
|
+
}
|
|
18
|
+
/** Pasos del flujo de factura; cada uno se puede deshacer con "Volver". */
|
|
19
|
+
export declare function invoiceSteps(session: InteractiveSession): Array<WizardStep<InvoiceState>>;
|
|
20
|
+
/** Arma la entrada del CLI con lo que respondio el usuario. */
|
|
21
|
+
export declare function buildInvoiceInput(state: InvoiceState, session: InteractiveSession): BillingCommandInput;
|
|
2
22
|
export declare function runInvoiceFlow(session: InteractiveSession): Promise<void>;
|
|
@@ -1,54 +1,132 @@
|
|
|
1
|
-
import { billingCommandSchema
|
|
1
|
+
import { billingCommandSchema } from '../../modules/billing/billing.schemas.js';
|
|
2
2
|
import { parseAmountInput } from '../../modules/interactive/amount-input.js';
|
|
3
3
|
import { conceptChoices, invoiceKindChoices, ivaConditionChoices, ivaRateChoices, receiverChoices, } from '../../modules/interactive/choices.js';
|
|
4
|
-
import {
|
|
4
|
+
import { BACK, runWizard } from '../../modules/interactive/wizard.js';
|
|
5
|
+
import { askAdvancedOptions } from './advanced-options.js';
|
|
6
|
+
import { askTextStep, chooseStep } from './prompts.js';
|
|
5
7
|
import { previewAndEmit } from './session.js';
|
|
6
8
|
import { normalizeDocumentNumber, validateAmount, validateCbu, validateCuit, validateDni } from './validators.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
const isFceInvoice = (state) => state.voucherKind?.family === 'factura-credito-electronica';
|
|
10
|
+
/** Pasos del flujo de factura; cada uno se puede deshacer con "Volver". */
|
|
11
|
+
export function invoiceSteps(session) {
|
|
12
|
+
const { config } = session.runtime;
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
name: 'comprobante',
|
|
16
|
+
run: async () => {
|
|
17
|
+
const voucherKind = await chooseStep('¿Que comprobante queres emitir?', invoiceKindChoices());
|
|
18
|
+
return voucherKind === BACK ? BACK : { voucherKind };
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'receptor',
|
|
23
|
+
run: async (state) => {
|
|
24
|
+
const documentType = await chooseStep('¿A quien le facturas?', receiverChoices(state.voucherKind?.letter ?? 'c'));
|
|
25
|
+
return documentType === BACK
|
|
26
|
+
? BACK
|
|
27
|
+
: {
|
|
28
|
+
documentNumber: undefined,
|
|
29
|
+
documentType,
|
|
30
|
+
ivaCondition: documentType === 'consumidor-final' ? 'consumidor-final' : undefined,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'documento',
|
|
36
|
+
run: async (state) => {
|
|
37
|
+
const isCuit = state.documentType === 'cuit';
|
|
38
|
+
const answer = await askTextStep(isCuit ? 'CUIT del receptor:' : 'DNI del receptor:', {
|
|
39
|
+
validate: isCuit ? validateCuit : validateDni,
|
|
40
|
+
});
|
|
41
|
+
return answer === BACK ? BACK : { documentNumber: normalizeDocumentNumber(answer) };
|
|
42
|
+
},
|
|
43
|
+
skip: (state) => state.documentType === 'consumidor-final',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'iva-receptor',
|
|
47
|
+
run: async (state) => {
|
|
48
|
+
const ivaCondition = await chooseStep('Condicion frente al IVA del receptor:', ivaConditionChoices(state.voucherKind?.letter ?? 'c'), config.ivaReceptorPorDefecto);
|
|
49
|
+
return ivaCondition === BACK ? BACK : { ivaCondition };
|
|
50
|
+
},
|
|
51
|
+
skip: (state) => state.documentType === 'consumidor-final',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'concepto',
|
|
55
|
+
run: async () => {
|
|
56
|
+
const concept = await chooseStep('¿Que estas facturando?', conceptChoices(), config.conceptoPorDefecto);
|
|
57
|
+
return concept === BACK ? BACK : { concept };
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'monto',
|
|
62
|
+
run: async () => {
|
|
63
|
+
const answer = await askTextStep('Monto total:', { validate: validateAmount });
|
|
64
|
+
return answer === BACK ? BACK : { totalAmount: parseAmountInput(answer) };
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'alicuota',
|
|
69
|
+
run: async () => {
|
|
70
|
+
const ivaRate = await chooseStep('Alicuota de IVA:', ivaRateChoices(), config.alicuotaPorDefecto ?? '21');
|
|
71
|
+
return ivaRate === BACK ? BACK : { ivaRate };
|
|
72
|
+
},
|
|
73
|
+
skip: (state) => state.voucherKind?.letter === 'c',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'cbu',
|
|
77
|
+
run: async () => {
|
|
78
|
+
const cbu = await askTextStep('CBU del emisor (22 digitos):', { validate: validateCbu });
|
|
79
|
+
return cbu === BACK ? BACK : { cbu };
|
|
80
|
+
},
|
|
81
|
+
skip: (state) => !isFceInvoice(state) || Boolean(config.cbu),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'transferencia',
|
|
85
|
+
run: async () => {
|
|
86
|
+
const transferMode = await chooseStep('Modalidad de transferencia:', [
|
|
87
|
+
{ description: 'La opcion habitual', name: 'Sistema de circulacion abierta (SCA)', value: 'sca' },
|
|
88
|
+
{ name: 'Agente de deposito colectivo (ADC)', value: 'adc' },
|
|
89
|
+
]);
|
|
90
|
+
return transferMode === BACK ? BACK : { transferMode };
|
|
91
|
+
},
|
|
92
|
+
skip: (state) => !isFceInvoice(state),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'avanzadas',
|
|
96
|
+
run: async (state) => {
|
|
97
|
+
const advanced = await askAdvancedOptions(state.advanced, {
|
|
98
|
+
concept: state.concept ?? 'servicios',
|
|
99
|
+
voucherKind: state.voucherKind,
|
|
100
|
+
});
|
|
101
|
+
return advanced === BACK ? BACK : { advanced };
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
];
|
|
26
105
|
}
|
|
27
|
-
|
|
106
|
+
/** Arma la entrada del CLI con lo que respondio el usuario. */
|
|
107
|
+
export function buildInvoiceInput(state, session) {
|
|
28
108
|
const { config } = session.runtime;
|
|
29
|
-
const voucherKind =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const ivaRate = voucherKind.letter === 'c'
|
|
38
|
-
? undefined
|
|
39
|
-
: await chooseOne('Alicuota de IVA:', ivaRateChoices(), config.alicuotaPorDefecto ?? '21');
|
|
40
|
-
const input = billingCommandSchema.parse({
|
|
41
|
-
...(await askFceInvoiceData(session, voucherKind)),
|
|
42
|
-
concept,
|
|
43
|
-
documentNumber,
|
|
44
|
-
documentType,
|
|
45
|
-
ivaCondition,
|
|
109
|
+
const voucherKind = state.voucherKind;
|
|
110
|
+
return billingCommandSchema.parse({
|
|
111
|
+
...state.advanced,
|
|
112
|
+
cbu: isFceInvoice(state) ? (state.cbu ?? config.cbu) : undefined,
|
|
113
|
+
concept: state.concept,
|
|
114
|
+
documentNumber: state.documentNumber,
|
|
115
|
+
documentType: state.documentType,
|
|
116
|
+
ivaCondition: state.ivaCondition,
|
|
46
117
|
// 21% sin alicuota configurada es el default del CLI. Si hay config, se deja explicito para que el
|
|
47
118
|
// comando equivalente no tome la de la config.
|
|
48
|
-
ivaRate: ivaRate === '21' && !config.alicuotaPorDefecto ? undefined : ivaRate,
|
|
119
|
+
ivaRate: state.ivaRate === '21' && !config.alicuotaPorDefecto ? undefined : state.ivaRate,
|
|
49
120
|
shortcut: voucherKind.shortcut,
|
|
50
|
-
totalAmount,
|
|
121
|
+
totalAmount: state.totalAmount,
|
|
122
|
+
transferMode: isFceInvoice(state) ? state.transferMode : undefined,
|
|
51
123
|
});
|
|
52
|
-
|
|
124
|
+
}
|
|
125
|
+
export async function runInvoiceFlow(session) {
|
|
126
|
+
const state = await runWizard(invoiceSteps(session), { advanced: { currencyCode: 'ARS', sameCurrency: false } });
|
|
127
|
+
if (!state) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
await previewAndEmit(session, buildInvoiceInput(state, session));
|
|
53
131
|
}
|
|
54
132
|
//# sourceMappingURL=invoice.flow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/invoice.flow.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"invoice.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/invoice.flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,26 @@
|
|
|
1
|
+
import { type BillingCommandInput, type BillingConcept } from '../../modules/billing/billing.schemas';
|
|
2
|
+
import type { VoucherKindDefinition } from '../../modules/billing/billing.types';
|
|
3
|
+
import { type WizardStep } from '../../modules/interactive/wizard';
|
|
4
|
+
import { type IssuedVoucher } from '../../modules/vouchers/voucher-history';
|
|
1
5
|
import { type InteractiveSession } from './session';
|
|
6
|
+
export interface NoteState {
|
|
7
|
+
readonly cancellation?: boolean;
|
|
8
|
+
readonly concept?: BillingConcept;
|
|
9
|
+
readonly documentNumber?: number;
|
|
10
|
+
readonly documentType?: BillingCommandInput['documentType'];
|
|
11
|
+
readonly invoice?: IssuedVoucher;
|
|
12
|
+
readonly invoiceKind?: VoucherKindDefinition;
|
|
13
|
+
readonly ivaCondition?: BillingCommandInput['ivaCondition'];
|
|
14
|
+
readonly ivaRate?: BillingCommandInput['ivaRate'];
|
|
15
|
+
readonly kind?: 'credito' | 'debito';
|
|
16
|
+
readonly periodFrom?: string;
|
|
17
|
+
readonly periodTo?: string;
|
|
18
|
+
/** Sobre una factura de la lista o sobre un periodo (solo notas comunes). */
|
|
19
|
+
readonly target?: 'factura' | 'periodo';
|
|
20
|
+
readonly totalAmount?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Pasos del flujo de notas; cada uno se puede deshacer con "Volver". */
|
|
23
|
+
export declare function noteSteps(session: InteractiveSession, pointOfSale: number): Array<WizardStep<NoteState>>;
|
|
24
|
+
/** Arma la entrada del CLI con lo que respondio el usuario. */
|
|
25
|
+
export declare function buildNoteInput(state: NoteState, session: InteractiveSession, pointOfSale: number): BillingCommandInput;
|
|
2
26
|
export declare function runNoteFlow(session: InteractiveSession): Promise<void>;
|