arcli 2.0.0 → 2.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 (511) hide show
  1. package/CHANGELOG.md +106 -1
  2. package/README.md +21 -14
  3. package/dist/cli/arca-runtime.js +41 -0
  4. package/dist/cli/commands/billing-family.command.js +36 -9
  5. package/dist/cli/commands/billing-shortcuts.command.js +8 -2
  6. package/dist/cli/commands/billing.command.batch.js +28 -12
  7. package/dist/cli/commands/billing.command.interactive-preview.js +12 -13
  8. package/dist/cli/commands/billing.command.options.js +83 -39
  9. package/dist/cli/commands/billing.command.output.js +3 -3
  10. package/dist/cli/commands/billing.command.parser.js +44 -30
  11. package/dist/cli/commands/billing.command.pdf.js +9 -6
  12. package/dist/cli/commands/billing.command.shared.js +86 -49
  13. package/dist/cli/commands/billing.command.shortcuts.js +3 -4
  14. package/dist/cli/commands/completion.command.js +140 -0
  15. package/dist/cli/commands/config.command.js +44 -45
  16. package/dist/cli/commands/cuit-argument.js +10 -0
  17. package/dist/cli/commands/examples.command.js +0 -1
  18. package/dist/cli/commands/export-shortcut.command.js +19 -0
  19. package/dist/cli/commands/export.command.js +106 -0
  20. package/dist/cli/commands/export.command.options.js +140 -0
  21. package/dist/cli/commands/export.command.parser.js +84 -0
  22. package/dist/cli/commands/export.command.pdf.js +61 -0
  23. package/dist/cli/commands/fce-obligation.command.js +8 -16
  24. package/dist/cli/commands/interactive.command.js +9 -8
  25. package/dist/cli/commands/padron.command.js +46 -0
  26. package/dist/cli/commands/parameters.command.js +13 -13
  27. package/dist/cli/commands/pdf.command.js +17 -31
  28. package/dist/cli/commands/storybook.command.js +4 -4
  29. package/dist/cli/commands/vouchers.command.js +14 -14
  30. package/dist/cli/error-output.js +89 -11
  31. package/dist/cli/global-options.js +55 -0
  32. package/dist/cli/help-argv.js +0 -1
  33. package/dist/cli/help.js +243 -391
  34. package/dist/cli/ignored-global-options.js +32 -0
  35. package/dist/cli/index.js +12 -14
  36. package/dist/cli/interactive/advanced-options.js +13 -14
  37. package/dist/cli/interactive/config.flow.js +59 -20
  38. package/dist/cli/interactive/export.flow.js +263 -0
  39. package/dist/cli/interactive/history.flow.js +2 -3
  40. package/dist/cli/interactive/interactive-mode.js +63 -33
  41. package/dist/cli/interactive/invoice-picker.js +7 -7
  42. package/dist/cli/interactive/invoice.flow.js +35 -13
  43. package/dist/cli/interactive/note.flow.js +16 -16
  44. package/dist/cli/interactive/pdf.flow.js +9 -7
  45. package/dist/cli/interactive/prompts.js +0 -1
  46. package/dist/cli/interactive/receiver-padron.js +52 -0
  47. package/dist/cli/interactive/repeat.flow.js +10 -11
  48. package/dist/cli/interactive/session.js +13 -8
  49. package/dist/cli/interactive/status.flow.js +0 -1
  50. package/dist/cli/interactive/update.flow.js +0 -1
  51. package/dist/cli/interactive/validators.js +7 -6
  52. package/dist/cli/option-parsers.js +14 -4
  53. package/dist/cli/program.js +14 -5
  54. package/dist/cli/skipped-options.js +14 -0
  55. package/dist/cli/spinner.js +0 -1
  56. package/dist/cli/types.js +0 -1
  57. package/dist/cli/version.js +1 -2
  58. package/dist/index.js +0 -1
  59. package/dist/lib/dates/arca-date.js +3 -4
  60. package/dist/lib/errors/app-error.js +2 -2
  61. package/dist/lib/files/read-json-file.js +2 -3
  62. package/dist/lib/files/restrict-to-owner.js +0 -1
  63. package/dist/lib/files/write-new-file.js +29 -0
  64. package/dist/lib/identity/cuit.js +26 -0
  65. package/dist/lib/identity/format-cuit.js +1 -2
  66. package/dist/lib/links.js +2 -1
  67. package/dist/lib/numbers/argentine-amount.js +3 -4
  68. package/dist/lib/numbers/strict-integer.js +0 -1
  69. package/dist/lib/paths/mask-path.js +0 -1
  70. package/dist/lib/security/certificate.js +10 -8
  71. package/dist/lib/security/pem.js +2 -3
  72. package/dist/modules/billing/billing-response.js +16 -5
  73. package/dist/modules/billing/billing.amounts.js +3 -4
  74. package/dist/modules/billing/billing.associated-period.js +7 -8
  75. package/dist/modules/billing/billing.associated-vouchers.js +5 -6
  76. package/dist/modules/billing/billing.batch.js +12 -5
  77. package/dist/modules/billing/billing.constants.js +0 -1
  78. package/dist/modules/billing/billing.currency.js +4 -5
  79. package/dist/modules/billing/billing.date-range.js +27 -11
  80. package/dist/modules/billing/billing.display.js +14 -8
  81. package/dist/modules/billing/billing.errors.js +2 -3
  82. package/dist/modules/billing/billing.fce.js +3 -4
  83. package/dist/modules/billing/billing.iva-receptor.js +2 -3
  84. package/dist/modules/billing/billing.json-format.js +0 -1
  85. package/dist/modules/billing/billing.json-input.js +278 -0
  86. package/dist/modules/billing/billing.labels.js +1 -2
  87. package/dist/modules/billing/billing.mappers.js +0 -1
  88. package/dist/modules/billing/billing.padron.js +59 -0
  89. package/dist/modules/billing/billing.presenter.js +0 -1
  90. package/dist/modules/billing/billing.schemas.js +20 -6
  91. package/dist/modules/billing/billing.serialize.js +11 -15
  92. package/dist/modules/billing/billing.service.js +25 -4
  93. package/dist/modules/billing/billing.text.js +4 -13
  94. package/dist/modules/billing/billing.types.internal.js +0 -1
  95. package/dist/modules/billing/billing.types.js +0 -1
  96. package/dist/modules/billing/billing.validation.js +13 -11
  97. package/dist/modules/billing/voucher-kind-map.js +15 -16
  98. package/dist/modules/completion/completion.js +53 -0
  99. package/dist/modules/completion/completion.presenter.js +35 -0
  100. package/dist/modules/completion/installer.js +92 -0
  101. package/dist/modules/completion/shell-scripts.js +46 -0
  102. package/dist/modules/config/certificate-expiry.js +90 -0
  103. package/dist/modules/config/config-doctor.js +42 -28
  104. package/dist/modules/config/config-value-parser.js +32 -17
  105. package/dist/modules/config/config.export-credentials.js +23 -0
  106. package/dist/modules/config/config.presenter.js +28 -6
  107. package/dist/modules/config/config.schemas.js +27 -12
  108. package/dist/modules/config/config.sections.js +31 -11
  109. package/dist/modules/config/config.service.js +38 -9
  110. package/dist/modules/examples/examples.js +72 -37
  111. package/dist/modules/export/export.items.js +149 -0
  112. package/dist/modules/export/export.json-input.js +91 -0
  113. package/dist/modules/export/export.mappers.js +293 -0
  114. package/dist/modules/export/export.presenter.js +2 -0
  115. package/dist/modules/export/export.response.js +86 -0
  116. package/dist/modules/export/export.serialize.js +70 -0
  117. package/dist/modules/export/export.service.js +146 -0
  118. package/dist/modules/export/export.text.js +177 -0
  119. package/dist/modules/export/export.types.js +36 -0
  120. package/dist/modules/fce/fce-obligation.js +3 -4
  121. package/dist/modules/fce/fce-obligation.presenter.js +2 -3
  122. package/dist/modules/interactive/amount-input.js +0 -1
  123. package/dist/modules/interactive/choices.js +10 -2
  124. package/dist/modules/interactive/config-fields.js +17 -3
  125. package/dist/modules/interactive/equivalent-command.js +6 -3
  126. package/dist/modules/interactive/export-equivalent-command.js +40 -0
  127. package/dist/modules/interactive/invoice-copy.js +1 -2
  128. package/dist/modules/interactive/periods.js +0 -1
  129. package/dist/modules/interactive/wizard.js +0 -1
  130. package/dist/modules/padron/padron.js +23 -0
  131. package/dist/modules/padron/padron.presenter.js +48 -0
  132. package/dist/modules/parameters/health.js +0 -1
  133. package/dist/modules/parameters/parameters.js +2 -3
  134. package/dist/modules/parameters/parameters.presenter.js +14 -12
  135. package/dist/modules/parameters/status.js +0 -1
  136. package/dist/modules/pdf/pdf-data.mapper.js +94 -3
  137. package/dist/modules/pdf/pdf-decision.js +0 -1
  138. package/dist/modules/pdf/pdf-file-name.js +0 -1
  139. package/dist/modules/pdf/pdf-issuer.js +3 -3
  140. package/dist/modules/pdf/pdf-legends.js +35 -0
  141. package/dist/modules/pdf/pdf.errors.js +0 -1
  142. package/dist/modules/pdf/pdf.types.js +0 -1
  143. package/dist/modules/storybook/showcase-theme.js +0 -1
  144. package/dist/modules/storybook/showcase.js +35 -23
  145. package/dist/modules/update-check/changelog.js +0 -1
  146. package/dist/modules/update-check/update-check.presenter.js +6 -7
  147. package/dist/modules/update-check/update-check.service.js +0 -1
  148. package/dist/modules/vouchers/voucher-history.js +0 -1
  149. package/dist/modules/vouchers/voucher-history.presenter.js +3 -4
  150. package/dist/services/arca/arca-billing.gateway.js +18 -4
  151. package/dist/services/arca/arca-client.factory.js +27 -1
  152. package/dist/services/arca/arca-context.resolver.js +17 -7
  153. package/dist/services/arca/arca-export.gateway.js +146 -0
  154. package/dist/services/arca/arca-fce-obligation.gateway.js +2 -3
  155. package/dist/services/arca/arca-padron.gateway.js +103 -0
  156. package/dist/services/arca/arca-parameters.gateway.js +2 -3
  157. package/dist/services/arca/arca-voucher-history.gateway.js +2 -3
  158. package/dist/services/arca/last-voucher.js +26 -0
  159. package/dist/services/clipboard/clipboard.js +0 -1
  160. package/dist/services/pdf/escape-html.js +0 -1
  161. package/dist/services/pdf/pdf-browser.js +0 -1
  162. package/dist/services/pdf/pdf-exporter.js +26 -11
  163. package/dist/services/pdf/pdf-plugin.js +41 -14
  164. package/dist/ui/components/certificateBanner.js +8 -0
  165. package/dist/ui/components/contentPanel.js +0 -1
  166. package/dist/ui/components/errorPanel.js +0 -1
  167. package/dist/ui/components/index.js +1 -1
  168. package/dist/ui/components/keyValuePanel.js +0 -1
  169. package/dist/ui/components/noticePanel.js +0 -1
  170. package/dist/ui/components/rawPanel.js +0 -1
  171. package/dist/ui/components/sectionHeading.js +0 -1
  172. package/dist/ui/components/statusBar.js +0 -1
  173. package/dist/ui/components/statusPanel.js +0 -1
  174. package/dist/ui/components/testingBanner.js +0 -1
  175. package/dist/ui/index.js +0 -1
  176. package/dist/ui/presenters/billing.presenter.js +0 -1
  177. package/dist/ui/presenters/config.presenter.js +1 -2
  178. package/dist/ui/presenters/errors.presenter.js +14 -12
  179. package/dist/ui/presenters/errors.zod-presenter.js +13 -35
  180. package/dist/ui/presenters/export.presenter.js +1 -0
  181. package/dist/ui/presenters/index.js +1 -1
  182. package/dist/ui/presenters/pdf.presenter.js +1 -2
  183. package/dist/ui/presenters/showcase.presenter.js +0 -1
  184. package/dist/ui/primitives/index.js +0 -1
  185. package/dist/ui/primitives/renderDivider.js +0 -1
  186. package/dist/ui/primitives/renderFooter.js +0 -1
  187. package/dist/ui/primitives/renderJson.js +0 -1
  188. package/dist/ui/primitives/renderKeyValue.js +0 -1
  189. package/dist/ui/primitives/renderLogo.js +0 -1
  190. package/dist/ui/primitives/renderObject.js +0 -1
  191. package/dist/ui/primitives/renderPanel.js +0 -1
  192. package/dist/ui/primitives/renderSubtitle.js +0 -1
  193. package/dist/ui/primitives/renderTable.js +0 -1
  194. package/dist/ui/primitives/terminalWidth.js +0 -1
  195. package/dist/ui/primitives/text.js +0 -1
  196. package/dist/ui/stream/index.js +0 -1
  197. package/dist/ui/stream/terminal-stream.js +13 -2
  198. package/dist/ui/theme/index.js +0 -1
  199. package/dist/ui/theme/theme.js +0 -1
  200. package/llms.txt +122 -45
  201. package/package.json +1 -2
  202. package/dist/cli/commands/billing-family.command.d.ts +0 -2
  203. package/dist/cli/commands/billing-family.command.js.map +0 -1
  204. package/dist/cli/commands/billing-shortcuts.command.d.ts +0 -2
  205. package/dist/cli/commands/billing-shortcuts.command.js.map +0 -1
  206. package/dist/cli/commands/billing.command.batch.d.ts +0 -22
  207. package/dist/cli/commands/billing.command.batch.js.map +0 -1
  208. package/dist/cli/commands/billing.command.interactive-preview.d.ts +0 -18
  209. package/dist/cli/commands/billing.command.interactive-preview.js.map +0 -1
  210. package/dist/cli/commands/billing.command.options.d.ts +0 -2
  211. package/dist/cli/commands/billing.command.options.js.map +0 -1
  212. package/dist/cli/commands/billing.command.output.d.ts +0 -14
  213. package/dist/cli/commands/billing.command.output.js.map +0 -1
  214. package/dist/cli/commands/billing.command.parser.d.ts +0 -28
  215. package/dist/cli/commands/billing.command.parser.js.map +0 -1
  216. package/dist/cli/commands/billing.command.pdf.d.ts +0 -24
  217. package/dist/cli/commands/billing.command.pdf.js.map +0 -1
  218. package/dist/cli/commands/billing.command.shared.d.ts +0 -7
  219. package/dist/cli/commands/billing.command.shared.js.map +0 -1
  220. package/dist/cli/commands/billing.command.shortcuts.d.ts +0 -7
  221. package/dist/cli/commands/billing.command.shortcuts.js.map +0 -1
  222. package/dist/cli/commands/config.command.d.ts +0 -7
  223. package/dist/cli/commands/config.command.js.map +0 -1
  224. package/dist/cli/commands/examples.command.d.ts +0 -2
  225. package/dist/cli/commands/examples.command.js.map +0 -1
  226. package/dist/cli/commands/fce-obligation.command.d.ts +0 -2
  227. package/dist/cli/commands/fce-obligation.command.js.map +0 -1
  228. package/dist/cli/commands/interactive.command.d.ts +0 -3
  229. package/dist/cli/commands/interactive.command.js.map +0 -1
  230. package/dist/cli/commands/parameters.command.d.ts +0 -2
  231. package/dist/cli/commands/parameters.command.js.map +0 -1
  232. package/dist/cli/commands/pdf.command.d.ts +0 -2
  233. package/dist/cli/commands/pdf.command.js.map +0 -1
  234. package/dist/cli/commands/storybook.command.d.ts +0 -2
  235. package/dist/cli/commands/storybook.command.js.map +0 -1
  236. package/dist/cli/commands/vouchers.command.d.ts +0 -2
  237. package/dist/cli/commands/vouchers.command.js.map +0 -1
  238. package/dist/cli/error-output.d.ts +0 -7
  239. package/dist/cli/error-output.js.map +0 -1
  240. package/dist/cli/help-argv.d.ts +0 -5
  241. package/dist/cli/help-argv.js.map +0 -1
  242. package/dist/cli/help.d.ts +0 -12
  243. package/dist/cli/help.js.map +0 -1
  244. package/dist/cli/index.d.ts +0 -2
  245. package/dist/cli/index.js.map +0 -1
  246. package/dist/cli/interactive/advanced-options.d.ts +0 -21
  247. package/dist/cli/interactive/advanced-options.js.map +0 -1
  248. package/dist/cli/interactive/config.flow.d.ts +0 -5
  249. package/dist/cli/interactive/config.flow.js.map +0 -1
  250. package/dist/cli/interactive/history.flow.d.ts +0 -6
  251. package/dist/cli/interactive/history.flow.js.map +0 -1
  252. package/dist/cli/interactive/interactive-mode.d.ts +0 -3
  253. package/dist/cli/interactive/interactive-mode.js.map +0 -1
  254. package/dist/cli/interactive/invoice-picker.d.ts +0 -25
  255. package/dist/cli/interactive/invoice-picker.js.map +0 -1
  256. package/dist/cli/interactive/invoice.flow.d.ts +0 -20
  257. package/dist/cli/interactive/invoice.flow.js.map +0 -1
  258. package/dist/cli/interactive/note.flow.d.ts +0 -32
  259. package/dist/cli/interactive/note.flow.js.map +0 -1
  260. package/dist/cli/interactive/pdf.flow.d.ts +0 -5
  261. package/dist/cli/interactive/pdf.flow.js.map +0 -1
  262. package/dist/cli/interactive/prompts.d.ts +0 -57
  263. package/dist/cli/interactive/prompts.js.map +0 -1
  264. package/dist/cli/interactive/repeat.flow.d.ts +0 -13
  265. package/dist/cli/interactive/repeat.flow.js.map +0 -1
  266. package/dist/cli/interactive/session.d.ts +0 -22
  267. package/dist/cli/interactive/session.js.map +0 -1
  268. package/dist/cli/interactive/status.flow.d.ts +0 -3
  269. package/dist/cli/interactive/status.flow.js.map +0 -1
  270. package/dist/cli/interactive/update.flow.d.ts +0 -6
  271. package/dist/cli/interactive/update.flow.js.map +0 -1
  272. package/dist/cli/interactive/validators.d.ts +0 -9
  273. package/dist/cli/interactive/validators.js.map +0 -1
  274. package/dist/cli/option-parsers.d.ts +0 -6
  275. package/dist/cli/option-parsers.js.map +0 -1
  276. package/dist/cli/program.d.ts +0 -2
  277. package/dist/cli/program.js.map +0 -1
  278. package/dist/cli/spinner.d.ts +0 -8
  279. package/dist/cli/spinner.js.map +0 -1
  280. package/dist/cli/types.d.ts +0 -6
  281. package/dist/cli/types.js.map +0 -1
  282. package/dist/cli/version.d.ts +0 -1
  283. package/dist/cli/version.js.map +0 -1
  284. package/dist/index.d.ts +0 -1
  285. package/dist/index.js.map +0 -1
  286. package/dist/lib/dates/arca-date.d.ts +0 -19
  287. package/dist/lib/dates/arca-date.js.map +0 -1
  288. package/dist/lib/errors/app-error.d.ts +0 -17
  289. package/dist/lib/errors/app-error.js.map +0 -1
  290. package/dist/lib/files/read-json-file.d.ts +0 -1
  291. package/dist/lib/files/read-json-file.js.map +0 -1
  292. package/dist/lib/files/restrict-to-owner.d.ts +0 -7
  293. package/dist/lib/files/restrict-to-owner.js.map +0 -1
  294. package/dist/lib/identity/format-cuit.d.ts +0 -2
  295. package/dist/lib/identity/format-cuit.js.map +0 -1
  296. package/dist/lib/links.d.ts +0 -2
  297. package/dist/lib/links.js.map +0 -1
  298. package/dist/lib/numbers/argentine-amount.d.ts +0 -23
  299. package/dist/lib/numbers/argentine-amount.js.map +0 -1
  300. package/dist/lib/numbers/strict-integer.d.ts +0 -4
  301. package/dist/lib/numbers/strict-integer.js.map +0 -1
  302. package/dist/lib/paths/mask-path.d.ts +0 -1
  303. package/dist/lib/paths/mask-path.js.map +0 -1
  304. package/dist/lib/security/certificate.d.ts +0 -7
  305. package/dist/lib/security/certificate.js.map +0 -1
  306. package/dist/lib/security/pem.d.ts +0 -5
  307. package/dist/lib/security/pem.js.map +0 -1
  308. package/dist/modules/billing/billing-response.d.ts +0 -4
  309. package/dist/modules/billing/billing-response.js.map +0 -1
  310. package/dist/modules/billing/billing.amounts.d.ts +0 -21
  311. package/dist/modules/billing/billing.amounts.js.map +0 -1
  312. package/dist/modules/billing/billing.associated-period.d.ts +0 -8
  313. package/dist/modules/billing/billing.associated-period.js.map +0 -1
  314. package/dist/modules/billing/billing.associated-vouchers.d.ts +0 -12
  315. package/dist/modules/billing/billing.associated-vouchers.js.map +0 -1
  316. package/dist/modules/billing/billing.batch.d.ts +0 -23
  317. package/dist/modules/billing/billing.batch.js.map +0 -1
  318. package/dist/modules/billing/billing.constants.d.ts +0 -2
  319. package/dist/modules/billing/billing.constants.js.map +0 -1
  320. package/dist/modules/billing/billing.currency.d.ts +0 -18
  321. package/dist/modules/billing/billing.currency.js.map +0 -1
  322. package/dist/modules/billing/billing.date-range.d.ts +0 -9
  323. package/dist/modules/billing/billing.date-range.js.map +0 -1
  324. package/dist/modules/billing/billing.display.d.ts +0 -13
  325. package/dist/modules/billing/billing.display.js.map +0 -1
  326. package/dist/modules/billing/billing.errors.d.ts +0 -12
  327. package/dist/modules/billing/billing.errors.js.map +0 -1
  328. package/dist/modules/billing/billing.fce.d.ts +0 -21
  329. package/dist/modules/billing/billing.fce.js.map +0 -1
  330. package/dist/modules/billing/billing.iva-receptor.d.ts +0 -8
  331. package/dist/modules/billing/billing.iva-receptor.js.map +0 -1
  332. package/dist/modules/billing/billing.json-format.d.ts +0 -6
  333. package/dist/modules/billing/billing.json-format.js.map +0 -1
  334. package/dist/modules/billing/billing.labels.d.ts +0 -9
  335. package/dist/modules/billing/billing.labels.js.map +0 -1
  336. package/dist/modules/billing/billing.mappers.d.ts +0 -8
  337. package/dist/modules/billing/billing.mappers.js.map +0 -1
  338. package/dist/modules/billing/billing.presenter.d.ts +0 -7
  339. package/dist/modules/billing/billing.presenter.js.map +0 -1
  340. package/dist/modules/billing/billing.schemas.d.ts +0 -142
  341. package/dist/modules/billing/billing.schemas.js.map +0 -1
  342. package/dist/modules/billing/billing.serialize.d.ts +0 -8
  343. package/dist/modules/billing/billing.serialize.js.map +0 -1
  344. package/dist/modules/billing/billing.service.d.ts +0 -27
  345. package/dist/modules/billing/billing.service.js.map +0 -1
  346. package/dist/modules/billing/billing.text.d.ts +0 -8
  347. package/dist/modules/billing/billing.text.js.map +0 -1
  348. package/dist/modules/billing/billing.types.d.ts +0 -13
  349. package/dist/modules/billing/billing.types.internal.d.ts +0 -30
  350. package/dist/modules/billing/billing.types.internal.js.map +0 -1
  351. package/dist/modules/billing/billing.types.js.map +0 -1
  352. package/dist/modules/billing/billing.validation.d.ts +0 -7
  353. package/dist/modules/billing/billing.validation.js.map +0 -1
  354. package/dist/modules/billing/voucher-kind-map.d.ts +0 -9
  355. package/dist/modules/billing/voucher-kind-map.js.map +0 -1
  356. package/dist/modules/config/config-doctor.d.ts +0 -15
  357. package/dist/modules/config/config-doctor.js.map +0 -1
  358. package/dist/modules/config/config-value-parser.d.ts +0 -2
  359. package/dist/modules/config/config-value-parser.js.map +0 -1
  360. package/dist/modules/config/config.presenter.d.ts +0 -15
  361. package/dist/modules/config/config.presenter.js.map +0 -1
  362. package/dist/modules/config/config.schemas.d.ts +0 -154
  363. package/dist/modules/config/config.schemas.js.map +0 -1
  364. package/dist/modules/config/config.sections.d.ts +0 -14
  365. package/dist/modules/config/config.sections.js.map +0 -1
  366. package/dist/modules/config/config.service.d.ts +0 -35
  367. package/dist/modules/config/config.service.js.map +0 -1
  368. package/dist/modules/examples/examples.d.ts +0 -1
  369. package/dist/modules/examples/examples.js.map +0 -1
  370. package/dist/modules/fce/fce-obligation.d.ts +0 -20
  371. package/dist/modules/fce/fce-obligation.js.map +0 -1
  372. package/dist/modules/fce/fce-obligation.presenter.d.ts +0 -9
  373. package/dist/modules/fce/fce-obligation.presenter.js.map +0 -1
  374. package/dist/modules/interactive/amount-input.d.ts +0 -4
  375. package/dist/modules/interactive/amount-input.js.map +0 -1
  376. package/dist/modules/interactive/choices.d.ts +0 -13
  377. package/dist/modules/interactive/choices.js.map +0 -1
  378. package/dist/modules/interactive/config-fields.d.ts +0 -20
  379. package/dist/modules/interactive/config-fields.js.map +0 -1
  380. package/dist/modules/interactive/equivalent-command.d.ts +0 -8
  381. package/dist/modules/interactive/equivalent-command.js.map +0 -1
  382. package/dist/modules/interactive/invoice-copy.d.ts +0 -19
  383. package/dist/modules/interactive/invoice-copy.js.map +0 -1
  384. package/dist/modules/interactive/periods.d.ts +0 -7
  385. package/dist/modules/interactive/periods.js.map +0 -1
  386. package/dist/modules/interactive/wizard.d.ts +0 -16
  387. package/dist/modules/interactive/wizard.js.map +0 -1
  388. package/dist/modules/parameters/health.d.ts +0 -17
  389. package/dist/modules/parameters/health.js.map +0 -1
  390. package/dist/modules/parameters/parameters.d.ts +0 -50
  391. package/dist/modules/parameters/parameters.js.map +0 -1
  392. package/dist/modules/parameters/parameters.presenter.d.ts +0 -12
  393. package/dist/modules/parameters/parameters.presenter.js.map +0 -1
  394. package/dist/modules/parameters/status.d.ts +0 -31
  395. package/dist/modules/parameters/status.js.map +0 -1
  396. package/dist/modules/pdf/pdf-data.mapper.d.ts +0 -4
  397. package/dist/modules/pdf/pdf-data.mapper.js.map +0 -1
  398. package/dist/modules/pdf/pdf-decision.d.ts +0 -14
  399. package/dist/modules/pdf/pdf-decision.js.map +0 -1
  400. package/dist/modules/pdf/pdf-file-name.d.ts +0 -3
  401. package/dist/modules/pdf/pdf-file-name.js.map +0 -1
  402. package/dist/modules/pdf/pdf-issuer.d.ts +0 -8
  403. package/dist/modules/pdf/pdf-issuer.js.map +0 -1
  404. package/dist/modules/pdf/pdf.errors.d.ts +0 -9
  405. package/dist/modules/pdf/pdf.errors.js.map +0 -1
  406. package/dist/modules/pdf/pdf.types.d.ts +0 -91
  407. package/dist/modules/pdf/pdf.types.js.map +0 -1
  408. package/dist/modules/storybook/showcase-theme.d.ts +0 -7
  409. package/dist/modules/storybook/showcase-theme.js.map +0 -1
  410. package/dist/modules/storybook/showcase.d.ts +0 -2
  411. package/dist/modules/storybook/showcase.js.map +0 -1
  412. package/dist/modules/update-check/changelog.d.ts +0 -23
  413. package/dist/modules/update-check/changelog.js.map +0 -1
  414. package/dist/modules/update-check/update-check.presenter.d.ts +0 -6
  415. package/dist/modules/update-check/update-check.presenter.js.map +0 -1
  416. package/dist/modules/update-check/update-check.service.d.ts +0 -11
  417. package/dist/modules/update-check/update-check.service.js.map +0 -1
  418. package/dist/modules/vouchers/voucher-history.d.ts +0 -39
  419. package/dist/modules/vouchers/voucher-history.js.map +0 -1
  420. package/dist/modules/vouchers/voucher-history.presenter.d.ts +0 -29
  421. package/dist/modules/vouchers/voucher-history.presenter.js.map +0 -1
  422. package/dist/services/arca/arca-billing.gateway.d.ts +0 -10
  423. package/dist/services/arca/arca-billing.gateway.js.map +0 -1
  424. package/dist/services/arca/arca-client.factory.d.ts +0 -5
  425. package/dist/services/arca/arca-client.factory.js.map +0 -1
  426. package/dist/services/arca/arca-context.resolver.d.ts +0 -44
  427. package/dist/services/arca/arca-context.resolver.js.map +0 -1
  428. package/dist/services/arca/arca-fce-obligation.gateway.d.ts +0 -7
  429. package/dist/services/arca/arca-fce-obligation.gateway.js.map +0 -1
  430. package/dist/services/arca/arca-parameters.gateway.d.ts +0 -10
  431. package/dist/services/arca/arca-parameters.gateway.js.map +0 -1
  432. package/dist/services/arca/arca-voucher-history.gateway.d.ts +0 -8
  433. package/dist/services/arca/arca-voucher-history.gateway.js.map +0 -1
  434. package/dist/services/clipboard/clipboard.d.ts +0 -2
  435. package/dist/services/clipboard/clipboard.js.map +0 -1
  436. package/dist/services/pdf/escape-html.d.ts +0 -6
  437. package/dist/services/pdf/escape-html.js.map +0 -1
  438. package/dist/services/pdf/pdf-browser.d.ts +0 -5
  439. package/dist/services/pdf/pdf-browser.js.map +0 -1
  440. package/dist/services/pdf/pdf-exporter.d.ts +0 -19
  441. package/dist/services/pdf/pdf-exporter.js.map +0 -1
  442. package/dist/services/pdf/pdf-plugin.d.ts +0 -50
  443. package/dist/services/pdf/pdf-plugin.js.map +0 -1
  444. package/dist/ui/components/contentPanel.d.ts +0 -5
  445. package/dist/ui/components/contentPanel.js.map +0 -1
  446. package/dist/ui/components/errorPanel.d.ts +0 -1
  447. package/dist/ui/components/errorPanel.js.map +0 -1
  448. package/dist/ui/components/index.d.ts +0 -9
  449. package/dist/ui/components/index.js.map +0 -1
  450. package/dist/ui/components/keyValuePanel.d.ts +0 -3
  451. package/dist/ui/components/keyValuePanel.js.map +0 -1
  452. package/dist/ui/components/noticePanel.d.ts +0 -3
  453. package/dist/ui/components/noticePanel.js.map +0 -1
  454. package/dist/ui/components/rawPanel.d.ts +0 -1
  455. package/dist/ui/components/rawPanel.js.map +0 -1
  456. package/dist/ui/components/sectionHeading.d.ts +0 -3
  457. package/dist/ui/components/sectionHeading.js.map +0 -1
  458. package/dist/ui/components/statusBar.d.ts +0 -19
  459. package/dist/ui/components/statusBar.js.map +0 -1
  460. package/dist/ui/components/statusPanel.d.ts +0 -3
  461. package/dist/ui/components/statusPanel.js.map +0 -1
  462. package/dist/ui/components/testingBanner.d.ts +0 -2
  463. package/dist/ui/components/testingBanner.js.map +0 -1
  464. package/dist/ui/index.d.ts +0 -5
  465. package/dist/ui/index.js.map +0 -1
  466. package/dist/ui/presenters/billing.presenter.d.ts +0 -2
  467. package/dist/ui/presenters/billing.presenter.js.map +0 -1
  468. package/dist/ui/presenters/config.presenter.d.ts +0 -1
  469. package/dist/ui/presenters/config.presenter.js.map +0 -1
  470. package/dist/ui/presenters/errors.presenter.d.ts +0 -1
  471. package/dist/ui/presenters/errors.presenter.js.map +0 -1
  472. package/dist/ui/presenters/errors.zod-presenter.d.ts +0 -4
  473. package/dist/ui/presenters/errors.zod-presenter.js.map +0 -1
  474. package/dist/ui/presenters/index.d.ts +0 -6
  475. package/dist/ui/presenters/index.js.map +0 -1
  476. package/dist/ui/presenters/pdf.presenter.d.ts +0 -13
  477. package/dist/ui/presenters/pdf.presenter.js.map +0 -1
  478. package/dist/ui/presenters/showcase.presenter.d.ts +0 -1
  479. package/dist/ui/presenters/showcase.presenter.js.map +0 -1
  480. package/dist/ui/primitives/index.d.ts +0 -10
  481. package/dist/ui/primitives/index.js.map +0 -1
  482. package/dist/ui/primitives/renderDivider.d.ts +0 -5
  483. package/dist/ui/primitives/renderDivider.js.map +0 -1
  484. package/dist/ui/primitives/renderFooter.d.ts +0 -7
  485. package/dist/ui/primitives/renderFooter.js.map +0 -1
  486. package/dist/ui/primitives/renderJson.d.ts +0 -3
  487. package/dist/ui/primitives/renderJson.js.map +0 -1
  488. package/dist/ui/primitives/renderKeyValue.d.ts +0 -14
  489. package/dist/ui/primitives/renderKeyValue.js.map +0 -1
  490. package/dist/ui/primitives/renderLogo.d.ts +0 -3
  491. package/dist/ui/primitives/renderLogo.js.map +0 -1
  492. package/dist/ui/primitives/renderObject.d.ts +0 -1
  493. package/dist/ui/primitives/renderObject.js.map +0 -1
  494. package/dist/ui/primitives/renderPanel.d.ts +0 -27
  495. package/dist/ui/primitives/renderPanel.js.map +0 -1
  496. package/dist/ui/primitives/renderSubtitle.d.ts +0 -7
  497. package/dist/ui/primitives/renderSubtitle.js.map +0 -1
  498. package/dist/ui/primitives/renderTable.d.ts +0 -6
  499. package/dist/ui/primitives/renderTable.js.map +0 -1
  500. package/dist/ui/primitives/terminalWidth.d.ts +0 -4
  501. package/dist/ui/primitives/terminalWidth.js.map +0 -1
  502. package/dist/ui/primitives/text.d.ts +0 -28
  503. package/dist/ui/primitives/text.js.map +0 -1
  504. package/dist/ui/stream/index.d.ts +0 -1
  505. package/dist/ui/stream/index.js.map +0 -1
  506. package/dist/ui/stream/terminal-stream.d.ts +0 -16
  507. package/dist/ui/stream/terminal-stream.js.map +0 -1
  508. package/dist/ui/theme/index.d.ts +0 -1
  509. package/dist/ui/theme/index.js.map +0 -1
  510. package/dist/ui/theme/theme.d.ts +0 -68
  511. package/dist/ui/theme/theme.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { AppError, InputValidationError } from '../../lib/errors/app-error.js';
2
+ import { formatIvaConditionName } from '../pdf/pdf-issuer.js';
3
+ const MISSING_IVA_HINT = 'Usá --ir <tipo> o un flag --ir-*, o configurá uno por defecto con "arcli config establecer ivaReceptor <tipo>".';
4
+ /** Hay que consultar el padron: un CUIT sin IVA receptor explicito (vino de la config o falta). */
5
+ export function needsPadronLookup(input) {
6
+ return (input.documentType === 'cuit' &&
7
+ input.documentNumber !== undefined &&
8
+ (input.ivaConditionSource === 'default' || input.ivaConditionSource === 'missing'));
9
+ }
10
+ function fallBack(input, reason, hint) {
11
+ if (input.ivaConditionSource === 'missing') {
12
+ throw new InputValidationError(`Falta IVA receptor. ${reason}. ${MISSING_IVA_HINT}`);
13
+ }
14
+ const warning = `${reason}. Se usa el IVA receptor de la config: ${formatIvaConditionName(input.ivaCondition)}.`;
15
+ return { input, warnings: [hint ? `${warning} ${hint}` : warning] };
16
+ }
17
+ function lookupErrorHint(error) {
18
+ return error instanceof AppError && error.code === 'PADRON_SERVICE_NOT_AUTHORIZED'
19
+ ? 'Para no consultarlo al facturar: arcli config establecer consultarPadron false.'
20
+ : undefined;
21
+ }
22
+ /**
23
+ * Completa el IVA receptor (y, si faltan, nombre y domicilio para el PDF) con el padron de ARCA. Si el padron no
24
+ * responde o no informa la condicion, sigue con la de la config y avisa; sin config, es un error de entrada.
25
+ */
26
+ export async function resolveIvaConditionFromPadron(input, gateway) {
27
+ if (!needsPadronLookup(input)) {
28
+ return { input, warnings: [] };
29
+ }
30
+ const cuit = input.documentNumber;
31
+ let taxpayer;
32
+ try {
33
+ taxpayer = await gateway.getTaxpayer(cuit);
34
+ }
35
+ catch (error) {
36
+ const message = error instanceof Error ? error.message.replace(/\.$/, '') : 'error desconocido';
37
+ return fallBack(input, `No se pudo consultar el padrón de ARCA (${message})`, lookupErrorHint(error));
38
+ }
39
+ if (!taxpayer) {
40
+ return fallBack(input, `El CUIT ${cuit} no figura en el padrón de ARCA`);
41
+ }
42
+ const fromPadron = [
43
+ ...(!input.receiverAddress && taxpayer.address ? ['address'] : []),
44
+ ...(!input.receiverName && taxpayer.name ? ['name'] : []),
45
+ ];
46
+ const withReceiver = {
47
+ ...input,
48
+ receiverAddress: input.receiverAddress ?? taxpayer.address ?? undefined,
49
+ receiverFromPadron: fromPadron.length > 0 ? fromPadron : undefined,
50
+ receiverName: input.receiverName ?? taxpayer.name ?? undefined,
51
+ };
52
+ if (!taxpayer.ivaCondition) {
53
+ return fallBack(withReceiver, `El padrón de ARCA no informa la condición IVA del CUIT ${cuit}`);
54
+ }
55
+ return {
56
+ input: { ...withReceiver, ivaCondition: taxpayer.ivaCondition, ivaConditionSource: 'padron' },
57
+ warnings: [],
58
+ };
59
+ }
@@ -1,3 +1,2 @@
1
1
  export { formatBillingResultAsJson } from './billing.json-format.js';
2
2
  export { formatBillingResultAsText } from './billing.text.js';
3
- //# sourceMappingURL=billing.presenter.js.map
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { parseCuit } from '../../lib/identity/cuit.js';
2
3
  import { AMOUNT_DECIMALS, EXCHANGE_RATE_DECIMALS, hasAtMostDecimals } from '../../lib/numbers/argentine-amount.js';
3
4
  const BILLING_CONCEPT_ALIASES = {
4
5
  p: 'productos',
@@ -52,13 +53,13 @@ export function normalizeIvaRateInput(value) {
52
53
  const normalized = value.trim().toLowerCase();
53
54
  return IVA_RATE_ALIASES[normalized] ?? normalized.replace(',', '.').replace(/%$/, '');
54
55
  }
55
- export const billingIvaRateSchema = z.preprocess(normalizeIvaRateInput, z.enum(IVA_RATE_VALUES, { message: `La alicuota debe ser ${IVA_RATE_HINT}.` }));
56
+ export const billingIvaRateSchema = z.preprocess(normalizeIvaRateInput, z.enum(IVA_RATE_VALUES, { message: `La alícuota debe ser ${IVA_RATE_HINT}.` }));
56
57
  /** Importe positivo con los decimales que acepta ARCA: 2 en importes y 6 en la cotizacion. */
57
58
  function positiveAmountSchema(decimals = AMOUNT_DECIMALS) {
58
59
  return z
59
60
  .number()
60
61
  .positive()
61
- .refine((value) => hasAtMostDecimals(value, decimals), { message: `Use hasta ${decimals} decimales.` });
62
+ .refine((value) => hasAtMostDecimals(value, decimals), { message: `Usá hasta ${decimals} decimales.` });
62
63
  }
63
64
  /** Una alicuota con el importe que le corresponde, IVA incluido (igual que --monto). */
64
65
  const billingIvaRateAmountSchema = z.object({
@@ -69,8 +70,14 @@ const billingAssociatedVoucherSchema = z
69
70
  .object({
70
71
  cuit: z
71
72
  .string()
72
- .trim()
73
- .regex(/^\d{11}$/)
73
+ .transform((value, context) => {
74
+ const result = parseCuit(value);
75
+ if (!result.ok) {
76
+ context.addIssue({ code: 'custom', message: `El CUIT del comprobante asociado ${result.reason}.` });
77
+ return z.NEVER;
78
+ }
79
+ return result.value;
80
+ })
74
81
  .optional(),
75
82
  fecha: z.string().trim().optional(),
76
83
  numero: z.number().int().positive().optional(),
@@ -98,7 +105,7 @@ export const billingCommandSchema = z.object({
98
105
  cbuAlias: z
99
106
  .string()
100
107
  .trim()
101
- .regex(/^[A-Za-z0-9.-]{6,20}$/, 'El alias debe tener entre 6 y 20 caracteres (letras, numeros, punto o guion)')
108
+ .regex(/^[A-Za-z0-9.-]{6,20}$/, 'El alias debe tener entre 6 y 20 caracteres (letras, números, punto o guion)')
102
109
  .optional(),
103
110
  concept: billingConceptSchema,
104
111
  currencyCode: z.string().trim().length(3).default('ARS'),
@@ -112,6 +119,12 @@ export const billingCommandSchema = z.object({
112
119
  ivaRateAmounts: z.array(billingIvaRateAmountSchema).min(1).optional(),
113
120
  dueDay: z.number().int().min(1).max(31).optional(),
114
121
  ivaCondition: billingIvaConditionSchema,
122
+ /**
123
+ * De donde salio `ivaCondition`; sin definir, la indico el usuario (flag, JSON o modo interactivo). Con `default`
124
+ * (la config) o `missing` y un CUIT, se consulta el padron antes de emitir
125
+ * (`BillingService.resolveIvaConditionFromPadron`). `missing` todavia no tiene un valor real: no se puede emitir.
126
+ */
127
+ ivaConditionSource: z.enum(['default', 'missing', 'padron']).optional(),
115
128
  paymentDueDate: z.string().trim().optional(),
116
129
  /** `true` con --exportar-pdf, `false` con --sin-pdf; sin definir, decide la config. */
117
130
  pdf: z.boolean().optional(),
@@ -119,6 +132,8 @@ export const billingCommandSchema = z.object({
119
132
  pdfDescription: z.string().trim().min(1).max(200).optional(),
120
133
  pointOfSale: z.number().int().positive().optional(),
121
134
  receiverAddress: z.string().trim().min(1).max(200).optional(),
135
+ /** Que datos del receptor completo el padron (no los paso quien factura). */
136
+ receiverFromPadron: z.array(z.enum(['address', 'name'])).optional(),
122
137
  receiverName: z.string().trim().min(1).max(200).optional(),
123
138
  sameCurrency: z.boolean().default(false),
124
139
  serviceEndDate: z.string().trim().optional(),
@@ -137,4 +152,3 @@ export const billingCommandSchema = z.object({
137
152
  .pipe(z.enum(['adc', 'sca']))
138
153
  .optional(),
139
154
  });
140
- //# sourceMappingURL=billing.schemas.js.map
@@ -3,7 +3,7 @@ function formatRawResponse(result) {
3
3
  return result.response.raw;
4
4
  }
5
5
  return {
6
- mensaje: 'Sin emision real. Use --emitir para obtener una respuesta de ARCA.',
6
+ mensaje: 'Sin emisión real. Usá --emitir para obtener una respuesta de ARCA.',
7
7
  };
8
8
  }
9
9
  // Aditivo: la clave `pdf` solo aparece si se intento generar el PDF.
@@ -29,28 +29,25 @@ function formatVoucherSummary(result) {
29
29
  eventos: result.response.events,
30
30
  observaciones: result.response.observaciones,
31
31
  observacion: result.response.observacion,
32
+ numero: result.voucherNumber ?? null,
32
33
  ...formatPdfOutcome(result),
33
- solicitud: result.payload,
34
+ // Lo que se envio a ARCA, con el numero que le toco.
35
+ solicitud: result.voucherNumber === undefined
36
+ ? result.payload
37
+ : { ...result.payload, CbteDesde: result.voucherNumber, CbteHasta: result.voucherNumber },
34
38
  previsualizacion: result.dryRun,
35
39
  resultado: result.response.resultado,
36
40
  sugerencias: result.response.suggestions,
37
41
  tipoArca: result.voucherKind.arcaType,
38
42
  };
39
43
  }
44
+ /** `--bruto` suma `respuesta` (la respuesta cruda de ARCA) al resumen de siempre; no le quita campos. */
40
45
  export function serializeBillingResult(result, options = {}) {
41
- if (options.raw) {
42
- return {
43
- atajo: result.voucherKind.shortcut,
44
- avisos: result.warnings ?? [],
45
- comprobante: result.voucherKind.displayName,
46
- solicitud: result.payload,
47
- ...formatPdfOutcome(result),
48
- previsualizacion: result.dryRun,
49
- respuesta: formatRawResponse(result),
50
- sugerencias: result.response.suggestions,
51
- };
46
+ const summary = formatVoucherSummary(result);
47
+ if (!options.raw) {
48
+ return summary;
52
49
  }
53
- return formatVoucherSummary(result);
50
+ return { ...summary, respuesta: formatRawResponse(result) };
54
51
  }
55
52
  export function serializeBillingBatch(results, options = {}) {
56
53
  return results.map((result, index) => ({
@@ -63,4 +60,3 @@ export function serializeBillingBatch(results, options = {}) {
63
60
  export function formatRawBillingResponse(result) {
64
61
  return formatRawResponse(result);
65
62
  }
66
- //# sourceMappingURL=billing.serialize.js.map
@@ -10,6 +10,7 @@ import { EmissionUncertainError } from './billing.errors.js';
10
10
  import { resolveElectronicCreditOptionals } from './billing.fce.js';
11
11
  import { validateConsumerIdentification, validateIvaConditionForVoucher } from './billing.iva-receptor.js';
12
12
  import { resolveBillingConceptCode, resolveBillingCurrencyCode, resolveBillingDocumentTypeCode, resolveBillingIvaConditionCode, } from './billing.mappers.js';
13
+ import { resolveIvaConditionFromPadron } from './billing.padron.js';
13
14
  import { validateDocumentIdentity } from './billing.validation.js';
14
15
  import { createDryRunResponse, mapBillingResponse } from './billing-response.js';
15
16
  import { getVoucherKindByShortcut } from './voucher-kind-map.js';
@@ -27,22 +28,37 @@ export class BillingService {
27
28
  exchangeRate: await gateway.getQuotation(resolveBillingCurrencyCode(input.currencyCode)),
28
29
  };
29
30
  }
31
+ async resolveIvaConditionFromPadron(input, gateway) {
32
+ return resolveIvaConditionFromPadron(input, gateway);
33
+ }
30
34
  async execute(options) {
31
35
  const voucherKind = this.requireVoucherKind(options.input.shortcut);
32
36
  const payload = this.buildVoucherPayload(options.input, options.runtime, voucherKind);
37
+ const receiver = {
38
+ ivaConditionFromPadron: options.input.ivaConditionSource === 'padron',
39
+ name: options.input.receiverName,
40
+ };
33
41
  if (options.input.dryRun || !options.input.emit) {
34
42
  return {
35
43
  dryRun: true,
36
44
  environment: options.runtime.environment,
37
45
  payload,
46
+ receiver,
38
47
  response: createDryRunResponse(),
39
48
  voucherKind,
40
49
  warnings: options.warnings ?? [],
41
50
  };
42
51
  }
52
+ // Fuera del try: si falla la autenticacion o el pedido del ultimo numero, no se envio nada a ARCA
53
+ // y el error sale tal cual (certificado, ARCA no disponible), sin sugerir que pudo emitirse.
54
+ const voucherNumber = await options.gateway.getNextVoucherNumber(payload.PtoVta, payload.CbteTipo);
43
55
  let response;
44
56
  try {
45
- response = await options.gateway.createNextVoucher(payload);
57
+ response = await options.gateway.createVoucher({
58
+ ...payload,
59
+ CbteDesde: voucherNumber,
60
+ CbteHasta: voucherNumber,
61
+ });
46
62
  }
47
63
  catch (error) {
48
64
  throw new EmissionUncertainError({ cause: error, pointOfSale: payload.PtoVta, shortcut: voucherKind.shortcut });
@@ -51,7 +67,9 @@ export class BillingService {
51
67
  dryRun: false,
52
68
  environment: options.runtime.environment,
53
69
  payload,
70
+ receiver,
54
71
  response: mapBillingResponse(response),
72
+ voucherNumber,
55
73
  voucherKind,
56
74
  warnings: options.warnings ?? [],
57
75
  };
@@ -75,13 +93,17 @@ export class BillingService {
75
93
  }
76
94
  catch (error) {
77
95
  const reason = error instanceof Error ? error.message : 'error desconocido';
78
- return [`No se pudo verificar el regimen FCE del receptor: ${reason}`];
96
+ return [`No se pudo verificar el régimen FCE del receptor: ${reason}`];
79
97
  }
80
98
  }
81
99
  buildVoucherPayload(input, runtime, voucherKind = this.requireVoucherKind(input.shortcut)) {
82
100
  const pointOfSale = input.pointOfSale ?? runtime.pointOfSale;
101
+ // Resguardo: un IVA receptor que esperaba al padron nunca llega a ARCA con el valor provisorio.
102
+ if (input.ivaConditionSource === 'missing') {
103
+ throw new InputValidationError('Falta IVA receptor. Usá --ir <tipo> o un flag --ir-*, o configurá uno por defecto con "arcli config establecer ivaReceptor <tipo>".');
104
+ }
83
105
  if (!pointOfSale) {
84
- throw new InputValidationError('Falta el punto de venta. Use --punto-venta o --pv, o configurelo con "arcli config establecer puntoVenta <valor>".');
106
+ throw new InputValidationError('Falta el punto de venta. Usá --punto-venta o --pv, o configuralo con "arcli config establecer puntoVenta <valor>".');
85
107
  }
86
108
  const dateRange = resolveBillingDateRange(input, voucherKind);
87
109
  const concept = resolveBillingConceptCode(input.concept);
@@ -150,4 +172,3 @@ export class BillingService {
150
172
  return definition;
151
173
  }
152
174
  }
153
- //# sourceMappingURL=billing.service.js.map
@@ -18,18 +18,6 @@ export function formatBillingResultAsText(result, options = {}) {
18
18
  ...(options.previewShown ? [] : formatEnvironmentBanner(options.environment ?? result.environment)),
19
19
  ...(options.previewShown ? [] : formatWarningsPanel(result)),
20
20
  ];
21
- if (options.raw) {
22
- if (result.dryRun) {
23
- return [...environmentLines, formatPayloadPreview(result)].join('\n\n');
24
- }
25
- const lines = [
26
- contentPanel('Respuesta bruta', renderObject(formatRawBillingResponse(result)), 'wide', 'subtle', 'left', 'data'),
27
- ];
28
- if (!options.previewShown) {
29
- lines.unshift(formatPayloadPreview(result));
30
- }
31
- return [...environmentLines, ...lines].join('\n\n');
32
- }
33
21
  if (result.dryRun) {
34
22
  return [...environmentLines, formatPayloadPreview(result)].join('\n\n');
35
23
  }
@@ -51,6 +39,9 @@ export function formatBillingResultAsText(result, options = {}) {
51
39
  if (suggestions.length > 0) {
52
40
  lines.push(contentPanel('Sugerencias', suggestions.map((item) => `• ${item}`).join('\n'), 'wide', 'warning', 'left', 'tip'));
53
41
  }
42
+ // `--bruto` agrega la respuesta cruda al final; el resumen se muestra igual.
43
+ if (options.raw) {
44
+ lines.push(contentPanel('Respuesta bruta', renderObject(formatRawBillingResponse(result)), 'wide', 'subtle', 'left', 'data'));
45
+ }
54
46
  return lines.join('\n\n');
55
47
  }
56
- //# sourceMappingURL=billing.text.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=billing.types.internal.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=billing.types.js.map
@@ -1,5 +1,6 @@
1
1
  import { diffArcaDatesInDays, formatArcaDateAsArgentineDate } from '../../lib/dates/arca-date.js';
2
2
  import { InputValidationError } from '../../lib/errors/app-error.js';
3
+ import { parseCuit } from '../../lib/identity/cuit.js';
3
4
  import { formatDocumentFlag, formatVoucherLabel } from './billing.mappers.js';
4
5
  export function ensureDateOrder(serviceStartDate, serviceEndDate) {
5
6
  if (serviceStartDate > serviceEndDate) {
@@ -11,7 +12,7 @@ export function validateConceptDateInputs(input, voucherKind) {
11
12
  const hasPartialServiceDate = Boolean(input.serviceStartDate) !== Boolean(input.serviceEndDate);
12
13
  if (input.paymentDueDate) {
13
14
  if (voucherKind.isElectronicCredit && voucherKind.family !== 'factura-credito-electronica') {
14
- throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} no lleva vencimiento de pago. Quite --vencimiento.`);
15
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} no lleva vencimiento de pago. Sacá --vencimiento.`);
15
16
  }
16
17
  if (!voucherKind.isElectronicCredit && input.concept === 'productos') {
17
18
  throw new InputValidationError('El concepto "productos" no usa --vencimiento.');
@@ -19,10 +20,10 @@ export function validateConceptDateInputs(input, voucherKind) {
19
20
  }
20
21
  if (input.concept === 'productos') {
21
22
  if (hasAnyServiceDate) {
22
- throw new InputValidationError('El concepto "productos" no usa fechas de servicio. Quite --servicio-desde y --servicio-hasta.');
23
+ throw new InputValidationError('El concepto "productos" no usa fechas de servicio. Sacá --servicio-desde y --servicio-hasta.');
23
24
  }
24
25
  if (input.dueDay) {
25
- throw new InputValidationError('El concepto "productos" no usa --dia. Use solo fecha o monto.');
26
+ throw new InputValidationError('El concepto "productos" no usa --dia. Usá solo fecha o monto.');
26
27
  }
27
28
  return;
28
29
  }
@@ -31,7 +32,7 @@ export function validateConceptDateInputs(input, voucherKind) {
31
32
  }
32
33
  // --dia arma el fin del servicio desde hoy; con una fecha explicita no se usaria y nadie se enteraria.
33
34
  if (input.dueDay && (input.billingDate || input.serviceEndDate)) {
34
- throw new InputValidationError('--dia no se combina con --fecha ni con --servicio-hasta: con esas fechas no se usa. Quite --dia o esas fechas.');
35
+ throw new InputValidationError('--dia no se combina con --fecha ni con --servicio-hasta: con esas fechas no se usa. Sacá --dia o esas fechas.');
35
36
  }
36
37
  }
37
38
  export function validateDocumentIdentity(input, voucherKind) {
@@ -40,16 +41,18 @@ export function validateDocumentIdentity(input, voucherKind) {
40
41
  throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} usa consumidor final solo con --ir-cf o --iva-receptor consumidor-final.`);
41
42
  }
42
43
  if (typeof input.documentNumber === 'number' && input.documentNumber !== 0) {
43
- throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} usa consumidor final solo con documento 0. Use --consumidor-final.`);
44
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} usa consumidor final solo con documento 0. Usá --consumidor-final.`);
44
45
  }
45
46
  return;
46
47
  }
47
48
  if (typeof input.documentNumber !== 'number') {
48
- throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} requiere documento del receptor. Use ${formatDocumentFlag(input.documentType)}.`);
49
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} requiere documento del receptor. Usá ${formatDocumentFlag(input.documentType)}.`);
49
50
  }
50
- if ((input.documentType === 'cuit' || input.documentType === 'cuil') &&
51
- !/^\d{11}$/.test(String(input.documentNumber))) {
52
- throw new InputValidationError(`${formatDocumentFlag(input.documentType)} debe tener 11 digitos en ${formatVoucherLabel(voucherKind)}.`);
51
+ if (input.documentType === 'cuit' || input.documentType === 'cuil') {
52
+ const result = parseCuit(input.documentNumber);
53
+ if (!result.ok) {
54
+ throw new InputValidationError(`${formatDocumentFlag(input.documentType)} ${input.documentNumber} no es válido en ${formatVoucherLabel(voucherKind)}: ${result.reason}.`);
55
+ }
53
56
  }
54
57
  if (input.documentType === 'dni' && !/^\d{7,8}$/.test(String(input.documentNumber))) {
55
58
  throw new InputValidationError(`--dni debe tener 7 u 8 digitos en ${formatVoucherLabel(voucherKind)}.`);
@@ -70,7 +73,7 @@ export function validateBillingDateWindow(billingDate, today, concept, voucherKi
70
73
  const offset = diffArcaDatesInDays(today, billingDate);
71
74
  const label = formatArcaDateAsArgentineDate(billingDate);
72
75
  if (offset < -window.maxDaysBefore || offset > window.maxDaysAfter) {
73
- throw new InputValidationError(`La fecha ${label} esta fuera de rango para la ${formatVoucherLabel(voucherKind)}: ARCA acepta hasta ${window.maxDaysBefore} dias antes y ${window.maxDaysAfter} despues de hoy.`);
76
+ throw new InputValidationError(`La fecha ${label} esta fuera de rango para la ${formatVoucherLabel(voucherKind)}: ARCA acepta hasta ${window.maxDaysBefore} días antes y ${window.maxDaysAfter} después de hoy.`);
74
77
  }
75
78
  if (window.sameMonthWhenFuture && offset > 0 && billingDate.slice(0, 6) !== today.slice(0, 6)) {
76
79
  throw new InputValidationError(`La fecha ${label} es futura y cae en otro mes. Para la ${formatVoucherLabel(voucherKind)} ARCA solo acepta fechas futuras dentro del mes actual.`);
@@ -81,4 +84,3 @@ export function validatePaymentDueDate(paymentDueDate, minimumPaymentDueDate) {
81
84
  throw new InputValidationError(`El vencimiento de pago (${formatArcaDateAsArgentineDate(paymentDueDate)}) no puede ser anterior al ${formatArcaDateAsArgentineDate(minimumPaymentDueDate)}.`);
82
85
  }
83
86
  }
84
- //# sourceMappingURL=billing.validation.js.map
@@ -28,7 +28,7 @@ export const VOUCHER_KIND_MAP = {
28
28
  },
29
29
  nca: {
30
30
  arcaType: 3,
31
- displayName: 'Nota de credito A',
31
+ displayName: 'Nota de crédito A',
32
32
  family: 'nota-credito',
33
33
  isElectronicCredit: false,
34
34
  letter: 'a',
@@ -37,7 +37,7 @@ export const VOUCHER_KIND_MAP = {
37
37
  },
38
38
  ncb: {
39
39
  arcaType: 8,
40
- displayName: 'Nota de credito B',
40
+ displayName: 'Nota de crédito B',
41
41
  family: 'nota-credito',
42
42
  isElectronicCredit: false,
43
43
  letter: 'b',
@@ -46,7 +46,7 @@ export const VOUCHER_KIND_MAP = {
46
46
  },
47
47
  ncc: {
48
48
  arcaType: 13,
49
- displayName: 'Nota de credito C',
49
+ displayName: 'Nota de crédito C',
50
50
  family: 'nota-credito',
51
51
  isElectronicCredit: false,
52
52
  letter: 'c',
@@ -55,7 +55,7 @@ export const VOUCHER_KIND_MAP = {
55
55
  },
56
56
  nda: {
57
57
  arcaType: 2,
58
- displayName: 'Nota de debito A',
58
+ displayName: 'Nota de débito A',
59
59
  family: 'nota-debito',
60
60
  isElectronicCredit: false,
61
61
  letter: 'a',
@@ -64,7 +64,7 @@ export const VOUCHER_KIND_MAP = {
64
64
  },
65
65
  ndb: {
66
66
  arcaType: 7,
67
- displayName: 'Nota de debito B',
67
+ displayName: 'Nota de débito B',
68
68
  family: 'nota-debito',
69
69
  isElectronicCredit: false,
70
70
  letter: 'b',
@@ -73,7 +73,7 @@ export const VOUCHER_KIND_MAP = {
73
73
  },
74
74
  ndc: {
75
75
  arcaType: 12,
76
- displayName: 'Nota de debito C',
76
+ displayName: 'Nota de débito C',
77
77
  family: 'nota-debito',
78
78
  isElectronicCredit: false,
79
79
  letter: 'c',
@@ -82,7 +82,7 @@ export const VOUCHER_KIND_MAP = {
82
82
  },
83
83
  fcea: {
84
84
  arcaType: 201,
85
- displayName: 'Factura de credito electronica A',
85
+ displayName: 'Factura de crédito electrónica A',
86
86
  family: 'factura-credito-electronica',
87
87
  isElectronicCredit: true,
88
88
  letter: 'a',
@@ -91,7 +91,7 @@ export const VOUCHER_KIND_MAP = {
91
91
  },
92
92
  fceb: {
93
93
  arcaType: 206,
94
- displayName: 'Factura de credito electronica B',
94
+ displayName: 'Factura de crédito electrónica B',
95
95
  family: 'factura-credito-electronica',
96
96
  isElectronicCredit: true,
97
97
  letter: 'b',
@@ -100,7 +100,7 @@ export const VOUCHER_KIND_MAP = {
100
100
  },
101
101
  fcec: {
102
102
  arcaType: 211,
103
- displayName: 'Factura de credito electronica C',
103
+ displayName: 'Factura de crédito electrónica C',
104
104
  family: 'factura-credito-electronica',
105
105
  isElectronicCredit: true,
106
106
  letter: 'c',
@@ -109,7 +109,7 @@ export const VOUCHER_KIND_MAP = {
109
109
  },
110
110
  ncea: {
111
111
  arcaType: 203,
112
- displayName: 'Nota de credito electronica A',
112
+ displayName: 'Nota de crédito electrónica A',
113
113
  family: 'nota-credito-electronica',
114
114
  isElectronicCredit: true,
115
115
  letter: 'a',
@@ -118,7 +118,7 @@ export const VOUCHER_KIND_MAP = {
118
118
  },
119
119
  nceb: {
120
120
  arcaType: 208,
121
- displayName: 'Nota de credito electronica B',
121
+ displayName: 'Nota de crédito electrónica B',
122
122
  family: 'nota-credito-electronica',
123
123
  isElectronicCredit: true,
124
124
  letter: 'b',
@@ -127,7 +127,7 @@ export const VOUCHER_KIND_MAP = {
127
127
  },
128
128
  ncec: {
129
129
  arcaType: 213,
130
- displayName: 'Nota de credito electronica C',
130
+ displayName: 'Nota de crédito electrónica C',
131
131
  family: 'nota-credito-electronica',
132
132
  isElectronicCredit: true,
133
133
  letter: 'c',
@@ -136,7 +136,7 @@ export const VOUCHER_KIND_MAP = {
136
136
  },
137
137
  ndea: {
138
138
  arcaType: 202,
139
- displayName: 'Nota de debito electronica A',
139
+ displayName: 'Nota de débito electrónica A',
140
140
  family: 'nota-debito-electronica',
141
141
  isElectronicCredit: true,
142
142
  letter: 'a',
@@ -145,7 +145,7 @@ export const VOUCHER_KIND_MAP = {
145
145
  },
146
146
  ndeb: {
147
147
  arcaType: 207,
148
- displayName: 'Nota de debito electronica B',
148
+ displayName: 'Nota de débito electrónica B',
149
149
  family: 'nota-debito-electronica',
150
150
  isElectronicCredit: true,
151
151
  letter: 'b',
@@ -154,7 +154,7 @@ export const VOUCHER_KIND_MAP = {
154
154
  },
155
155
  ndec: {
156
156
  arcaType: 212,
157
- displayName: 'Nota de debito electronica C',
157
+ displayName: 'Nota de débito electrónica C',
158
158
  family: 'nota-debito-electronica',
159
159
  isElectronicCredit: true,
160
160
  letter: 'c',
@@ -177,4 +177,3 @@ export function getVoucherKindByArcaType(arcaType) {
177
177
  export function isVoucherShortcut(value) {
178
178
  return value in VOUCHER_KIND_MAP;
179
179
  }
180
- //# sourceMappingURL=voucher-kind-map.js.map
@@ -0,0 +1,53 @@
1
+ function resolveValues(values, previousArguments) {
2
+ if (!values) {
3
+ return [];
4
+ }
5
+ return typeof values === 'function' ? values(previousArguments) : values;
6
+ }
7
+ function findOption(command, word) {
8
+ return command.options.find((option) => option.flags.includes(word));
9
+ }
10
+ /**
11
+ * Lo que puede seguir en la linea, segun las palabras escritas despues de `arcli`. La ultima es la que se esta
12
+ * completando (puede venir vacia). Sin candidatos devuelve una lista vacia y el shell completa rutas de archivo,
13
+ * que es lo que piden `--cargar` y las rutas de config.
14
+ */
15
+ export function completeWords(root, words) {
16
+ const current = words.at(-1) ?? '';
17
+ const previous = words.slice(0, -1);
18
+ let command = root;
19
+ let positionals = [];
20
+ let pendingOption;
21
+ for (const word of previous) {
22
+ if (pendingOption) {
23
+ pendingOption = undefined;
24
+ continue;
25
+ }
26
+ if (word.startsWith('-')) {
27
+ const option = findOption(command, word);
28
+ pendingOption = option?.takesValue ? option : undefined;
29
+ continue;
30
+ }
31
+ const subcommand = positionals.length === 0 ? command.subcommands.find((sub) => sub.name === word) : undefined;
32
+ if (subcommand) {
33
+ command = subcommand;
34
+ positionals = [];
35
+ }
36
+ else {
37
+ positionals.push(word);
38
+ }
39
+ }
40
+ const matches = (candidates) => [...new Set(candidates)].filter((candidate) => candidate.startsWith(current));
41
+ if (pendingOption) {
42
+ return matches(resolveValues(pendingOption.values, positionals));
43
+ }
44
+ if (current.startsWith('-')) {
45
+ return matches(command.options
46
+ .filter((option) => !option.hidden)
47
+ .flatMap((option) => option.flags.filter((flag) => flag.startsWith('--'))));
48
+ }
49
+ return matches([
50
+ ...(positionals.length === 0 ? command.subcommands.map((sub) => sub.name) : []),
51
+ ...resolveValues(command.argumentValues[positionals.length], positionals),
52
+ ]);
53
+ }
@@ -0,0 +1,35 @@
1
+ import { noticePanel } from '../../ui/index.js';
2
+ /** `/Users/vos/.zshrc` → `~/.zshrc`, como lo escribe la gente. */
3
+ function displayPath(path, home) {
4
+ return home && path.startsWith(`${home}/`) ? `~${path.slice(home.length)}` : path;
5
+ }
6
+ function reloadHint(state, home) {
7
+ return state.shell === 'fish'
8
+ ? 'Abrí una terminal nueva.'
9
+ : `Abrí una terminal nueva o corré: source ${displayPath(state.path, home)}`;
10
+ }
11
+ export function formatCompletionStateAsText(state, home) {
12
+ const where = displayPath(state.path, home);
13
+ return state.installed
14
+ ? noticePanel(`Autocompletado instalado para ${state.shell} (${where}).`, 'success')
15
+ : noticePanel(`Autocompletado no instalado para ${state.shell}. Instalalo con: arcli completado instalar`, 'muted');
16
+ }
17
+ export function formatCompletionResultAsText(result, home) {
18
+ const where = displayPath(result.path, home);
19
+ if (!result.changed) {
20
+ return noticePanel(result.installed
21
+ ? `El autocompletado ya estaba instalado para ${result.shell} (${where}).`
22
+ : `El autocompletado no estaba instalado para ${result.shell}.`, 'muted');
23
+ }
24
+ return result.installed
25
+ ? noticePanel(`Autocompletado instalado para ${result.shell} en ${where}.\n${reloadHint(result, home)}`, 'success')
26
+ : noticePanel(`Autocompletado desinstalado de ${where}.\nEn esta terminal sigue activo hasta cerrarla.`, 'success');
27
+ }
28
+ export function formatCompletionStateAsJson(state) {
29
+ return JSON.stringify({
30
+ ...('changed' in state ? { cambio: state.changed } : {}),
31
+ instalado: state.installed,
32
+ ruta: state.path,
33
+ shell: state.shell,
34
+ }, null, 2);
35
+ }