arcli 1.1.0 → 1.3.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 (190) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +9 -3
  3. package/dist/cli/commands/billing.command.interactive-preview.d.ts +1 -0
  4. package/dist/cli/commands/billing.command.interactive-preview.js +5 -1
  5. package/dist/cli/commands/billing.command.interactive-preview.js.map +1 -1
  6. package/dist/cli/commands/billing.command.options.js +17 -1
  7. package/dist/cli/commands/billing.command.options.js.map +1 -1
  8. package/dist/cli/commands/billing.command.parser.d.ts +3 -0
  9. package/dist/cli/commands/billing.command.parser.js +36 -2
  10. package/dist/cli/commands/billing.command.parser.js.map +1 -1
  11. package/dist/cli/commands/billing.command.shared.js +26 -5
  12. package/dist/cli/commands/billing.command.shared.js.map +1 -1
  13. package/dist/cli/commands/config.command.d.ts +5 -0
  14. package/dist/cli/commands/config.command.js +3 -3
  15. package/dist/cli/commands/config.command.js.map +1 -1
  16. package/dist/cli/commands/fce-obligation.command.d.ts +2 -0
  17. package/dist/cli/commands/fce-obligation.command.js +51 -0
  18. package/dist/cli/commands/fce-obligation.command.js.map +1 -0
  19. package/dist/cli/commands/interactive.command.d.ts +3 -0
  20. package/dist/cli/commands/interactive.command.js +22 -0
  21. package/dist/cli/commands/interactive.command.js.map +1 -0
  22. package/dist/cli/commands/storybook.command.js +3 -2
  23. package/dist/cli/commands/storybook.command.js.map +1 -1
  24. package/dist/cli/help.d.ts +1 -0
  25. package/dist/cli/help.js +65 -3
  26. package/dist/cli/help.js.map +1 -1
  27. package/dist/cli/index.js +3 -1
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/interactive/history.flow.d.ts +2 -0
  30. package/dist/cli/interactive/history.flow.js +31 -0
  31. package/dist/cli/interactive/history.flow.js.map +1 -0
  32. package/dist/cli/interactive/interactive-mode.d.ts +3 -0
  33. package/dist/cli/interactive/interactive-mode.js +92 -0
  34. package/dist/cli/interactive/interactive-mode.js.map +1 -0
  35. package/dist/cli/interactive/invoice.flow.d.ts +2 -0
  36. package/dist/cli/interactive/invoice.flow.js +54 -0
  37. package/dist/cli/interactive/invoice.flow.js.map +1 -0
  38. package/dist/cli/interactive/note.flow.d.ts +2 -0
  39. package/dist/cli/interactive/note.flow.js +99 -0
  40. package/dist/cli/interactive/note.flow.js.map +1 -0
  41. package/dist/cli/interactive/prompts.d.ts +13 -0
  42. package/dist/cli/interactive/prompts.js +24 -0
  43. package/dist/cli/interactive/prompts.js.map +1 -0
  44. package/dist/cli/interactive/session.d.ts +22 -0
  45. package/dist/cli/interactive/session.js +86 -0
  46. package/dist/cli/interactive/session.js.map +1 -0
  47. package/dist/cli/interactive/validators.d.ts +5 -0
  48. package/dist/cli/interactive/validators.js +17 -0
  49. package/dist/cli/interactive/validators.js.map +1 -0
  50. package/dist/cli/interactive/voucher-format.d.ts +4 -0
  51. package/dist/cli/interactive/voucher-format.js +28 -0
  52. package/dist/cli/interactive/voucher-format.js.map +1 -0
  53. package/dist/cli/program.js +4 -0
  54. package/dist/cli/program.js.map +1 -1
  55. package/dist/cli/spinner.d.ts +8 -0
  56. package/dist/cli/spinner.js +14 -0
  57. package/dist/cli/spinner.js.map +1 -0
  58. package/dist/cli/version.d.ts +1 -1
  59. package/dist/cli/version.js +1 -1
  60. package/dist/lib/dates/arca-date.d.ts +4 -0
  61. package/dist/lib/dates/arca-date.js +18 -1
  62. package/dist/lib/dates/arca-date.js.map +1 -1
  63. package/dist/modules/billing/billing.amounts.d.ts +12 -2
  64. package/dist/modules/billing/billing.amounts.js +52 -10
  65. package/dist/modules/billing/billing.amounts.js.map +1 -1
  66. package/dist/modules/billing/billing.associated-period.d.ts +8 -0
  67. package/dist/modules/billing/billing.associated-period.js +40 -0
  68. package/dist/modules/billing/billing.associated-period.js.map +1 -0
  69. package/dist/modules/billing/billing.associated-vouchers.d.ts +2 -0
  70. package/dist/modules/billing/billing.associated-vouchers.js +29 -7
  71. package/dist/modules/billing/billing.associated-vouchers.js.map +1 -1
  72. package/dist/modules/billing/billing.currency.d.ts +18 -0
  73. package/dist/modules/billing/billing.currency.js +53 -0
  74. package/dist/modules/billing/billing.currency.js.map +1 -0
  75. package/dist/modules/billing/billing.date-range.d.ts +5 -4
  76. package/dist/modules/billing/billing.date-range.js +34 -27
  77. package/dist/modules/billing/billing.date-range.js.map +1 -1
  78. package/dist/modules/billing/billing.display.js +30 -4
  79. package/dist/modules/billing/billing.display.js.map +1 -1
  80. package/dist/modules/billing/billing.fce.d.ts +21 -0
  81. package/dist/modules/billing/billing.fce.js +59 -0
  82. package/dist/modules/billing/billing.fce.js.map +1 -0
  83. package/dist/modules/billing/billing.iva-receptor.d.ts +8 -0
  84. package/dist/modules/billing/billing.iva-receptor.js +61 -0
  85. package/dist/modules/billing/billing.iva-receptor.js.map +1 -0
  86. package/dist/modules/billing/billing.labels.js +1 -1
  87. package/dist/modules/billing/billing.mappers.js +2 -1
  88. package/dist/modules/billing/billing.mappers.js.map +1 -1
  89. package/dist/modules/billing/billing.schemas.d.ts +40 -7
  90. package/dist/modules/billing/billing.schemas.js +38 -1
  91. package/dist/modules/billing/billing.schemas.js.map +1 -1
  92. package/dist/modules/billing/billing.serialize.js +2 -0
  93. package/dist/modules/billing/billing.serialize.js.map +1 -1
  94. package/dist/modules/billing/billing.service.d.ts +12 -0
  95. package/dist/modules/billing/billing.service.js +68 -10
  96. package/dist/modules/billing/billing.service.js.map +1 -1
  97. package/dist/modules/billing/billing.text.js +20 -8
  98. package/dist/modules/billing/billing.text.js.map +1 -1
  99. package/dist/modules/billing/billing.types.internal.d.ts +2 -0
  100. package/dist/modules/billing/billing.validation.d.ts +4 -2
  101. package/dist/modules/billing/billing.validation.js +36 -1
  102. package/dist/modules/billing/billing.validation.js.map +1 -1
  103. package/dist/modules/config/config-value-parser.d.ts +1 -1
  104. package/dist/modules/config/config-value-parser.js +29 -1
  105. package/dist/modules/config/config-value-parser.js.map +1 -1
  106. package/dist/modules/config/config.presenter.js +10 -2
  107. package/dist/modules/config/config.presenter.js.map +1 -1
  108. package/dist/modules/config/config.schemas.d.ts +26 -3
  109. package/dist/modules/config/config.schemas.js +19 -0
  110. package/dist/modules/config/config.schemas.js.map +1 -1
  111. package/dist/modules/config/config.service.js +4 -0
  112. package/dist/modules/config/config.service.js.map +1 -1
  113. package/dist/modules/examples/examples.d.ts +1 -1
  114. package/dist/modules/examples/examples.js +62 -38
  115. package/dist/modules/examples/examples.js.map +1 -1
  116. package/dist/modules/fce/fce-obligation.d.ts +20 -0
  117. package/dist/modules/fce/fce-obligation.js +33 -0
  118. package/dist/modules/fce/fce-obligation.js.map +1 -0
  119. package/dist/modules/fce/fce-obligation.presenter.d.ts +9 -0
  120. package/dist/modules/fce/fce-obligation.presenter.js +32 -0
  121. package/dist/modules/fce/fce-obligation.presenter.js.map +1 -0
  122. package/dist/modules/interactive/amount-input.d.ts +6 -0
  123. package/dist/modules/interactive/amount-input.js +29 -0
  124. package/dist/modules/interactive/amount-input.js.map +1 -0
  125. package/dist/modules/interactive/choices.d.ts +13 -0
  126. package/dist/modules/interactive/choices.js +56 -0
  127. package/dist/modules/interactive/choices.js.map +1 -0
  128. package/dist/modules/interactive/equivalent-command.d.ts +8 -0
  129. package/dist/modules/interactive/equivalent-command.js +85 -0
  130. package/dist/modules/interactive/equivalent-command.js.map +1 -0
  131. package/dist/modules/interactive/voucher-history.d.ts +25 -0
  132. package/dist/modules/interactive/voucher-history.js +42 -0
  133. package/dist/modules/interactive/voucher-history.js.map +1 -0
  134. package/dist/modules/storybook/showcase.d.ts +1 -1
  135. package/dist/modules/storybook/showcase.js +50 -6
  136. package/dist/modules/storybook/showcase.js.map +1 -1
  137. package/dist/modules/update-check/update-check.presenter.js +1 -1
  138. package/dist/modules/update-check/update-check.presenter.js.map +1 -1
  139. package/dist/services/arca/arca-billing.gateway.d.ts +1 -0
  140. package/dist/services/arca/arca-billing.gateway.js +12 -0
  141. package/dist/services/arca/arca-billing.gateway.js.map +1 -1
  142. package/dist/services/arca/arca-fce-obligation.gateway.d.ts +7 -0
  143. package/dist/services/arca/arca-fce-obligation.gateway.js +36 -0
  144. package/dist/services/arca/arca-fce-obligation.gateway.js.map +1 -0
  145. package/dist/services/arca/arca-voucher-history.gateway.d.ts +8 -0
  146. package/dist/services/arca/arca-voucher-history.gateway.js +28 -0
  147. package/dist/services/arca/arca-voucher-history.gateway.js.map +1 -0
  148. package/dist/ui/components/contentPanel.d.ts +2 -2
  149. package/dist/ui/components/contentPanel.js +2 -1
  150. package/dist/ui/components/contentPanel.js.map +1 -1
  151. package/dist/ui/components/errorPanel.js +3 -3
  152. package/dist/ui/components/errorPanel.js.map +1 -1
  153. package/dist/ui/components/index.d.ts +3 -0
  154. package/dist/ui/components/index.js +3 -0
  155. package/dist/ui/components/index.js.map +1 -1
  156. package/dist/ui/components/keyValuePanel.d.ts +2 -2
  157. package/dist/ui/components/keyValuePanel.js +2 -1
  158. package/dist/ui/components/keyValuePanel.js.map +1 -1
  159. package/dist/ui/components/rawPanel.js +1 -1
  160. package/dist/ui/components/rawPanel.js.map +1 -1
  161. package/dist/ui/components/sectionHeading.d.ts +3 -0
  162. package/dist/ui/components/sectionHeading.js +13 -0
  163. package/dist/ui/components/sectionHeading.js.map +1 -0
  164. package/dist/ui/components/statusBar.d.ts +6 -0
  165. package/dist/ui/components/statusBar.js +24 -0
  166. package/dist/ui/components/statusBar.js.map +1 -0
  167. package/dist/ui/components/statusPanel.d.ts +2 -2
  168. package/dist/ui/components/statusPanel.js +2 -1
  169. package/dist/ui/components/statusPanel.js.map +1 -1
  170. package/dist/ui/components/testingBanner.d.ts +2 -0
  171. package/dist/ui/components/testingBanner.js +6 -0
  172. package/dist/ui/components/testingBanner.js.map +1 -0
  173. package/dist/ui/presenters/errors.zod-presenter.js +22 -1
  174. package/dist/ui/presenters/errors.zod-presenter.js.map +1 -1
  175. package/dist/ui/primitives/renderLogo.js +5 -0
  176. package/dist/ui/primitives/renderLogo.js.map +1 -1
  177. package/dist/ui/primitives/renderPanel.d.ts +3 -1
  178. package/dist/ui/primitives/renderPanel.js +68 -21
  179. package/dist/ui/primitives/renderPanel.js.map +1 -1
  180. package/dist/ui/primitives/terminalWidth.d.ts +4 -0
  181. package/dist/ui/primitives/terminalWidth.js +11 -0
  182. package/dist/ui/primitives/terminalWidth.js.map +1 -0
  183. package/dist/ui/primitives/text.d.ts +5 -0
  184. package/dist/ui/primitives/text.js +91 -29
  185. package/dist/ui/primitives/text.js.map +1 -1
  186. package/dist/ui/theme/theme.d.ts +45 -4
  187. package/dist/ui/theme/theme.js +183 -5
  188. package/dist/ui/theme/theme.js.map +1 -1
  189. package/llms.txt +17 -5
  190. package/package.json +17 -14
@@ -0,0 +1,40 @@
1
+ import { formatArcaDateAsArgentineDate, parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
2
+ import { InputValidationError } from '../../lib/errors/app-error.js';
3
+ import { formatVoucherLabel } from './billing.mappers.js';
4
+ const MINIMUM_PERIOD_DATE = '20060101';
5
+ /**
6
+ * PeriodoAsoc es la alternativa a CbtesAsoc para NC/ND que ajustan un periodo y no una factura puntual (10197).
7
+ * No aplica a facturas (10198) ni a comprobantes FCE (10196).
8
+ */
9
+ export function resolveAssociatedPeriod(input, voucherKind, billingDate) {
10
+ const period = input.associatedPeriod;
11
+ if (!period) {
12
+ return undefined;
13
+ }
14
+ const label = formatVoucherLabel(voucherKind);
15
+ if (!voucherKind.requiresAssociatedVoucher) {
16
+ throw new InputValidationError(`La ${label} no usa periodo asociado: solo aplica a notas de credito o debito.`);
17
+ }
18
+ if (voucherKind.isElectronicCredit) {
19
+ throw new InputValidationError(`La ${label} no admite periodo asociado: ARCA solo lo acepta en notas comunes. Use el comprobante asociado (--ac).`);
20
+ }
21
+ if (input.associatedVoucher) {
22
+ throw new InputValidationError('Use un comprobante asociado (--ac/--at) o un periodo asociado (--periodo-desde/--periodo-hasta), pero no ambos.');
23
+ }
24
+ if (!period.desde || !period.hasta) {
25
+ throw new InputValidationError('El periodo asociado requiere ambas fechas: --periodo-desde y --periodo-hasta.');
26
+ }
27
+ const FchDesde = parseArgentineDateInputAsArcaDate(period.desde);
28
+ const FchHasta = parseArgentineDateInputAsArcaDate(period.hasta);
29
+ if (FchDesde < MINIMUM_PERIOD_DATE) {
30
+ throw new InputValidationError('El periodo asociado tiene que ser posterior al 01/01/2006.');
31
+ }
32
+ if (FchDesde > FchHasta) {
33
+ throw new InputValidationError('En el periodo asociado, --periodo-desde no puede ser posterior a --periodo-hasta.');
34
+ }
35
+ if (FchHasta > billingDate) {
36
+ throw new InputValidationError(`El periodo asociado no puede terminar despues de la fecha de la ${label} (${formatArcaDateAsArgentineDate(billingDate)}).`);
37
+ }
38
+ return { FchDesde, FchHasta };
39
+ }
40
+ //# sourceMappingURL=billing.associated-period.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.associated-period.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.associated-period.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAA0E,EAC1E,WAAkC,EAClC,WAAmB;IAEnB,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;QAC3C,MAAM,IAAI,oBAAoB,CAAC,MAAM,KAAK,oEAAoE,CAAC,CAAC;IAClH,CAAC;IAED,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,oBAAoB,CAC5B,MAAM,KAAK,wGAAwG,CACpH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAC5B,iHAAiH,CAClH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,oBAAoB,CAAC,+EAA+E,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,QAAQ,GAAG,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjE,IAAI,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACnC,MAAM,IAAI,oBAAoB,CAAC,4DAA4D,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAAC,mFAAmF,CAAC,CAAC;IACtH,CAAC;IAED,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,oBAAoB,CAC5B,mEAAmE,KAAK,KAAK,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAC5H,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
@@ -2,6 +2,8 @@ import type { ICbtesAsoc } from '@arcasdk/core/lib/domain/types/voucher.types';
2
2
  import type { BillingCommandInput } from './billing.schemas';
3
3
  import type { VoucherKindDefinition } from './billing.types';
4
4
  interface ResolveAssociatedVoucherOptions {
5
+ readonly billingDate: string;
6
+ readonly emitterCuit: number;
5
7
  readonly input: BillingCommandInput;
6
8
  readonly requireVoucherKind: (shortcut: string) => VoucherKindDefinition;
7
9
  readonly voucherKind: VoucherKindDefinition;
@@ -1,36 +1,58 @@
1
+ import { formatArcaDateAsArgentineDate, parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
1
2
  import { InputValidationError } from '../../lib/errors/app-error.js';
2
3
  import { formatVoucherLabel } from './billing.mappers.js';
3
4
  export function resolveAssociatedVouchers(options) {
4
- const { input, requireVoucherKind, voucherKind } = options;
5
+ const { billingDate, emitterCuit, input, requireVoucherKind, voucherKind } = options;
5
6
  if (!voucherKind.requiresAssociatedVoucher) {
6
7
  if (input.associatedVoucher) {
7
8
  throw new InputValidationError(`El comprobante ${formatVoucherLabel(voucherKind)} no usa comprobante asociado.`);
8
9
  }
9
10
  return undefined;
10
11
  }
12
+ // Con periodo asociado la nota no lleva CbtesAsoc; lo valida resolveAssociatedPeriod.
13
+ if (input.associatedPeriod && !input.associatedVoucher) {
14
+ return undefined;
15
+ }
11
16
  const associatedVoucher = input.associatedVoucher;
17
+ // En NC/ND FCE el asociado siempre es del propio emisor (10155), asi que el CUIT puede omitirse.
18
+ const associatedCuit = associatedVoucher?.cuit ?? (voucherKind.isElectronicCredit ? String(emitterCuit) : undefined);
12
19
  const associatedVoucherType = associatedVoucher?.tipo ?? resolveAssociatedVoucherType(associatedVoucher?.shortcut, requireVoucherKind);
13
20
  const associatedVoucherKind = associatedVoucher?.shortcut
14
21
  ? requireVoucherKind(associatedVoucher.shortcut)
15
22
  : undefined;
16
- if (!associatedVoucher?.numero ||
17
- !associatedVoucher.puntoVenta ||
18
- !associatedVoucherType ||
19
- !associatedVoucher.cuit) {
20
- throw new InputValidationError(`El comprobante ${formatVoucherLabel(voucherKind)} requiere comprobante asociado. Use --ac o --at, junto con --apv o --asociado-punto-venta, --ar y --acuit.`);
23
+ if (!associatedVoucher?.numero || !associatedVoucher.puntoVenta || !associatedVoucherType || !associatedCuit) {
24
+ throw new InputValidationError(`El comprobante ${formatVoucherLabel(voucherKind)} requiere comprobante asociado. Use --ac o --at, junto con --apv o --asociado-punto-venta, --ar y --acuit${voucherKind.isElectronicCredit ? '' : ', o un periodo con --periodo-desde y --periodo-hasta'}.`);
21
25
  }
22
26
  if (associatedVoucherKind) {
23
27
  validateAssociatedVoucherKind(associatedVoucherKind, voucherKind);
24
28
  }
29
+ if (voucherKind.isElectronicCredit && associatedCuit !== String(emitterCuit)) {
30
+ throw new InputValidationError(`En la ${formatVoucherLabel(voucherKind)} el comprobante asociado tiene que ser del CUIT emisor (${emitterCuit}). Quite --acuit o use ese CUIT.`);
31
+ }
32
+ const associatedDate = resolveAssociatedVoucherDate(associatedVoucher.fecha, billingDate, voucherKind);
25
33
  return [
26
34
  {
27
- Cuit: associatedVoucher.cuit,
35
+ ...(associatedDate ? { CbteFch: associatedDate } : {}),
36
+ Cuit: associatedCuit,
28
37
  Nro: associatedVoucher.numero,
29
38
  PtoVta: associatedVoucher.puntoVenta,
30
39
  Tipo: associatedVoucherType,
31
40
  },
32
41
  ];
33
42
  }
43
+ function resolveAssociatedVoucherDate(rawDate, billingDate, voucherKind) {
44
+ if (!rawDate) {
45
+ if (voucherKind.isElectronicCredit) {
46
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} requiere la fecha del comprobante asociado. Use --afecha <fecha>.`);
47
+ }
48
+ return undefined;
49
+ }
50
+ const associatedDate = parseArgentineDateInputAsArcaDate(rawDate);
51
+ if (associatedDate > billingDate) {
52
+ throw new InputValidationError(`La fecha del comprobante asociado (${formatArcaDateAsArgentineDate(associatedDate)}) no puede ser posterior a la de la ${formatVoucherLabel(voucherKind)} (${formatArcaDateAsArgentineDate(billingDate)}).`);
53
+ }
54
+ return associatedDate;
55
+ }
34
56
  function resolveAssociatedVoucherType(shortcut, requireVoucherKind) {
35
57
  if (!shortcut) {
36
58
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"billing.associated-vouchers.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.associated-vouchers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAUvD,MAAM,UAAU,yBAAyB,CAAC,OAAwC;IAChF,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE3D,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACnH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAClD,MAAM,qBAAqB,GACzB,iBAAiB,EAAE,IAAI,IAAI,4BAA4B,CAAC,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAC3G,MAAM,qBAAqB,GAAG,iBAAiB,EAAE,QAAQ;QACvD,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,IACE,CAAC,iBAAiB,EAAE,MAAM;QAC1B,CAAC,iBAAiB,CAAC,UAAU;QAC7B,CAAC,qBAAqB;QACtB,CAAC,iBAAiB,CAAC,IAAI,EACvB,CAAC;QACD,MAAM,IAAI,oBAAoB,CAC5B,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,4GAA4G,CAC9J,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,EAAE,CAAC;QAC1B,6BAA6B,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL;YACE,IAAI,EAAE,iBAAiB,CAAC,IAAI;YAC5B,GAAG,EAAE,iBAAiB,CAAC,MAAM;YAC7B,MAAM,EAAE,iBAAiB,CAAC,UAAU;YACpC,IAAI,EAAE,qBAAqB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,QAA4B,EAC5B,kBAA+D;IAE/D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AAED,SAAS,6BAA6B,CACpC,qBAA4C,EAC5C,WAAkC;IAElC,IAAI,qBAAqB,CAAC,MAAM,KAAK,SAAS,IAAI,qBAAqB,CAAC,MAAM,KAAK,6BAA6B,EAAE,CAAC;QACjH,MAAM,IAAI,oBAAoB,CAC5B,8BAA8B,kBAAkB,CAAC,WAAW,CAAC,sCAAsC,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,oBAAoB,CAC5B,wDAAwD,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAC3F,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,kBAAkB,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAChF,MAAM,IAAI,oBAAoB,CAC5B,gFAAgF,kBAAkB,CAAC,WAAW,CAAC,GAAG,CACnH,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"billing.associated-vouchers.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.associated-vouchers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAYvD,MAAM,UAAU,yBAAyB,CAAC,OAAwC;IAChF,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAErF,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACnH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAClD,iGAAiG;IACjG,MAAM,cAAc,GAAG,iBAAiB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrH,MAAM,qBAAqB,GACzB,iBAAiB,EAAE,IAAI,IAAI,4BAA4B,CAAC,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAC3G,MAAM,qBAAqB,GAAG,iBAAiB,EAAE,QAAQ;QACvD,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,IAAI,CAAC,qBAAqB,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7G,MAAM,IAAI,oBAAoB,CAC5B,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,4GAA4G,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sDAAsD,GAAG,CAC7P,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,EAAE,CAAC;QAC1B,6BAA6B,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,WAAW,CAAC,kBAAkB,IAAI,cAAc,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,oBAAoB,CAC5B,SAAS,kBAAkB,CAAC,WAAW,CAAC,2DAA2D,WAAW,kCAAkC,CACjJ,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,4BAA4B,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEvG,OAAO;QACL;YACE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,iBAAiB,CAAC,MAAM;YAC7B,MAAM,EAAE,iBAAiB,CAAC,UAAU;YACpC,IAAI,EAAE,qBAAqB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,OAA2B,EAC3B,WAAmB,EACnB,WAAkC;IAElC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnC,MAAM,IAAI,oBAAoB,CAC5B,MAAM,kBAAkB,CAAC,WAAW,CAAC,oEAAoE,CAC1G,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,iCAAiC,CAAC,OAAO,CAAC,CAAC;IAElE,IAAI,cAAc,GAAG,WAAW,EAAE,CAAC;QACjC,MAAM,IAAI,oBAAoB,CAC5B,sCAAsC,6BAA6B,CAAC,cAAc,CAAC,uCAAuC,kBAAkB,CAAC,WAAW,CAAC,KAAK,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAC7M,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,4BAA4B,CACnC,QAA4B,EAC5B,kBAA+D;IAE/D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AAED,SAAS,6BAA6B,CACpC,qBAA4C,EAC5C,WAAkC;IAElC,IAAI,qBAAqB,CAAC,MAAM,KAAK,SAAS,IAAI,qBAAqB,CAAC,MAAM,KAAK,6BAA6B,EAAE,CAAC;QACjH,MAAM,IAAI,oBAAoB,CAC5B,8BAA8B,kBAAkB,CAAC,WAAW,CAAC,sCAAsC,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,oBAAoB,CAC5B,wDAAwD,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAC3F,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,kBAAkB,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAChF,MAAM,IAAI,oBAAoB,CAC5B,gFAAgF,kBAAkB,CAAC,WAAW,CAAC,GAAG,CACnH,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { BillingCommandInput } from './billing.schemas';
2
+ export declare const ARCA_LOCAL_CURRENCY_CODE = "PES";
3
+ export interface BillingCurrencyFields {
4
+ readonly CanMisMonExt?: 'N' | 'S';
5
+ readonly MonCotiz: number;
6
+ readonly MonId: string;
7
+ }
8
+ type CurrencyInput = Pick<BillingCommandInput, 'currencyCode' | 'exchangeRate' | 'sameCurrency'>;
9
+ export declare function isForeignCurrency(input: {
10
+ readonly currencyCode?: string;
11
+ }): boolean;
12
+ /**
13
+ * Con CanMisMonExt = S, ARCA exige la cotizacion oficial exacta (error 10038),
14
+ * asi que el CLI la consulta en lugar de pedirsela al usuario.
15
+ */
16
+ export declare function needsOfficialExchangeRate(input: CurrencyInput): boolean;
17
+ export declare function resolveBillingCurrencyFields(input: CurrencyInput, billingDate: string, today: string): BillingCurrencyFields;
18
+ export {};
@@ -0,0 +1,53 @@
1
+ import { InputValidationError } from '../../lib/errors/app-error.js';
2
+ import { DEFAULT_EXCHANGE_RATE } from './billing.constants.js';
3
+ import { resolveBillingCurrencyCode } from './billing.mappers.js';
4
+ export const ARCA_LOCAL_CURRENCY_CODE = 'PES';
5
+ export function isForeignCurrency(input) {
6
+ return resolveBillingCurrencyCode(input.currencyCode) !== ARCA_LOCAL_CURRENCY_CODE;
7
+ }
8
+ /**
9
+ * Con CanMisMonExt = S, ARCA exige la cotizacion oficial exacta (error 10038),
10
+ * asi que el CLI la consulta en lugar de pedirsela al usuario.
11
+ */
12
+ export function needsOfficialExchangeRate(input) {
13
+ return input.sameCurrency && isForeignCurrency(input) && typeof input.exchangeRate !== 'number';
14
+ }
15
+ export function resolveBillingCurrencyFields(input, billingDate, today) {
16
+ const currencyCode = resolveBillingCurrencyCode(input.currencyCode);
17
+ const inputCurrencyCode = input.currencyCode.trim().toUpperCase();
18
+ if (currencyCode === ARCA_LOCAL_CURRENCY_CODE) {
19
+ if (input.sameCurrency) {
20
+ throw new InputValidationError('--misma-moneda solo aplica a comprobantes en moneda extranjera.');
21
+ }
22
+ if (typeof input.exchangeRate === 'number' && input.exchangeRate !== DEFAULT_EXCHANGE_RATE) {
23
+ throw new InputValidationError('En pesos la cotizacion debe ser 1. Quite --cotizacion-moneda o use --cm 1.');
24
+ }
25
+ // ARCA rechaza CanMisMonExt cuando MonId = PES (error 10241).
26
+ return {
27
+ MonCotiz: DEFAULT_EXCHANGE_RATE,
28
+ MonId: currencyCode,
29
+ };
30
+ }
31
+ if (input.sameCurrency) {
32
+ if (billingDate < today) {
33
+ throw new InputValidationError('Con --misma-moneda la fecha del comprobante no puede ser anterior a hoy: ARCA exige la cotizacion oficial de ese dia y solo se puede consultar la vigente.');
34
+ }
35
+ if (typeof input.exchangeRate !== 'number') {
36
+ throw new InputValidationError(`No se pudo obtener la cotizacion oficial de ${inputCurrencyCode} desde ARCA.`);
37
+ }
38
+ return {
39
+ CanMisMonExt: 'S',
40
+ MonCotiz: input.exchangeRate,
41
+ MonId: currencyCode,
42
+ };
43
+ }
44
+ if (typeof input.exchangeRate !== 'number' || input.exchangeRate === DEFAULT_EXCHANGE_RATE) {
45
+ throw new InputValidationError(`Falta la cotizacion de ${inputCurrencyCode}. Use --cotizacion-moneda o --cm, o --misma-moneda si el pago se hace en ${inputCurrencyCode}.`);
46
+ }
47
+ return {
48
+ CanMisMonExt: 'N',
49
+ MonCotiz: input.exchangeRate,
50
+ MonId: currencyCode,
51
+ };
52
+ }
53
+ //# sourceMappingURL=billing.currency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.currency.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.currency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAG/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAU9C,MAAM,UAAU,iBAAiB,CAAC,KAAyC;IACzE,OAAO,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,wBAAwB,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAoB;IAC5D,OAAO,KAAK,CAAC,YAAY,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAoB,EACpB,WAAmB,EACnB,KAAa;IAEb,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAElE,IAAI,YAAY,KAAK,wBAAwB,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,oBAAoB,CAAC,iEAAiE,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,qBAAqB,EAAE,CAAC;YAC3F,MAAM,IAAI,oBAAoB,CAAC,4EAA4E,CAAC,CAAC;QAC/G,CAAC;QAED,8DAA8D;QAC9D,OAAO;YACL,QAAQ,EAAE,qBAAqB;YAC/B,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC;YACxB,MAAM,IAAI,oBAAoB,CAC5B,4JAA4J,CAC7J,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,oBAAoB,CAAC,+CAA+C,iBAAiB,cAAc,CAAC,CAAC;QACjH,CAAC;QAED,OAAO;YACL,YAAY,EAAE,GAAG;YACjB,QAAQ,EAAE,KAAK,CAAC,YAAY;YAC5B,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,qBAAqB,EAAE,CAAC;QAC3F,MAAM,IAAI,oBAAoB,CAC5B,0BAA0B,iBAAiB,4EAA4E,iBAAiB,GAAG,CAC5I,CAAC;IACJ,CAAC;IAED,OAAO;QACL,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,KAAK,CAAC,YAAY;QAC5B,KAAK,EAAE,YAAY;KACpB,CAAC;AACJ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type { BillingCommandInput } from './billing.schemas';
2
+ import type { VoucherKindDefinition } from './billing.types';
2
3
  export interface BillingDateRange {
3
4
  readonly billingDate: string;
4
- readonly paymentDueDate: string;
5
- readonly serviceEndDate: string;
6
- readonly serviceStartDate: string;
5
+ readonly paymentDueDate?: string;
6
+ readonly serviceEndDate?: string;
7
+ readonly serviceStartDate?: string;
7
8
  }
8
- export declare function resolveBillingDateRange(input: BillingCommandInput): BillingDateRange;
9
+ export declare function resolveBillingDateRange(input: BillingCommandInput, voucherKind: VoucherKindDefinition, today?: string): BillingDateRange;
@@ -1,5 +1,6 @@
1
- import { formatDateAsArcaDate, parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
2
- import { ensureDateOrder, validateConceptDateInputs } from './billing.validation.js';
1
+ import { formatDateAsArcaDate, maxArcaDate, parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
2
+ import { isElectronicCreditInvoice } from './billing.fce.js';
3
+ import { ensureDateOrder, validateBillingDateWindow, validateConceptDateInputs, validatePaymentDueDate, } from './billing.validation.js';
3
4
  function resolvePaymentDateFromDueDay(dueDay) {
4
5
  const referenceDate = new Date();
5
6
  const paymentDate = new Date(referenceDate);
@@ -9,37 +10,43 @@ function resolvePaymentDateFromDueDay(dueDay) {
9
10
  paymentDate.setDate(dueDay);
10
11
  return paymentDate;
11
12
  }
12
- export function resolveBillingDateRange(input) {
13
- validateConceptDateInputs(input);
14
- const billingDate = input.billingDate
15
- ? parseArgentineDateInputAsArcaDate(input.billingDate)
16
- : formatDateAsArcaDate(new Date());
17
- if (input.billingDate) {
18
- const serviceStartDate = input.serviceStartDate
19
- ? parseArgentineDateInputAsArcaDate(input.serviceStartDate)
20
- : billingDate;
21
- const serviceEndDate = input.serviceEndDate ? parseArgentineDateInputAsArcaDate(input.serviceEndDate) : billingDate;
22
- ensureDateOrder(serviceStartDate, serviceEndDate);
23
- return {
24
- billingDate,
25
- paymentDueDate: serviceEndDate,
26
- serviceEndDate,
27
- serviceStartDate,
28
- };
13
+ /**
14
+ * Que fechas lleva el comprobante:
15
+ * - servicios: FchServDesde, FchServHasta y FchVtoPago (10049)
16
+ * - factura FCE: FchVtoPago siempre, aunque sea de productos (10163)
17
+ * - NC/ND FCE: sin FchVtoPago salvo anulacion (10175)
18
+ */
19
+ function shouldSendPaymentDueDate(input, voucherKind) {
20
+ if (voucherKind.isElectronicCredit) {
21
+ return isElectronicCreditInvoice(voucherKind);
29
22
  }
30
- const paymentDate = input.dueDay ? resolvePaymentDateFromDueDay(input.dueDay) : new Date();
23
+ return input.concept !== 'productos';
24
+ }
25
+ function resolveServiceDates(input, billingDate) {
26
+ const defaultServiceEndDate = input.billingDate || !input.dueDay ? billingDate : formatDateAsArcaDate(resolvePaymentDateFromDueDay(input.dueDay));
31
27
  const serviceEndDate = input.serviceEndDate
32
28
  ? parseArgentineDateInputAsArcaDate(input.serviceEndDate)
33
- : formatDateAsArcaDate(paymentDate);
29
+ : defaultServiceEndDate;
34
30
  const serviceStartDate = input.serviceStartDate
35
31
  ? parseArgentineDateInputAsArcaDate(input.serviceStartDate)
36
32
  : serviceEndDate;
37
33
  ensureDateOrder(serviceStartDate, serviceEndDate);
38
- return {
39
- billingDate,
40
- paymentDueDate: serviceEndDate,
41
- serviceEndDate,
42
- serviceStartDate,
43
- };
34
+ return { serviceEndDate, serviceStartDate };
35
+ }
36
+ export function resolveBillingDateRange(input, voucherKind, today = formatDateAsArcaDate(new Date())) {
37
+ validateConceptDateInputs(input, voucherKind);
38
+ const billingDate = input.billingDate ? parseArgentineDateInputAsArcaDate(input.billingDate) : today;
39
+ validateBillingDateWindow(billingDate, today, input.concept, voucherKind);
40
+ const serviceDates = input.concept === 'productos' ? undefined : resolveServiceDates(input, billingDate);
41
+ if (!shouldSendPaymentDueDate(input, voucherKind)) {
42
+ return { billingDate, ...serviceDates };
43
+ }
44
+ // FCE: el vencimiento no puede ser anterior a la fecha del comprobante ni a hoy (10164).
45
+ const minimumPaymentDueDate = isElectronicCreditInvoice(voucherKind) ? maxArcaDate(billingDate, today) : billingDate;
46
+ const paymentDueDate = input.paymentDueDate
47
+ ? parseArgentineDateInputAsArcaDate(input.paymentDueDate)
48
+ : maxArcaDate(serviceDates?.serviceEndDate ?? minimumPaymentDueDate, minimumPaymentDueDate);
49
+ validatePaymentDueDate(paymentDueDate, minimumPaymentDueDate);
50
+ return { billingDate, paymentDueDate, ...serviceDates };
44
51
  }
45
52
  //# sourceMappingURL=billing.date-range.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"billing.date-range.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.date-range.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAGpG,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AASlF,SAAS,4BAA4B,CAAC,MAAc;IAClD,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IAE5C,IAAI,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA0B;IAChE,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;QACnC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,WAAW,CAAC;QACtD,CAAC,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;YAC7C,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAC3D,CAAC,CAAC,WAAW,CAAC;QAChB,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEpH,eAAe,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAElD,OAAO;YACL,WAAW;YACX,cAAc,EAAE,cAAc;YAC9B,cAAc;YACd,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3F,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc;QACzC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,cAAc,CAAC;QACzD,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;QAC7C,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC3D,CAAC,CAAC,cAAc,CAAC;IAEnB,eAAe,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAElD,OAAO;QACL,WAAW;QACX,cAAc,EAAE,cAAc;QAC9B,cAAc;QACd,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"billing.date-range.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.date-range.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- import { keyValuePanel, noticePanel, renderKeyValueRows, renderTable, resolveKeyValueLabelWidth, statusPanel, toneText, } from '../../ui/index.js';
1
+ import { keyValuePanel, renderKeyValueRows, renderTable, resolveKeyValueLabelWidth, statusPanel, testingBanner, toneText, } from '../../ui/index.js';
2
+ import { resolveIvaRateLabel } from './billing.amounts.js';
2
3
  import { formatConceptLabel, formatCurrencyLabel, formatDateLabel, formatDecimalLabel, formatDocumentTypeLabel, formatIvaConditionLabel, formatMoneyLabel, formatNumericLabel, formatTaxIdLabel, } from './billing.labels.js';
3
4
  import { getVoucherKindByArcaType } from './voucher-kind-map.js';
4
5
  export function formatEnvironmentBanner(environment) {
5
6
  if (environment !== 'testing') {
6
7
  return [];
7
8
  }
8
- return [noticePanel('Estas utilizando el entorno de TESTING', 'warning')];
9
+ return [testingBanner()];
9
10
  }
10
11
  export function formatStatusBadge(result) {
11
12
  switch (result.response.status) {
@@ -33,6 +34,12 @@ export function formatVoucherSummary(result) {
33
34
  tipoArca: result.voucherKind.arcaType,
34
35
  };
35
36
  }
37
+ const FCE_OPTIONAL_LABELS = {
38
+ '22': 'Anulacion',
39
+ '27': 'Transferencia',
40
+ '2101': 'CBU',
41
+ '2102': 'Alias CBU',
42
+ };
36
43
  function formatFriendlyPayloadRows(result) {
37
44
  const payload = result.payload;
38
45
  const rows = [
@@ -55,8 +62,12 @@ function formatFriendlyPayloadRows(result) {
55
62
  ['Cotizacion', formatDecimalLabel(payload.MonCotiz)],
56
63
  ['Importe neto', formatMoneyLabel(payload.ImpNeto)],
57
64
  ['Importe IVA', formatMoneyLabel(payload.ImpIVA)],
65
+ ...(payload.Iva?.[0]
66
+ ? [['Alicuota IVA', resolveIvaRateLabel(payload.Iva[0].Id) ?? String(payload.Iva[0].Id)]]
67
+ : []),
58
68
  ['Importe tributos', formatMoneyLabel(payload.ImpTrib)],
59
69
  ['Importe exento', formatMoneyLabel(payload.ImpOpEx)],
70
+ ['Importe no gravado', formatMoneyLabel(payload.ImpTotConc)],
60
71
  ['Importe total', formatMoneyLabel(payload.ImpTotal)],
61
72
  ];
62
73
  if (payload.FchServDesde) {
@@ -75,6 +86,21 @@ function formatFriendlyPayloadRows(result) {
75
86
  rows.push(['Punto de venta asociado', formatNumericLabel(associatedVoucher.PtoVta)]);
76
87
  rows.push(['Numero asociado', formatNumericLabel(associatedVoucher.Nro)]);
77
88
  rows.push(['CUIT asociado', formatTaxIdLabel(associatedVoucher.Cuit)]);
89
+ if (associatedVoucher.CbteFch) {
90
+ rows.push(['Fecha asociado', formatDateLabel(associatedVoucher.CbteFch)]);
91
+ }
92
+ }
93
+ if (payload.PeriodoAsoc) {
94
+ rows.push([
95
+ 'Periodo asociado',
96
+ `${formatDateLabel(payload.PeriodoAsoc.FchDesde)} al ${formatDateLabel(payload.PeriodoAsoc.FchHasta)}`,
97
+ ]);
98
+ }
99
+ for (const optional of payload.Opcionales ?? []) {
100
+ const label = FCE_OPTIONAL_LABELS[optional.Id];
101
+ if (label) {
102
+ rows.push([label, optional.Id === '22' ? (optional.Valor === 'S' ? 'Si' : 'No') : optional.Valor]);
103
+ }
78
104
  }
79
105
  return rows;
80
106
  }
@@ -85,7 +111,7 @@ export function formatPayloadTable(result) {
85
111
  export function formatPayloadPreview(result) {
86
112
  const payloadTable = formatPayloadTable(result);
87
113
  const footer = result.dryRun ? toneText('SIN EMITIR', 'warning') : undefined;
88
- return keyValuePanel(result.voucherKind.displayName, [payloadTable], footer, 'compact');
114
+ return keyValuePanel(result.voucherKind.displayName, [payloadTable], footer, 'compact', undefined, 'ticket');
89
115
  }
90
116
  export function formatResultPanel(result, status) {
91
117
  const summaryRows = [
@@ -106,6 +132,6 @@ export function formatResultPanel(result, status) {
106
132
  ...renderKeyValueRows(countRows, { labelWidth }),
107
133
  ];
108
134
  const footer = toneText(status.label, status.tone);
109
- return statusPanel(result.voucherKind.displayName, rows, footer, 'compact', status.tone);
135
+ return statusPanel(result.voucherKind.displayName, rows, footer, 'compact', status.tone, 'ticket');
110
136
  }
111
137
  //# sourceMappingURL=billing.display.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"billing.display.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.display.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { IOpcional } from '@arcasdk/core/lib/domain/types/voucher.types';
2
+ import type { BillingCommandInput } from './billing.schemas';
3
+ import type { VoucherKindDefinition } from './billing.types';
4
+ /** Codigos de "Adicionales por R.G." que usa FCE (FEParamGetTiposOpcional). */
5
+ export declare const FCE_OPTIONAL_IDS: {
6
+ readonly cancellation: "22";
7
+ readonly cbu: "2101";
8
+ readonly cbuAlias: "2102";
9
+ readonly transferMode: "27";
10
+ };
11
+ export declare const DEFAULT_FCE_TRANSFER_MODE = "sca";
12
+ type FceInput = Pick<BillingCommandInput, 'cancellation' | 'cbu' | 'cbuAlias' | 'transferMode'>;
13
+ export declare function isElectronicCreditInvoice(voucherKind: VoucherKindDefinition): boolean;
14
+ /**
15
+ * Arma `Opcionales` segun el tipo de comprobante:
16
+ * - factura FCE: CBU obligatorio (10168), alias opcional y modalidad de transferencia obligatoria (10216)
17
+ * - NC/ND FCE: solo el codigo de anulacion, obligatorio (10173); sin CBU, alias ni transferencia (10172)
18
+ * - resto: ningun opcional de FCE (10169)
19
+ */
20
+ export declare function resolveElectronicCreditOptionals(input: FceInput, voucherKind: VoucherKindDefinition): IOpcional[] | undefined;
21
+ export {};
@@ -0,0 +1,59 @@
1
+ import { InputValidationError } from '../../lib/errors/app-error.js';
2
+ import { formatVoucherLabel } from './billing.mappers.js';
3
+ /** Codigos de "Adicionales por R.G." que usa FCE (FEParamGetTiposOpcional). */
4
+ export const FCE_OPTIONAL_IDS = {
5
+ cancellation: '22',
6
+ cbu: '2101',
7
+ cbuAlias: '2102',
8
+ transferMode: '27',
9
+ };
10
+ export const DEFAULT_FCE_TRANSFER_MODE = 'sca';
11
+ export function isElectronicCreditInvoice(voucherKind) {
12
+ return voucherKind.family === 'factura-credito-electronica';
13
+ }
14
+ function listInvoiceOnlyFlags(input) {
15
+ return [
16
+ input.cbu ? '--cbu' : undefined,
17
+ input.cbuAlias ? '--alias' : undefined,
18
+ input.transferMode ? '--transferencia' : undefined,
19
+ ].filter((flag) => Boolean(flag));
20
+ }
21
+ /**
22
+ * Arma `Opcionales` segun el tipo de comprobante:
23
+ * - factura FCE: CBU obligatorio (10168), alias opcional y modalidad de transferencia obligatoria (10216)
24
+ * - NC/ND FCE: solo el codigo de anulacion, obligatorio (10173); sin CBU, alias ni transferencia (10172)
25
+ * - resto: ningun opcional de FCE (10169)
26
+ */
27
+ export function resolveElectronicCreditOptionals(input, voucherKind) {
28
+ const invoiceOnlyFlags = listInvoiceOnlyFlags(input);
29
+ const label = formatVoucherLabel(voucherKind);
30
+ if (!voucherKind.isElectronicCredit) {
31
+ const flags = input.cancellation ? [...invoiceOnlyFlags, '--anulacion'] : invoiceOnlyFlags;
32
+ if (flags.length > 0) {
33
+ throw new InputValidationError(`${flags.join(', ')} solo aplica a comprobantes de credito electronica (FCE).`);
34
+ }
35
+ return undefined;
36
+ }
37
+ if (!isElectronicCreditInvoice(voucherKind)) {
38
+ if (invoiceOnlyFlags.length > 0) {
39
+ throw new InputValidationError(`La ${label} no lleva ${invoiceOnlyFlags.join(', ')}: solo van en la factura FCE.`);
40
+ }
41
+ return [{ Id: FCE_OPTIONAL_IDS.cancellation, Valor: input.cancellation ? 'S' : 'N' }];
42
+ }
43
+ if (input.cancellation) {
44
+ throw new InputValidationError(`La ${label} no usa --anulacion: solo aplica a notas de credito o debito FCE.`);
45
+ }
46
+ if (!input.cbu) {
47
+ throw new InputValidationError(`La ${label} requiere el CBU del emisor. Use --cbu o configurelo con "arcli config establecer cbu <22 digitos>".`);
48
+ }
49
+ const optionals = [{ Id: FCE_OPTIONAL_IDS.cbu, Valor: input.cbu }];
50
+ if (input.cbuAlias) {
51
+ optionals.push({ Id: FCE_OPTIONAL_IDS.cbuAlias, Valor: input.cbuAlias });
52
+ }
53
+ optionals.push({
54
+ Id: FCE_OPTIONAL_IDS.transferMode,
55
+ Valor: (input.transferMode ?? DEFAULT_FCE_TRANSFER_MODE).toUpperCase(),
56
+ });
57
+ return optionals;
58
+ }
59
+ //# sourceMappingURL=billing.fce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.fce.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.fce.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BillingCommandInput, BillingIvaCondition } from './billing.schemas';
2
+ import type { VoucherKindDefinition, VoucherLetter } from './billing.types';
3
+ /** RG 5700/2025: desde $10.000.000 hay que identificar al consumidor final. */
4
+ export declare const CONSUMER_IDENTIFICATION_THRESHOLD = 10000000;
5
+ export declare function listAllowedIvaConditions(letter: VoucherLetter): readonly BillingIvaCondition[];
6
+ export declare function isIvaConditionAllowed(letter: VoucherLetter, ivaCondition: BillingIvaCondition): boolean;
7
+ export declare function validateIvaConditionForVoucher(ivaCondition: BillingIvaCondition, voucherKind: VoucherKindDefinition): void;
8
+ export declare function validateConsumerIdentification(input: Pick<BillingCommandInput, 'documentType' | 'totalAmount'>, exchangeRate: number, voucherKind: VoucherKindDefinition): void;
@@ -0,0 +1,61 @@
1
+ import { InputValidationError } from '../../lib/errors/app-error.js';
2
+ import { formatVoucherLabel } from './billing.mappers.js';
3
+ /**
4
+ * Condiciones IVA del receptor admitidas por letra, segun FEParamGetCondicionIvaReceptor.
5
+ * ARCA rechaza las demas combinaciones con el error 10243.
6
+ */
7
+ const IVA_CONDITIONS_BY_LETTER = {
8
+ a: [
9
+ 'responsable-inscripto',
10
+ 'responsable-monotributo',
11
+ 'monotributista-social',
12
+ 'monotributo-trabajador-independiente-promovido',
13
+ ],
14
+ b: [
15
+ 'sujeto-exento',
16
+ 'consumidor-final',
17
+ 'sujeto-no-categorizado',
18
+ 'proveedor-del-exterior',
19
+ 'cliente-del-exterior',
20
+ 'iva-liberado',
21
+ 'iva-no-alcanzado',
22
+ ],
23
+ c: [
24
+ 'responsable-inscripto',
25
+ 'responsable-monotributo',
26
+ 'monotributista-social',
27
+ 'monotributo-trabajador-independiente-promovido',
28
+ 'sujeto-exento',
29
+ 'consumidor-final',
30
+ 'sujeto-no-categorizado',
31
+ 'proveedor-del-exterior',
32
+ 'cliente-del-exterior',
33
+ 'iva-liberado',
34
+ 'iva-no-alcanzado',
35
+ ],
36
+ };
37
+ /** RG 5700/2025: desde $10.000.000 hay que identificar al consumidor final. */
38
+ export const CONSUMER_IDENTIFICATION_THRESHOLD = 10_000_000;
39
+ export function listAllowedIvaConditions(letter) {
40
+ return IVA_CONDITIONS_BY_LETTER[letter];
41
+ }
42
+ export function isIvaConditionAllowed(letter, ivaCondition) {
43
+ return IVA_CONDITIONS_BY_LETTER[letter].includes(ivaCondition);
44
+ }
45
+ export function validateIvaConditionForVoucher(ivaCondition, voucherKind) {
46
+ if (isIvaConditionAllowed(voucherKind.letter, ivaCondition)) {
47
+ return;
48
+ }
49
+ const suggestedLetter = ['a', 'b'].find((letter) => isIvaConditionAllowed(letter, ivaCondition));
50
+ const suggestion = suggestedLetter ? ` Use un comprobante letra ${suggestedLetter.toUpperCase()}.` : '';
51
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} no admite IVA receptor "${ivaCondition}".${suggestion}`);
52
+ }
53
+ export function validateConsumerIdentification(input, exchangeRate, voucherKind) {
54
+ if (input.documentType !== 'consumidor-final') {
55
+ return;
56
+ }
57
+ if (input.totalAmount * exchangeRate >= CONSUMER_IDENTIFICATION_THRESHOLD) {
58
+ throw new InputValidationError(`La ${formatVoucherLabel(voucherKind)} de $10.000.000 o mas requiere identificar al consumidor final. Use --dni, --cuit o --cuil.`);
59
+ }
60
+ }
61
+ //# sourceMappingURL=billing.iva-receptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.iva-receptor.js","sourceRoot":"","sources":["../../../src/modules/billing/billing.iva-receptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;;GAGG;AACH,MAAM,wBAAwB,GAA0D;IACtF,CAAC,EAAE;QACD,uBAAuB;QACvB,yBAAyB;QACzB,uBAAuB;QACvB,gDAAgD;KACjD;IACD,CAAC,EAAE;QACD,eAAe;QACf,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,sBAAsB;QACtB,cAAc;QACd,kBAAkB;KACnB;IACD,CAAC,EAAE;QACD,uBAAuB;QACvB,yBAAyB;QACzB,uBAAuB;QACvB,gDAAgD;QAChD,eAAe;QACf,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,sBAAsB;QACtB,cAAc;QACd,kBAAkB;KACnB;CACF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;AAE5D,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAqB,EAAE,YAAiC;IAC5F,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,YAAiC,EACjC,WAAkC;IAElC,IAAI,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAI,CAAC,GAAG,EAAE,GAAG,CAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5G,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,6BAA6B,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAExG,MAAM,IAAI,oBAAoB,CAC5B,MAAM,kBAAkB,CAAC,WAAW,CAAC,4BAA4B,YAAY,KAAK,UAAU,EAAE,CAC/F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,KAAgE,EAChE,YAAoB,EACpB,WAAkC;IAElC,IAAI,KAAK,CAAC,YAAY,KAAK,kBAAkB,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,GAAG,YAAY,IAAI,iCAAiC,EAAE,CAAC;QAC1E,MAAM,IAAI,oBAAoB,CAC5B,MAAM,kBAAkB,CAAC,WAAW,CAAC,6FAA6F,CACnI,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -75,7 +75,7 @@ export function formatCurrencyLabel(value) {
75
75
  switch (value) {
76
76
  case 'PES':
77
77
  return 'Pesos argentinos (ARS)';
78
- case 'USD':
78
+ case 'DOL':
79
79
  return 'Dolares estadounidenses (USD)';
80
80
  default:
81
81
  return value ?? 'N/D';
@@ -25,8 +25,9 @@ const BILLING_IVA_CONDITION_MAP = {
25
25
  };
26
26
  const BILLING_CURRENCY_CODE_MAP = {
27
27
  ARS: 'PES',
28
+ DOL: 'DOL',
28
29
  PES: 'PES',
29
- USD: 'USD',
30
+ USD: 'DOL',
30
31
  };
31
32
  export function resolveBillingConceptCode(concept) {
32
33
  return BILLING_CONCEPT_MAP[concept];