arcli 1.4.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 +18 -1
- package/README.md +3 -1
- package/dist/cli/commands/billing.command.options.js +6 -0
- 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.js +14 -0
- 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 +14 -1
- 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/help.js +1 -0
- package/dist/cli/help.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/session.js +2 -0
- package/dist/cli/interactive/session.js.map +1 -1
- 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/modules/billing/billing.schemas.d.ts +4 -0
- package/dist/modules/billing/billing.schemas.js +6 -0
- 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 +41 -1
- 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/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/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 +11 -0
- package/dist/ui/presenters/errors.presenter.js.map +1 -1
- package/dist/ui/presenters/index.d.ts +1 -0
- package/dist/ui/presenters/index.js +1 -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/llms.txt +17 -2
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { maskPath } from '../../lib/paths/mask-path.js';
|
|
2
|
+
import { errorPanel } from '../components/errorPanel.js';
|
|
3
|
+
import { keyValuePanel } from '../components/keyValuePanel.js';
|
|
4
|
+
import { noticePanel } from '../components/noticePanel.js';
|
|
5
|
+
import { renderKeyValueRows, resolveKeyValueLabelWidth } from '../primitives/renderKeyValue.js';
|
|
6
|
+
/** Texto que sigue al comprobante emitido: la ruta del PDF o por que no se genero. */
|
|
7
|
+
export function formatPdfOutcomeAsText(outcome, label) {
|
|
8
|
+
const prefix = label ? `${label}: ` : '';
|
|
9
|
+
if ('path' in outcome) {
|
|
10
|
+
return noticePanel(`${prefix}PDF guardado en ${outcome.path}`, 'success');
|
|
11
|
+
}
|
|
12
|
+
const hint = ['El comprobante ya esta emitido: solo falto el PDF.', outcome.error.suggestion]
|
|
13
|
+
.filter(Boolean)
|
|
14
|
+
.join('\n');
|
|
15
|
+
return errorPanel(`${prefix}PDF no generado`, outcome.error.message, [], hint);
|
|
16
|
+
}
|
|
17
|
+
const BROWSER_SOURCE_LABELS = {
|
|
18
|
+
config: 'pdfNavegador (config)',
|
|
19
|
+
descargado: 'descargado por arcli',
|
|
20
|
+
entorno: 'PUPPETEER_EXECUTABLE_PATH',
|
|
21
|
+
sistema: 'instalado en el sistema',
|
|
22
|
+
};
|
|
23
|
+
export function formatPdfPluginStatusAsJson(status) {
|
|
24
|
+
return JSON.stringify({
|
|
25
|
+
instalado: status.installed,
|
|
26
|
+
navegador: status.browser ?? null,
|
|
27
|
+
origenNavegador: status.browserSource ?? null,
|
|
28
|
+
ruta: status.path,
|
|
29
|
+
version: status.version,
|
|
30
|
+
versionInstalada: status.installedVersion ?? null,
|
|
31
|
+
}, null, 2);
|
|
32
|
+
}
|
|
33
|
+
export function formatPdfPluginStatusAsText(status, title = 'Plugin de PDF') {
|
|
34
|
+
const rows = [
|
|
35
|
+
['Estado', status.installed ? 'instalado' : 'no instalado'],
|
|
36
|
+
['Version', status.installedVersion ?? `no instalada (arcli usa la ${status.version})`],
|
|
37
|
+
[
|
|
38
|
+
'Navegador',
|
|
39
|
+
status.browser ? `${status.browser} (${BROWSER_SOURCE_LABELS[status.browserSource ?? 'sistema']})` : 'ninguno',
|
|
40
|
+
],
|
|
41
|
+
['Carpeta', maskPath(status.path)],
|
|
42
|
+
];
|
|
43
|
+
const footer = status.installed ? 'Listo para generar PDFs' : 'Instalelo con `arcli pdf instalar`';
|
|
44
|
+
return keyValuePanel(title, renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('standard', rows, [25, 75]) }), footer, 'standard', status.installed ? 'success' : 'warning', 'sheet');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=pdf.presenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/pdf.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,OAAmB,EAAE,KAAc;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,GAAG,MAAM,mBAAmB,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,oDAAoD,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;SAC1F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,UAAU,CAAC,GAAG,MAAM,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACjF,CAAC;AAWD,MAAM,qBAAqB,GAAsE;IAC/F,MAAM,EAAE,uBAAuB;IAC/B,UAAU,EAAE,sBAAsB;IAClC,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,yBAAyB;CACnC,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAA2B;IACrE,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QACjC,eAAe,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;KAClD,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA2B,EAAE,KAAK,GAAG,eAAe;IAC9F,MAAM,IAAI,GAAqC;QAC7C,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3D,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,IAAI,8BAA8B,MAAM,CAAC,OAAO,GAAG,CAAC;QACvF;YACE,WAAW;YACX,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,KAAK,qBAAqB,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC/G;QACD,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACnC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oCAAoC,CAAC;IAEnG,OAAO,aAAa,CAClB,KAAK,EACL,kBAAkB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAC/F,MAAM,EACN,UAAU,EACV,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACxC,OAAO,CACR,CAAC;AACJ,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -66,6 +66,7 @@ Shortcuts (`family` = comando alternativo `arcli <family> <letra>`, ej. `arcli f
|
|
|
66
66
|
- Ejecución: `--previsualizar` (default si no se especifica nada) vs `--emitir` (real contra ARCA) — son mutuamente excluyentes. En producción hace falta `--produccion --emitir` juntos — no hay un flag de confirmación adicional, así que esa combinación emite de verdad.
|
|
67
67
|
- Salida: `--json` (estructurada, para scripts/agentes — desactiva el aviso de nueva versión), `--bruto` (incluye la respuesta cruda de ARCA).
|
|
68
68
|
- `--cargar <path.json>`: carga uno o un array de comprobantes desde un JSON en vez de flags (ver forma abajo). Los flags pisan lo que venga del archivo.
|
|
69
|
+
- PDF: `--exportar-pdf` (alias `--pdf`) genera el PDF con QR después de emitir; `--sin-pdf` no lo genera; sin flag decide `config pdf` (`preguntar` por defecto, que sin TTY o con `--json` no genera). Datos que solo van en el PDF (ARCA no los recibe): `--descripcion <texto>`, `--receptor-nombre <texto>`, `--receptor-domicilio <texto>`. Requiere el plugin (`arcli pdf instalar`, ~160 MB; desde un agente instalarlo antes, porque sin TTY nunca se descarga solo) y `emisor.razonSocial`, `emisor.domicilio`, `emisor.inicioActividades` en la config. Detalle: `docs/pdf.md`.
|
|
69
70
|
|
|
70
71
|
## Modo no interactivo
|
|
71
72
|
|
|
@@ -94,7 +95,11 @@ agentes, CI), nunca pregunta** — se comporta como si fuera dry-run salvo que s
|
|
|
94
95
|
"emitir": false,
|
|
95
96
|
"previsualizar": true,
|
|
96
97
|
"confirmarProduccion": false,
|
|
97
|
-
"comprobanteAsociado": { "atajo": "fc", "cuit": "20123456789", "numero": 10, "puntoVenta": 3 }
|
|
98
|
+
"comprobanteAsociado": { "atajo": "fc", "cuit": "20123456789", "numero": 10, "puntoVenta": 3 },
|
|
99
|
+
"pdf": true,
|
|
100
|
+
"descripcion": "Servicios de marzo",
|
|
101
|
+
"receptorNombre": "Cliente SA",
|
|
102
|
+
"receptorDomicilio": "Calle 1"
|
|
98
103
|
}
|
|
99
104
|
```
|
|
100
105
|
|
|
@@ -115,10 +120,15 @@ agentes, CI), nunca pregunta** — se comporta como si fuera dry-run salvo que s
|
|
|
115
120
|
"observacion": "string | null",
|
|
116
121
|
"solicitud": { "...": "payload enviado a ARCA" },
|
|
117
122
|
"previsualizacion": true,
|
|
118
|
-
"sugerencias": ["texto en español sugiriendo como resolver errores comunes de ARCA"]
|
|
123
|
+
"sugerencias": ["texto en español sugiriendo como resolver errores comunes de ARCA"],
|
|
124
|
+
"pdf": { "ruta": "/ruta/al/archivo.pdf" }
|
|
119
125
|
}
|
|
120
126
|
```
|
|
121
127
|
|
|
128
|
+
`pdf` aparece solo si se intentó generar el PDF. Si falló es `{ "error": { "codigo", "mensaje", "sugerencia" } }`
|
|
129
|
+
(`PDF_PLUGIN_MISSING`, `PDF_PLUGIN_INSTALL_ERROR`, `PDF_ISSUER_INCOMPLETE`, `PDF_GENERATION_ERROR`) y el exit code
|
|
130
|
+
sigue siendo `0`: el comprobante ya está emitido, **no reemitir para obtener el PDF**.
|
|
131
|
+
|
|
122
132
|
Con múltiples comprobantes (batch o `--cargar` con array) la salida es un array de estos
|
|
123
133
|
objetos. Con `--bruto` se agrega `respuesta` con la respuesta cruda del SDK.
|
|
124
134
|
|
|
@@ -153,6 +163,9 @@ Claves válidas: `cuit`, `cbu`, `aliasCbu` (solo facturas FCE), `verificarFce`,
|
|
|
153
163
|
`si/no`, `1/0`), `cert.testing`, `cert.produccion`, `key.testing`, `key.produccion`
|
|
154
164
|
(rutas a archivos PEM, se validan al guardar), `ticketPath` (carpeta donde se cachea el
|
|
155
165
|
ticket WSAA; por defecto una carpeta junto al archivo de config).
|
|
166
|
+
Para el PDF: `pdf` (`siempre`/`preguntar`/`nunca`), `pdfCarpeta` (por defecto `~/arcli/comprobantes`; los de
|
|
167
|
+
testing van a `testing/`), `pdfNavegador` (ruta a Chrome/Chromium/Edge), `emisor.razonSocial`, `emisor.domicilio`,
|
|
168
|
+
`emisor.inicioActividades` (fecha con año), `emisor.iibb`, `emisor.condicionIva`, `emisor.logo` (PNG o JPG).
|
|
156
169
|
|
|
157
170
|
`config revisar` también avisa si un certificado ya venció o vence en menos de 30 días.
|
|
158
171
|
|
|
@@ -160,6 +173,7 @@ ticket WSAA; por defecto una carpeta junto al archivo de config).
|
|
|
160
173
|
|
|
161
174
|
- `arcli ultimos <tipo> [--cantidad N] [--pv N] [--json]`: últimos comprobantes emitidos (de 1 a 50, por defecto 10), del más nuevo al más viejo. `tipo` es el atajo (`fb`, `nca`…).
|
|
162
175
|
- `arcli consultar <tipo> <numero> [--pv N] [--json]`: detalle de un comprobante emitido (CAE, vencimiento, importes, receptor). Si no existe, el error es `VOUCHER_NOT_FOUND`. Sirve para verificar después de emitir.
|
|
176
|
+
- `arcli pdf [estado|instalar|desinstalar] [--json]`: plugin que genera los PDFs. `arcli pdf instalar` lo descarga sin preguntar (sirve en scripts).
|
|
163
177
|
- `arcli ejemplos`: comandos listos para copiar por cada tipo de comprobante.
|
|
164
178
|
- `arcli storybook [escena]`: demos visuales de la UI (sin llamar a ARCA).
|
|
165
179
|
- `arcli <cualquier comando> ayuda` o `--ayuda`: ayuda contextual con ejemplos (nota: el flag
|
|
@@ -171,4 +185,5 @@ ticket WSAA; por defecto una carpeta junto al archivo de config).
|
|
|
171
185
|
- `docs/configuration.md`: config persistente, claves soportadas, ticketPath.
|
|
172
186
|
- `docs/validation-rules.md` y `docs/input-output.md`: reglas de validación y formatos de entrada/salida.
|
|
173
187
|
- `docs/troubleshooting.md`: errores comunes de ARCA y como resolverlos.
|
|
188
|
+
- `docs/pdf.md`: PDF de comprobantes, plugin, carpeta y nombre del archivo.
|
|
174
189
|
- `AGENTS.md`: para agentes que van a modificar el código de este repo (no para usar el CLI).
|