arcli 1.5.0 → 1.7.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 +35 -1
- package/README.md +39 -9
- package/dist/cli/commands/parameters.command.d.ts +2 -0
- package/dist/cli/commands/parameters.command.js +88 -0
- package/dist/cli/commands/parameters.command.js.map +1 -0
- package/dist/cli/help.js +4 -4
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/advanced-options.d.ts +10 -3
- package/dist/cli/interactive/advanced-options.js +85 -45
- package/dist/cli/interactive/advanced-options.js.map +1 -1
- package/dist/cli/interactive/config.flow.d.ts +5 -0
- package/dist/cli/interactive/config.flow.js +211 -0
- package/dist/cli/interactive/config.flow.js.map +1 -0
- package/dist/cli/interactive/interactive-mode.js +38 -9
- package/dist/cli/interactive/interactive-mode.js.map +1 -1
- package/dist/cli/interactive/invoice.flow.d.ts +0 -2
- package/dist/cli/interactive/invoice.flow.js +5 -22
- package/dist/cli/interactive/invoice.flow.js.map +1 -1
- package/dist/cli/interactive/lookup.flow.d.ts +5 -0
- package/dist/cli/interactive/lookup.flow.js +72 -0
- package/dist/cli/interactive/lookup.flow.js.map +1 -0
- package/dist/cli/interactive/prompts.d.ts +5 -0
- package/dist/cli/interactive/prompts.js +14 -0
- package/dist/cli/interactive/prompts.js.map +1 -1
- package/dist/cli/interactive/repeat.flow.d.ts +13 -0
- package/dist/cli/interactive/repeat.flow.js +166 -0
- package/dist/cli/interactive/repeat.flow.js.map +1 -0
- package/dist/cli/program.js +2 -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/lib/links.d.ts +2 -0
- package/dist/lib/links.js +3 -0
- package/dist/lib/links.js.map +1 -0
- package/dist/modules/config/config-doctor.js +2 -1
- package/dist/modules/config/config-doctor.js.map +1 -1
- package/dist/modules/config/config.service.d.ts +3 -1
- package/dist/modules/config/config.service.js +4 -0
- package/dist/modules/config/config.service.js.map +1 -1
- package/dist/modules/interactive/config-fields.d.ts +22 -0
- package/dist/modules/interactive/config-fields.js +133 -0
- package/dist/modules/interactive/config-fields.js.map +1 -0
- package/dist/modules/interactive/periods.d.ts +7 -0
- package/dist/modules/interactive/periods.js +13 -0
- package/dist/modules/interactive/periods.js.map +1 -0
- package/dist/modules/parameters/parameters.d.ts +50 -0
- package/dist/modules/parameters/parameters.js +34 -0
- package/dist/modules/parameters/parameters.js.map +1 -0
- package/dist/modules/parameters/parameters.presenter.d.ts +12 -0
- package/dist/modules/parameters/parameters.presenter.js +103 -0
- package/dist/modules/parameters/parameters.presenter.js.map +1 -0
- package/dist/modules/parameters/status.d.ts +31 -0
- package/dist/modules/parameters/status.js +35 -0
- package/dist/modules/parameters/status.js.map +1 -0
- package/dist/modules/pdf/pdf-data.mapper.js +9 -2
- package/dist/modules/pdf/pdf-data.mapper.js.map +1 -1
- package/dist/services/arca/arca-parameters.gateway.d.ts +10 -0
- package/dist/services/arca/arca-parameters.gateway.js +71 -0
- package/dist/services/arca/arca-parameters.gateway.js.map +1 -0
- package/llms.txt +2 -0
- package/package.json +2 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { CERTIFICATE_GUIDE_URL } from '../../lib/links.js';
|
|
3
|
+
import { ConfigService, validateConfigValue } from '../../modules/config/config.service.js';
|
|
4
|
+
import { buildConfigDoctorReport } from '../../modules/config/config-doctor.js';
|
|
5
|
+
import { CONFIG_FIELDS, CONFIG_GROUP_LABELS, describeConfigValue, getConfigField, } from '../../modules/interactive/config-fields.js';
|
|
6
|
+
import { BACK, runWizard } from '../../modules/interactive/wizard.js';
|
|
7
|
+
import { PdfPlugin } from '../../services/pdf/pdf-plugin.js';
|
|
8
|
+
import { formatConfigDoctorAsText, formatPdfPluginStatusAsText, noticePanel, writeTerminalOutput } from '../../ui/index.js';
|
|
9
|
+
import { buildRuntimeCheck } from '../commands/config.command.js';
|
|
10
|
+
import { startSpinner } from '../spinner.js';
|
|
11
|
+
import { askTextStep, chooseOne, chooseStep, confirm } from './prompts.js';
|
|
12
|
+
const CLEAR = '__borrar__';
|
|
13
|
+
const KEEP = '__mantener__';
|
|
14
|
+
/** Lo que pide la configuracion guiada, en orden. Los primeros cuatro son obligatorios para emitir. */
|
|
15
|
+
const GUIDED_KEYS = [
|
|
16
|
+
'cuit',
|
|
17
|
+
'cert.testing',
|
|
18
|
+
'key.testing',
|
|
19
|
+
'puntoVenta',
|
|
20
|
+
'concepto',
|
|
21
|
+
'ivaReceptor',
|
|
22
|
+
];
|
|
23
|
+
const ISSUER_KEYS = ['emisor.razonSocial', 'emisor.domicilio', 'emisor.inicioActividades'];
|
|
24
|
+
function withConfigService(run) {
|
|
25
|
+
const service = new ConfigService();
|
|
26
|
+
try {
|
|
27
|
+
service.ensureInitialized();
|
|
28
|
+
return run(service);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
service.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function readConfig() {
|
|
35
|
+
return withConfigService((service) => service.getConfig());
|
|
36
|
+
}
|
|
37
|
+
function validate(key, value) {
|
|
38
|
+
try {
|
|
39
|
+
validateConfigValue(key, value);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return error instanceof Error ? error.message : String(error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Pregunta un dato y lo guarda en el momento, asi cortar a mitad no pierde lo respondido.
|
|
48
|
+
* Devuelve BACK, o si se guardo, borro o dejo como estaba.
|
|
49
|
+
*/
|
|
50
|
+
async function askField(field, config, options = {}) {
|
|
51
|
+
const current = field.read(config);
|
|
52
|
+
let value;
|
|
53
|
+
if (field.choices) {
|
|
54
|
+
const answer = await chooseStep(`${field.label}:`, [
|
|
55
|
+
...field.choices.map((choice) => ({ name: choice, value: choice })),
|
|
56
|
+
...(current && !options.required ? [{ name: 'Quitar el valor por defecto', value: CLEAR }] : []),
|
|
57
|
+
...(!current && !options.required ? [{ name: 'Dejar sin configurar', value: KEEP }] : []),
|
|
58
|
+
], current);
|
|
59
|
+
if (answer === BACK) {
|
|
60
|
+
return BACK;
|
|
61
|
+
}
|
|
62
|
+
if (answer === KEEP) {
|
|
63
|
+
return 'sin-cambios';
|
|
64
|
+
}
|
|
65
|
+
value = answer;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Con un valor actual, Enter lo deja igual (es el default del prompt); "-" lo borra.
|
|
69
|
+
const canClear = !options.required && Boolean(current);
|
|
70
|
+
const hint = [field.hint, canClear ? '"-" para borrar' : undefined].filter(Boolean).join(', ');
|
|
71
|
+
const answer = await askTextStep(`${field.label}${hint ? ` (${hint})` : ''}:`, {
|
|
72
|
+
defaultValue: current,
|
|
73
|
+
validate: (text) => {
|
|
74
|
+
if (canClear && text.trim() === '-') {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
if (!text.trim()) {
|
|
78
|
+
return options.required ? 'Este dato es obligatorio.' : true;
|
|
79
|
+
}
|
|
80
|
+
return validate(field.key, text);
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
if (answer === BACK) {
|
|
84
|
+
return BACK;
|
|
85
|
+
}
|
|
86
|
+
if (!answer.trim()) {
|
|
87
|
+
return 'sin-cambios';
|
|
88
|
+
}
|
|
89
|
+
value = canClear && answer.trim() === '-' ? CLEAR : answer;
|
|
90
|
+
}
|
|
91
|
+
if (value === CLEAR) {
|
|
92
|
+
withConfigService((service) => service.unsetValue(field.key));
|
|
93
|
+
return 'borrado';
|
|
94
|
+
}
|
|
95
|
+
if (value === current) {
|
|
96
|
+
return 'sin-cambios';
|
|
97
|
+
}
|
|
98
|
+
withConfigService((service) => service.setValue(field.key, value));
|
|
99
|
+
return 'guardado';
|
|
100
|
+
}
|
|
101
|
+
function fieldSteps(keys, required) {
|
|
102
|
+
return keys.map((key) => ({
|
|
103
|
+
name: key,
|
|
104
|
+
run: async () => {
|
|
105
|
+
if (key === 'cert.testing' && !readConfig().cert.testing) {
|
|
106
|
+
writeTerminalOutput(noticePanel(`¿No tenes certificado todavia? Guia paso a paso: ${CERTIFICATE_GUIDE_URL}`, 'muted'));
|
|
107
|
+
}
|
|
108
|
+
const result = await askField(getConfigField(key), readConfig(), { required: required.includes(key) });
|
|
109
|
+
return result === BACK ? BACK : {};
|
|
110
|
+
},
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
/** Configuracion guiada: lo minimo para emitir, los defaults mas usados y, si se quiere, los datos del PDF. */
|
|
114
|
+
export async function runGuidedSetup() {
|
|
115
|
+
writeTerminalOutput(noticePanel(`Vamos a dejar todo listo para emitir. Si todavia no tenes certificado, la guia esta en ${CERTIFICATE_GUIDE_URL}`, 'info'));
|
|
116
|
+
const completed = await runWizard(fieldSteps(GUIDED_KEYS, ['cuit', 'cert.testing', 'key.testing', 'puntoVenta']), {});
|
|
117
|
+
if (!completed) {
|
|
118
|
+
writeTerminalOutput(noticePanel('Configuracion guiada cancelada. Lo ya respondido quedo guardado.', 'muted'));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (await confirm('¿Cargamos tambien los datos del emisor para el PDF?', 'Si', 'Ahora no')) {
|
|
122
|
+
await runWizard(fieldSteps(ISSUER_KEYS, []), {});
|
|
123
|
+
}
|
|
124
|
+
writeTerminalOutput(noticePanel('Configuracion guardada. Ya podes emitir en testing.', 'success'));
|
|
125
|
+
}
|
|
126
|
+
async function runChangeField() {
|
|
127
|
+
const config = readConfig();
|
|
128
|
+
const field = await chooseStep('¿Que dato queres cambiar?', CONFIG_FIELDS.map((candidate) => ({
|
|
129
|
+
description: `${CONFIG_GROUP_LABELS[candidate.group]} · ${describeConfigValue(candidate, config)}`,
|
|
130
|
+
name: candidate.label,
|
|
131
|
+
value: candidate,
|
|
132
|
+
})));
|
|
133
|
+
if (field === BACK) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const result = await askField(field, config);
|
|
137
|
+
const messages = { borrado: 'Dato borrado.', guardado: 'Guardado.', 'sin-cambios': 'Sin cambios.' };
|
|
138
|
+
if (result !== BACK) {
|
|
139
|
+
writeTerminalOutput(noticePanel(messages[result], result === 'sin-cambios' ? 'muted' : 'success'));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async function runPdfPluginMenu() {
|
|
143
|
+
const plugin = withConfigService((service) => new PdfPlugin({
|
|
144
|
+
configuredBrowser: service.getConfig().pdfNavegador,
|
|
145
|
+
path: join(service.getPluginsPath(), 'pdf'),
|
|
146
|
+
}));
|
|
147
|
+
const status = plugin.getStatus();
|
|
148
|
+
writeTerminalOutput(formatPdfPluginStatusAsText(status));
|
|
149
|
+
const action = await chooseStep('¿Que hacemos con el plugin de PDF?', [
|
|
150
|
+
status.installed
|
|
151
|
+
? { description: 'Borra el plugin y el navegador descargado', name: 'Desinstalar', value: 'desinstalar' }
|
|
152
|
+
: {
|
|
153
|
+
description: '~160 MB, o ~360 MB si no tenes Chrome',
|
|
154
|
+
name: status.installedVersion ? 'Actualizar' : 'Instalar',
|
|
155
|
+
value: 'instalar',
|
|
156
|
+
},
|
|
157
|
+
]);
|
|
158
|
+
if (action === BACK) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (action === 'desinstalar') {
|
|
162
|
+
plugin.uninstall();
|
|
163
|
+
writeTerminalOutput(noticePanel('Plugin de PDF desinstalado.', 'success'));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const spinner = startSpinner('Instalando el plugin de PDF...');
|
|
167
|
+
try {
|
|
168
|
+
await plugin.install((message) => {
|
|
169
|
+
if (spinner) {
|
|
170
|
+
spinner.text = message;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
spinner?.stop();
|
|
176
|
+
}
|
|
177
|
+
writeTerminalOutput(formatPdfPluginStatusAsText(plugin.getStatus(), 'Plugin de PDF instalado'));
|
|
178
|
+
}
|
|
179
|
+
/** Submenu de configuracion: revisar, configuracion guiada, cambiar un dato y el plugin de PDF. */
|
|
180
|
+
export async function runConfigMenu(options) {
|
|
181
|
+
for (;;) {
|
|
182
|
+
const option = await chooseOne('Configuracion', [
|
|
183
|
+
{
|
|
184
|
+
description: 'Credenciales, defaults y validacion contra ARCA',
|
|
185
|
+
name: 'Revisar configuracion',
|
|
186
|
+
value: 'revisar',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
description: 'CUIT, certificado, punto de venta y defaults, paso a paso',
|
|
190
|
+
name: 'Configuracion guiada',
|
|
191
|
+
value: 'guiada',
|
|
192
|
+
},
|
|
193
|
+
{ description: 'Elegis un dato de la lista y lo cambias', name: 'Cambiar un dato', value: 'cambiar' },
|
|
194
|
+
{ description: 'Estado, instalar o desinstalar', name: 'Plugin de PDF', value: 'pdf' },
|
|
195
|
+
{ name: '← Volver al menu', value: 'volver' },
|
|
196
|
+
]);
|
|
197
|
+
if (option === 'volver') {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (option === 'revisar') {
|
|
201
|
+
writeTerminalOutput(formatConfigDoctorAsText(buildConfigDoctorReport(readConfig(), buildRuntimeCheck(options))));
|
|
202
|
+
}
|
|
203
|
+
if (option === 'guiada')
|
|
204
|
+
await runGuidedSetup();
|
|
205
|
+
if (option === 'cambiar')
|
|
206
|
+
await runChangeField();
|
|
207
|
+
if (option === 'pdf')
|
|
208
|
+
await runPdfPluginMenu();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=config.flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/config.flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { ConfigService } from '../../modules/config/config.service.js';
|
|
2
|
-
import {
|
|
3
|
-
import { colorize, formatCliError,
|
|
4
|
-
import {
|
|
2
|
+
import { listMissingSetupKeys } from '../../modules/interactive/config-fields.js';
|
|
3
|
+
import { colorize, formatCliError, noticePanel, renderLogo, statusBar, writeTerminalError, writeTerminalOutput, } from '../../ui/index.js';
|
|
4
|
+
import { runConfigMenu, runGuidedSetup } from './config.flow.js';
|
|
5
5
|
import { runHistoryFlow } from './history.flow.js';
|
|
6
6
|
import { runInvoiceFlow } from './invoice.flow.js';
|
|
7
|
+
import { runLookupFlow, runStatusFlow } from './lookup.flow.js';
|
|
7
8
|
import { runNoteFlow } from './note.flow.js';
|
|
8
|
-
import { chooseOne, isPromptCancellation } from './prompts.js';
|
|
9
|
+
import { chooseOne, confirm, isPromptCancellation } from './prompts.js';
|
|
10
|
+
import { runRepeatFlow } from './repeat.flow.js';
|
|
9
11
|
import { createInteractiveSession } from './session.js';
|
|
10
|
-
function
|
|
12
|
+
function listMissingSetup() {
|
|
11
13
|
const service = new ConfigService();
|
|
12
14
|
try {
|
|
13
15
|
service.ensureInitialized();
|
|
14
|
-
|
|
16
|
+
return listMissingSetupKeys(service.getConfig());
|
|
15
17
|
}
|
|
16
18
|
finally {
|
|
17
19
|
service.close();
|
|
@@ -23,13 +25,13 @@ function resolveSession(options) {
|
|
|
23
25
|
}
|
|
24
26
|
catch (error) {
|
|
25
27
|
writeTerminalError(formatCliError(error, false));
|
|
26
|
-
writeTerminalOutput(noticePanel('
|
|
28
|
+
writeTerminalOutput(noticePanel('Revisala desde "Configuracion" en el menu.', 'warning'));
|
|
27
29
|
return undefined;
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
32
|
async function runOption(option, options) {
|
|
31
33
|
if (option === 'config') {
|
|
32
|
-
|
|
34
|
+
await runConfigMenu(options);
|
|
33
35
|
return;
|
|
34
36
|
}
|
|
35
37
|
const session = resolveSession(options);
|
|
@@ -38,10 +40,16 @@ async function runOption(option, options) {
|
|
|
38
40
|
}
|
|
39
41
|
if (option === 'factura')
|
|
40
42
|
await runInvoiceFlow(session);
|
|
43
|
+
if (option === 'repetir')
|
|
44
|
+
await runRepeatFlow(session);
|
|
41
45
|
if (option === 'nota')
|
|
42
46
|
await runNoteFlow(session);
|
|
43
47
|
if (option === 'historial')
|
|
44
48
|
await runHistoryFlow(session);
|
|
49
|
+
if (option === 'consultar')
|
|
50
|
+
await runLookupFlow(session);
|
|
51
|
+
if (option === 'estado')
|
|
52
|
+
await runStatusFlow(session);
|
|
45
53
|
}
|
|
46
54
|
function formatHeader(options) {
|
|
47
55
|
try {
|
|
@@ -56,14 +64,35 @@ function formatHeader(options) {
|
|
|
56
64
|
export async function runInteractiveMode(options = {}) {
|
|
57
65
|
// Mismo aire debajo del logo que arriba: tres lineas en blanco.
|
|
58
66
|
writeTerminalOutput([renderLogo().trimEnd(), '', '', '', formatHeader(options)].join('\n'));
|
|
67
|
+
// Primera vez: sin CUIT, certificado o punto de venta no se puede hacer nada, asi que se ofrece la guia.
|
|
68
|
+
if (listMissingSetup().length > 0) {
|
|
69
|
+
try {
|
|
70
|
+
if (await confirm('Falta completar la configuracion. ¿La hacemos ahora, paso a paso?', 'Si, configurar', 'Despues')) {
|
|
71
|
+
await runGuidedSetup();
|
|
72
|
+
writeTerminalOutput(formatHeader(options));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (!isPromptCancellation(error)) {
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
59
81
|
for (;;) {
|
|
60
82
|
let option;
|
|
61
83
|
try {
|
|
62
84
|
option = await chooseOne('¿Que queres hacer?', [
|
|
63
85
|
{ name: 'Emitir factura', value: 'factura' },
|
|
86
|
+
{
|
|
87
|
+
description: 'Copia una de las ultimas, con fechas nuevas',
|
|
88
|
+
name: 'Repetir una factura anterior',
|
|
89
|
+
value: 'repetir',
|
|
90
|
+
},
|
|
64
91
|
{ name: 'Nota de credito o debito sobre una factura', value: 'nota' },
|
|
65
92
|
{ name: 'Ver ultimos comprobantes', value: 'historial' },
|
|
66
|
-
{ name: '
|
|
93
|
+
{ name: 'Consultar un comprobante', value: 'consultar' },
|
|
94
|
+
{ description: 'Servidores, punto de venta y cotizacion del dolar', name: 'Estado de ARCA', value: 'estado' },
|
|
95
|
+
{ description: 'Revisar, configuracion guiada, cambiar un dato y PDF', name: 'Configuracion', value: 'config' },
|
|
67
96
|
{ name: 'Salir', value: 'salir' },
|
|
68
97
|
]);
|
|
69
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/cli/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/cli/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,7 @@ export interface InvoiceState {
|
|
|
10
10
|
readonly documentNumber?: number;
|
|
11
11
|
readonly documentType?: BillingCommandInput['documentType'];
|
|
12
12
|
readonly ivaCondition?: BillingCommandInput['ivaCondition'];
|
|
13
|
-
readonly ivaRate?: BillingCommandInput['ivaRate'];
|
|
14
13
|
readonly totalAmount?: number;
|
|
15
|
-
readonly transferMode?: BillingCommandInput['transferMode'];
|
|
16
14
|
readonly voucherKind?: VoucherKindDefinition;
|
|
17
15
|
}
|
|
18
16
|
/** Pasos del flujo de factura; cada uno se puede deshacer con "Volver". */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { billingCommandSchema } from '../../modules/billing/billing.schemas.js';
|
|
2
2
|
import { parseAmountInput } from '../../modules/interactive/amount-input.js';
|
|
3
|
-
import { conceptChoices, invoiceKindChoices, ivaConditionChoices,
|
|
3
|
+
import { conceptChoices, invoiceKindChoices, ivaConditionChoices, receiverChoices, } from '../../modules/interactive/choices.js';
|
|
4
4
|
import { BACK, runWizard } from '../../modules/interactive/wizard.js';
|
|
5
5
|
import { askAdvancedOptions } from './advanced-options.js';
|
|
6
6
|
import { askTextStep, chooseStep } from './prompts.js';
|
|
@@ -64,14 +64,6 @@ export function invoiceSteps(session) {
|
|
|
64
64
|
return answer === BACK ? BACK : { totalAmount: parseAmountInput(answer) };
|
|
65
65
|
},
|
|
66
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
67
|
{
|
|
76
68
|
name: 'cbu',
|
|
77
69
|
run: async () => {
|
|
@@ -80,22 +72,12 @@ export function invoiceSteps(session) {
|
|
|
80
72
|
},
|
|
81
73
|
skip: (state) => !isFceInvoice(state) || Boolean(config.cbu),
|
|
82
74
|
},
|
|
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
75
|
{
|
|
95
76
|
name: 'avanzadas',
|
|
96
77
|
run: async (state) => {
|
|
97
78
|
const advanced = await askAdvancedOptions(state.advanced, {
|
|
98
79
|
concept: state.concept ?? 'servicios',
|
|
80
|
+
defaultIvaRate: config.alicuotaPorDefecto ?? '21',
|
|
99
81
|
voucherKind: state.voucherKind,
|
|
100
82
|
});
|
|
101
83
|
return advanced === BACK ? BACK : { advanced };
|
|
@@ -107,6 +89,7 @@ export function invoiceSteps(session) {
|
|
|
107
89
|
export function buildInvoiceInput(state, session) {
|
|
108
90
|
const { config } = session.runtime;
|
|
109
91
|
const voucherKind = state.voucherKind;
|
|
92
|
+
const ivaRate = voucherKind.letter === 'c' ? undefined : (state.advanced.ivaRate ?? config.alicuotaPorDefecto ?? '21');
|
|
110
93
|
return billingCommandSchema.parse({
|
|
111
94
|
...state.advanced,
|
|
112
95
|
cbu: isFceInvoice(state) ? (state.cbu ?? config.cbu) : undefined,
|
|
@@ -116,10 +99,10 @@ export function buildInvoiceInput(state, session) {
|
|
|
116
99
|
ivaCondition: state.ivaCondition,
|
|
117
100
|
// 21% sin alicuota configurada es el default del CLI. Si hay config, se deja explicito para que el
|
|
118
101
|
// comando equivalente no tome la de la config.
|
|
119
|
-
ivaRate:
|
|
102
|
+
ivaRate: ivaRate === '21' && !config.alicuotaPorDefecto ? undefined : ivaRate,
|
|
120
103
|
shortcut: voucherKind.shortcut,
|
|
121
104
|
totalAmount: state.totalAmount,
|
|
122
|
-
transferMode: isFceInvoice(state) ? state.transferMode : undefined,
|
|
105
|
+
transferMode: isFceInvoice(state) ? state.advanced.transferMode : undefined,
|
|
123
106
|
});
|
|
124
107
|
}
|
|
125
108
|
export async function runInvoiceFlow(session) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/invoice.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"invoice.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/invoice.flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type InteractiveSession } from './session';
|
|
2
|
+
/** Consultar un comprobante por numero, de cualquier tipo. Propone el ultimo emitido. */
|
|
3
|
+
export declare function runLookupFlow(session: InteractiveSession): Promise<void>;
|
|
4
|
+
/** Estado de los servidores de ARCA, del punto de venta y la cotizacion oficial del dolar. */
|
|
5
|
+
export declare function runStatusFlow(session: InteractiveSession): Promise<void>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { VOUCHER_KIND_MAP, VOUCHER_SHORTCUTS } from '../../modules/billing/voucher-kind-map.js';
|
|
2
|
+
import { BACK } from '../../modules/interactive/wizard.js';
|
|
3
|
+
import { formatQuotationAsText, formatStatusAsText } from '../../modules/parameters/parameters.presenter.js';
|
|
4
|
+
import { buildStatusReport } from '../../modules/parameters/status.js';
|
|
5
|
+
import { formatVoucherDetailAsText, formatVoucherNumber } from '../../modules/vouchers/voucher-history.presenter.js';
|
|
6
|
+
import { ArcaParametersGateway } from '../../services/arca/arca-parameters.gateway.js';
|
|
7
|
+
import { noticePanel, writeTerminalOutput } from '../../ui/index.js';
|
|
8
|
+
import { startSpinner } from '../spinner.js';
|
|
9
|
+
import { askTextStep, chooseStep } from './prompts.js';
|
|
10
|
+
import { requirePointOfSale } from './session.js';
|
|
11
|
+
async function withSpinner(text, run) {
|
|
12
|
+
const spinner = startSpinner(text);
|
|
13
|
+
try {
|
|
14
|
+
return await run();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
spinner?.stop();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** Consultar un comprobante por numero, de cualquier tipo. Propone el ultimo emitido. */
|
|
21
|
+
export async function runLookupFlow(session) {
|
|
22
|
+
const pointOfSale = requirePointOfSale(session);
|
|
23
|
+
if (!pointOfSale) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const voucherKind = await chooseStep('¿Que tipo de comprobante?', VOUCHER_SHORTCUTS.map((shortcut) => ({
|
|
27
|
+
name: `${VOUCHER_KIND_MAP[shortcut].displayName} (${shortcut})`,
|
|
28
|
+
value: VOUCHER_KIND_MAP[shortcut],
|
|
29
|
+
})));
|
|
30
|
+
if (voucherKind === BACK) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const lastNumber = await withSpinner('Consultando ARCA...', () => session.historyGateway.getLastNumber(pointOfSale, voucherKind.arcaType));
|
|
34
|
+
if (lastNumber === 0) {
|
|
35
|
+
writeTerminalOutput(noticePanel(`No hay ${voucherKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'muted'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const answer = await askTextStep(`Numero (el ultimo es ${lastNumber}):`, {
|
|
39
|
+
defaultValue: String(lastNumber),
|
|
40
|
+
validate: (value) => {
|
|
41
|
+
const number = Number(value.trim());
|
|
42
|
+
return Number.isInteger(number) && number > 0 && number <= lastNumber
|
|
43
|
+
? true
|
|
44
|
+
: `Ingrese un numero entre 1 y ${lastNumber}.`;
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
if (answer === BACK) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const number = Number(answer.trim());
|
|
51
|
+
const voucher = await withSpinner('Consultando ARCA...', () => session.historyGateway.getVoucher(number, pointOfSale, voucherKind.arcaType));
|
|
52
|
+
if (!voucher) {
|
|
53
|
+
writeTerminalOutput(noticePanel(`No existe la ${voucherKind.displayName} N° ${formatVoucherNumber(pointOfSale, number)}.`, 'warning'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
writeTerminalOutput(formatVoucherDetailAsText({ environment: session.runtime.environment, pointOfSale, voucher, voucherKind }));
|
|
57
|
+
}
|
|
58
|
+
/** Estado de los servidores de ARCA, del punto de venta y la cotizacion oficial del dolar. */
|
|
59
|
+
export async function runStatusFlow(session) {
|
|
60
|
+
const gateway = new ArcaParametersGateway(session.arca);
|
|
61
|
+
const { environment, pointOfSale } = session.runtime;
|
|
62
|
+
const [report, quotation] = await withSpinner('Consultando ARCA...', () => Promise.all([
|
|
63
|
+
buildStatusReport({ environment, gateway, pointOfSale }),
|
|
64
|
+
// La cotizacion es un extra: si falla, el estado se muestra igual.
|
|
65
|
+
gateway.getQuotation('USD').catch(() => undefined),
|
|
66
|
+
]));
|
|
67
|
+
writeTerminalOutput(formatStatusAsText(report));
|
|
68
|
+
if (quotation) {
|
|
69
|
+
writeTerminalOutput(formatQuotationAsText(quotation, environment));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=lookup.flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/lookup.flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,3 +19,8 @@ export declare function askTextStep(message: string, options?: {
|
|
|
19
19
|
readonly defaultValue?: string;
|
|
20
20
|
readonly validate?: (value: string) => string | true;
|
|
21
21
|
}): Promise<Back | string>;
|
|
22
|
+
/**
|
|
23
|
+
* Seleccion multiple: espacio marca, Enter confirma (sin marcar nada tambien vale). Tiene un "← Volver" al
|
|
24
|
+
* final para el motor de pasos: si se marca, vuelve al paso anterior.
|
|
25
|
+
*/
|
|
26
|
+
export declare function chooseManyStep<T>(message: string, choices: ReadonlyArray<Choice<T>>, selected?: readonly T[]): Promise<Back | T[]>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import checkbox from '@inquirer/checkbox';
|
|
1
2
|
import input from '@inquirer/input';
|
|
2
3
|
import select from '@inquirer/select';
|
|
3
4
|
import { BACK } from '../../modules/interactive/wizard.js';
|
|
@@ -43,4 +44,17 @@ export async function askTextStep(message, options = {}) {
|
|
|
43
44
|
});
|
|
44
45
|
return answer === BACK_TEXT ? BACK : answer;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Seleccion multiple: espacio marca, Enter confirma (sin marcar nada tambien vale). Tiene un "← Volver" al
|
|
49
|
+
* final para el motor de pasos: si se marca, vuelve al paso anterior.
|
|
50
|
+
*/
|
|
51
|
+
export async function chooseManyStep(message, choices, selected = []) {
|
|
52
|
+
const answer = await checkbox({
|
|
53
|
+
choices: [...choices.map((choice) => ({ ...choice, checked: selected.includes(choice.value) })), BACK_CHOICE],
|
|
54
|
+
loop: false,
|
|
55
|
+
message,
|
|
56
|
+
pageSize: 12,
|
|
57
|
+
});
|
|
58
|
+
return answer.includes(BACK) ? BACK : answer;
|
|
59
|
+
}
|
|
46
60
|
//# 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;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"}
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/interactive/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type WizardStep } from '../../modules/interactive/wizard';
|
|
2
|
+
import { type IssuedVoucher } from '../../modules/vouchers/voucher-history';
|
|
3
|
+
import { type InvoiceState } from './invoice.flow';
|
|
4
|
+
import { type InteractiveSession } from './session';
|
|
5
|
+
export interface RepeatState extends InvoiceState {
|
|
6
|
+
readonly original?: IssuedVoucher;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Repetir una factura: se elige una de las ultimas emitidas y se copian el comprobante, el receptor, el concepto,
|
|
10
|
+
* el monto y la alicuota. Las fechas se actualizan: la factura sale con fecha de hoy y el periodo se elige.
|
|
11
|
+
*/
|
|
12
|
+
export declare function repeatSteps(session: InteractiveSession, pointOfSale: number, today?: Date): Array<WizardStep<RepeatState>>;
|
|
13
|
+
export declare function runRepeatFlow(session: InteractiveSession): Promise<void>;
|