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.
Files changed (151) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/README.md +3 -1
  3. package/dist/cli/commands/billing.command.batch.d.ts +22 -0
  4. package/dist/cli/commands/billing.command.batch.js +51 -0
  5. package/dist/cli/commands/billing.command.batch.js.map +1 -0
  6. package/dist/cli/commands/billing.command.options.js +7 -1
  7. package/dist/cli/commands/billing.command.options.js.map +1 -1
  8. package/dist/cli/commands/billing.command.output.d.ts +2 -0
  9. package/dist/cli/commands/billing.command.output.js +15 -1
  10. package/dist/cli/commands/billing.command.output.js.map +1 -1
  11. package/dist/cli/commands/billing.command.parser.d.ts +7 -0
  12. package/dist/cli/commands/billing.command.parser.js +96 -11
  13. package/dist/cli/commands/billing.command.parser.js.map +1 -1
  14. package/dist/cli/commands/billing.command.pdf.d.ts +24 -0
  15. package/dist/cli/commands/billing.command.pdf.js +130 -0
  16. package/dist/cli/commands/billing.command.pdf.js.map +1 -0
  17. package/dist/cli/commands/billing.command.shared.js +28 -12
  18. package/dist/cli/commands/billing.command.shared.js.map +1 -1
  19. package/dist/cli/commands/config.command.js +6 -6
  20. package/dist/cli/commands/config.command.js.map +1 -1
  21. package/dist/cli/commands/pdf.command.d.ts +2 -0
  22. package/dist/cli/commands/pdf.command.js +78 -0
  23. package/dist/cli/commands/pdf.command.js.map +1 -0
  24. package/dist/cli/commands/vouchers.command.d.ts +2 -0
  25. package/dist/cli/commands/vouchers.command.js +96 -0
  26. package/dist/cli/commands/vouchers.command.js.map +1 -0
  27. package/dist/cli/help.d.ts +1 -0
  28. package/dist/cli/help.js +23 -1
  29. package/dist/cli/help.js.map +1 -1
  30. package/dist/cli/interactive/advanced-options.d.ts +14 -0
  31. package/dist/cli/interactive/advanced-options.js +126 -0
  32. package/dist/cli/interactive/advanced-options.js.map +1 -0
  33. package/dist/cli/interactive/history.flow.js +10 -19
  34. package/dist/cli/interactive/history.flow.js.map +1 -1
  35. package/dist/cli/interactive/interactive-mode.js +2 -1
  36. package/dist/cli/interactive/interactive-mode.js.map +1 -1
  37. package/dist/cli/interactive/invoice.flow.d.ts +20 -0
  38. package/dist/cli/interactive/invoice.flow.js +120 -42
  39. package/dist/cli/interactive/invoice.flow.js.map +1 -1
  40. package/dist/cli/interactive/note.flow.d.ts +24 -0
  41. package/dist/cli/interactive/note.flow.js +205 -68
  42. package/dist/cli/interactive/note.flow.js.map +1 -1
  43. package/dist/cli/interactive/pdf.flow.d.ts +5 -0
  44. package/dist/cli/interactive/pdf.flow.js +89 -0
  45. package/dist/cli/interactive/pdf.flow.js.map +1 -0
  46. package/dist/cli/interactive/prompts.d.ts +8 -0
  47. package/dist/cli/interactive/prompts.js +22 -0
  48. package/dist/cli/interactive/prompts.js.map +1 -1
  49. package/dist/cli/interactive/session.d.ts +1 -1
  50. package/dist/cli/interactive/session.js +5 -1
  51. package/dist/cli/interactive/session.js.map +1 -1
  52. package/dist/cli/interactive/validators.d.ts +4 -0
  53. package/dist/cli/interactive/validators.js +18 -0
  54. package/dist/cli/interactive/validators.js.map +1 -1
  55. package/dist/cli/program.js +4 -0
  56. package/dist/cli/program.js.map +1 -1
  57. package/dist/cli/version.d.ts +1 -1
  58. package/dist/cli/version.js +1 -1
  59. package/dist/modules/billing/billing.amounts.d.ts +1 -1
  60. package/dist/modules/billing/billing.amounts.js +34 -13
  61. package/dist/modules/billing/billing.amounts.js.map +1 -1
  62. package/dist/modules/billing/billing.batch.d.ts +23 -0
  63. package/dist/modules/billing/billing.batch.js +43 -0
  64. package/dist/modules/billing/billing.batch.js.map +1 -0
  65. package/dist/modules/billing/billing.display.js +12 -3
  66. package/dist/modules/billing/billing.display.js.map +1 -1
  67. package/dist/modules/billing/billing.schemas.d.ts +35 -0
  68. package/dist/modules/billing/billing.schemas.js +32 -6
  69. package/dist/modules/billing/billing.schemas.js.map +1 -1
  70. package/dist/modules/billing/billing.serialize.js +13 -0
  71. package/dist/modules/billing/billing.serialize.js.map +1 -1
  72. package/dist/modules/billing/billing.types.internal.d.ts +3 -0
  73. package/dist/modules/config/config-doctor.js +13 -0
  74. package/dist/modules/config/config-doctor.js.map +1 -1
  75. package/dist/modules/config/config-value-parser.d.ts +1 -1
  76. package/dist/modules/config/config-value-parser.js +43 -2
  77. package/dist/modules/config/config-value-parser.js.map +1 -1
  78. package/dist/modules/config/config.presenter.d.ts +6 -2
  79. package/dist/modules/config/config.presenter.js +25 -6
  80. package/dist/modules/config/config.presenter.js.map +1 -1
  81. package/dist/modules/config/config.schemas.d.ts +42 -0
  82. package/dist/modules/config/config.schemas.js +29 -0
  83. package/dist/modules/config/config.schemas.js.map +1 -1
  84. package/dist/modules/config/config.service.d.ts +8 -0
  85. package/dist/modules/config/config.service.js +21 -0
  86. package/dist/modules/config/config.service.js.map +1 -1
  87. package/dist/modules/examples/examples.js +1 -0
  88. package/dist/modules/examples/examples.js.map +1 -1
  89. package/dist/modules/interactive/equivalent-command.js +13 -0
  90. package/dist/modules/interactive/equivalent-command.js.map +1 -1
  91. package/dist/modules/interactive/wizard.d.ts +16 -0
  92. package/dist/modules/interactive/wizard.js +33 -0
  93. package/dist/modules/interactive/wizard.js.map +1 -0
  94. package/dist/modules/pdf/pdf-data.mapper.d.ts +4 -0
  95. package/dist/modules/pdf/pdf-data.mapper.js +117 -0
  96. package/dist/modules/pdf/pdf-data.mapper.js.map +1 -0
  97. package/dist/modules/pdf/pdf-decision.d.ts +14 -0
  98. package/dist/modules/pdf/pdf-decision.js +19 -0
  99. package/dist/modules/pdf/pdf-decision.js.map +1 -0
  100. package/dist/modules/pdf/pdf-file-name.d.ts +3 -0
  101. package/dist/modules/pdf/pdf-file-name.js +7 -0
  102. package/dist/modules/pdf/pdf-file-name.js.map +1 -0
  103. package/dist/modules/pdf/pdf-issuer.d.ts +8 -0
  104. package/dist/modules/pdf/pdf-issuer.js +43 -0
  105. package/dist/modules/pdf/pdf-issuer.js.map +1 -0
  106. package/dist/modules/pdf/pdf.errors.d.ts +10 -0
  107. package/dist/modules/pdf/pdf.errors.js +11 -0
  108. package/dist/modules/pdf/pdf.errors.js.map +1 -0
  109. package/dist/modules/pdf/pdf.types.d.ts +91 -0
  110. package/dist/modules/pdf/pdf.types.js +2 -0
  111. package/dist/modules/pdf/pdf.types.js.map +1 -0
  112. package/dist/modules/storybook/showcase.js +6 -2
  113. package/dist/modules/storybook/showcase.js.map +1 -1
  114. package/dist/modules/{interactive → vouchers}/voucher-history.d.ts +9 -0
  115. package/dist/modules/{interactive → vouchers}/voucher-history.js +1 -0
  116. package/dist/modules/vouchers/voucher-history.js.map +1 -0
  117. package/dist/modules/vouchers/voucher-history.presenter.d.ts +22 -0
  118. package/dist/modules/vouchers/voucher-history.presenter.js +108 -0
  119. package/dist/modules/vouchers/voucher-history.presenter.js.map +1 -0
  120. package/dist/services/arca/arca-voucher-history.gateway.d.ts +1 -1
  121. package/dist/services/arca/arca-voucher-history.gateway.js +9 -1
  122. package/dist/services/arca/arca-voucher-history.gateway.js.map +1 -1
  123. package/dist/services/pdf/pdf-browser.d.ts +5 -0
  124. package/dist/services/pdf/pdf-browser.js +54 -0
  125. package/dist/services/pdf/pdf-browser.js.map +1 -0
  126. package/dist/services/pdf/pdf-exporter.d.ts +19 -0
  127. package/dist/services/pdf/pdf-exporter.js +47 -0
  128. package/dist/services/pdf/pdf-exporter.js.map +1 -0
  129. package/dist/services/pdf/pdf-plugin.d.ts +50 -0
  130. package/dist/services/pdf/pdf-plugin.js +143 -0
  131. package/dist/services/pdf/pdf-plugin.js.map +1 -0
  132. package/dist/ui/presenters/errors.presenter.js +22 -1
  133. package/dist/ui/presenters/errors.presenter.js.map +1 -1
  134. package/dist/ui/presenters/errors.zod-presenter.d.ts +2 -0
  135. package/dist/ui/presenters/errors.zod-presenter.js +4 -0
  136. package/dist/ui/presenters/errors.zod-presenter.js.map +1 -1
  137. package/dist/ui/presenters/index.d.ts +2 -0
  138. package/dist/ui/presenters/index.js +2 -0
  139. package/dist/ui/presenters/index.js.map +1 -1
  140. package/dist/ui/presenters/pdf.presenter.d.ts +13 -0
  141. package/dist/ui/presenters/pdf.presenter.js +46 -0
  142. package/dist/ui/presenters/pdf.presenter.js.map +1 -0
  143. package/dist/ui/primitives/text.d.ts +5 -0
  144. package/dist/ui/primitives/text.js +10 -1
  145. package/dist/ui/primitives/text.js.map +1 -1
  146. package/llms.txt +25 -5
  147. package/package.json +1 -1
  148. package/dist/cli/interactive/voucher-format.d.ts +0 -4
  149. package/dist/cli/interactive/voucher-format.js +0 -28
  150. package/dist/cli/interactive/voucher-format.js.map +0 -1
  151. package/dist/modules/interactive/voucher-history.js.map +0 -1
@@ -1,35 +1,38 @@
1
1
  import { formatArcaDateAsArgentineDate } from '../../lib/dates/arca-date.js';
2
2
  import { formatMoneyLabel } from '../../modules/billing/billing.labels.js';
3
- import { billingCommandSchema } from '../../modules/billing/billing.schemas.js';
3
+ import { billingCommandSchema, } from '../../modules/billing/billing.schemas.js';
4
4
  import { parseAmountInput } from '../../modules/interactive/amount-input.js';
5
- import { invoiceKindChoices, ivaConditionChoices, ivaRateChoices, noteKindChoices, } from '../../modules/interactive/choices.js';
6
- import { inferIvaRate, listRecentVouchers, resolveDocumentType, } from '../../modules/interactive/voucher-history.js';
5
+ import { conceptChoices, invoiceKindChoices, ivaConditionChoices, ivaRateChoices, noteKindChoices, receiverChoices, } from '../../modules/interactive/choices.js';
6
+ import { BACK, runWizard } from '../../modules/interactive/wizard.js';
7
+ import { inferIvaRate, listRecentVouchers, resolveDocumentType, } from '../../modules/vouchers/voucher-history.js';
8
+ import { formatVoucherSummary } from '../../modules/vouchers/voucher-history.presenter.js';
7
9
  import { noticePanel, writeTerminalOutput } from '../../ui/index.js';
8
10
  import { startSpinner } from '../spinner.js';
9
- import { askText, chooseOne, confirm } from './prompts.js';
11
+ import { askTextStep, chooseStep } from './prompts.js';
10
12
  import { previewAndEmit, requirePointOfSale } from './session.js';
11
- import { validateAmount } from './validators.js';
12
- import { formatVoucherSummary } from './voucher-format.js';
13
+ import { normalizeDocumentNumber, validateAmount, validateCuit, validateDate, validateDni } from './validators.js';
13
14
  const CONCEPTS_BY_CODE = {
14
15
  1: 'productos',
15
16
  2: 'servicios',
16
17
  3: 'productos-servicios',
17
18
  };
18
- async function askNoteAmount(kind, invoice) {
19
- if (kind === 'debito') {
20
- return parseAmountInput(await askText('Monto de la nota de debito:', { validate: validateAmount }));
19
+ const isPeriod = (state) => state.target === 'periodo';
20
+ async function askNoteAmount(state) {
21
+ const invoice = state.invoice;
22
+ const label = state.kind === 'debito' ? 'Monto de la nota de debito:' : 'Monto de la nota de credito:';
23
+ if (state.kind === 'credito' && invoice) {
24
+ const scope = await chooseStep('¿Total o parcial?', [
25
+ { name: `Anular el total (${formatMoneyLabel(invoice.total)})`, value: 'total' },
26
+ { name: 'Parcial (ingresar monto)', value: 'parcial' },
27
+ ]);
28
+ if (scope === BACK || scope === 'total') {
29
+ return scope === BACK ? BACK : invoice.total;
30
+ }
21
31
  }
22
- const scope = await chooseOne('¿Total o parcial?', [
23
- { name: `Anular el total (${formatMoneyLabel(invoice.total)})`, value: 'total' },
24
- { name: 'Parcial (ingresar monto)', value: 'parcial' },
25
- ]);
26
- if (scope === 'total') {
27
- return invoice.total;
28
- }
29
- const answer = await askText('Monto de la nota de credito:', {
32
+ const answer = await askTextStep(label, {
30
33
  validate: (value) => {
31
34
  const valid = validateAmount(value);
32
- if (valid !== true) {
35
+ if (valid !== true || state.kind !== 'credito' || !invoice) {
33
36
  return valid;
34
37
  }
35
38
  return (parseAmountInput(value) ?? 0) <= invoice.total
@@ -37,63 +40,197 @@ async function askNoteAmount(kind, invoice) {
37
40
  : `No puede superar el total de la factura (${formatMoneyLabel(invoice.total)}).`;
38
41
  },
39
42
  });
40
- return parseAmountInput(answer);
43
+ return answer === BACK ? BACK : parseAmountInput(answer);
44
+ }
45
+ /** Pasos del flujo de notas; cada uno se puede deshacer con "Volver". */
46
+ export function noteSteps(session, pointOfSale) {
47
+ return [
48
+ {
49
+ name: 'nota',
50
+ run: async () => {
51
+ const kind = await chooseStep('¿Que nota queres emitir?', [
52
+ { name: 'Nota de credito (descuento, devolucion o anulacion)', value: 'credito' },
53
+ { name: 'Nota de debito (cargo adicional)', value: 'debito' },
54
+ ]);
55
+ return kind === BACK ? BACK : { kind };
56
+ },
57
+ },
58
+ {
59
+ name: 'tipo-factura',
60
+ run: async () => {
61
+ const invoiceKind = await chooseStep('¿Sobre que tipo de factura?', invoiceKindChoices());
62
+ return invoiceKind === BACK ? BACK : { invoiceKind, target: 'factura' };
63
+ },
64
+ },
65
+ {
66
+ name: 'asociacion',
67
+ run: async () => {
68
+ const target = await chooseStep('¿A que la asociamos?', [
69
+ { description: 'Elegis una de las ultimas emitidas', name: 'A una factura', value: 'factura' },
70
+ {
71
+ description: 'Por ejemplo, un descuento sobre todo el mes',
72
+ name: 'A un periodo',
73
+ value: 'periodo',
74
+ },
75
+ ]);
76
+ return target === BACK ? BACK : { target };
77
+ },
78
+ // ARCA no acepta periodo asociado en notas FCE (10196).
79
+ skip: (state) => Boolean(state.invoiceKind?.isElectronicCredit),
80
+ },
81
+ {
82
+ name: 'factura',
83
+ run: async (state) => {
84
+ const invoiceKind = state.invoiceKind;
85
+ const spinner = startSpinner('Buscando las ultimas facturas en ARCA...');
86
+ const invoices = await listRecentVouchers(session.historyGateway, pointOfSale, invoiceKind.arcaType).finally(() => spinner?.stop());
87
+ if (invoices.length === 0) {
88
+ writeTerminalOutput(noticePanel(`No hay ${invoiceKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'warning'));
89
+ return BACK;
90
+ }
91
+ const invoice = await chooseStep(`¿Sobre que ${invoiceKind.displayName}?`, invoices.map((item) => ({
92
+ description: item.cae ? `CAE ${item.cae}` : undefined,
93
+ name: formatVoucherSummary(pointOfSale, item),
94
+ value: item,
95
+ })));
96
+ if (invoice === BACK) {
97
+ return BACK;
98
+ }
99
+ const documentType = resolveDocumentType(invoice.documentTypeCode);
100
+ if (!documentType) {
101
+ writeTerminalOutput(noticePanel('La factura tiene un tipo de documento que el asistente no soporta. Usa los flags del CLI.', 'warning'));
102
+ return BACK;
103
+ }
104
+ // La nota hereda de la factura el receptor, el concepto y la alicuota (si se puede deducir).
105
+ return {
106
+ concept: CONCEPTS_BY_CODE[invoice.concept ?? 2] ?? 'servicios',
107
+ documentNumber: documentType === 'consumidor-final' ? undefined : invoice.documentNumber,
108
+ documentType,
109
+ invoice,
110
+ ivaCondition: documentType === 'consumidor-final' ? 'consumidor-final' : undefined,
111
+ ivaRate: invoiceKind.letter === 'c' ? undefined : inferIvaRate(invoice.netAmount, invoice.ivaAmount),
112
+ };
113
+ },
114
+ skip: isPeriod,
115
+ },
116
+ {
117
+ name: 'periodo',
118
+ run: async () => {
119
+ const periodFrom = await askTextStep('Periodo desde:', { validate: validateDate });
120
+ if (periodFrom === BACK) {
121
+ return BACK;
122
+ }
123
+ const periodTo = await askTextStep('Periodo hasta:', { validate: validateDate });
124
+ return periodTo === BACK ? BACK : { invoice: undefined, periodFrom, periodTo };
125
+ },
126
+ skip: (state) => !isPeriod(state),
127
+ },
128
+ {
129
+ name: 'receptor',
130
+ run: async (state) => {
131
+ const documentType = await chooseStep('¿A quien va la nota?', receiverChoices(state.invoiceKind?.letter ?? 'c'));
132
+ return documentType === BACK
133
+ ? BACK
134
+ : {
135
+ documentNumber: undefined,
136
+ documentType,
137
+ ivaCondition: documentType === 'consumidor-final' ? 'consumidor-final' : undefined,
138
+ };
139
+ },
140
+ skip: (state) => !isPeriod(state),
141
+ },
142
+ {
143
+ name: 'documento',
144
+ run: async (state) => {
145
+ const isCuit = state.documentType === 'cuit';
146
+ const answer = await askTextStep(isCuit ? 'CUIT del receptor:' : 'DNI del receptor:', {
147
+ validate: isCuit ? validateCuit : validateDni,
148
+ });
149
+ return answer === BACK ? BACK : { documentNumber: normalizeDocumentNumber(answer) };
150
+ },
151
+ skip: (state) => !isPeriod(state) || state.documentType === 'consumidor-final',
152
+ },
153
+ {
154
+ name: 'concepto',
155
+ run: async () => {
156
+ const concept = await chooseStep('¿Que concepto ajusta la nota?', conceptChoices());
157
+ return concept === BACK ? BACK : { concept };
158
+ },
159
+ skip: (state) => !isPeriod(state),
160
+ },
161
+ {
162
+ name: 'monto',
163
+ run: async (state) => {
164
+ const totalAmount = await askNoteAmount(state);
165
+ return totalAmount === BACK ? BACK : { totalAmount };
166
+ },
167
+ },
168
+ {
169
+ name: 'iva-receptor',
170
+ run: async (state) => {
171
+ // ARCA no devuelve la condicion IVA de la factura, asi que se pregunta, filtrada por la letra.
172
+ const ivaCondition = await chooseStep('Condicion frente al IVA del receptor:', ivaConditionChoices(state.invoiceKind?.letter ?? 'c'));
173
+ return ivaCondition === BACK ? BACK : { ivaCondition };
174
+ },
175
+ skip: (state) => state.documentType === 'consumidor-final',
176
+ },
177
+ {
178
+ name: 'alicuota',
179
+ run: async (state) => {
180
+ const ivaRate = await chooseStep(isPeriod(state) ? 'Alicuota de IVA:' : 'Alicuota de IVA de la factura:', ivaRateChoices());
181
+ return ivaRate === BACK ? BACK : { ivaRate };
182
+ },
183
+ // En la C no hay IVA; si la factura deja deducir la alicuota, no se pregunta.
184
+ skip: (state) => state.invoiceKind?.letter === 'c' || (!isPeriod(state) && Boolean(state.ivaRate)),
185
+ },
186
+ {
187
+ name: 'anulacion',
188
+ run: async () => {
189
+ const cancellation = await chooseStep('¿El comprador rechazo la factura?', [
190
+ { name: 'Si, es una nota de anulacion', value: true },
191
+ { name: 'No', value: false },
192
+ ]);
193
+ return cancellation === BACK ? BACK : { cancellation };
194
+ },
195
+ skip: (state) => !state.invoiceKind?.isElectronicCredit,
196
+ },
197
+ ];
198
+ }
199
+ /** Arma la entrada del CLI con lo que respondio el usuario. */
200
+ export function buildNoteInput(state, session, pointOfSale) {
201
+ const invoiceKind = state.invoiceKind;
202
+ const noteKind = noteKindChoices(state.kind ?? 'credito', invoiceKind);
203
+ const invoice = state.invoice;
204
+ return billingCommandSchema.parse({
205
+ associatedPeriod: isPeriod(state) ? { desde: state.periodFrom, hasta: state.periodTo } : undefined,
206
+ associatedVoucher: !isPeriod(state) && invoice
207
+ ? {
208
+ cuit: String(session.runtime.context.cuit),
209
+ fecha: formatArcaDateAsArgentineDate(invoice.date),
210
+ numero: invoice.number,
211
+ puntoVenta: pointOfSale,
212
+ shortcut: invoiceKind.shortcut,
213
+ }
214
+ : undefined,
215
+ cancellation: state.cancellation ?? false,
216
+ concept: state.concept,
217
+ documentNumber: state.documentType === 'consumidor-final' ? undefined : state.documentNumber,
218
+ documentType: state.documentType,
219
+ ivaCondition: state.ivaCondition,
220
+ ivaRate: state.ivaRate === '21' && !session.runtime.config.alicuotaPorDefecto ? undefined : state.ivaRate,
221
+ shortcut: noteKind.shortcut,
222
+ totalAmount: state.totalAmount,
223
+ });
41
224
  }
42
225
  export async function runNoteFlow(session) {
43
226
  const pointOfSale = requirePointOfSale(session);
44
227
  if (!pointOfSale) {
45
228
  return;
46
229
  }
47
- const kind = await chooseOne('¿Que nota queres emitir?', [
48
- { name: 'Nota de credito (descuento, devolucion o anulacion)', value: 'credito' },
49
- { name: 'Nota de debito (cargo adicional)', value: 'debito' },
50
- ]);
51
- const invoiceKind = await chooseOne('¿Sobre que tipo de factura?', invoiceKindChoices());
52
- const spinner = startSpinner('Buscando las ultimas facturas en ARCA...');
53
- const invoices = await listRecentVouchers(session.historyGateway, pointOfSale, invoiceKind.arcaType).finally(() => spinner?.stop());
54
- if (invoices.length === 0) {
55
- writeTerminalOutput(noticePanel(`No hay ${invoiceKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'warning'));
230
+ const state = await runWizard(noteSteps(session, pointOfSale), {});
231
+ if (!state) {
56
232
  return;
57
233
  }
58
- const invoice = await chooseOne(`¿Sobre que ${invoiceKind.displayName}?`, invoices.map((item) => ({
59
- description: item.cae ? `CAE ${item.cae}` : undefined,
60
- name: formatVoucherSummary(pointOfSale, item),
61
- value: item,
62
- })));
63
- const documentType = resolveDocumentType(invoice.documentTypeCode);
64
- if (!documentType) {
65
- writeTerminalOutput(noticePanel('La factura tiene un tipo de documento que el asistente no soporta. Usa los flags del CLI.', 'warning'));
66
- return;
67
- }
68
- const noteKind = noteKindChoices(kind, invoiceKind);
69
- const totalAmount = await askNoteAmount(kind, invoice);
70
- const ivaCondition = documentType === 'consumidor-final'
71
- ? 'consumidor-final'
72
- : await chooseOne('Condicion frente al IVA del receptor:', ivaConditionChoices(invoiceKind.letter));
73
- const inferredRate = invoiceKind.letter === 'c' ? undefined : inferIvaRate(invoice.netAmount, invoice.ivaAmount);
74
- const ivaRate = invoiceKind.letter === 'c'
75
- ? undefined
76
- : (inferredRate ?? (await chooseOne('Alicuota de IVA de la factura:', ivaRateChoices())));
77
- const cancellation = noteKind.isElectronicCredit
78
- ? await confirm('¿El comprador rechazo la factura?', 'Si, es una nota de anulacion', 'No')
79
- : false;
80
- const input = billingCommandSchema.parse({
81
- associatedVoucher: {
82
- cuit: String(session.runtime.context.cuit),
83
- fecha: formatArcaDateAsArgentineDate(invoice.date),
84
- numero: invoice.number,
85
- puntoVenta: pointOfSale,
86
- shortcut: invoiceKind.shortcut,
87
- },
88
- cancellation,
89
- concept: CONCEPTS_BY_CODE[invoice.concept ?? 2] ?? 'servicios',
90
- documentNumber: documentType === 'consumidor-final' ? undefined : invoice.documentNumber,
91
- documentType,
92
- ivaCondition,
93
- ivaRate: ivaRate === '21' && !session.runtime.config.alicuotaPorDefecto ? undefined : ivaRate,
94
- shortcut: noteKind.shortcut,
95
- totalAmount,
96
- });
97
- await previewAndEmit(session, input);
234
+ await previewAndEmit(session, buildNoteInput(state, session, pointOfSale));
98
235
  }
99
236
  //# sourceMappingURL=note.flow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"note.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/note.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,YAAY,EAEZ,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAA2B,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,gBAAgB,GAAmC;IACvD,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,qBAAqB;CACzB,CAAC;AAEF,KAAK,UAAU,aAAa,CAAC,IAA0B,EAAE,OAAsB;IAC7E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC,MAAM,OAAO,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE;QACjD,EAAE,IAAI,EAAE,oBAAoB,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAgB,EAAE;QACzF,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAkB,EAAE;KAChE,CAAC,CAAC;IAEH,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,8BAA8B,EAAE;QAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK;gBACpD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,4CAA4C,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACtF,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,0BAA0B,EAAE;QACvD,EAAE,IAAI,EAAE,qDAAqD,EAAE,KAAK,EAAE,SAAkB,EAAE;QAC1F,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,QAAiB,EAAE;KACvE,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,6BAA6B,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,YAAY,CAAC,0CAA0C,CAAC,CAAC;IACzE,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,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,mBAAmB,CACjB,WAAW,CAAC,UAAU,WAAW,CAAC,WAAW,kCAAkC,WAAW,GAAG,EAAE,SAAS,CAAC,CAC1G,CAAC;QAEF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAC7B,cAAc,WAAW,CAAC,WAAW,GAAG,EACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC;QAC7C,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,mBAAmB,CACjB,WAAW,CACT,2FAA2F,EAC3F,SAAS,CACV,CACF,CAAC;QAEF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,YAAY,GAChB,YAAY,KAAK,kBAAkB;QACjC,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,MAAM,SAAS,CAAC,uCAAuC,EAAE,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACxG,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACjH,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,KAAK,GAAG;QACxB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,SAAS,CAAC,gCAAgC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,YAAY,GAAG,QAAQ,CAAC,kBAAkB;QAC9C,CAAC,CAAC,MAAM,OAAO,CAAC,mCAAmC,EAAE,8BAA8B,EAAE,IAAI,CAAC;QAC1F,CAAC,CAAC,KAAK,CAAC;IAEV,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC;QACvC,iBAAiB,EAAE;YACjB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1C,KAAK,EAAE,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC;YAClD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,WAAW;YACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B;QACD,YAAY;QACZ,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,WAAW;QAC9D,cAAc,EAAE,YAAY,KAAK,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;QACxF,YAAY;QACZ,YAAY;QACZ,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC7F,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"note.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/note.flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { BillingCommandInput } from '../../modules/billing/billing.schemas';
2
+ import type { BillingExecutionResult } from '../../modules/billing/billing.types.internal';
3
+ import type { ArcliConfig } from '../../modules/config/config.schemas';
4
+ /** Despues de emitir: pregunta si se quiere el PDF (segun la config) y los datos que solo van en el PDF. */
5
+ export declare function offerPdf(config: ArcliConfig, input: BillingCommandInput, result: BillingExecutionResult): Promise<void>;
@@ -0,0 +1,89 @@
1
+ import { ConfigService } from '../../modules/config/config.service.js';
2
+ import { parseConfigValue } from '../../modules/config/config-value-parser.js';
3
+ import { canHavePdf, resolvePdfDecision } from '../../modules/pdf/pdf-decision.js';
4
+ import { listMissingIssuerKeys } from '../../modules/pdf/pdf-issuer.js';
5
+ import { writePdfOutcomes } from '../commands/billing.command.output.js';
6
+ import { attachPdfs } from '../commands/billing.command.pdf.js';
7
+ import { askText, confirm } from './prompts.js';
8
+ const ISSUER_QUESTIONS = {
9
+ cuit: 'CUIT del emisor',
10
+ 'emisor.domicilio': 'Domicilio comercial del emisor',
11
+ 'emisor.inicioActividades': 'Fecha de inicio de actividades (D/MM/YYYY)',
12
+ 'emisor.razonSocial': 'Razon social o nombre del emisor',
13
+ };
14
+ function validateConfigValue(key, value) {
15
+ try {
16
+ parseConfigValue(key, value);
17
+ return true;
18
+ }
19
+ catch (error) {
20
+ return error instanceof Error ? error.message : String(error);
21
+ }
22
+ }
23
+ function applyIssuerValue(config, key, value) {
24
+ const parsed = String(parseConfigValue(key, value));
25
+ if (key === 'cuit') {
26
+ return { ...config, cuit: parsed };
27
+ }
28
+ const field = key.slice('emisor.'.length);
29
+ return { ...config, emisor: { ...config.emisor, [field]: parsed } };
30
+ }
31
+ /** Pide los datos del emisor que faltan y ofrece guardarlos para no volver a preguntarlos. */
32
+ async function completeIssuer(config) {
33
+ const missing = listMissingIssuerKeys(config);
34
+ if (missing.length === 0) {
35
+ return config;
36
+ }
37
+ let completed = config;
38
+ const answers = [];
39
+ for (const key of missing) {
40
+ const value = await askText(ISSUER_QUESTIONS[key], { validate: (text) => validateConfigValue(key, text) });
41
+ answers.push([key, value]);
42
+ completed = applyIssuerValue(completed, key, value);
43
+ }
44
+ if (await confirm('¿Guardamos estos datos en la config para la proxima?', 'Si, guardar', 'No, solo esta vez')) {
45
+ const service = new ConfigService();
46
+ try {
47
+ for (const [key, value] of answers) {
48
+ service.setValue(key, value);
49
+ }
50
+ }
51
+ finally {
52
+ service.close();
53
+ }
54
+ }
55
+ return completed;
56
+ }
57
+ /** Despues de emitir: pregunta si se quiere el PDF (segun la config) y los datos que solo van en el PDF. */
58
+ export async function offerPdf(config, input, result) {
59
+ if (!canHavePdf(result)) {
60
+ return;
61
+ }
62
+ const decision = resolvePdfDecision({ interactive: true, mode: config.pdf });
63
+ if (decision === 'omitir') {
64
+ return;
65
+ }
66
+ if (decision === 'preguntar' && !(await confirm('¿Generamos el PDF del comprobante?', 'Si, generar el PDF', 'No'))) {
67
+ return;
68
+ }
69
+ const description = await askText('Descripcion del comprobante (Enter para "Segun detalle")');
70
+ const receiverName = await askText('Nombre o razon social del receptor (Enter para omitir)');
71
+ const receiverAddress = await askText('Domicilio del receptor (Enter para omitir)');
72
+ const completedConfig = await completeIssuer(config);
73
+ const withPdf = await attachPdfs({
74
+ config: completedConfig,
75
+ inputs: [
76
+ {
77
+ ...input,
78
+ pdf: true,
79
+ pdfDescription: description || undefined,
80
+ receiverAddress: receiverAddress || undefined,
81
+ receiverName: receiverName || undefined,
82
+ },
83
+ ],
84
+ interactive: true,
85
+ results: [result],
86
+ });
87
+ writePdfOutcomes([result], withPdf);
88
+ }
89
+ //# sourceMappingURL=pdf.flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/pdf.flow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type Back } from '../../modules/interactive/wizard';
1
2
  export interface Choice<T> {
2
3
  readonly description?: string;
3
4
  readonly name: string;
@@ -11,3 +12,10 @@ export declare function askText(message: string, options?: {
11
12
  export declare function confirm(message: string, yesLabel: string, noLabel?: string): Promise<boolean>;
12
13
  /** Ctrl+C dentro de un prompt de @inquirer. */
13
14
  export declare function isPromptCancellation(error: unknown): boolean;
15
+ /** Como chooseOne, con una opcion "← Volver" al final para el motor de pasos. */
16
+ export declare function chooseStep<T>(message: string, choices: ReadonlyArray<Choice<T>>, defaultValue?: T): Promise<Back | T>;
17
+ /** Como askText, pero escribir "<" vuelve al paso anterior. */
18
+ export declare function askTextStep(message: string, options?: {
19
+ readonly defaultValue?: string;
20
+ readonly validate?: (value: string) => string | true;
21
+ }): Promise<Back | string>;
@@ -1,5 +1,7 @@
1
1
  import input from '@inquirer/input';
2
2
  import select from '@inquirer/select';
3
+ import { BACK } from '../../modules/interactive/wizard.js';
4
+ import { colorize } from '../../ui/index.js';
3
5
  export async function chooseOne(message, choices, defaultValue) {
4
6
  return select({ choices: [...choices], default: defaultValue, loop: false, message, pageSize: 12 });
5
7
  }
@@ -21,4 +23,24 @@ export async function confirm(message, yesLabel, noLabel = 'Cancelar') {
21
23
  export function isPromptCancellation(error) {
22
24
  return error instanceof Error && error.name === 'ExitPromptError';
23
25
  }
26
+ const BACK_CHOICE = { name: '← Volver', value: BACK };
27
+ const BACK_TEXT = '<';
28
+ /** Como chooseOne, con una opcion "← Volver" al final para el motor de pasos. */
29
+ export async function chooseStep(message, choices, defaultValue) {
30
+ return select({
31
+ choices: [...choices, BACK_CHOICE],
32
+ default: defaultValue,
33
+ loop: false,
34
+ message,
35
+ pageSize: 12,
36
+ });
37
+ }
38
+ /** Como askText, pero escribir "<" vuelve al paso anterior. */
39
+ export async function askTextStep(message, options = {}) {
40
+ const answer = await askText(`${message} ${colorize('(< para volver)', 'muted')}`, {
41
+ defaultValue: options.defaultValue,
42
+ validate: (value) => (value.trim() === BACK_TEXT ? true : (options.validate?.(value) ?? true)),
43
+ });
44
+ return answer === BACK_TEXT ? BACK : answer;
45
+ }
24
46
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/interactive/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAQtC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,OAAe,EAAE,OAAiC,EAAE,YAAgB;IACrG,OAAO,MAAM,CAAI,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,UAAoG,EAAE;IAEtG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC,YAAY;QAC7B,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,QAAgB,EAAE,OAAO,GAAG,UAAU;IACnF,OAAO,SAAS,CAAC,OAAO,EAAE;QACxB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;QAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;KAChC,CAAC,CAAC;AACL,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/interactive/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAa,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAQpC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,OAAe,EAAE,OAAiC,EAAE,YAAgB;IACrG,OAAO,MAAM,CAAI,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,UAAoG,EAAE;IAEtG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC,YAAY;QAC7B,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,QAAgB,EAAE,OAAO,GAAG,UAAU;IACnF,OAAO,SAAS,CAAC,OAAO,EAAE;QACxB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;QAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;KAChC,CAAC,CAAC;AACL,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACpE,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;AAC/D,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,OAAiC,EACjC,YAAgB;IAEhB,OAAO,MAAM,CAAW;QACtB,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC;QAClC,OAAO,EAAE,YAAY;QACrB,IAAI,EAAE,KAAK;QACX,OAAO;QACP,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,UAAoG,EAAE;IAEtG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,IAAI,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAAE,EAAE;QACjF,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;KAC/F,CAAC,CAAC;IAEH,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC"}
@@ -2,7 +2,7 @@ import type { Arca } from '@arcasdk/core';
2
2
  import type { BillingCommandInput } from '../../modules/billing/billing.schemas';
3
3
  import { BillingService } from '../../modules/billing/billing.service';
4
4
  import type { BillingGateway } from '../../modules/billing/billing.types.internal';
5
- import type { VoucherHistoryGateway } from '../../modules/interactive/voucher-history';
5
+ import type { VoucherHistoryGateway } from '../../modules/vouchers/voucher-history';
6
6
  import { type ResolvedArcaRuntime } from '../../services/arca/arca-context.resolver';
7
7
  import type { GlobalCliOptions } from '../types';
8
8
  export interface InteractiveSession {
@@ -8,6 +8,7 @@ import { ArcaVoucherHistoryGateway } from '../../services/arca/arca-voucher-hist
8
8
  import { colorize, noticePanel, renderPanel, writeTerminalOutput } from '../../ui/index.js';
9
9
  import { formatBillingOutputs } from '../commands/billing.command.output.js';
10
10
  import { startSpinner } from '../spinner.js';
11
+ import { offerPdf } from './pdf.flow.js';
11
12
  import { confirm } from './prompts.js';
12
13
  const PREVIEW_GATEWAY = {
13
14
  createNextVoucher: async () => {
@@ -49,7 +50,9 @@ function formatEquivalentCommand(command) {
49
50
  */
50
51
  export async function previewAndEmit(session, rawInput) {
51
52
  const { runtime, service } = session;
52
- const input = { ...rawInput, dryRun: true, emit: false };
53
+ // Con "me pagan en dolares" la cotizacion es la oficial de ARCA: se consulta antes de la vista previa.
54
+ const resolved = await service.resolveExchangeRate(rawInput, session.billingGateway);
55
+ const input = { ...resolved, dryRun: true, emit: false };
53
56
  const warnings = runtime.config.verificarFce
54
57
  ? await service.resolveFceWarnings(input, new ArcaFceObligationGateway(session.arca))
55
58
  : [];
@@ -77,6 +80,7 @@ export async function previewAndEmit(session, rawInput) {
77
80
  });
78
81
  spinner?.stop();
79
82
  writeTerminalOutput(formatBillingOutputs([result], { environment: runtime.environment, previewShown: true, raw: false }));
83
+ await offerPdf(runtime.config, input, result);
80
84
  }
81
85
  catch (error) {
82
86
  spinner?.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/interactive/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/interactive/session.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,7 @@ export declare function validateCuit(value: string): string | true;
3
3
  export declare function validateDni(value: string): string | true;
4
4
  export declare function validateCbu(value: string): string | true;
5
5
  export declare function normalizeDocumentNumber(value: string): number;
6
+ export declare function validateDate(value: string): string | true;
7
+ /** Monto opcional: vacio es "no", si no tiene que ser un monto valido. */
8
+ export declare function validateOptionalAmount(value: string): string | true;
9
+ export declare function validateExchangeRate(value: string): string | true;
@@ -1,3 +1,4 @@
1
+ import { parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
1
2
  import { parseAmountInput } from '../../modules/interactive/amount-input.js';
2
3
  export function validateAmount(value) {
3
4
  return parseAmountInput(value) ? true : 'Ingresa un monto mayor a 0, por ejemplo 150000 o 1500,50.';
@@ -14,4 +15,21 @@ export function validateCbu(value) {
14
15
  export function normalizeDocumentNumber(value) {
15
16
  return Number(value.replace(/[-.]/g, ''));
16
17
  }
18
+ export function validateDate(value) {
19
+ try {
20
+ parseArgentineDateInputAsArcaDate(value);
21
+ return true;
22
+ }
23
+ catch {
24
+ return 'Fecha invalida. Usa D/M/AAAA, D/M o solo el dia (por ejemplo 15/10).';
25
+ }
26
+ }
27
+ /** Monto opcional: vacio es "no", si no tiene que ser un monto valido. */
28
+ export function validateOptionalAmount(value) {
29
+ return value.trim() === '' ? true : validateAmount(value);
30
+ }
31
+ export function validateExchangeRate(value) {
32
+ const rate = parseAmountInput(value);
33
+ return rate && rate !== 1 ? true : 'Ingresa la cotizacion acordada, por ejemplo 1200 o 1185,50.';
34
+ }
17
35
  //# sourceMappingURL=validators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/cli/interactive/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2DAA2D,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/cli/interactive/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2DAA2D,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC;QACH,iCAAiC,CAAC,KAAK,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sEAAsE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAErC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6DAA6D,CAAC;AACnG,CAAC"}
@@ -6,7 +6,9 @@ import { registerConfigCommand } from './commands/config.command.js';
6
6
  import { registerExamplesCommand } from './commands/examples.command.js';
7
7
  import { registerFceObligationCommand } from './commands/fce-obligation.command.js';
8
8
  import { registerInteractiveCommand } from './commands/interactive.command.js';
9
+ import { registerPdfCommand } from './commands/pdf.command.js';
9
10
  import { registerStorybookCommand } from './commands/storybook.command.js';
11
+ import { registerVoucherQueryCommands } from './commands/vouchers.command.js';
10
12
  import { configureSpanishHelp, createProgramHeader, createProgramHelp } from './help.js';
11
13
  import { CLI_VERSION } from './version.js';
12
14
  export function createProgram() {
@@ -24,6 +26,8 @@ export function createProgram() {
24
26
  registerExamplesCommand(program);
25
27
  registerFceObligationCommand(program);
26
28
  registerInteractiveCommand(program);
29
+ registerPdfCommand(program);
30
+ registerVoucherQueryCommands(program);
27
31
  registerStorybookCommand(program);
28
32
  program.addHelpText('beforeAll', ({ command }) => (command === program ? createProgramHeader() : ''));
29
33
  program.addHelpText('afterAll', ({ command }) => (command === program ? createProgramHelp() : ''));