arcli 2.1.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 (539) hide show
  1. package/CHANGELOG.md +52 -1
  2. package/README.md +6 -0
  3. package/dist/cli/arca-runtime.js +0 -1
  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 +0 -1
  7. package/dist/cli/commands/billing.command.interactive-preview.js +9 -13
  8. package/dist/cli/commands/billing.command.options.js +83 -39
  9. package/dist/cli/commands/billing.command.output.js +0 -1
  10. package/dist/cli/commands/billing.command.parser.js +18 -17
  11. package/dist/cli/commands/billing.command.pdf.js +9 -6
  12. package/dist/cli/commands/billing.command.shared.js +2 -2
  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 +9 -10
  16. package/dist/cli/commands/cuit-argument.js +6 -6
  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 +2 -3
  24. package/dist/cli/commands/interactive.command.js +2 -3
  25. package/dist/cli/commands/padron.command.js +5 -6
  26. package/dist/cli/commands/parameters.command.js +5 -6
  27. package/dist/cli/commands/pdf.command.js +1 -2
  28. package/dist/cli/commands/storybook.command.js +4 -4
  29. package/dist/cli/commands/vouchers.command.js +9 -9
  30. package/dist/cli/error-output.js +21 -3
  31. package/dist/cli/global-options.js +2 -3
  32. package/dist/cli/help-argv.js +0 -1
  33. package/dist/cli/help.js +186 -380
  34. package/dist/cli/ignored-global-options.js +1 -2
  35. package/dist/cli/index.js +5 -3
  36. package/dist/cli/interactive/advanced-options.js +13 -14
  37. package/dist/cli/interactive/config.flow.js +55 -17
  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 +16 -17
  41. package/dist/cli/interactive/invoice-picker.js +7 -7
  42. package/dist/cli/interactive/invoice.flow.js +32 -11
  43. package/dist/cli/interactive/note.flow.js +12 -13
  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 +3 -4
  47. package/dist/cli/interactive/repeat.flow.js +7 -8
  48. package/dist/cli/interactive/session.js +9 -7
  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 +6 -3
  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 +0 -1
  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 +0 -1
  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 +0 -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 +0 -1
  71. package/dist/lib/security/pem.js +2 -3
  72. package/dist/modules/billing/billing-response.js +6 -7
  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 +7 -6
  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 +1 -2
  80. package/dist/modules/billing/billing.display.js +10 -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 +5 -6
  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 +9 -5
  89. package/dist/modules/billing/billing.presenter.js +0 -1
  90. package/dist/modules/billing/billing.schemas.js +14 -6
  91. package/dist/modules/billing/billing.serialize.js +6 -3
  92. package/dist/modules/billing/billing.service.js +4 -4
  93. package/dist/modules/billing/billing.text.js +0 -1
  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 +3 -4
  103. package/dist/modules/config/config-doctor.js +36 -14
  104. package/dist/modules/config/config-value-parser.js +29 -16
  105. package/dist/modules/config/config.export-credentials.js +23 -0
  106. package/dist/modules/config/config.presenter.js +22 -6
  107. package/dist/modules/config/config.schemas.js +24 -12
  108. package/dist/modules/config/config.sections.js +26 -11
  109. package/dist/modules/config/config.service.js +6 -2
  110. package/dist/modules/examples/examples.js +44 -10
  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 +11 -3
  125. package/dist/modules/interactive/equivalent-command.js +4 -1
  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 +0 -1
  131. package/dist/modules/padron/padron.presenter.js +6 -7
  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 +12 -13
  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 +20 -21
  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 +4 -5
  151. package/dist/services/arca/arca-client.factory.js +23 -2
  152. package/dist/services/arca/arca-context.resolver.js +5 -6
  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 +1 -2
  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 +15 -2
  163. package/dist/services/pdf/pdf-plugin.js +41 -14
  164. package/dist/ui/components/certificateBanner.js +0 -1
  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 +0 -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 +0 -1
  178. package/dist/ui/presenters/errors.presenter.js +10 -11
  179. package/dist/ui/presenters/errors.zod-presenter.js +8 -9
  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 +0 -1
  198. package/dist/ui/theme/index.js +0 -1
  199. package/dist/ui/theme/theme.js +0 -1
  200. package/llms.txt +64 -5
  201. package/package.json +1 -2
  202. package/dist/cli/arca-runtime.d.ts +0 -20
  203. package/dist/cli/arca-runtime.js.map +0 -1
  204. package/dist/cli/commands/billing-family.command.d.ts +0 -2
  205. package/dist/cli/commands/billing-family.command.js.map +0 -1
  206. package/dist/cli/commands/billing-shortcuts.command.d.ts +0 -2
  207. package/dist/cli/commands/billing-shortcuts.command.js.map +0 -1
  208. package/dist/cli/commands/billing.command.batch.d.ts +0 -32
  209. package/dist/cli/commands/billing.command.batch.js.map +0 -1
  210. package/dist/cli/commands/billing.command.interactive-preview.d.ts +0 -18
  211. package/dist/cli/commands/billing.command.interactive-preview.js.map +0 -1
  212. package/dist/cli/commands/billing.command.options.d.ts +0 -2
  213. package/dist/cli/commands/billing.command.options.js.map +0 -1
  214. package/dist/cli/commands/billing.command.output.d.ts +0 -18
  215. package/dist/cli/commands/billing.command.output.js.map +0 -1
  216. package/dist/cli/commands/billing.command.parser.d.ts +0 -35
  217. package/dist/cli/commands/billing.command.parser.js.map +0 -1
  218. package/dist/cli/commands/billing.command.pdf.d.ts +0 -24
  219. package/dist/cli/commands/billing.command.pdf.js.map +0 -1
  220. package/dist/cli/commands/billing.command.shared.d.ts +0 -26
  221. package/dist/cli/commands/billing.command.shared.js.map +0 -1
  222. package/dist/cli/commands/billing.command.shortcuts.d.ts +0 -7
  223. package/dist/cli/commands/billing.command.shortcuts.js.map +0 -1
  224. package/dist/cli/commands/config.command.d.ts +0 -6
  225. package/dist/cli/commands/config.command.js.map +0 -1
  226. package/dist/cli/commands/cuit-argument.d.ts +0 -2
  227. package/dist/cli/commands/cuit-argument.js.map +0 -1
  228. package/dist/cli/commands/examples.command.d.ts +0 -2
  229. package/dist/cli/commands/examples.command.js.map +0 -1
  230. package/dist/cli/commands/fce-obligation.command.d.ts +0 -2
  231. package/dist/cli/commands/fce-obligation.command.js.map +0 -1
  232. package/dist/cli/commands/interactive.command.d.ts +0 -3
  233. package/dist/cli/commands/interactive.command.js.map +0 -1
  234. package/dist/cli/commands/padron.command.d.ts +0 -2
  235. package/dist/cli/commands/padron.command.js.map +0 -1
  236. package/dist/cli/commands/parameters.command.d.ts +0 -2
  237. package/dist/cli/commands/parameters.command.js.map +0 -1
  238. package/dist/cli/commands/pdf.command.d.ts +0 -2
  239. package/dist/cli/commands/pdf.command.js.map +0 -1
  240. package/dist/cli/commands/storybook.command.d.ts +0 -2
  241. package/dist/cli/commands/storybook.command.js.map +0 -1
  242. package/dist/cli/commands/vouchers.command.d.ts +0 -2
  243. package/dist/cli/commands/vouchers.command.js.map +0 -1
  244. package/dist/cli/error-output.d.ts +0 -25
  245. package/dist/cli/error-output.js.map +0 -1
  246. package/dist/cli/global-options.d.ts +0 -26
  247. package/dist/cli/global-options.js.map +0 -1
  248. package/dist/cli/help-argv.d.ts +0 -5
  249. package/dist/cli/help-argv.js.map +0 -1
  250. package/dist/cli/help.d.ts +0 -14
  251. package/dist/cli/help.js.map +0 -1
  252. package/dist/cli/ignored-global-options.d.ts +0 -6
  253. package/dist/cli/ignored-global-options.js.map +0 -1
  254. package/dist/cli/index.d.ts +0 -2
  255. package/dist/cli/index.js.map +0 -1
  256. package/dist/cli/interactive/advanced-options.d.ts +0 -21
  257. package/dist/cli/interactive/advanced-options.js.map +0 -1
  258. package/dist/cli/interactive/config.flow.d.ts +0 -4
  259. package/dist/cli/interactive/config.flow.js.map +0 -1
  260. package/dist/cli/interactive/history.flow.d.ts +0 -6
  261. package/dist/cli/interactive/history.flow.js.map +0 -1
  262. package/dist/cli/interactive/interactive-mode.d.ts +0 -3
  263. package/dist/cli/interactive/interactive-mode.js.map +0 -1
  264. package/dist/cli/interactive/invoice-picker.d.ts +0 -25
  265. package/dist/cli/interactive/invoice-picker.js.map +0 -1
  266. package/dist/cli/interactive/invoice.flow.d.ts +0 -22
  267. package/dist/cli/interactive/invoice.flow.js.map +0 -1
  268. package/dist/cli/interactive/note.flow.d.ts +0 -34
  269. package/dist/cli/interactive/note.flow.js.map +0 -1
  270. package/dist/cli/interactive/pdf.flow.d.ts +0 -5
  271. package/dist/cli/interactive/pdf.flow.js.map +0 -1
  272. package/dist/cli/interactive/prompts.d.ts +0 -57
  273. package/dist/cli/interactive/prompts.js.map +0 -1
  274. package/dist/cli/interactive/receiver-padron.d.ts +0 -29
  275. package/dist/cli/interactive/receiver-padron.js.map +0 -1
  276. package/dist/cli/interactive/repeat.flow.d.ts +0 -13
  277. package/dist/cli/interactive/repeat.flow.js.map +0 -1
  278. package/dist/cli/interactive/session.d.ts +0 -22
  279. package/dist/cli/interactive/session.js.map +0 -1
  280. package/dist/cli/interactive/status.flow.d.ts +0 -3
  281. package/dist/cli/interactive/status.flow.js.map +0 -1
  282. package/dist/cli/interactive/update.flow.d.ts +0 -6
  283. package/dist/cli/interactive/update.flow.js.map +0 -1
  284. package/dist/cli/interactive/validators.d.ts +0 -9
  285. package/dist/cli/interactive/validators.js.map +0 -1
  286. package/dist/cli/option-parsers.d.ts +0 -6
  287. package/dist/cli/option-parsers.js.map +0 -1
  288. package/dist/cli/program.d.ts +0 -6
  289. package/dist/cli/program.js.map +0 -1
  290. package/dist/cli/spinner.d.ts +0 -8
  291. package/dist/cli/spinner.js.map +0 -1
  292. package/dist/cli/types.d.ts +0 -6
  293. package/dist/cli/types.js.map +0 -1
  294. package/dist/cli/version.d.ts +0 -1
  295. package/dist/cli/version.js.map +0 -1
  296. package/dist/index.d.ts +0 -1
  297. package/dist/index.js.map +0 -1
  298. package/dist/lib/dates/arca-date.d.ts +0 -19
  299. package/dist/lib/dates/arca-date.js.map +0 -1
  300. package/dist/lib/errors/app-error.d.ts +0 -17
  301. package/dist/lib/errors/app-error.js.map +0 -1
  302. package/dist/lib/files/read-json-file.d.ts +0 -1
  303. package/dist/lib/files/read-json-file.js.map +0 -1
  304. package/dist/lib/files/restrict-to-owner.d.ts +0 -7
  305. package/dist/lib/files/restrict-to-owner.js.map +0 -1
  306. package/dist/lib/files/write-new-file.d.ts +0 -5
  307. package/dist/lib/files/write-new-file.js.map +0 -1
  308. package/dist/lib/identity/format-cuit.d.ts +0 -2
  309. package/dist/lib/identity/format-cuit.js.map +0 -1
  310. package/dist/lib/links.d.ts +0 -4
  311. package/dist/lib/links.js.map +0 -1
  312. package/dist/lib/numbers/argentine-amount.d.ts +0 -23
  313. package/dist/lib/numbers/argentine-amount.js.map +0 -1
  314. package/dist/lib/numbers/strict-integer.d.ts +0 -4
  315. package/dist/lib/numbers/strict-integer.js.map +0 -1
  316. package/dist/lib/paths/mask-path.d.ts +0 -1
  317. package/dist/lib/paths/mask-path.js.map +0 -1
  318. package/dist/lib/security/certificate.d.ts +0 -11
  319. package/dist/lib/security/certificate.js.map +0 -1
  320. package/dist/lib/security/pem.d.ts +0 -5
  321. package/dist/lib/security/pem.js.map +0 -1
  322. package/dist/modules/billing/billing-response.d.ts +0 -4
  323. package/dist/modules/billing/billing-response.js.map +0 -1
  324. package/dist/modules/billing/billing.amounts.d.ts +0 -21
  325. package/dist/modules/billing/billing.amounts.js.map +0 -1
  326. package/dist/modules/billing/billing.associated-period.d.ts +0 -8
  327. package/dist/modules/billing/billing.associated-period.js.map +0 -1
  328. package/dist/modules/billing/billing.associated-vouchers.d.ts +0 -12
  329. package/dist/modules/billing/billing.associated-vouchers.js.map +0 -1
  330. package/dist/modules/billing/billing.batch.d.ts +0 -23
  331. package/dist/modules/billing/billing.batch.js.map +0 -1
  332. package/dist/modules/billing/billing.constants.d.ts +0 -2
  333. package/dist/modules/billing/billing.constants.js.map +0 -1
  334. package/dist/modules/billing/billing.currency.d.ts +0 -18
  335. package/dist/modules/billing/billing.currency.js.map +0 -1
  336. package/dist/modules/billing/billing.date-range.d.ts +0 -9
  337. package/dist/modules/billing/billing.date-range.js.map +0 -1
  338. package/dist/modules/billing/billing.display.d.ts +0 -13
  339. package/dist/modules/billing/billing.display.js.map +0 -1
  340. package/dist/modules/billing/billing.errors.d.ts +0 -12
  341. package/dist/modules/billing/billing.errors.js.map +0 -1
  342. package/dist/modules/billing/billing.fce.d.ts +0 -21
  343. package/dist/modules/billing/billing.fce.js.map +0 -1
  344. package/dist/modules/billing/billing.iva-receptor.d.ts +0 -8
  345. package/dist/modules/billing/billing.iva-receptor.js.map +0 -1
  346. package/dist/modules/billing/billing.json-format.d.ts +0 -6
  347. package/dist/modules/billing/billing.json-format.js.map +0 -1
  348. package/dist/modules/billing/billing.json-input.d.ts +0 -58
  349. package/dist/modules/billing/billing.json-input.js.map +0 -1
  350. package/dist/modules/billing/billing.labels.d.ts +0 -9
  351. package/dist/modules/billing/billing.labels.js.map +0 -1
  352. package/dist/modules/billing/billing.mappers.d.ts +0 -8
  353. package/dist/modules/billing/billing.mappers.js.map +0 -1
  354. package/dist/modules/billing/billing.padron.d.ts +0 -14
  355. package/dist/modules/billing/billing.padron.js.map +0 -1
  356. package/dist/modules/billing/billing.presenter.d.ts +0 -7
  357. package/dist/modules/billing/billing.presenter.js.map +0 -1
  358. package/dist/modules/billing/billing.schemas.d.ts +0 -147
  359. package/dist/modules/billing/billing.schemas.js.map +0 -1
  360. package/dist/modules/billing/billing.serialize.d.ts +0 -9
  361. package/dist/modules/billing/billing.serialize.js.map +0 -1
  362. package/dist/modules/billing/billing.service.d.ts +0 -30
  363. package/dist/modules/billing/billing.service.js.map +0 -1
  364. package/dist/modules/billing/billing.text.d.ts +0 -8
  365. package/dist/modules/billing/billing.text.js.map +0 -1
  366. package/dist/modules/billing/billing.types.d.ts +0 -13
  367. package/dist/modules/billing/billing.types.internal.d.ts +0 -38
  368. package/dist/modules/billing/billing.types.internal.js.map +0 -1
  369. package/dist/modules/billing/billing.types.js.map +0 -1
  370. package/dist/modules/billing/billing.validation.d.ts +0 -7
  371. package/dist/modules/billing/billing.validation.js.map +0 -1
  372. package/dist/modules/billing/voucher-kind-map.d.ts +0 -9
  373. package/dist/modules/billing/voucher-kind-map.js.map +0 -1
  374. package/dist/modules/config/certificate-expiry.d.ts +0 -42
  375. package/dist/modules/config/certificate-expiry.js.map +0 -1
  376. package/dist/modules/config/config-doctor.d.ts +0 -16
  377. package/dist/modules/config/config-doctor.js.map +0 -1
  378. package/dist/modules/config/config-value-parser.d.ts +0 -2
  379. package/dist/modules/config/config-value-parser.js.map +0 -1
  380. package/dist/modules/config/config.presenter.d.ts +0 -17
  381. package/dist/modules/config/config.presenter.js.map +0 -1
  382. package/dist/modules/config/config.schemas.d.ts +0 -156
  383. package/dist/modules/config/config.schemas.js.map +0 -1
  384. package/dist/modules/config/config.sections.d.ts +0 -14
  385. package/dist/modules/config/config.sections.js.map +0 -1
  386. package/dist/modules/config/config.service.d.ts +0 -35
  387. package/dist/modules/config/config.service.js.map +0 -1
  388. package/dist/modules/examples/examples.d.ts +0 -6
  389. package/dist/modules/examples/examples.js.map +0 -1
  390. package/dist/modules/fce/fce-obligation.d.ts +0 -20
  391. package/dist/modules/fce/fce-obligation.js.map +0 -1
  392. package/dist/modules/fce/fce-obligation.presenter.d.ts +0 -9
  393. package/dist/modules/fce/fce-obligation.presenter.js.map +0 -1
  394. package/dist/modules/interactive/amount-input.d.ts +0 -4
  395. package/dist/modules/interactive/amount-input.js.map +0 -1
  396. package/dist/modules/interactive/choices.d.ts +0 -13
  397. package/dist/modules/interactive/choices.js.map +0 -1
  398. package/dist/modules/interactive/config-fields.d.ts +0 -20
  399. package/dist/modules/interactive/config-fields.js.map +0 -1
  400. package/dist/modules/interactive/equivalent-command.d.ts +0 -8
  401. package/dist/modules/interactive/equivalent-command.js.map +0 -1
  402. package/dist/modules/interactive/invoice-copy.d.ts +0 -19
  403. package/dist/modules/interactive/invoice-copy.js.map +0 -1
  404. package/dist/modules/interactive/periods.d.ts +0 -7
  405. package/dist/modules/interactive/periods.js.map +0 -1
  406. package/dist/modules/interactive/wizard.d.ts +0 -16
  407. package/dist/modules/interactive/wizard.js.map +0 -1
  408. package/dist/modules/padron/padron.d.ts +0 -46
  409. package/dist/modules/padron/padron.js.map +0 -1
  410. package/dist/modules/padron/padron.presenter.d.ts +0 -7
  411. package/dist/modules/padron/padron.presenter.js.map +0 -1
  412. package/dist/modules/parameters/health.d.ts +0 -17
  413. package/dist/modules/parameters/health.js.map +0 -1
  414. package/dist/modules/parameters/parameters.d.ts +0 -50
  415. package/dist/modules/parameters/parameters.js.map +0 -1
  416. package/dist/modules/parameters/parameters.presenter.d.ts +0 -12
  417. package/dist/modules/parameters/parameters.presenter.js.map +0 -1
  418. package/dist/modules/parameters/status.d.ts +0 -31
  419. package/dist/modules/parameters/status.js.map +0 -1
  420. package/dist/modules/pdf/pdf-data.mapper.d.ts +0 -4
  421. package/dist/modules/pdf/pdf-data.mapper.js.map +0 -1
  422. package/dist/modules/pdf/pdf-decision.d.ts +0 -14
  423. package/dist/modules/pdf/pdf-decision.js.map +0 -1
  424. package/dist/modules/pdf/pdf-file-name.d.ts +0 -3
  425. package/dist/modules/pdf/pdf-file-name.js.map +0 -1
  426. package/dist/modules/pdf/pdf-issuer.d.ts +0 -8
  427. package/dist/modules/pdf/pdf-issuer.js.map +0 -1
  428. package/dist/modules/pdf/pdf.errors.d.ts +0 -9
  429. package/dist/modules/pdf/pdf.errors.js.map +0 -1
  430. package/dist/modules/pdf/pdf.types.d.ts +0 -91
  431. package/dist/modules/pdf/pdf.types.js.map +0 -1
  432. package/dist/modules/storybook/showcase-theme.d.ts +0 -7
  433. package/dist/modules/storybook/showcase-theme.js.map +0 -1
  434. package/dist/modules/storybook/showcase.d.ts +0 -2
  435. package/dist/modules/storybook/showcase.js.map +0 -1
  436. package/dist/modules/update-check/changelog.d.ts +0 -23
  437. package/dist/modules/update-check/changelog.js.map +0 -1
  438. package/dist/modules/update-check/update-check.presenter.d.ts +0 -6
  439. package/dist/modules/update-check/update-check.presenter.js.map +0 -1
  440. package/dist/modules/update-check/update-check.service.d.ts +0 -11
  441. package/dist/modules/update-check/update-check.service.js.map +0 -1
  442. package/dist/modules/vouchers/voucher-history.d.ts +0 -39
  443. package/dist/modules/vouchers/voucher-history.js.map +0 -1
  444. package/dist/modules/vouchers/voucher-history.presenter.d.ts +0 -29
  445. package/dist/modules/vouchers/voucher-history.presenter.js.map +0 -1
  446. package/dist/services/arca/arca-billing.gateway.d.ts +0 -16
  447. package/dist/services/arca/arca-billing.gateway.js.map +0 -1
  448. package/dist/services/arca/arca-client.factory.d.ts +0 -6
  449. package/dist/services/arca/arca-client.factory.js.map +0 -1
  450. package/dist/services/arca/arca-context.resolver.d.ts +0 -55
  451. package/dist/services/arca/arca-context.resolver.js.map +0 -1
  452. package/dist/services/arca/arca-fce-obligation.gateway.d.ts +0 -7
  453. package/dist/services/arca/arca-fce-obligation.gateway.js.map +0 -1
  454. package/dist/services/arca/arca-padron.gateway.d.ts +0 -9
  455. package/dist/services/arca/arca-padron.gateway.js.map +0 -1
  456. package/dist/services/arca/arca-parameters.gateway.d.ts +0 -10
  457. package/dist/services/arca/arca-parameters.gateway.js.map +0 -1
  458. package/dist/services/arca/arca-voucher-history.gateway.d.ts +0 -8
  459. package/dist/services/arca/arca-voucher-history.gateway.js.map +0 -1
  460. package/dist/services/clipboard/clipboard.d.ts +0 -2
  461. package/dist/services/clipboard/clipboard.js.map +0 -1
  462. package/dist/services/pdf/escape-html.d.ts +0 -6
  463. package/dist/services/pdf/escape-html.js.map +0 -1
  464. package/dist/services/pdf/pdf-browser.d.ts +0 -5
  465. package/dist/services/pdf/pdf-browser.js.map +0 -1
  466. package/dist/services/pdf/pdf-exporter.d.ts +0 -22
  467. package/dist/services/pdf/pdf-exporter.js.map +0 -1
  468. package/dist/services/pdf/pdf-plugin.d.ts +0 -50
  469. package/dist/services/pdf/pdf-plugin.js.map +0 -1
  470. package/dist/ui/components/certificateBanner.d.ts +0 -11
  471. package/dist/ui/components/certificateBanner.js.map +0 -1
  472. package/dist/ui/components/contentPanel.d.ts +0 -5
  473. package/dist/ui/components/contentPanel.js.map +0 -1
  474. package/dist/ui/components/errorPanel.d.ts +0 -1
  475. package/dist/ui/components/errorPanel.js.map +0 -1
  476. package/dist/ui/components/index.d.ts +0 -10
  477. package/dist/ui/components/index.js.map +0 -1
  478. package/dist/ui/components/keyValuePanel.d.ts +0 -3
  479. package/dist/ui/components/keyValuePanel.js.map +0 -1
  480. package/dist/ui/components/noticePanel.d.ts +0 -3
  481. package/dist/ui/components/noticePanel.js.map +0 -1
  482. package/dist/ui/components/rawPanel.d.ts +0 -1
  483. package/dist/ui/components/rawPanel.js.map +0 -1
  484. package/dist/ui/components/sectionHeading.d.ts +0 -3
  485. package/dist/ui/components/sectionHeading.js.map +0 -1
  486. package/dist/ui/components/statusBar.d.ts +0 -19
  487. package/dist/ui/components/statusBar.js.map +0 -1
  488. package/dist/ui/components/statusPanel.d.ts +0 -3
  489. package/dist/ui/components/statusPanel.js.map +0 -1
  490. package/dist/ui/components/testingBanner.d.ts +0 -2
  491. package/dist/ui/components/testingBanner.js.map +0 -1
  492. package/dist/ui/index.d.ts +0 -5
  493. package/dist/ui/index.js.map +0 -1
  494. package/dist/ui/presenters/billing.presenter.d.ts +0 -2
  495. package/dist/ui/presenters/billing.presenter.js.map +0 -1
  496. package/dist/ui/presenters/config.presenter.d.ts +0 -1
  497. package/dist/ui/presenters/config.presenter.js.map +0 -1
  498. package/dist/ui/presenters/errors.presenter.d.ts +0 -1
  499. package/dist/ui/presenters/errors.presenter.js.map +0 -1
  500. package/dist/ui/presenters/errors.zod-presenter.d.ts +0 -4
  501. package/dist/ui/presenters/errors.zod-presenter.js.map +0 -1
  502. package/dist/ui/presenters/index.d.ts +0 -6
  503. package/dist/ui/presenters/index.js.map +0 -1
  504. package/dist/ui/presenters/pdf.presenter.d.ts +0 -13
  505. package/dist/ui/presenters/pdf.presenter.js.map +0 -1
  506. package/dist/ui/presenters/showcase.presenter.d.ts +0 -1
  507. package/dist/ui/presenters/showcase.presenter.js.map +0 -1
  508. package/dist/ui/primitives/index.d.ts +0 -10
  509. package/dist/ui/primitives/index.js.map +0 -1
  510. package/dist/ui/primitives/renderDivider.d.ts +0 -5
  511. package/dist/ui/primitives/renderDivider.js.map +0 -1
  512. package/dist/ui/primitives/renderFooter.d.ts +0 -7
  513. package/dist/ui/primitives/renderFooter.js.map +0 -1
  514. package/dist/ui/primitives/renderJson.d.ts +0 -3
  515. package/dist/ui/primitives/renderJson.js.map +0 -1
  516. package/dist/ui/primitives/renderKeyValue.d.ts +0 -14
  517. package/dist/ui/primitives/renderKeyValue.js.map +0 -1
  518. package/dist/ui/primitives/renderLogo.d.ts +0 -3
  519. package/dist/ui/primitives/renderLogo.js.map +0 -1
  520. package/dist/ui/primitives/renderObject.d.ts +0 -1
  521. package/dist/ui/primitives/renderObject.js.map +0 -1
  522. package/dist/ui/primitives/renderPanel.d.ts +0 -27
  523. package/dist/ui/primitives/renderPanel.js.map +0 -1
  524. package/dist/ui/primitives/renderSubtitle.d.ts +0 -7
  525. package/dist/ui/primitives/renderSubtitle.js.map +0 -1
  526. package/dist/ui/primitives/renderTable.d.ts +0 -6
  527. package/dist/ui/primitives/renderTable.js.map +0 -1
  528. package/dist/ui/primitives/terminalWidth.d.ts +0 -4
  529. package/dist/ui/primitives/terminalWidth.js.map +0 -1
  530. package/dist/ui/primitives/text.d.ts +0 -28
  531. package/dist/ui/primitives/text.js.map +0 -1
  532. package/dist/ui/stream/index.d.ts +0 -1
  533. package/dist/ui/stream/index.js.map +0 -1
  534. package/dist/ui/stream/terminal-stream.d.ts +0 -21
  535. package/dist/ui/stream/terminal-stream.js.map +0 -1
  536. package/dist/ui/theme/index.d.ts +0 -1
  537. package/dist/ui/theme/index.js.map +0 -1
  538. package/dist/ui/theme/theme.d.ts +0 -68
  539. package/dist/ui/theme/theme.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ const POINT_OF_SALE_HINT = 'Revisá los puntos de venta habilitados para WSFEX con `arcli parametros puntos-venta`.';
2
+ function normalizeArcaDate(value) {
3
+ const digits = (value ?? '').replace(/\D/g, '').slice(0, 8);
4
+ return /^\d{8}$/.test(digits) ? digits : null;
5
+ }
6
+ /**
7
+ * WSFEX informa los errores en `FEXErr` y los avisos en `FEXEvents`, con el codigo en 0 cuando no hay nada que
8
+ * decir: en la autorizacion exitosa manda `ErrCode: 0` con `ErrMsg: "OK"`, que no es un error.
9
+ */
10
+ function toEntry(code, message) {
11
+ if (!code) {
12
+ return [];
13
+ }
14
+ return [{ code, message: message?.trim() || 'ARCA no informó el detalle.' }];
15
+ }
16
+ function buildSuggestions(options) {
17
+ const suggestions = new Set();
18
+ if (/punto de venta/i.test(options.messages)) {
19
+ suggestions.add(POINT_OF_SALE_HINT);
20
+ }
21
+ if (/permiso/i.test(options.messages)) {
22
+ suggestions.add('Revisá los permisos de embarque: van con --permiso y --permiso-existente.');
23
+ }
24
+ if (/cuit.*(pais|país)/i.test(options.messages)) {
25
+ suggestions.add('Revisá el CUIT del país del cliente (`--cuit-pais`) y el país de destino.');
26
+ }
27
+ if (/moneda|cotizaci[oó]n/i.test(options.messages)) {
28
+ suggestions.add('Revisá la moneda y la cotización (`--moneda`, `--cotizacion-moneda`).');
29
+ }
30
+ if (/incoterm/i.test(options.messages)) {
31
+ suggestions.add('Revisá el incoterm (`--incoterm`) contra la tabla de ARCA.');
32
+ }
33
+ if (/actividad/i.test(options.messages)) {
34
+ suggestions.add('La actividad tiene que estar vinculada al emisor y activa para WSFEX: revisá las actividades habilitadas en ARCA o indicá otra con --actividad.');
35
+ }
36
+ if (/correlativ/i.test(options.messages)) {
37
+ suggestions.add('Revisá el número del comprobante (--numero): tiene que ser el siguiente al último E emitido en ese punto de venta.');
38
+ }
39
+ if (options.status !== 'aprobado' && suggestions.size === 0) {
40
+ suggestions.add('Revisá observaciones y errores de ARCA antes de volver a emitir.');
41
+ }
42
+ return [...suggestions];
43
+ }
44
+ export function createDryRunExportResponse() {
45
+ return {
46
+ cae: null,
47
+ caeVencimiento: null,
48
+ errors: [],
49
+ events: [],
50
+ observacion: null,
51
+ observaciones: [],
52
+ raw: null,
53
+ resultado: null,
54
+ status: 'observado',
55
+ suggestions: [],
56
+ };
57
+ }
58
+ /** WSFEX informa el rechazo en `Resultado` y los errores duros en `FEXErr`, sin lanzar excepcion. */
59
+ export function mapExportResponse(output) {
60
+ const result = output.FEXAuthorizeResult;
61
+ const authorization = result?.FEXResultAuth;
62
+ const errors = toEntry(result?.FEXErr?.ErrCode, result?.FEXErr?.ErrMsg);
63
+ const events = toEntry(result?.FEXEvents?.EventCode, result?.FEXEvents?.EventMsg);
64
+ const motivo = authorization?.Motivos_Obs?.trim();
65
+ const observaciones = motivo ? [motivo] : [];
66
+ const resultado = authorization?.Resultado?.trim() || null;
67
+ const cae = authorization?.Cae?.trim() || null;
68
+ const status = resultado === 'R' || errors.length > 0
69
+ ? 'rechazado'
70
+ : resultado === 'A' && observaciones.length === 0
71
+ ? 'aprobado'
72
+ : 'observado';
73
+ const messages = [...observaciones, ...errors.map((error) => error.message)].join(' | ');
74
+ return {
75
+ cae,
76
+ caeVencimiento: normalizeArcaDate(authorization?.Fch_venc_Cae),
77
+ errors,
78
+ events,
79
+ observacion: observaciones.join(' | ') || null,
80
+ observaciones,
81
+ raw: output,
82
+ resultado,
83
+ status,
84
+ suggestions: buildSuggestions({ messages, status }),
85
+ };
86
+ }
@@ -0,0 +1,70 @@
1
+ // Aditivo: la clave `pdf` solo aparece si se intento generar el PDF.
2
+ function formatPdfOutcome(result) {
3
+ if (!result.pdf) {
4
+ return {};
5
+ }
6
+ if ('path' in result.pdf) {
7
+ return { pdf: { ruta: result.pdf.path } };
8
+ }
9
+ const { code, message, suggestion } = result.pdf.error;
10
+ return { pdf: { error: { codigo: code, mensaje: message, sugerencia: suggestion ?? null } } };
11
+ }
12
+ function formatRawResponse(result) {
13
+ return result.response.raw ?? { mensaje: 'Sin emisión real. Usá --emitir para obtener una respuesta de ARCA.' };
14
+ }
15
+ /** Lo que WSFEX tiene y wsfe no: destino, incoterm, permisos e items reales. */
16
+ function formatExportBlock(result) {
17
+ const { payload, display } = result;
18
+ return {
19
+ actividad: payload.Actividades.Actividad.map((activity) => activity.Id),
20
+ cliente: payload.Cliente,
21
+ cuitPaisCliente: payload.Cuit_pais_cliente,
22
+ destino: { codigo: payload.Dst_cmp, nombre: display.countryName ?? null },
23
+ domicilioCliente: payload.Domicilio_cliente,
24
+ formaPago: payload.Forma_pago,
25
+ idImpositivo: payload.Id_impositivo || null,
26
+ idioma: payload.Idioma_cbte,
27
+ incoterm: payload.Incoterms || null,
28
+ incotermDescripcion: payload.Incoterms_Ds || null,
29
+ items: payload.Items.Item.map((item) => ({
30
+ cantidad: item.Pro_qty,
31
+ codigo: item.Pro_codigo || null,
32
+ descripcion: item.Pro_ds,
33
+ precioUnitario: item.Pro_precio_uni,
34
+ total: item.Pro_total_item,
35
+ unidad: display.unitNames[item.Pro_umed] ?? null,
36
+ unidadCodigo: item.Pro_umed,
37
+ })),
38
+ mismaMoneda: payload.CanMisMonExt === 'S',
39
+ permisos: payload.Permisos?.Permiso ?? [],
40
+ tipoExpo: payload.Tipo_expo,
41
+ };
42
+ }
43
+ export function serializeExportResult(result, options = {}) {
44
+ const summary = {
45
+ atajo: result.voucherKind.shortcut,
46
+ avisos: result.warnings ?? [],
47
+ cae: result.response.cae,
48
+ caeVencimiento: result.response.caeVencimiento,
49
+ comprobante: result.voucherKind.displayName,
50
+ errores: result.response.errors,
51
+ estado: result.response.status,
52
+ eventos: result.response.events,
53
+ exportacion: formatExportBlock(result),
54
+ observaciones: result.response.observaciones,
55
+ observacion: result.response.observacion,
56
+ ...formatPdfOutcome(result),
57
+ previsualizacion: result.dryRun,
58
+ resultado: result.response.resultado,
59
+ solicitud: result.payload,
60
+ sugerencias: result.response.suggestions,
61
+ tipoArca: result.voucherKind.arcaType,
62
+ };
63
+ return options.raw ? { ...summary, respuesta: formatRawResponse(result) } : summary;
64
+ }
65
+ export function formatExportResultAsJson(result, options = {}) {
66
+ return JSON.stringify(serializeExportResult(result, options), null, 2);
67
+ }
68
+ export function formatRawExportResponse(result) {
69
+ return formatRawResponse(result);
70
+ }
@@ -0,0 +1,146 @@
1
+ import { formatArcaDateAsArgentineDate, formatDateAsArcaDate, parseArgentineDateInputAsArcaDate, } from '../../lib/dates/arca-date.js';
2
+ import { InputValidationError } from '../../lib/errors/app-error.js';
3
+ import { assertExportItemsTotal, buildExportItems, DEFAULT_EXPORT_ITEM_DESCRIPTION } from './export.items.js';
4
+ import { buildExportPayload, resolveExportActivity, resolveExportClientCountryCuit, resolveExportCurrency, resolveExportDestinationCountry, resolveExportIncoterm, resolveExportLanguage, resolveExportNumber, resolveExportPointOfSale, resolveExportQuotation, resolveExportType, resolveExportVoucherDate, } from './export.mappers.js';
5
+ import { createDryRunExportResponse, mapExportResponse } from './export.response.js';
6
+ import { EXPORT_VOUCHER_KIND, } from './export.types.js';
7
+ /** Se valida antes de tocar la red: un flag que falta no tiene por que autenticar en WSAA. */
8
+ function assertRequiredFields(input, activity) {
9
+ if (typeof input.amount !== 'number' || !(input.amount > 0)) {
10
+ throw new InputValidationError('Falta el importe total o no es válido. Usá --monto.');
11
+ }
12
+ if (!input.clientName?.trim()) {
13
+ throw new InputValidationError('Falta el nombre del cliente. Usá --cliente.');
14
+ }
15
+ if (!input.clientAddress?.trim()) {
16
+ throw new InputValidationError('Falta el domicilio del cliente. Usá --domicilio-cliente.');
17
+ }
18
+ if (!input.destinationCountry?.trim()) {
19
+ throw new InputValidationError('Falta el país de destino. Usá --pais-destino.');
20
+ }
21
+ // WSFEX numera por punto de venta y tipo, pero @arcasdk/core no deja consultar el ultimo (FEXGetLast_CMP lleva
22
+ // Pto_venta y Cbte_Tipo dentro de Auth y el SDK pisa ese bloque). Hasta que se arregle, el numero lo indica el usuario.
23
+ if (input.voucherNumber === undefined) {
24
+ throw new InputValidationError('Falta el número del comprobante. Usá --numero: arcli todavía no puede consultar en WSFEX el último emitido. Si es la primera Factura E de este punto de venta, es 1; si no, el siguiente al último que emitiste.');
25
+ }
26
+ if (activity === undefined) {
27
+ throw new InputValidationError('Falta la actividad de exportación. Usá --actividad o guardala con "arcli config establecer exportacion.actividad <código>": es el código de la tabla de actividades de WSFEX, por ejemplo 620100.');
28
+ }
29
+ assertExportItemsTotal(input.items, input.amount);
30
+ }
31
+ /** WSFEX no acepta comprobantes con fecha futura. Las fechas pasadas si son validas. */
32
+ function assertNotFuture(voucherDate, now) {
33
+ const today = formatDateAsArcaDate(now);
34
+ if (voucherDate > today) {
35
+ throw new InputValidationError(`La fecha del comprobante (${voucherDate.slice(6, 8)}/${voucherDate.slice(4, 6)}/${voucherDate.slice(0, 4)}) no puede ser futura.`);
36
+ }
37
+ }
38
+ export class ExportService {
39
+ /**
40
+ * Resuelve todo lo que pide WSFEX antes de emitir: tablas de paises, incoterms, idiomas y unidades,
41
+ * numeracion y cotizacion. Son llamadas de lectura: no emiten nada.
42
+ */
43
+ async resolve(input, gateway, runtime, now = new Date()) {
44
+ const config = runtime.config;
45
+ const activityCode = input.activity ?? config.exportacion?.actividad;
46
+ assertRequiredFields(input, activityCode);
47
+ const exportType = resolveExportType(input.exportType);
48
+ const voucherDate = resolveExportVoucherDate(input.voucherDate, now);
49
+ const paymentDate = input.paymentDate?.trim() ? parseArgentineDateInputAsArcaDate(input.paymentDate) : voucherDate;
50
+ assertNotFuture(voucherDate, now);
51
+ const countryList = await gateway.getDestinationCountries();
52
+ const destinationCountry = resolveExportDestinationCountry(input.destinationCountry, countryList);
53
+ const countryCuits = await gateway.getDestinationCountryCuits();
54
+ const clientCountryCuit = resolveExportClientCountryCuit({
55
+ country: destinationCountry,
56
+ countries: countryCuits,
57
+ cuit: input.clientCountryCuit,
58
+ });
59
+ const units = await gateway.getUnits();
60
+ const items = buildExportItems(input.items, input.amount, units, input.description?.trim() || DEFAULT_EXPORT_ITEM_DESCRIPTION);
61
+ const incoterm = resolveExportIncoterm(input.incoterm, input.incoterm?.trim() ? await gateway.getIncoterms() : []);
62
+ // Se consulta siempre: la vista previa muestra el nombre del idioma, tambien el de por defecto.
63
+ const languages = await gateway.getLanguages();
64
+ const languageId = resolveExportLanguage(input.language, languages);
65
+ const currency = resolveExportCurrency(input);
66
+ const quotation = currency.needsQuotation
67
+ ? resolveExportQuotation(currency.fields.Moneda_Id, await gateway.getQuotations(voucherDate), voucherDate)
68
+ : undefined;
69
+ const exchangeRate = quotation?.rate ?? currency.fields.Moneda_ctz;
70
+ const pointOfSale = resolveExportPointOfSale(input.pointOfSale, config);
71
+ const voucherNumber = resolveExportNumber({
72
+ label: 'El número del comprobante',
73
+ last: 0,
74
+ provided: input.voucherNumber,
75
+ });
76
+ const requestId = resolveExportNumber({
77
+ label: 'El ID de la solicitud',
78
+ last: input.requestId === undefined ? await gateway.getLastRequestId() : 0,
79
+ provided: input.requestId,
80
+ });
81
+ const activity = resolveExportActivity(activityCode, await gateway.getActivities());
82
+ const payload = buildExportPayload(input, {
83
+ activity,
84
+ clientCountryCuit,
85
+ currency: {
86
+ ...currency.fields,
87
+ Moneda_Id: quotation?.code ?? currency.fields.Moneda_Id,
88
+ Moneda_ctz: exchangeRate,
89
+ },
90
+ destinationCountry,
91
+ exportType,
92
+ incoterm,
93
+ items: items.items,
94
+ languageId,
95
+ paymentDate,
96
+ pointOfSale,
97
+ requestId,
98
+ voucherDate,
99
+ voucherNumber,
100
+ });
101
+ const currencyCode = payload.Moneda_Id.trim().toUpperCase();
102
+ const display = {
103
+ countryCuitName: countryCuits.find((entry) => entry.cuit === clientCountryCuit)?.countryName,
104
+ countryName: destinationCountry.name,
105
+ currencyName: (await gateway.getCurrencies()).find((entry) => entry.code.trim().toUpperCase() === currencyCode)
106
+ ?.name,
107
+ incotermName: incoterm?.name,
108
+ languageName: languages.find((language) => language.id === languageId)?.name,
109
+ unitNames: Object.fromEntries(units.map((unit) => [unit.id, unit.name])),
110
+ };
111
+ // La cotizacion de aduana del dia se publica mas tarde: se emite con la ultima disponible, avisando de que dia es.
112
+ const warnings = [
113
+ ...(quotation?.date && quotation.date !== voucherDate
114
+ ? [
115
+ `ARCA no publicó la cotización de ${quotation.code} del ${formatArcaDateAsArgentineDate(voucherDate)}: se usa la del ${formatArcaDateAsArgentineDate(quotation.date)} (${quotation.rate}). Para usar otra, --cotizacion-moneda.`,
116
+ ]
117
+ : []),
118
+ ];
119
+ return { display, payload, warnings };
120
+ }
121
+ /** Vista previa: el payload resuelto, sin llamar a `authorize`. */
122
+ preview(resolved, runtime, warnings) {
123
+ return {
124
+ display: resolved.display,
125
+ dryRun: true,
126
+ environment: runtime.environment,
127
+ payload: resolved.payload,
128
+ response: createDryRunExportResponse(),
129
+ voucherKind: EXPORT_VOUCHER_KIND,
130
+ warnings,
131
+ };
132
+ }
133
+ /** La llamada que emite. Un error aca puede haber dejado el comprobante autorizado en ARCA. */
134
+ async execute(options) {
135
+ const raw = await options.gateway.authorize(options.resolved.payload);
136
+ return {
137
+ display: options.resolved.display,
138
+ dryRun: false,
139
+ environment: options.runtime.environment,
140
+ payload: options.resolved.payload,
141
+ response: mapExportResponse(raw),
142
+ voucherKind: EXPORT_VOUCHER_KIND,
143
+ warnings: options.warnings,
144
+ };
145
+ }
146
+ }
@@ -0,0 +1,177 @@
1
+ import { contentPanel, keyValuePanel, renderKeyValueRows, renderObject, renderTable, resolveKeyValueLabelWidth, statusPanel, testingBanner, toneText, } from '../../ui/index.js';
2
+ import { formatDateLabel, formatMoneyLabel, formatNumericLabel } from '../billing/billing.labels.js';
3
+ import { formatRawExportResponse } from './export.serialize.js';
4
+ import { EXPORT_TYPES } from './export.types.js';
5
+ function formatEnvironmentBanner(environment) {
6
+ return environment === 'testing' ? [testingBanner()] : [];
7
+ }
8
+ export function formatExportStatusBadge(result) {
9
+ switch (result.response.status) {
10
+ case 'aprobado':
11
+ return { label: 'APROBADO', tone: 'success' };
12
+ case 'rechazado':
13
+ return { label: 'RECHAZADO', tone: 'danger' };
14
+ default:
15
+ return { label: 'OBSERVADO', tone: 'warning' };
16
+ }
17
+ }
18
+ function formatCountry(result) {
19
+ const { Dst_cmp: code } = result.payload;
20
+ const name = result.display.countryName;
21
+ return name ? `${code} - ${name}` : String(code);
22
+ }
23
+ function formatExportType(result) {
24
+ return `${result.payload.Tipo_expo} - ${EXPORT_TYPES[result.payload.Tipo_expo]}`;
25
+ }
26
+ function formatIncoterm(result) {
27
+ const { Incoterms: code, Incoterms_Ds: description } = result.payload;
28
+ if (!code) {
29
+ return 'No informado';
30
+ }
31
+ // La tabla de WSFEX trae como descripcion el mismo codigo ("FOB"): no se repite.
32
+ return description && description.trim().toUpperCase() !== code.trim().toUpperCase()
33
+ ? `${code} - ${description}`
34
+ : code;
35
+ }
36
+ /** La E casi siempre va en moneda extranjera: el importe lleva su codigo, no el `$` de los pesos. */
37
+ function formatAmount(result, value) {
38
+ const currency = result.payload.Moneda_Id;
39
+ const label = formatMoneyLabel(value);
40
+ return currency === 'PES' ? label : `${label.replace(/\$$/, '')} ${currency}`;
41
+ }
42
+ function formatLanguage(result) {
43
+ const { Idioma_cbte: id } = result.payload;
44
+ return result.display.languageName ? `${id} - ${result.display.languageName}` : String(id);
45
+ }
46
+ function formatCurrency(result) {
47
+ const { CanMisMonExt: sameCurrency, Moneda_Id: currency, Moneda_ctz: rate } = result.payload;
48
+ const label = currency === 'PES' ? `${currency} (pesos)` : `${currency}, cotización ${rate}`;
49
+ return sameCurrency === 'S' ? `${label} (el pago se cancela en la misma moneda)` : label;
50
+ }
51
+ function formatUnit(result, unitCode) {
52
+ return result.display.unitNames[unitCode] ?? String(unitCode);
53
+ }
54
+ /** Un renglon por item, con la cantidad y la unidad como etiqueta: es lo que WSFEX autoriza. */
55
+ function formatItemsTable(result) {
56
+ const items = result.payload.Items.Item;
57
+ if (items.length === 0) {
58
+ return '';
59
+ }
60
+ const rows = items.map((item) => [
61
+ `${item.Pro_qty} x ${item.Pro_ds} (${formatUnit(result, item.Pro_umed)})`,
62
+ formatAmount(result, item.Pro_total_item),
63
+ ]);
64
+ const labelWidth = Math.max(...rows.map(([label]) => label.length), 0);
65
+ return renderTable(rows, { labelWidth }).trimEnd();
66
+ }
67
+ function formatPayloadRows(result) {
68
+ const { payload } = result;
69
+ const rows = [
70
+ ['Cliente', payload.Cliente],
71
+ ['CUIT del país del cliente', String(payload.Cuit_pais_cliente)],
72
+ ['Domicilio del cliente', payload.Domicilio_cliente],
73
+ ['País de destino', formatCountry(result)],
74
+ ['Tipo de exportación', formatExportType(result)],
75
+ ['Actividad', payload.Actividades.Actividad.map((activity) => activity.Id).join(', ')],
76
+ ['Incoterm', formatIncoterm(result)],
77
+ ['Idioma', formatLanguage(result)],
78
+ ['Moneda', formatCurrency(result)],
79
+ ['Forma de pago', payload.Forma_pago],
80
+ ['Punto de venta', formatNumericLabel(payload.Punto_vta)],
81
+ ['Número', formatNumericLabel(payload.Cbte_nro)],
82
+ ['Fecha del comprobante', formatDateLabel(payload.Fecha_cbte)],
83
+ ['Fecha de pago', formatDateLabel(payload.Fecha_pago)],
84
+ ['Importe total', formatAmount(result, payload.Imp_total)],
85
+ ];
86
+ if (payload.Id_impositivo) {
87
+ rows.splice(3, 0, ['ID impositivo del cliente', payload.Id_impositivo]);
88
+ }
89
+ const permits = payload.Permisos?.Permiso ?? [];
90
+ if (permits.length > 0) {
91
+ rows.push(['Permisos de embarque', permits.map((permit) => permit.Id_permiso).join(', ')]);
92
+ }
93
+ if (payload.Obs) {
94
+ rows.push(['Observaciones', payload.Obs]);
95
+ }
96
+ if (payload.Obs_comerciales) {
97
+ rows.push(['Observaciones comerciales', payload.Obs_comerciales]);
98
+ }
99
+ return rows;
100
+ }
101
+ export function formatExportPayloadTable(result) {
102
+ const rows = formatPayloadRows(result);
103
+ return renderTable(rows, { labelWidth: resolveKeyValueLabelWidth('ticket', rows) }).trimEnd();
104
+ }
105
+ export function formatExportPayloadPreview(result) {
106
+ const content = [formatExportPayloadTable(result)];
107
+ const items = formatItemsTable(result);
108
+ if (items) {
109
+ content.push(items);
110
+ }
111
+ const footer = result.dryRun ? toneText('SIN EMITIR', 'warning') : undefined;
112
+ return keyValuePanel(result.voucherKind.displayName, content, footer, 'ticket', undefined, 'ticket');
113
+ }
114
+ export function formatExportResultPanel(result, status) {
115
+ const summaryRows = [
116
+ ['CAE', result.response.cae ?? 'N/D'],
117
+ ['Vencimiento CAE', formatDateLabel(result.response.caeVencimiento ?? undefined)],
118
+ ['Punto de venta', result.payload.Punto_vta],
119
+ ['Número', result.payload.Cbte_nro],
120
+ ['Importe total', formatAmount(result, result.payload.Imp_total)],
121
+ ];
122
+ const countRows = [
123
+ ['Observaciones', result.response.observaciones.length],
124
+ ['Eventos', result.response.events.length],
125
+ ['Errores', result.response.errors.length],
126
+ ];
127
+ const labelWidth = resolveKeyValueLabelWidth('ticket', [...summaryRows, ...countRows]);
128
+ const rows = [
129
+ ...renderKeyValueRows(summaryRows, { labelWidth }),
130
+ '',
131
+ ...renderKeyValueRows(countRows, { labelWidth }),
132
+ ];
133
+ return statusPanel(result.voucherKind.displayName, rows, toneText(status.label, status.tone), 'ticket', status.tone, 'ticket');
134
+ }
135
+ function formatObservationList(observaciones) {
136
+ return observaciones.map((item, index) => `${index + 1}. ${item}`).join('\n');
137
+ }
138
+ function formatWarningsPanel(result) {
139
+ const warnings = result.warnings ?? [];
140
+ if (warnings.length === 0) {
141
+ return [];
142
+ }
143
+ return [
144
+ contentPanel('Avisos', warnings.map((item) => `• ${item}`).join('\n'), 'wide', 'warning', 'left', 'attention'),
145
+ ];
146
+ }
147
+ export function formatExportResultAsText(result, options = {}) {
148
+ const environmentLines = [
149
+ ...(options.previewShown ? [] : formatEnvironmentBanner(options.environment ?? result.environment)),
150
+ ...(options.previewShown ? [] : formatWarningsPanel(result)),
151
+ ];
152
+ if (result.dryRun) {
153
+ return [...environmentLines, formatExportPayloadPreview(result)].join('\n\n');
154
+ }
155
+ const lines = [...environmentLines];
156
+ if (!options.previewShown) {
157
+ lines.push(formatExportPayloadPreview(result));
158
+ }
159
+ lines.push(formatExportResultPanel(result, formatExportStatusBadge(result)));
160
+ if (result.response.observaciones.length > 0) {
161
+ lines.push(contentPanel('Observaciones', formatObservationList(result.response.observaciones), 'wide', 'warning', 'left', 'attention'));
162
+ }
163
+ if (result.response.events.length > 0) {
164
+ lines.push(contentPanel('Eventos', renderObject(result.response.events), 'wide', 'subtle', 'left', 'data'));
165
+ }
166
+ if (result.response.errors.length > 0) {
167
+ lines.push(contentPanel('Errores', renderObject(result.response.errors), 'wide', 'danger', 'left', 'error'));
168
+ }
169
+ if (result.response.suggestions.length > 0) {
170
+ lines.push(contentPanel('Sugerencias', result.response.suggestions.map((item) => `• ${item}`).join('\n'), 'wide', 'warning', 'left', 'tip'));
171
+ }
172
+ // `--bruto` agrega la respuesta cruda al final; el resumen se muestra igual.
173
+ if (options.raw) {
174
+ lines.push(contentPanel('Respuesta bruta', renderObject(formatRawExportResponse(result)), 'wide', 'subtle', 'left', 'data'));
175
+ }
176
+ return lines.join('\n\n');
177
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WSFEX solo emite comprobantes de exportacion, asi que la letra es siempre E y el tipo de comprobante
3
+ * 19 (Factura E). Notas de credito y debito E quedan para mas adelante.
4
+ */
5
+ export const EXPORT_VOUCHER_KIND = {
6
+ arcaType: 19,
7
+ displayName: 'Factura de exportación E',
8
+ family: 'factura',
9
+ letter: 'e',
10
+ shortcut: 'fe',
11
+ };
12
+ /** Tabla FEXGetPARAM_Tipo_Expo. */
13
+ export const EXPORT_TYPES = {
14
+ 1: 'Exportación definitiva de bienes',
15
+ 2: 'Servicios',
16
+ 4: 'Otros',
17
+ };
18
+ export const EXPORT_TYPE_VALUES = [1, 2, 4];
19
+ /**
20
+ * Los tipos 2 (servicios) y 4 (otros) no llevan permisos de embarque: ARCA exige `Permiso_existente`
21
+ * vacio en esos comprobantes (error 1550).
22
+ */
23
+ export const EXPORT_TYPES_WITHOUT_PERMITS = [2, 4];
24
+ /**
25
+ * Tipo de exportacion por defecto: la exportacion de servicios no lleva permisos de embarque ni bienes
26
+ * fisicos, asi que es la que menos datos pide. Los bienes van con `--tipo-expo 1`.
27
+ */
28
+ export const DEFAULT_EXPORT_TYPE = 2;
29
+ /** Moneda por defecto de la factura de exportacion: en WSFEX el dolar es `DOL`. */
30
+ export const DEFAULT_EXPORT_CURRENCY_CODE = 'DOL';
31
+ /** Codigo de unidad de medida de ARCA que se usa cuando el item no indica otra. 7 = Unidad. */
32
+ export const DEFAULT_EXPORT_UNIT_CODE = 7;
33
+ /** Idioma por defecto del comprobante. 1 = Espanol. */
34
+ export const DEFAULT_EXPORT_LANGUAGE = 1;
35
+ /** Tope de numeracion de ARCA. */
36
+ export const MAX_EXPORT_VOUCHER_NUMBER = 99_999_999;
@@ -19,15 +19,14 @@ export function evaluateFceObligation(obligation, voucherKind, amountInPesos) {
19
19
  const fceShortcut = `fce${voucherKind.letter}`;
20
20
  if (voucherKind.family === 'factura' && requiresFce) {
21
21
  return [
22
- `El receptor esta obligado a recibir FCE desde ${formatMoney(obligation.minimumAmount)} y este monto lo supera. Corresponde emitir ${fceShortcut} en lugar de ${regularShortcut}.`,
22
+ `El receptor está obligado a recibir FCE desde ${formatMoney(obligation.minimumAmount)} y este monto lo supera. Corresponde emitir ${fceShortcut} en lugar de ${regularShortcut}.`,
23
23
  ];
24
24
  }
25
25
  if (voucherKind.family === 'factura-credito-electronica' && !requiresFce) {
26
26
  const reason = obligation.obligated
27
- ? `el monto es menor al minimo del regimen (${formatMoney(obligation.minimumAmount)})`
28
- : 'el receptor no esta obligado a recibir FCE';
27
+ ? `el monto es menor al mínimo del régimen (${formatMoney(obligation.minimumAmount)})`
28
+ : 'el receptor no está obligado a recibir FCE';
29
29
  return [`Para este comprobante ${reason}. Corresponde emitir ${regularShortcut} en lugar de ${fceShortcut}.`];
30
30
  }
31
31
  return [];
32
32
  }
33
- //# sourceMappingURL=fce-obligation.js.map
@@ -22,11 +22,10 @@ export function formatFceObligationAsText(report) {
22
22
  ['CUIT', String(report.cuit)],
23
23
  ['Fecha consultada', formatArcaDate(report.issueDate)],
24
24
  ['Obligado a recibir FCE', report.obligation.obligated ? 'si' : 'no'],
25
- ['Monto minimo', MONEY_FORMATTER.format(report.obligation.minimumAmount)],
25
+ ['Monto mínimo', MONEY_FORMATTER.format(report.obligation.minimumAmount)],
26
26
  ];
27
27
  const footer = report.obligation.obligated
28
28
  ? `Desde ese monto corresponde emitir FCE (fcea, fceb o fcec). Debajo, factura comun.`
29
29
  : 'Corresponde emitir factura comun (fa, fb o fc).';
30
- return keyValuePanel('Regimen FCE MiPyMEs', renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('standard', rows) }), footer, 'standard', undefined, 'sheet');
30
+ return keyValuePanel('Régimen FCE MiPyMEs', renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('standard', rows) }), footer, 'standard', undefined, 'sheet');
31
31
  }
32
- //# sourceMappingURL=fce-obligation.presenter.js.map
@@ -9,4 +9,3 @@ export function parseExchangeRateInput(raw) {
9
9
  const result = parseArgentineAmount(raw, { maxDecimals: EXCHANGE_RATE_DECIMALS });
10
10
  return result.ok ? result.value : undefined;
11
11
  }
12
- //# sourceMappingURL=amount-input.js.map
@@ -2,6 +2,7 @@ import { listAllowedIvaConditions } from '../billing/billing.iva-receptor.js';
2
2
  import { formatIvaConditionLabel } from '../billing/billing.labels.js';
3
3
  import { resolveBillingIvaConditionCode } from '../billing/billing.mappers.js';
4
4
  import { VOUCHER_KIND_MAP } from '../billing/voucher-kind-map.js';
5
+ import { EXPORT_VOUCHER_KIND } from '../export/export.types.js';
5
6
  const INVOICE_DESCRIPTIONS = {
6
7
  a: 'Entre responsables inscriptos, o de RI a monotributista',
7
8
  b: 'De responsable inscripto a consumidor final, exento u otros',
@@ -12,11 +13,19 @@ export function invoiceKindChoices() {
12
13
  return INVOICE_SHORTCUTS.map((shortcut) => {
13
14
  const definition = VOUCHER_KIND_MAP[shortcut];
14
15
  const description = definition.isElectronicCredit
15
- ? 'Factura de Credito Electronica MiPyMEs, para grandes empresas'
16
+ ? 'Factura de Crédito Electrónica MiPyMEs, para grandes empresas'
16
17
  : INVOICE_DESCRIPTIONS[definition.letter];
17
18
  return { description, name: `${definition.displayName} (${shortcut})`, value: definition };
18
19
  });
19
20
  }
21
+ /** La factura E va por WSFEX y tiene su propio asistente, pero se elige en el mismo selector que A, B y C. */
22
+ export function exportInvoiceChoice() {
23
+ return {
24
+ description: 'A un cliente del exterior: servicios o bienes',
25
+ name: `${EXPORT_VOUCHER_KIND.displayName} (${EXPORT_VOUCHER_KIND.shortcut})`,
26
+ value: EXPORT_VOUCHER_KIND,
27
+ };
28
+ }
20
29
  export function noteKindChoices(kind, invoice) {
21
30
  const prefix = kind === 'credito' ? 'nc' : 'nd';
22
31
  const shortcut = `${prefix}${invoice.isElectronicCredit ? 'e' : ''}${invoice.letter}`;
@@ -53,4 +62,3 @@ export function ivaRateChoices() {
53
62
  value: rate,
54
63
  }));
55
64
  }
56
- //# sourceMappingURL=choices.js.map
@@ -36,6 +36,15 @@ const FIELD_DEFINITIONS = [
36
36
  path: true,
37
37
  read: (c) => c.key.produccion,
38
38
  },
39
+ { key: 'exportacion.cert.testing', path: true, read: (c) => c.exportacion?.cert.testing },
40
+ { key: 'exportacion.key.testing', path: true, read: (c) => c.exportacion?.key.testing },
41
+ { key: 'exportacion.cert.produccion', path: true, read: (c) => c.exportacion?.cert.produccion },
42
+ { key: 'exportacion.key.produccion', path: true, read: (c) => c.exportacion?.key.produccion },
43
+ {
44
+ hint: 'código de la tabla de WSFEX, por ejemplo 620100',
45
+ key: 'exportacion.actividad',
46
+ read: (c) => c.exportacion?.actividad?.toString(),
47
+ },
39
48
  {
40
49
  hint: 'numero',
41
50
  key: 'puntoVenta',
@@ -88,7 +97,7 @@ const FIELD_DEFINITIONS = [
88
97
  key: 'emisor.inicioActividades',
89
98
  read: (c) => date(c.emisor.inicioActividades),
90
99
  },
91
- { key: 'emisor.iibb', read: (c) => c.emisor.iibb },
100
+ { hint: 'número, o "Exento" si lo estás', key: 'emisor.iibb', read: (c) => c.emisor.iibb },
92
101
  {
93
102
  choices: arcliDefaultIvaConditionSchema.options,
94
103
  key: 'emisor.condicionIva',
@@ -96,7 +105,7 @@ const FIELD_DEFINITIONS = [
96
105
  },
97
106
  { key: 'emisor.logo', path: true, read: (c) => c.emisor.logo },
98
107
  {
99
- hint: 'codigo de moneda, por ejemplo PES o USD',
108
+ hint: 'código de moneda, por ejemplo PES o USD',
100
109
  key: 'moneda',
101
110
  read: (c) => c.monedaPorDefecto,
102
111
  },
@@ -131,4 +140,3 @@ export const REQUIRED_SETUP_KEYS = ['cuit', 'cert.testing', 'key.testing', 'punt
131
140
  export function listMissingSetupKeys(config) {
132
141
  return REQUIRED_SETUP_KEYS.filter((key) => !getConfigField(key).read(config));
133
142
  }
134
- //# sourceMappingURL=config-fields.js.map
@@ -1,5 +1,6 @@
1
1
  import { formatArgentineAmountInput } from '../../lib/numbers/argentine-amount.js';
2
2
  import { isForeignCurrency } from '../billing/billing.currency.js';
3
+ import { resolveBillingCurrencyCode } from '../billing/billing.mappers.js';
3
4
  const CONCEPT_FLAGS = {
4
5
  productos: '--cp',
5
6
  'productos-servicios': '--csp',
@@ -64,6 +65,9 @@ export function buildEquivalentCommand(input, options) {
64
65
  parts.push('--cm', formatArgentineAmountInput(input.exchangeRate));
65
66
  }
66
67
  }
68
+ else if (options.defaultCurrency && resolveBillingCurrencyCode(options.defaultCurrency) !== 'PES') {
69
+ parts.push('--moneda', 'ARS');
70
+ }
67
71
  if (input.ivaRate)
68
72
  parts.push('--alicuota', input.ivaRate);
69
73
  for (const { amount, rate } of input.ivaRateAmounts ?? []) {
@@ -93,4 +97,3 @@ export function buildEquivalentCommand(input, options) {
93
97
  parts.push('--emitir');
94
98
  return parts.join(' ');
95
99
  }
96
- //# sourceMappingURL=equivalent-command.js.map