arcli 0.1.2 → 1.2.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 (292) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +21 -0
  3. package/README.md +169 -4
  4. package/dist/cli/commands/billing-family.command.d.ts +2 -0
  5. package/dist/cli/commands/billing-family.command.js +30 -0
  6. package/dist/cli/commands/billing-family.command.js.map +1 -0
  7. package/dist/cli/commands/billing-shortcuts.command.d.ts +2 -0
  8. package/dist/cli/commands/billing-shortcuts.command.js +18 -0
  9. package/dist/cli/commands/billing-shortcuts.command.js.map +1 -0
  10. package/dist/cli/commands/billing.command.interactive-preview.d.ts +18 -0
  11. package/dist/cli/commands/billing.command.interactive-preview.js +69 -0
  12. package/dist/cli/commands/billing.command.interactive-preview.js.map +1 -0
  13. package/dist/cli/commands/billing.command.options.d.ts +2 -0
  14. package/dist/cli/commands/billing.command.options.js +65 -0
  15. package/dist/cli/commands/billing.command.options.js.map +1 -0
  16. package/dist/cli/commands/billing.command.output.d.ts +12 -0
  17. package/dist/cli/commands/billing.command.output.js +33 -0
  18. package/dist/cli/commands/billing.command.output.js.map +1 -0
  19. package/dist/cli/commands/billing.command.parser.d.ts +21 -0
  20. package/dist/cli/commands/billing.command.parser.js +170 -0
  21. package/dist/cli/commands/billing.command.parser.js.map +1 -0
  22. package/dist/cli/commands/billing.command.shared.d.ts +7 -0
  23. package/dist/cli/commands/billing.command.shared.js +99 -0
  24. package/dist/cli/commands/billing.command.shared.js.map +1 -0
  25. package/dist/cli/commands/billing.command.shortcuts.d.ts +7 -0
  26. package/dist/cli/commands/billing.command.shortcuts.js +52 -0
  27. package/dist/cli/commands/billing.command.shortcuts.js.map +1 -0
  28. package/dist/cli/commands/config.command.d.ts +2 -0
  29. package/dist/cli/commands/config.command.js +125 -0
  30. package/dist/cli/commands/config.command.js.map +1 -0
  31. package/dist/cli/commands/examples.command.d.ts +2 -0
  32. package/dist/cli/commands/examples.command.js +14 -0
  33. package/dist/cli/commands/examples.command.js.map +1 -0
  34. package/dist/cli/commands/fce-obligation.command.d.ts +2 -0
  35. package/dist/cli/commands/fce-obligation.command.js +51 -0
  36. package/dist/cli/commands/fce-obligation.command.js.map +1 -0
  37. package/dist/cli/commands/storybook.command.d.ts +2 -0
  38. package/dist/cli/commands/storybook.command.js +26 -0
  39. package/dist/cli/commands/storybook.command.js.map +1 -0
  40. package/dist/cli/help.d.ts +11 -0
  41. package/dist/cli/help.js +534 -0
  42. package/dist/cli/help.js.map +1 -0
  43. package/dist/cli/index.d.ts +2 -0
  44. package/dist/cli/index.js +41 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/cli/program.d.ts +2 -0
  47. package/dist/cli/program.js +30 -0
  48. package/dist/cli/program.js.map +1 -0
  49. package/dist/cli/types.d.ts +6 -0
  50. package/dist/cli/types.js +2 -0
  51. package/dist/cli/types.js.map +1 -0
  52. package/dist/cli/version.d.ts +1 -0
  53. package/dist/cli/version.js +2 -0
  54. package/dist/cli/version.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.js +2 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/dates/arca-date.d.ts +6 -0
  59. package/dist/lib/dates/arca-date.js +45 -0
  60. package/dist/lib/dates/arca-date.js.map +1 -0
  61. package/dist/lib/errors/app-error.d.ts +14 -0
  62. package/dist/lib/errors/app-error.js +29 -0
  63. package/dist/lib/errors/app-error.js.map +1 -0
  64. package/dist/lib/files/read-json-file.d.ts +1 -0
  65. package/dist/lib/files/read-json-file.js +21 -0
  66. package/dist/lib/files/read-json-file.js.map +1 -0
  67. package/dist/lib/paths/mask-path.d.ts +1 -0
  68. package/dist/lib/paths/mask-path.js +17 -0
  69. package/dist/lib/paths/mask-path.js.map +1 -0
  70. package/dist/lib/security/certificate.d.ts +7 -0
  71. package/dist/lib/security/certificate.js +16 -0
  72. package/dist/lib/security/certificate.js.map +1 -0
  73. package/dist/lib/security/pem.d.ts +5 -0
  74. package/dist/lib/security/pem.js +36 -0
  75. package/dist/lib/security/pem.js.map +1 -0
  76. package/dist/modules/billing/billing-response.d.ts +4 -0
  77. package/dist/modules/billing/billing-response.js +74 -0
  78. package/dist/modules/billing/billing-response.js.map +1 -0
  79. package/dist/modules/billing/billing.amounts.d.ts +19 -0
  80. package/dist/modules/billing/billing.amounts.js +72 -0
  81. package/dist/modules/billing/billing.amounts.js.map +1 -0
  82. package/dist/modules/billing/billing.associated-period.d.ts +8 -0
  83. package/dist/modules/billing/billing.associated-period.js +40 -0
  84. package/dist/modules/billing/billing.associated-period.js.map +1 -0
  85. package/dist/modules/billing/billing.associated-vouchers.d.ts +12 -0
  86. package/dist/modules/billing/billing.associated-vouchers.js +73 -0
  87. package/dist/modules/billing/billing.associated-vouchers.js.map +1 -0
  88. package/dist/modules/billing/billing.constants.d.ts +2 -0
  89. package/dist/modules/billing/billing.constants.js +3 -0
  90. package/dist/modules/billing/billing.constants.js.map +1 -0
  91. package/dist/modules/billing/billing.currency.d.ts +18 -0
  92. package/dist/modules/billing/billing.currency.js +53 -0
  93. package/dist/modules/billing/billing.currency.js.map +1 -0
  94. package/dist/modules/billing/billing.date-range.d.ts +9 -0
  95. package/dist/modules/billing/billing.date-range.js +52 -0
  96. package/dist/modules/billing/billing.date-range.js.map +1 -0
  97. package/dist/modules/billing/billing.display.d.ts +13 -0
  98. package/dist/modules/billing/billing.display.js +137 -0
  99. package/dist/modules/billing/billing.display.js.map +1 -0
  100. package/dist/modules/billing/billing.fce.d.ts +21 -0
  101. package/dist/modules/billing/billing.fce.js +59 -0
  102. package/dist/modules/billing/billing.fce.js.map +1 -0
  103. package/dist/modules/billing/billing.iva-receptor.d.ts +7 -0
  104. package/dist/modules/billing/billing.iva-receptor.js +58 -0
  105. package/dist/modules/billing/billing.iva-receptor.js.map +1 -0
  106. package/dist/modules/billing/billing.json-format.d.ts +6 -0
  107. package/dist/modules/billing/billing.json-format.js +5 -0
  108. package/dist/modules/billing/billing.json-format.js.map +1 -0
  109. package/dist/modules/billing/billing.labels.d.ts +9 -0
  110. package/dist/modules/billing/billing.labels.js +108 -0
  111. package/dist/modules/billing/billing.labels.js.map +1 -0
  112. package/dist/modules/billing/billing.mappers.d.ts +8 -0
  113. package/dist/modules/billing/billing.mappers.js +60 -0
  114. package/dist/modules/billing/billing.mappers.js.map +1 -0
  115. package/dist/modules/billing/billing.presenter.d.ts +7 -0
  116. package/dist/modules/billing/billing.presenter.js +3 -0
  117. package/dist/modules/billing/billing.presenter.js.map +1 -0
  118. package/dist/modules/billing/billing.schemas.d.ts +107 -0
  119. package/dist/modules/billing/billing.schemas.js +106 -0
  120. package/dist/modules/billing/billing.schemas.js.map +1 -0
  121. package/dist/modules/billing/billing.serialize.d.ts +8 -0
  122. package/dist/modules/billing/billing.serialize.js +53 -0
  123. package/dist/modules/billing/billing.serialize.js.map +1 -0
  124. package/dist/modules/billing/billing.service.d.ts +27 -0
  125. package/dist/modules/billing/billing.service.js +146 -0
  126. package/dist/modules/billing/billing.service.js.map +1 -0
  127. package/dist/modules/billing/billing.text.d.ts +8 -0
  128. package/dist/modules/billing/billing.text.js +52 -0
  129. package/dist/modules/billing/billing.text.js.map +1 -0
  130. package/dist/modules/billing/billing.types.d.ts +13 -0
  131. package/dist/modules/billing/billing.types.internal.d.ts +27 -0
  132. package/dist/modules/billing/billing.types.internal.js +2 -0
  133. package/dist/modules/billing/billing.types.internal.js.map +1 -0
  134. package/dist/modules/billing/billing.types.js +2 -0
  135. package/dist/modules/billing/billing.types.js.map +1 -0
  136. package/dist/modules/billing/billing.validation.d.ts +7 -0
  137. package/dist/modules/billing/billing.validation.js +80 -0
  138. package/dist/modules/billing/billing.validation.js.map +1 -0
  139. package/dist/modules/billing/voucher-kind-map.d.ts +9 -0
  140. package/dist/modules/billing/voucher-kind-map.js +180 -0
  141. package/dist/modules/billing/voucher-kind-map.js.map +1 -0
  142. package/dist/modules/config/config-doctor.d.ts +15 -0
  143. package/dist/modules/config/config-doctor.js +125 -0
  144. package/dist/modules/config/config-doctor.js.map +1 -0
  145. package/dist/modules/config/config-value-parser.d.ts +2 -0
  146. package/dist/modules/config/config-value-parser.js +99 -0
  147. package/dist/modules/config/config-value-parser.js.map +1 -0
  148. package/dist/modules/config/config.presenter.d.ts +7 -0
  149. package/dist/modules/config/config.presenter.js +88 -0
  150. package/dist/modules/config/config.presenter.js.map +1 -0
  151. package/dist/modules/config/config.schemas.d.ts +110 -0
  152. package/dist/modules/config/config.schemas.js +103 -0
  153. package/dist/modules/config/config.schemas.js.map +1 -0
  154. package/dist/modules/config/config.service.d.ts +20 -0
  155. package/dist/modules/config/config.service.js +82 -0
  156. package/dist/modules/config/config.service.js.map +1 -0
  157. package/dist/modules/examples/examples.d.ts +1 -0
  158. package/dist/modules/examples/examples.js +191 -0
  159. package/dist/modules/examples/examples.js.map +1 -0
  160. package/dist/modules/fce/fce-obligation.d.ts +20 -0
  161. package/dist/modules/fce/fce-obligation.js +33 -0
  162. package/dist/modules/fce/fce-obligation.js.map +1 -0
  163. package/dist/modules/fce/fce-obligation.presenter.d.ts +9 -0
  164. package/dist/modules/fce/fce-obligation.presenter.js +32 -0
  165. package/dist/modules/fce/fce-obligation.presenter.js.map +1 -0
  166. package/dist/modules/storybook/showcase-theme.d.ts +7 -0
  167. package/dist/modules/storybook/showcase-theme.js +6 -0
  168. package/dist/modules/storybook/showcase-theme.js.map +1 -0
  169. package/dist/modules/storybook/showcase.d.ts +2 -0
  170. package/dist/modules/storybook/showcase.js +310 -0
  171. package/dist/modules/storybook/showcase.js.map +1 -0
  172. package/dist/modules/update-check/update-check.presenter.d.ts +2 -0
  173. package/dist/modules/update-check/update-check.presenter.js +6 -0
  174. package/dist/modules/update-check/update-check.presenter.js.map +1 -0
  175. package/dist/modules/update-check/update-check.service.d.ts +8 -0
  176. package/dist/modules/update-check/update-check.service.js +72 -0
  177. package/dist/modules/update-check/update-check.service.js.map +1 -0
  178. package/dist/services/arca/arca-billing.gateway.d.ts +10 -0
  179. package/dist/services/arca/arca-billing.gateway.js +22 -0
  180. package/dist/services/arca/arca-billing.gateway.js.map +1 -0
  181. package/dist/services/arca/arca-client.factory.d.ts +5 -0
  182. package/dist/services/arca/arca-client.factory.js +7 -0
  183. package/dist/services/arca/arca-client.factory.js.map +1 -0
  184. package/dist/services/arca/arca-context.resolver.d.ts +44 -0
  185. package/dist/services/arca/arca-context.resolver.js +120 -0
  186. package/dist/services/arca/arca-context.resolver.js.map +1 -0
  187. package/dist/services/arca/arca-fce-obligation.gateway.d.ts +7 -0
  188. package/dist/services/arca/arca-fce-obligation.gateway.js +36 -0
  189. package/dist/services/arca/arca-fce-obligation.gateway.js.map +1 -0
  190. package/dist/ui/components/contentPanel.d.ts +5 -0
  191. package/dist/ui/components/contentPanel.js +11 -0
  192. package/dist/ui/components/contentPanel.js.map +1 -0
  193. package/dist/ui/components/errorPanel.d.ts +1 -0
  194. package/dist/ui/components/errorPanel.js +13 -0
  195. package/dist/ui/components/errorPanel.js.map +1 -0
  196. package/dist/ui/components/index.d.ts +6 -0
  197. package/dist/ui/components/index.js +7 -0
  198. package/dist/ui/components/index.js.map +1 -0
  199. package/dist/ui/components/keyValuePanel.d.ts +3 -0
  200. package/dist/ui/components/keyValuePanel.js +14 -0
  201. package/dist/ui/components/keyValuePanel.js.map +1 -0
  202. package/dist/ui/components/noticePanel.d.ts +3 -0
  203. package/dist/ui/components/noticePanel.js +11 -0
  204. package/dist/ui/components/noticePanel.js.map +1 -0
  205. package/dist/ui/components/rawPanel.d.ts +1 -0
  206. package/dist/ui/components/rawPanel.js +5 -0
  207. package/dist/ui/components/rawPanel.js.map +1 -0
  208. package/dist/ui/components/statusPanel.d.ts +3 -0
  209. package/dist/ui/components/statusPanel.js +20 -0
  210. package/dist/ui/components/statusPanel.js.map +1 -0
  211. package/dist/ui/index.d.ts +5 -0
  212. package/dist/ui/index.js +6 -0
  213. package/dist/ui/index.js.map +1 -0
  214. package/dist/ui/presenters/billing.presenter.d.ts +2 -0
  215. package/dist/ui/presenters/billing.presenter.js +2 -0
  216. package/dist/ui/presenters/billing.presenter.js.map +1 -0
  217. package/dist/ui/presenters/config.presenter.d.ts +1 -0
  218. package/dist/ui/presenters/config.presenter.js +2 -0
  219. package/dist/ui/presenters/config.presenter.js.map +1 -0
  220. package/dist/ui/presenters/errors.presenter.d.ts +1 -0
  221. package/dist/ui/presenters/errors.presenter.js +89 -0
  222. package/dist/ui/presenters/errors.presenter.js.map +1 -0
  223. package/dist/ui/presenters/errors.zod-presenter.d.ts +2 -0
  224. package/dist/ui/presenters/errors.zod-presenter.js +103 -0
  225. package/dist/ui/presenters/errors.zod-presenter.js.map +1 -0
  226. package/dist/ui/presenters/index.d.ts +4 -0
  227. package/dist/ui/presenters/index.js +5 -0
  228. package/dist/ui/presenters/index.js.map +1 -0
  229. package/dist/ui/presenters/showcase.presenter.d.ts +1 -0
  230. package/dist/ui/presenters/showcase.presenter.js +2 -0
  231. package/dist/ui/presenters/showcase.presenter.js.map +1 -0
  232. package/dist/ui/primitives/index.d.ts +10 -0
  233. package/dist/ui/primitives/index.js +11 -0
  234. package/dist/ui/primitives/index.js.map +1 -0
  235. package/dist/ui/primitives/renderDivider.d.ts +5 -0
  236. package/dist/ui/primitives/renderDivider.js +5 -0
  237. package/dist/ui/primitives/renderDivider.js.map +1 -0
  238. package/dist/ui/primitives/renderFooter.d.ts +7 -0
  239. package/dist/ui/primitives/renderFooter.js +6 -0
  240. package/dist/ui/primitives/renderFooter.js.map +1 -0
  241. package/dist/ui/primitives/renderJson.d.ts +3 -0
  242. package/dist/ui/primitives/renderJson.js +19 -0
  243. package/dist/ui/primitives/renderJson.js.map +1 -0
  244. package/dist/ui/primitives/renderKeyValue.d.ts +14 -0
  245. package/dist/ui/primitives/renderKeyValue.js +34 -0
  246. package/dist/ui/primitives/renderKeyValue.js.map +1 -0
  247. package/dist/ui/primitives/renderLogo.d.ts +2 -0
  248. package/dist/ui/primitives/renderLogo.js +28 -0
  249. package/dist/ui/primitives/renderLogo.js.map +1 -0
  250. package/dist/ui/primitives/renderObject.d.ts +1 -0
  251. package/dist/ui/primitives/renderObject.js +19 -0
  252. package/dist/ui/primitives/renderObject.js.map +1 -0
  253. package/dist/ui/primitives/renderPanel.d.ts +23 -0
  254. package/dist/ui/primitives/renderPanel.js +114 -0
  255. package/dist/ui/primitives/renderPanel.js.map +1 -0
  256. package/dist/ui/primitives/renderSubtitle.d.ts +7 -0
  257. package/dist/ui/primitives/renderSubtitle.js +6 -0
  258. package/dist/ui/primitives/renderSubtitle.js.map +1 -0
  259. package/dist/ui/primitives/renderTable.d.ts +6 -0
  260. package/dist/ui/primitives/renderTable.js +14 -0
  261. package/dist/ui/primitives/renderTable.js.map +1 -0
  262. package/dist/ui/primitives/text.d.ts +18 -0
  263. package/dist/ui/primitives/text.js +154 -0
  264. package/dist/ui/primitives/text.js.map +1 -0
  265. package/dist/ui/stream/index.d.ts +1 -0
  266. package/dist/ui/stream/index.js +2 -0
  267. package/dist/ui/stream/index.js.map +1 -0
  268. package/dist/ui/stream/terminal-stream.d.ts +10 -0
  269. package/dist/ui/stream/terminal-stream.js +20 -0
  270. package/dist/ui/stream/terminal-stream.js.map +1 -0
  271. package/dist/ui/theme/index.d.ts +1 -0
  272. package/dist/ui/theme/index.js +2 -0
  273. package/dist/ui/theme/index.js.map +1 -0
  274. package/dist/ui/theme/theme.d.ts +27 -0
  275. package/dist/ui/theme/theme.js +41 -0
  276. package/dist/ui/theme/theme.js.map +1 -0
  277. package/llms.txt +161 -0
  278. package/package.json +99 -35
  279. package/.babelrc +0 -4
  280. package/.eslintignore +0 -1
  281. package/.eslintrc.js +0 -17
  282. package/.npmignore +0 -1
  283. package/lib/arcli.js +0 -275
  284. package/lib/arcli.min.js +0 -1
  285. package/src/config.js +0 -22
  286. package/src/consoler.js +0 -10
  287. package/src/index.js +0 -21
  288. package/src/init.js +0 -13
  289. package/src/run.js +0 -4
  290. package/src/spinner.js +0 -39
  291. package/tst/index.js +0 -26
  292. package/webpack.config.js +0 -47
package/CHANGELOG.md ADDED
@@ -0,0 +1,78 @@
1
+ [← Volver al README](README.md)
2
+
3
+ # Changelog
4
+
5
+ Todos los cambios relevantes de ARCLI se documentan acá.
6
+
7
+ El formato sigue [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y el proyecto usa [versionado semántico](https://semver.org/lang/es/). Como el contrato del CLI es público (comandos, flags, claves de config y JSON), cada entrada aclara qué cambia para quien ya lo usa.
8
+
9
+ ## [Sin publicar]
10
+
11
+ ## [1.2.0] - 2026-10-02
12
+
13
+ Esta versión revisa el payload que ARCLI envía a ARCA contra el manual de WSFEv1 y corrige los casos en que ARCA rechazaba el comprobante. Además completa el soporte de Factura de Crédito Electrónica (FCE) y suma alícuotas, importes exentos y no gravados, y período asociado.
14
+
15
+ ### ⚠️ Puede afectar comandos o scripts existentes
16
+
17
+ Ninguno de estos cambios quita flags. Todos convierten en un error local, con el motivo en castellano, algo que antes llegaba a ARCA y ARCA rechazaba:
18
+
19
+ - **Moneda extranjera sin cotización:** `--moneda USD` sin `--cotizacion-moneda` da error. Antes se enviaba cotización `1`. En pesos, una cotización distinta de `1` también da error.
20
+ - **IVA receptor según la letra:** `fa` con `--ir-cf`, o `fb` con `--ir-ri`, da error y sugiere la letra correcta. Se usa la tabla de `FEParamGetCondicionIvaReceptor`.
21
+ - **Consumidor final desde $10.000.000:** `--consumidor-final` da error desde ese monto (RG 5700/2025). Hay que identificar al receptor con `--dni`, `--cuit` o `--cuil`.
22
+ - **Fecha del comprobante:** `--fecha` fuera de la ventana de ARCA da error. La ventana es ±5 días en productos, ±10 en servicios y de −5 a +1 en FCE. En productos y FCE, una fecha futura tiene que caer en el mes actual.
23
+ - **FCE:** las facturas FCE sin CBU, y las NC/ND FCE sin `--afecha`, dan error.
24
+ - **Flags de FCE fuera de FCE:** `--cbu`, `--alias`, `--transferencia` y `--anulacion` dan error en comprobantes que no son FCE.
25
+ - **Salida JSON:** la salida de facturación suma el campo `avisos` (siempre presente, vacío si no hay avisos).
26
+
27
+ ### Agregado
28
+
29
+ - `--misma-moneda` para comprobantes en moneda extranjera que se cobran en esa moneda. Consulta la cotización oficial a ARCA y envía `CanMisMonExt = S`. Clave JSON: `mismaMoneda`.
30
+ - `--vencimiento <fecha>` (alias `--vto`) para separar el vencimiento de pago del período de servicio. Clave JSON: `vencimientoPago`.
31
+ - Soporte completo de FCE:
32
+ - Facturas: `--cbu`, `--alias` y `--transferencia sca|adc`.
33
+ - NC/ND: `--anulacion` y `--afecha`. El CUIT del asociado se toma del emisor.
34
+ - Claves de config `cbu` y `aliasCbu`, aplicadas solo a facturas FCE.
35
+ - Claves JSON `cbu`, `aliasCbu`, `transferencia`, `anulacion` y `comprobanteAsociado.fecha`.
36
+ - `--afecha` también disponible, opcional, en notas comunes.
37
+ - `--alicuota 0|2.5|5|10.5|21|27` para letras A y B, y la clave de config `alicuota` para fijarla por defecto. Clave JSON: `alicuotaIva`.
38
+ - `--exento <monto>` y `--nogravado <monto>`: reparten el total en importe exento (`ImpOpEx`) y no gravado (`ImpTotConc`). Claves JSON: `importeExento` e `importeNoGravado`.
39
+ - `--periodo-desde` / `--periodo-hasta` (alias `--pd` / `--ph`): período asociado en notas comunes, como alternativa a `--ac`. Clave JSON: `periodoAsociado`.
40
+ - Comando `arcli fce-obligado <cuit>`: consulta en ARCA (`wsfecred`) si un receptor está obligado a recibir FCE y desde qué monto.
41
+ - Clave de config `verificarFce` (opt-in): hace esa consulta en cada factura con CUIT y avisa si corresponde FCE en lugar de factura común, o al revés. No frena la emisión.
42
+ - La vista previa muestra CBU, transferencia, anulación, fecha y período asociado, alícuota, importe no gravado y avisos.
43
+ - Los errores de valores no soportados listan los valores válidos.
44
+
45
+ ### Corregido
46
+
47
+ - Dólar se enviaba como `USD`; ahora se envía `DOL`, el código de ARCA.
48
+ - La factura A a un receptor que no era responsable inscripto salía sin IVA discriminado. Ahora A y B siempre discriminan IVA.
49
+ - Las facturas FCE de productos no enviaban `FchVtoPago`, y las NC/ND FCE lo enviaban cuando no correspondía.
50
+ - Un servicio facturado después de su fin enviaba un vencimiento de pago anterior a la fecha del comprobante. Ahora nunca es anterior.
51
+ - La fecha por defecto del comprobante se calculaba en UTC: después de las 21 hs en Argentina salía con el día siguiente.
52
+ - `arcli ejemplos` usaba fechas fijas que quedaban fuera de la ventana de ARCA. Ahora son relativas a hoy e incluyen los datos de FCE.
53
+ - Con `config cotizacion` configurada, las facturas en pesos ya no toman esa cotización.
54
+
55
+ ### Dependencias
56
+
57
+ - `@arcasdk/core` 2.0.0 → 2.0.2. La 2.0.0 validaba el total sin sumar exento ni no gravado ([ralcorta/arcasdk#190](https://github.com/ralcorta/arcasdk/issues/190)). La 2.0.2 además expone `wsfecred` y tipa `PeriodoAsoc`.
58
+
59
+ ### Documentación
60
+
61
+ - Secciones nuevas en reglas de validación: moneda y cotización, IVA receptor por letra, vencimiento de pago, fecha del comprobante, crédito electrónico (FCE) y régimen FCE del receptor.
62
+ - La guía de certificados explica cómo autorizar `wsfecred`.
63
+ - Se actualizaron la referencia del CLI, entrada y salida, configuración, patrones de uso (con uno de FCE), troubleshooting, glosario, checklist de testing y `llms.txt`.
64
+
65
+ ## [1.1.0] - 2026-08-24
66
+
67
+ Primera versión publicada en npm.
68
+
69
+ - Facturas, notas de crédito y notas de débito A, B y C, comunes y de crédito electrónica, por shortcut (`fc`, `nca`…) o por familia y letra (`factura c`…).
70
+ - Configuración persistente (`arcli config`), revisión del entorno (`arcli config revisar`) y `testing` como entorno por defecto.
71
+ - Vista previa antes de emitir, carga desde JSON (`--cargar`, también por lotes) y salida humana, `--json` o `--bruto`.
72
+ - `arcli ejemplos` con comandos listos para copiar.
73
+ - `llms.txt`: referencia condensada para que un agente de IA con acceso a terminal ejecute el CLI.
74
+ - Publicación con npm Trusted Publishers (OIDC).
75
+
76
+ [Sin publicar]: https://github.com/LcsGrz/arcli/compare/v1.2.0...HEAD
77
+ [1.2.0]: https://github.com/LcsGrz/arcli/compare/v1.1.0...v1.2.0
78
+ [1.1.0]: https://github.com/LcsGrz/arcli/releases/tag/v1.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 LcsGrz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,8 +1,173 @@
1
- arcli
2
- ---
1
+ # ARCLI
3
2
 
4
- Collection of awesome node packages wrapped in one to create a beautiful command line application.
3
+ [![npm version](https://img.shields.io/npm/v/arcli.svg)](https://www.npmjs.com/package/arcli)
4
+ [![CI](https://github.com/LcsGrz/arcli/actions/workflows/ci.yml/badge.svg)](https://github.com/LcsGrz/arcli/actions/workflows/ci.yml)
5
+ [![license: MIT](https://img.shields.io/npm/l/arcli.svg)](LICENSE)
6
+ [![node >=20](https://img.shields.io/node/v/arcli.svg)](package.json)
7
+
8
+ ```text
9
+ d8888 8888888b. .d8888b. 888 8888888
10
+ d88888 888 Y88b d88P Y88b 888 888
11
+ d88P888 888 888 888 888 888 888
12
+ d88P 888 888 d88P 888 888 888
13
+ d88P 888 8888888P" 888 888 888
14
+ d88P 888 888 T88b 888 888 888 888
15
+ d8888888888 888 T88b Y88b d88P 888 888
16
+ d88P 888 888 T88b "Y8888P" 88888888 8888888
17
+ ```
18
+
19
+ Emití o previsualizá comprobantes ARCA desde tu terminal, con un flujo claro, seguro y rapido en lugar de utilizar UI.
20
+
21
+ ## Características
22
+
23
+ - configuración persistente por usuario
24
+ - previsualización segura antes de emitir
25
+ - entrada por flags o JSON
26
+ - salida humana, JSON o respuesta bruta
27
+ - prompts interactivos cuando el flujo lo requiere
28
+ - integración real con ARCA
29
+ - Factura de Crédito Electrónica (FCE) completa: CBU, transferencia, anulación y consulta del régimen del receptor
30
+ - alícuotas de IVA, importes exentos y no gravados, moneda extranjera y período asociado
31
+ - validaciones locales con las reglas del manual de ARCA, para que los errores aparezcan antes de emitir
32
+
33
+ ## Demo basica
34
+
35
+ ```bash
36
+ npm install -g arcli
37
+ arcli config
38
+ arcli config establecer cuit 20168598204
39
+ arcli config establecer puntoVenta 3
40
+ arcli config establecer cert.testing /ruta/al/certificado.crt
41
+ arcli config establecer key.testing /ruta/a/la/clave.key
42
+
43
+ arcli fc -m 15000 --cs --consumidor-final --ir-cf
44
+ ```
45
+
46
+ ## Inicio rápido
47
+
48
+ ### 1. Instalar
49
+
50
+ Requiere Node.js 20 o superior.
51
+
52
+ ```bash
53
+ npm install -g arcli
54
+ ```
55
+
56
+ ### 2. Crear o abrir la configuración
57
+
58
+ ```bash
59
+ arcli config
60
+ ```
61
+
62
+ ### 3. Guardar defaults útiles
63
+
64
+ ```bash
65
+ arcli config establecer cuit 20168598204
66
+ arcli config establecer puntoVenta 3
67
+ arcli config establecer concepto servicios
68
+ arcli config establecer ivaReceptor consumidor-final
69
+ arcli config establecer moneda ARS
70
+ arcli config establecer cotizacion 1
71
+ arcli config establecer emitir false
72
+ arcli config establecer bruto false
73
+ ```
74
+
75
+ ### 4. Configurar credenciales
76
+
77
+ ```bash
78
+ arcli config establecer cert.testing /ruta/al/certificado.crt
79
+ arcli config establecer key.testing /ruta/a/la/clave.key
80
+ ```
81
+
82
+ Si después querés usar producción:
5
83
 
6
84
  ```bash
7
- npm install arcli
85
+ arcli config establecer cert.produccion /ruta/al/certificado.crt
86
+ arcli config establecer key.produccion /ruta/a/la/clave.key
8
87
  ```
88
+
89
+ ### 5. Revisar el entorno activo
90
+
91
+ ```bash
92
+ arcli config revisar
93
+ ```
94
+
95
+ ### 6. Previsualizar el primer comprobante
96
+
97
+ ```bash
98
+ arcli fc -m 15000 --cs --consumidor-final --ir-cf
99
+ ```
100
+
101
+ ### 7. Emitir de verdad
102
+
103
+ ```bash
104
+ arcli fc -m 15000 --cs --consumidor-final --ir-cf --emitir
105
+ ```
106
+
107
+ ## Cómo funciona
108
+
109
+ ARCLI toma datos por flags, JSON o config, valida lo que puede localmente, arma el payload y — si corresponde — llama a ARCA. La prioridad es `flags > JSON > config > defaults`.
110
+
111
+ Ver [docs/mental-model.md](docs/mental-model.md) para el modelo completo.
112
+
113
+ ## Seguridad: testing vs producción
114
+
115
+ - Si no pasás nada, el entorno es `testing`.
116
+ - `testing` usa `cert.testing` y `key.testing`.
117
+ - `produccion` usa `cert.produccion` y `key.produccion`.
118
+ - Para emitir realmente en producción hacen falta:
119
+ - `--produccion`
120
+ - `--emitir`
121
+
122
+ Ejemplo:
123
+
124
+ ```bash
125
+ arcli fa -m 15000 --cs --cuit 20168598204 --ir-ri \
126
+ --produccion \
127
+ --emitir
128
+ ```
129
+
130
+ ## Documentación
131
+
132
+ - [Modelo mental](docs/mental-model.md)
133
+ - [Glosario](docs/glossary.md)
134
+ - [Referencia del CLI](docs/cli-reference.md)
135
+ - [Patrones de uso](docs/usage-patterns.md)
136
+ - [Configuración](docs/configuration.md)
137
+ - [Cómo obtener los certificados de ARCA](docs/obtencion-certificados.md)
138
+ - [Entrada y salida](docs/input-output.md)
139
+ - [Reglas de validación](docs/validation-rules.md)
140
+ - [Troubleshooting](docs/troubleshooting.md)
141
+ - [Limitaciones actuales](docs/limitations.md)
142
+ - [Guía de desarrollo](docs/development.md)
143
+ - [Testing](docs/ui-smoke-checklist.md)
144
+ - [Changelog](CHANGELOG.md)
145
+ - [Cómo contribuir](CONTRIBUTING.md)
146
+ - [llms.txt](llms.txt): referencia condensada para que un agente/IA con acceso a terminal ejecute el CLI directamente
147
+ - [Seguridad](SECURITY.md)
148
+
149
+ ## ❤️ Agradecimientos
150
+
151
+ ARCLI existe apoyado en trabajo open source que ya resolvió partes difíciles del problema. En particular:
152
+
153
+ - [`@arcasdk/core`](https://github.com/ralcorta/arcasdk) creada por [Rodrigo Alcorta](https://github.com/ralcorta)
154
+ - [Arpit Bhayani](https://github.com/arpitbbhayani) por cederme el paquete de npm bajo el nombre de 'arcli', estaba siendo utilizado por el.
155
+
156
+ Y la comunidad open source que mantiene herramientas de este estilo vivas y usables
157
+
158
+ ## ☕ Apoyar el proyecto
159
+
160
+ ARCLI es open source. Mantenerlo, probarlo contra servicios reales y documentarlo bien lleva tiempo.
161
+
162
+ - Si queres darme un mimo: [Cafesito](https://cafecito.app/lcsgrz)
163
+ - Reporta issues claros, repros buenos y feedback real de uso
164
+ - Dejame tu estrellita ★ :)
165
+
166
+ ## Licencia
167
+
168
+ MIT © [LcsGrz](https://github.com/LcsGrz). Ver [LICENSE](LICENSE).
169
+
170
+ ## Proyecto
171
+
172
+ - repo: [github.com/LcsGrz/arcli](https://github.com/LcsGrz/arcli)
173
+ - issues: [github.com/LcsGrz/arcli/issues](https://github.com/LcsGrz/arcli/issues)
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBillingFamilyCommands(program: Command): void;
@@ -0,0 +1,30 @@
1
+ import { InputValidationError } from '../../lib/errors/app-error.js';
2
+ import { getVoucherKindByFamilyAndLetter, VOUCHER_FAMILIES, VOUCHER_KIND_MAP, VOUCHER_LETTERS, } from '../../modules/billing/voucher-kind-map.js';
3
+ import { configureSpanishHelp, createFamilyHelp } from '../help.js';
4
+ import { executeBillingCommand, registerBillingCommandOptions } from './billing.command.shared.js';
5
+ export function registerBillingFamilyCommands(program) {
6
+ for (const family of VOUCHER_FAMILIES) {
7
+ const familyShortcuts = Object.values(VOUCHER_KIND_MAP)
8
+ .filter((definition) => definition.family === family)
9
+ .map((definition) => definition.shortcut)
10
+ .join(', ');
11
+ const command = program
12
+ .command(family)
13
+ .description(`usar ${family} por letra A, B o C con ejemplos y atajos${familyShortcuts ? ` (${familyShortcuts})` : ''}`)
14
+ .argument('<letra>', 'letra del comprobante', (value) => value.toLowerCase());
15
+ configureSpanishHelp(command);
16
+ registerBillingCommandOptions(command);
17
+ command.action(async (letter) => {
18
+ if (!VOUCHER_LETTERS.includes(letter)) {
19
+ throw new InputValidationError(`La letra "${letter}" no es valida. Use a, b o c.`);
20
+ }
21
+ const definition = getVoucherKindByFamilyAndLetter(family, letter);
22
+ if (!definition) {
23
+ throw new InputValidationError(`No existe un comprobante para la familia "${family}" y letra "${letter}".`);
24
+ }
25
+ await executeBillingCommand(command, definition.shortcut);
26
+ });
27
+ command.addHelpText('after', createFamilyHelp(family));
28
+ }
29
+ }
30
+ //# sourceMappingURL=billing-family.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-family.command.js","sourceRoot":"","sources":["../../../src/cli/commands/billing-family.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;aACpD,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC;aACpD,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,OAAO;aACpB,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CACV,QAAQ,MAAM,4CAA4C,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3G;aACA,QAAQ,CAAC,SAAS,EAAE,uBAAuB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAExF,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9B,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;YACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAuB,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,oBAAoB,CAAC,aAAa,MAAM,+BAA+B,CAAC,CAAC;YACrF,CAAC;YAED,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,EAAE,MAAuB,CAAC,CAAC;YAEpF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,oBAAoB,CAAC,6CAA6C,MAAM,cAAc,MAAM,IAAI,CAAC,CAAC;YAC9G,CAAC;YAED,MAAM,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBillingShortcutCommands(program: Command): void;
@@ -0,0 +1,18 @@
1
+ import { VOUCHER_KIND_MAP, VOUCHER_SHORTCUTS } from '../../modules/billing/voucher-kind-map.js';
2
+ import { configureSpanishHelp, createShortcutHelp } from '../help.js';
3
+ import { executeBillingCommand, registerBillingCommandOptions } from './billing.command.shared.js';
4
+ export function registerBillingShortcutCommands(program) {
5
+ for (const shortcut of VOUCHER_SHORTCUTS) {
6
+ const definition = VOUCHER_KIND_MAP[shortcut];
7
+ const command = program
8
+ .command(shortcut)
9
+ .description(`${definition.displayName} por shortcut, con ayuda guiada para previsualizar o emitir`);
10
+ configureSpanishHelp(command);
11
+ registerBillingCommandOptions(command);
12
+ command.action(async () => {
13
+ await executeBillingCommand(command, shortcut);
14
+ });
15
+ command.addHelpText('after', createShortcutHelp(shortcut));
16
+ }
17
+ }
18
+ //# sourceMappingURL=billing-shortcuts.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-shortcuts.command.js","sourceRoot":"","sources":["../../../src/cli/commands/billing-shortcuts.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,UAAU,+BAA+B,CAAC,OAAgB;IAC9D,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,OAAO;aACpB,OAAO,CAAC,QAAQ,CAAC;aACjB,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,6DAA6D,CAAC,CAAC;QAEvG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9B,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { BillingCommandInput } from '../../modules/billing/billing.schemas';
2
+ import type { BillingService } from '../../modules/billing/billing.service';
3
+ import type { ResolvedArcaRuntime } from '../../services/arca/arca-context.resolver';
4
+ export interface InteractiveBillingPreviewOutcome {
5
+ readonly confirmedInteractively: boolean;
6
+ readonly inputs: BillingCommandInput[];
7
+ readonly previewShown: boolean;
8
+ readonly proceed: boolean;
9
+ }
10
+ export declare function runInteractiveBillingPreview(options: {
11
+ readonly inputs: BillingCommandInput[];
12
+ readonly modeSource: 'default' | 'file' | 'flags';
13
+ readonly runtime: ResolvedArcaRuntime;
14
+ readonly service: BillingService;
15
+ readonly useRaw: boolean;
16
+ readonly voucherLabel: string;
17
+ readonly warnings?: ReadonlyArray<readonly string[]>;
18
+ }): Promise<InteractiveBillingPreviewOutcome>;
@@ -0,0 +1,69 @@
1
+ import select from '@inquirer/select';
2
+ import { writeTerminalOutput } from '../../ui/index.js';
3
+ import { formatBillingOutputs } from './billing.command.output.js';
4
+ async function promptForEmission(count, voucherLabel) {
5
+ return select({
6
+ choices: [
7
+ { name: 'Si, emitir ahora', value: true },
8
+ { name: 'No, dejar sin emitir', value: false },
9
+ ],
10
+ default: true,
11
+ message: count > 1 ? `¿Desea emitir los ${count} comprobantes ahora?` : `¿Desea emitir ${voucherLabel} ahora?`,
12
+ });
13
+ }
14
+ function applyEmitDecision(inputs, shouldEmit) {
15
+ return inputs.map((input) => ({
16
+ ...input,
17
+ dryRun: !shouldEmit,
18
+ emit: shouldEmit,
19
+ }));
20
+ }
21
+ export async function runInteractiveBillingPreview(options) {
22
+ const shouldPromptForEmit = options.modeSource === 'default' &&
23
+ options.inputs.some((input) => !input.emit) &&
24
+ !options.runtime.outputJson &&
25
+ process.stdin.isTTY &&
26
+ process.stdout.isTTY;
27
+ if (!shouldPromptForEmit) {
28
+ return {
29
+ confirmedInteractively: false,
30
+ inputs: options.inputs,
31
+ previewShown: false,
32
+ proceed: true,
33
+ };
34
+ }
35
+ const previewGateway = {
36
+ createNextVoucher: async () => {
37
+ throw new Error('No deberia ejecutarse la emision real durante la vista previa.');
38
+ },
39
+ getQuotation: async () => {
40
+ throw new Error('La cotizacion se resuelve antes de la vista previa.');
41
+ },
42
+ };
43
+ const previewResults = [];
44
+ for (const [index, input] of options.inputs.entries()) {
45
+ previewResults.push(await options.service.execute({
46
+ gateway: previewGateway,
47
+ input,
48
+ runtime: options.runtime,
49
+ warnings: options.warnings?.[index],
50
+ }));
51
+ }
52
+ writeTerminalOutput(formatBillingOutputs(previewResults, { environment: options.runtime.environment, raw: options.useRaw }));
53
+ const confirmed = await promptForEmission(options.inputs.length, options.voucherLabel);
54
+ if (!confirmed) {
55
+ return {
56
+ confirmedInteractively: false,
57
+ inputs: options.inputs,
58
+ previewShown: true,
59
+ proceed: false,
60
+ };
61
+ }
62
+ return {
63
+ confirmedInteractively: true,
64
+ inputs: applyEmitDecision(options.inputs, true),
65
+ previewShown: true,
66
+ proceed: true,
67
+ };
68
+ }
69
+ //# sourceMappingURL=billing.command.interactive-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.command.interactive-preview.js","sourceRoot":"","sources":["../../../src/cli/commands/billing.command.interactive-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerBillingOptions(command: Command): void;
@@ -0,0 +1,65 @@
1
+ import { Option } from 'commander';
2
+ export function registerBillingOptions(command) {
3
+ command
4
+ .option('-m, --monto <number>', 'importe total del comprobante', parseFloat)
5
+ .option('--alicuota <tasa>', 'alicuota de IVA para A y B: 0, 2.5, 5, 10.5, 21 o 27 (por defecto 21)')
6
+ .option('--exento <number>', 'parte exenta del monto total (A y B)', parseFloat)
7
+ // No puede llamarse --no-gravado: commander interpreta --no-* como negacion de un flag booleano.
8
+ .option('--nogravado <number>', 'parte no gravada del monto total (A y B)', parseFloat)
9
+ .option('-d, --dia <number>', 'dia de vencimiento o referencia del servicio', (value) => Number.parseInt(value, 10))
10
+ .option('--punto-venta <number>', 'punto de venta', (value) => Number.parseInt(value, 10))
11
+ .option('--pv <number>', 'alias de punto de venta', (value) => Number.parseInt(value, 10))
12
+ .option('--cargar <path>', 'cargar datos base desde un archivo JSON')
13
+ .option('-f, --fecha <fecha>', 'fecha del comprobante; acepta D, D/M, D/M/YY o D/M/YYYY con - o /')
14
+ .option('-c, --concepto <tipo>', 'productos, servicios o productos y servicios (alias: cs, cp, csp)')
15
+ .option('--cs', 'usar concepto servicios')
16
+ .option('--cp', 'usar concepto productos')
17
+ .option('--csp', 'usar concepto productos y servicios')
18
+ .option('--moneda <codigo>', 'codigo de moneda, por ejemplo ARS o USD')
19
+ .option('--mda <codigo>', 'alias de moneda, por ejemplo ARS o USD')
20
+ .option('--cm <number>', 'alias de cotizacion de la moneda', parseFloat)
21
+ .option('--cotizacion-moneda <number>', 'cotizacion de la moneda', parseFloat)
22
+ .option('--misma-moneda', 'el pago se cancela en la misma moneda extranjera; usa la cotizacion oficial de ARCA')
23
+ .option('--cuit <number>', 'usar CUIT del receptor', (value) => Number.parseInt(value, 10))
24
+ .option('--cuil <number>', 'usar CUIL del receptor', (value) => Number.parseInt(value, 10))
25
+ .option('--dni <number>', 'usar DNI del receptor', (value) => Number.parseInt(value, 10))
26
+ .option('--consumidor-final', 'usar consumidor final con documento 0')
27
+ .option('--cfinal', 'alias de consumidor final con documento 0')
28
+ .option('--iva-receptor <tipo>', 'condicion IVA del receptor')
29
+ .option('--ir <tipo>', 'alias rapido de condicion IVA del receptor')
30
+ .option('--ir-ce', 'IVA receptor: cliente del exterior')
31
+ .option('--ir-cf', 'IVA receptor: consumidor final')
32
+ .option('--ir-il', 'IVA receptor: IVA liberado')
33
+ .option('--ir-ina', 'IVA receptor: IVA no alcanzado')
34
+ .option('--ir-ms', 'IVA receptor: monotributista social')
35
+ .option('--ir-mtip', 'IVA receptor: monotributo trabajador independiente promovido')
36
+ .option('--ir-pe', 'IVA receptor: proveedor del exterior')
37
+ .option('--ir-ri', 'IVA receptor: responsable inscripto')
38
+ .option('--ir-rm', 'IVA receptor: responsable monotributo')
39
+ .option('--ir-se', 'IVA receptor: sujeto exento')
40
+ .option('--ir-snc', 'IVA receptor: sujeto no categorizado')
41
+ .option('--sd <fecha>', 'alias rapido de fecha de inicio de servicio')
42
+ .option('--servicio-desde <fecha>', 'fecha de inicio de servicio')
43
+ .option('--sh <fecha>', 'alias rapido de fecha de fin de servicio')
44
+ .option('--servicio-hasta <fecha>', 'fecha de fin de servicio')
45
+ .option('--vencimiento <fecha>', 'fecha de vencimiento del pago; por defecto el fin del servicio')
46
+ .option('--vto <fecha>', 'alias de fecha de vencimiento del pago')
47
+ .option('--at <number>', 'tipo ARCA del comprobante asociado', (value) => Number.parseInt(value, 10))
48
+ .option('--apv <number>', 'punto de venta del comprobante asociado', (value) => Number.parseInt(value, 10))
49
+ .option('--asociado-punto-venta <number>', 'punto de venta del comprobante asociado', (value) => Number.parseInt(value, 10))
50
+ .option('--ar <number>', 'numero del comprobante asociado', (value) => Number.parseInt(value, 10))
51
+ .option('--ac <shortcut>', 'atajo del comprobante asociado, por ejemplo fc o fa')
52
+ .option('--acuit <number>', 'CUIT del comprobante asociado; en NC/ND FCE por defecto el CUIT emisor')
53
+ .option('--periodo-desde <fecha>', 'inicio del periodo asociado; alternativa a --ac en notas comunes')
54
+ .option('--pd <fecha>', 'alias de inicio del periodo asociado')
55
+ .option('--periodo-hasta <fecha>', 'fin del periodo asociado; alternativa a --ac en notas comunes')
56
+ .option('--ph <fecha>', 'alias de fin del periodo asociado')
57
+ .option('--afecha <fecha>', 'fecha del comprobante asociado; obligatoria en NC/ND FCE')
58
+ .option('--cbu <cbu>', 'CBU del emisor para facturas FCE (22 digitos)')
59
+ .option('--alias <alias>', 'alias del CBU del emisor para facturas FCE')
60
+ .option('--transferencia <modalidad>', 'modalidad de transferencia FCE: sca o adc (por defecto sca)')
61
+ .option('--anulacion', 'NC/ND FCE de anulacion (la factura asociada fue rechazada por el comprador)')
62
+ .option('--previsualizar', 'mostrar el payload antes de emitir en ARCA')
63
+ .addOption(new Option('--emitir', 'emitir realmente en ARCA'));
64
+ }
65
+ //# sourceMappingURL=billing.command.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.command.options.js","sourceRoot":"","sources":["../../../src/cli/commands/billing.command.options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BillingExecutionResult } from '../../modules/billing/billing.types.internal';
2
+ export declare function formatBillingOutputs(results: BillingExecutionResult[], options: {
3
+ readonly environment: 'produccion' | 'testing';
4
+ readonly previewShown?: boolean;
5
+ readonly raw: boolean;
6
+ }): string;
7
+ export declare function writeBillingCommandResults(results: BillingExecutionResult[], options: {
8
+ readonly environment: 'produccion' | 'testing';
9
+ readonly outputJson: boolean;
10
+ readonly previewShown?: boolean;
11
+ readonly raw: boolean;
12
+ }): void;
@@ -0,0 +1,33 @@
1
+ import { serializeBillingBatch } from '../../modules/billing/billing.serialize.js';
2
+ import { formatBillingResultAsJson, formatBillingResultAsText, writeTerminalJson, writeTerminalOutput } from '../../ui/index.js';
3
+ export function formatBillingOutputs(results, options) {
4
+ return results
5
+ .map((result, index) => {
6
+ const output = formatBillingResultAsText(result, {
7
+ environment: options.environment,
8
+ previewShown: options.previewShown,
9
+ raw: options.raw,
10
+ });
11
+ if (results.length === 1) {
12
+ return output;
13
+ }
14
+ return [`Lote ${index + 1}/${results.length}`, output].join('\n');
15
+ })
16
+ .join('\n\n');
17
+ }
18
+ export function writeBillingCommandResults(results, options) {
19
+ if (options.outputJson) {
20
+ if (results.length === 1) {
21
+ writeTerminalJson(formatBillingResultAsJson(results[0], { raw: options.raw }));
22
+ return;
23
+ }
24
+ writeTerminalJson(JSON.stringify(serializeBillingBatch(results, { raw: options.raw }), null, 2));
25
+ return;
26
+ }
27
+ writeTerminalOutput(formatBillingOutputs(results, {
28
+ environment: options.environment,
29
+ previewShown: options.previewShown,
30
+ raw: options.raw,
31
+ }));
32
+ }
33
+ //# sourceMappingURL=billing.command.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.command.output.js","sourceRoot":"","sources":["../../../src/cli/commands/billing.command.output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAExH,MAAM,UAAU,oBAAoB,CAClC,OAAiC,EACjC,OAIC;IAED,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE;YAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAiC,EACjC,OAKC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,iBAAiB,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAE/E,OAAO;QACT,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjG,OAAO;IACT,CAAC;IAED,mBAAmB,CACjB,oBAAoB,CAAC,OAAO,EAAE;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Command } from 'commander';
2
+ import { type BillingCommandInput } from '../../modules/billing/billing.schemas';
3
+ import type { VoucherShortcut } from '../../modules/billing/billing.types';
4
+ export { registerBillingOptions } from './billing.command.options';
5
+ export interface BillingCommandDefaults {
6
+ readonly defaultIvaRate?: BillingCommandInput['ivaRate'];
7
+ readonly defaultCbu?: string;
8
+ readonly defaultCbuAlias?: string;
9
+ readonly defaultConcept?: BillingCommandInput['concept'];
10
+ readonly defaultCurrencyCode?: string;
11
+ readonly defaultEmit?: boolean;
12
+ readonly defaultExchangeRate?: number;
13
+ readonly defaultIvaCondition?: BillingCommandInput['ivaCondition'];
14
+ }
15
+ export interface BillingCommandPlan {
16
+ readonly inputs: BillingCommandInput[];
17
+ readonly modeSource: 'default' | 'file' | 'flags';
18
+ }
19
+ export declare function parseBillingCommandPlan(command: Command, shortcut: VoucherShortcut, defaults?: BillingCommandDefaults): BillingCommandPlan;
20
+ export declare function parseBillingCommandInputs(command: Command, shortcut: VoucherShortcut, defaults?: BillingCommandDefaults): BillingCommandInput[];
21
+ export declare function parseBillingCommandInput(command: Command, shortcut: VoucherShortcut, defaults?: BillingCommandDefaults): BillingCommandInput;