facturas 0.19.0 → 0.20.1

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 (35) hide show
  1. package/dist/{chunk-WPHD2GQJ.mjs → chunk-B2M64SIK.mjs} +2 -2
  2. package/dist/{chunk-DHN6OQJP.mjs → chunk-C2KX652X.mjs} +17 -1
  3. package/dist/chunk-C2KX652X.mjs.map +1 -0
  4. package/dist/{chunk-OORNZFI5.mjs → chunk-DYBPYB52.mjs} +15 -4
  5. package/dist/chunk-DYBPYB52.mjs.map +1 -0
  6. package/dist/{chunk-MRBFLBWX.mjs → chunk-JP3LVU7K.mjs} +2 -2
  7. package/dist/{chunk-EZ4HA3LC.mjs → chunk-NT2A6YMO.mjs} +9 -2
  8. package/dist/chunk-NT2A6YMO.mjs.map +1 -0
  9. package/dist/{chunk-4RD5VQWC.mjs → chunk-TMSP5QPZ.mjs} +3 -3
  10. package/dist/{chunk-U3HODOOP.mjs → chunk-WQHP4O67.mjs} +2639 -2502
  11. package/dist/chunk-WQHP4O67.mjs.map +1 -0
  12. package/dist/cli.d.ts +2 -2
  13. package/dist/cli.mjs +7 -7
  14. package/dist/{client-D1IH1NCf.d.ts → client-BIkLOgBA.d.ts} +85 -11
  15. package/dist/constants.d.ts +25 -1
  16. package/dist/constants.mjs +3 -1
  17. package/dist/errors.d.ts +1 -1
  18. package/dist/errors.mjs +1 -1
  19. package/dist/{fiscal-evidence-B6UTFGmY.d.ts → fiscal-evidence-Bg4o9nxt.d.ts} +16 -3
  20. package/dist/index.d.ts +4 -50
  21. package/dist/index.mjs +15 -9
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/padron.mjs +2 -2
  24. package/dist/wsfe.d.ts +1 -1
  25. package/dist/wsfe.mjs +3 -3
  26. package/dist/wsmtxca.d.ts +1 -1
  27. package/dist/wsmtxca.mjs +3 -3
  28. package/package.json +1 -1
  29. package/dist/chunk-DHN6OQJP.mjs.map +0 -1
  30. package/dist/chunk-EZ4HA3LC.mjs.map +0 -1
  31. package/dist/chunk-OORNZFI5.mjs.map +0 -1
  32. package/dist/chunk-U3HODOOP.mjs.map +0 -1
  33. /package/dist/{chunk-WPHD2GQJ.mjs.map → chunk-B2M64SIK.mjs.map} +0 -0
  34. /package/dist/{chunk-MRBFLBWX.mjs.map → chunk-JP3LVU7K.mjs.map} +0 -0
  35. /package/dist/{chunk-4RD5VQWC.mjs.map → chunk-TMSP5QPZ.mjs.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  ArcaServiceError,
4
4
  ArcaSoapFaultError,
5
5
  isArcaAuthenticationError
6
- } from "./chunk-EZ4HA3LC.mjs";
6
+ } from "./chunk-NT2A6YMO.mjs";
7
7
 
8
8
  // src/internal/authentication.ts
9
9
  var WSFE_AUTHENTICATION_CODES = {
@@ -176,4 +176,4 @@ export {
176
176
  createArcaAuthenticationEvidence,
177
177
  executeWithAuthenticationRecovery
178
178
  };
179
- //# sourceMappingURL=chunk-WPHD2GQJ.mjs.map
179
+ //# sourceMappingURL=chunk-B2M64SIK.mjs.map
@@ -15,6 +15,21 @@ var ARCA_DOCUMENT_TYPES = {
15
15
  DNI: 96,
16
16
  CONSUMIDOR_FINAL: 99
17
17
  };
18
+ var ARCA_WSMTXCA_GENERIC_CODES = {
19
+ "7790001001030": "Descuentos y bonificaciones comerciales",
20
+ "7790001001047": "Conceptos financieros",
21
+ "7790001001054": "Ventas varias",
22
+ "7790001001061": "Bienes de uso",
23
+ "7790001001078": "Servicios prestados",
24
+ "7790001001085": "Fletes",
25
+ "7790001001092": "Alquileres",
26
+ "7790001001115": "Dep\xF3sito y servicios de log\xEDstica",
27
+ "7790001001122": "Repuestos y accesorios",
28
+ "7790001001139": "Ajustes impositivos",
29
+ "7790001001146": "Actividades comerciales no codificadas",
30
+ "7790001001153": "Venta de material de rezago",
31
+ "7790001001856": "Anticipos y se\xF1as"
32
+ };
18
33
  var ARCA_RECEIVER_VAT_CONDITIONS = {
19
34
  RESPONSABLE_INSCRIPTO: 1,
20
35
  EXENTO: 4,
@@ -91,6 +106,7 @@ var ARCA_INVOICE_CLASS_BY_ISSUER = {
91
106
  export {
92
107
  ARCA_VOUCHER_TYPES,
93
108
  ARCA_DOCUMENT_TYPES,
109
+ ARCA_WSMTXCA_GENERIC_CODES,
94
110
  ARCA_RECEIVER_VAT_CONDITIONS,
95
111
  ARCA_CONCEPT_TYPES,
96
112
  ARCA_VAT_RATES,
@@ -101,4 +117,4 @@ export {
101
117
  ARCA_FINAL_CONSUMER_IDENTIFICATION_THRESHOLD_MINOR_UNITS,
102
118
  ARCA_INVOICE_CLASS_BY_ISSUER
103
119
  };
104
- //# sourceMappingURL=chunk-DHN6OQJP.mjs.map
120
+ //# sourceMappingURL=chunk-C2KX652X.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/** Common ARCA reference data for readable userland code and examples. */\nexport const ARCA_VOUCHER_TYPES = {\n FACTURA_A: 1,\n NOTA_DEBITO_A: 2,\n NOTA_CREDITO_A: 3,\n FACTURA_B: 6,\n NOTA_DEBITO_B: 7,\n NOTA_CREDITO_B: 8,\n FACTURA_C: 11,\n NOTA_DEBITO_C: 12,\n NOTA_CREDITO_C: 13,\n} as const;\n\n/** Common document types accepted by ARCA services. */\nexport const ARCA_DOCUMENT_TYPES = {\n CUIT: 80,\n DNI: 96,\n CONSUMIDOR_FINAL: 99,\n} as const;\n\n/**\n * ARCA's generic WSMTXCA item codes, keyed by the `matrixCode` to send.\n * RG 2904, Anexo VII: for concepts outside the issuer's main line of goods,\n * which carry their GTIN instead. Samples and promotional material use\n * `7790001001054` (Ventas varias).\n * https://www.afip.gob.ar/fe/documentos/codigosGenericosYEspecificos.xls\n */\nexport const ARCA_WSMTXCA_GENERIC_CODES = {\n \"7790001001030\": \"Descuentos y bonificaciones comerciales\",\n \"7790001001047\": \"Conceptos financieros\",\n \"7790001001054\": \"Ventas varias\",\n \"7790001001061\": \"Bienes de uso\",\n \"7790001001078\": \"Servicios prestados\",\n \"7790001001085\": \"Fletes\",\n \"7790001001092\": \"Alquileres\",\n \"7790001001115\": \"Depósito y servicios de logística\",\n \"7790001001122\": \"Repuestos y accesorios\",\n \"7790001001139\": \"Ajustes impositivos\",\n \"7790001001146\": \"Actividades comerciales no codificadas\",\n \"7790001001153\": \"Venta de material de rezago\",\n \"7790001001856\": \"Anticipos y señas\",\n} as const;\n\n/**\n * Common receiver IVA condition identifiers used by WSFE.\n * Allowed values depend on the voucher class and ARCA's live catalog.\n */\nexport const ARCA_RECEIVER_VAT_CONDITIONS = {\n RESPONSABLE_INSCRIPTO: 1,\n EXENTO: 4,\n CONSUMIDOR_FINAL: 5,\n MONOTRIBUTISTA: 6,\n IVA_NO_ALCANZADO: 15,\n} as const;\n\n/** Supported invoice concept types for WSFE requests. */\nexport const ARCA_CONCEPT_TYPES = {\n PRODUCTOS: 1,\n SERVICIOS: 2,\n PRODUCTOS_Y_SERVICIOS: 3,\n} as const;\n\n/** Common IVA rate identifiers used by WSFE. */\nexport const ARCA_VAT_RATES = {\n IVA_0: 3,\n IVA_10_5: 4,\n IVA_21: 5,\n IVA_27: 6,\n IVA_5: 8,\n IVA_2_5: 9,\n} as const;\n\n/** ISO currency codes accepted by the high-level WSFE builders. */\nexport const ISO_CURRENCIES = {\n ARS: \"ARS\",\n USD: \"USD\",\n} as const;\n\n/** ARCA currency identifiers keyed by their corresponding ISO currency. */\nexport const ARCA_CURRENCY_IDS = {\n ARS: \"PES\",\n USD: \"DOL\",\n} as const;\n\n/** Legal assertions supported by the invoice high-level API; never inferred from Padrón. */\nexport type IssuerCondition =\n | \"responsable_inscripto\"\n | \"monotributo\"\n | \"exento\"\n | \"no_alcanzado\";\nexport type ReceiverCondition = IssuerCondition | \"consumidor_final\";\nexport type VoucherClass = \"A\" | \"B\" | \"C\";\n\nexport const ARCA_RECEIVER_CONDITION_IDS = {\n responsable_inscripto: ARCA_RECEIVER_VAT_CONDITIONS.RESPONSABLE_INSCRIPTO,\n monotributo: ARCA_RECEIVER_VAT_CONDITIONS.MONOTRIBUTISTA,\n exento: ARCA_RECEIVER_VAT_CONDITIONS.EXENTO,\n consumidor_final: ARCA_RECEIVER_VAT_CONDITIONS.CONSUMIDOR_FINAL,\n no_alcanzado: ARCA_RECEIVER_VAT_CONDITIONS.IVA_NO_ALCANZADO,\n} as const satisfies Record<ReceiverCondition, number>;\n\nexport const ARCA_ISSUER_CONDITION_IDS = {\n responsable_inscripto: 1,\n monotributo: 6,\n exento: 4,\n no_alcanzado: 15,\n} as const satisfies Record<IssuerCondition, number>;\n\n/** The ARCA identifier of each issuer condition, accepted wherever a name is. */\nexport type IssuerConditionId =\n (typeof ARCA_ISSUER_CONDITION_IDS)[IssuerCondition];\n\n// RG 5866/2026, art. 1(f), effective 2026-07-01 (art. 4).\n// https://www.argentina.gob.ar/normativa/nacional/norma-427092/texto\nexport const ARCA_FINAL_CONSUMER_IDENTIFICATION_THRESHOLD_MINOR_UNITS =\n 1_000_000_000n;\n\n// WSFE v4.7, physical PDF p. 203, validations 10243/10246; issuer asserted first.\n// ARCA checks actual issuer eligibility independently at authorization.\nexport const ARCA_INVOICE_CLASS_BY_ISSUER = {\n responsable_inscripto: {\n responsable_inscripto: \"A\",\n monotributo: \"A\",\n exento: \"B\",\n consumidor_final: \"B\",\n no_alcanzado: \"B\",\n },\n monotributo: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n exento: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n no_alcanzado: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n} as const satisfies Record<\n IssuerCondition,\n Record<ReceiverCondition, VoucherClass>\n>;\n"],"mappings":";AACO,IAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAClB;AAGO,IAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,KAAK;AAAA,EACL,kBAAkB;AACpB;AASO,IAAM,6BAA6B;AAAA,EACxC,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;AAMO,IAAM,+BAA+B;AAAA,EAC1C,uBAAuB;AAAA,EACvB,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,kBAAkB;AACpB;AAGO,IAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,WAAW;AAAA,EACX,uBAAuB;AACzB;AAGO,IAAM,iBAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AACX;AAGO,IAAM,iBAAiB;AAAA,EAC5B,KAAK;AAAA,EACL,KAAK;AACP;AAGO,IAAM,oBAAoB;AAAA,EAC/B,KAAK;AAAA,EACL,KAAK;AACP;AAWO,IAAM,8BAA8B;AAAA,EACzC,uBAAuB,6BAA6B;AAAA,EACpD,aAAa,6BAA6B;AAAA,EAC1C,QAAQ,6BAA6B;AAAA,EACrC,kBAAkB,6BAA6B;AAAA,EAC/C,cAAc,6BAA6B;AAC7C;AAEO,IAAM,4BAA4B;AAAA,EACvC,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,cAAc;AAChB;AAQO,IAAM,2DACX;AAIK,IAAM,+BAA+B;AAAA,EAC1C,uBAAuB;AAAA,IACrB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,QAAQ;AAAA,IACN,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AACF;","names":[]}
@@ -3,14 +3,14 @@ import {
3
3
  classifyArcaAuthenticationIssues,
4
4
  createArcaAuthenticationEvidence,
5
5
  executeWithAuthenticationRecovery
6
- } from "./chunk-WPHD2GQJ.mjs";
6
+ } from "./chunk-B2M64SIK.mjs";
7
7
  import {
8
8
  ArcaInputError,
9
9
  ArcaInvalidSoapResponseError,
10
10
  ArcaServiceError,
11
11
  ArcaSoapFaultError,
12
12
  ArcaTransportError
13
- } from "./chunk-EZ4HA3LC.mjs";
13
+ } from "./chunk-NT2A6YMO.mjs";
14
14
 
15
15
  // src/internal/dates.ts
16
16
  function toIsoDate(value) {
@@ -286,7 +286,18 @@ function createWsfeService(options) {
286
286
  CbteTipo: voucherType
287
287
  }
288
288
  );
289
- return Number(result.CbteNro ?? 0) + 1;
289
+ const rawNumber = result.CbteNro;
290
+ const lastNumber = Number(rawNumber);
291
+ if (typeof rawNumber !== "string" && typeof rawNumber !== "number" || !/^\d+$/.test(String(rawNumber).trim()) || !Number.isSafeInteger(lastNumber) || lastNumber < 0 || lastNumber > 99999999) {
292
+ throw new ArcaInvalidSoapResponseError(
293
+ "Invalid WSFE last authorized number",
294
+ {
295
+ service: "wsfe",
296
+ operation: "FECompUltimoAutorizado"
297
+ }
298
+ );
299
+ }
300
+ return lastNumber + 1;
290
301
  }
291
302
  async function getWsfeCatalog(operation, resultKey, input) {
292
303
  const result = await executeWsfeAuthenticatedOperation(operation, {
@@ -1461,4 +1472,4 @@ export {
1461
1472
  normalizeWsfeVoucherInput,
1462
1473
  normalizeWsfeDateInput
1463
1474
  };
1464
- //# sourceMappingURL=chunk-OORNZFI5.mjs.map
1475
+ //# sourceMappingURL=chunk-DYBPYB52.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/dates.ts","../src/internal/decimal.ts","../src/services/wsfe.ts"],"sourcesContent":["/** ARCA answers `YYYYMMDD`; the facade speaks `YYYY-MM-DD`. Anything else is absent. */\nexport function toIsoDate(value: unknown): string | undefined {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n return undefined;\n }\n const text = String(value).trim();\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(text)) {\n return text;\n }\n if (/^\\d{8}$/.test(text)) {\n return `${text.slice(0, 4)}-${text.slice(4, 6)}-${text.slice(6, 8)}`;\n }\n return undefined;\n}\n","import { ArcaInputError } from \"../errors\";\n\nconst AMOUNT_SCALE = 100;\nconst EXCHANGE_RATE_SCALE = 1_000_000;\nconst EXCHANGE_RATE_SCALE_BIGINT = 1_000_000n;\nconst PERCENTAGE_SCALE = 100;\n\n// WSFE documents amount fields as 13 integer digits plus 2 decimals.\nconst MAX_ARCA_AMOUNT_MINOR_UNITS = 999_999_999_999_999n;\n// MonCotiz is documented as 4 integer digits plus 6 decimals.\nconst MAX_ARCA_EXCHANGE_RATE_SCALED = 9_999_999_999n;\n// Tributo.Alic is documented as 3 integer digits plus 2 decimals.\nconst MAX_ARCA_PERCENTAGE_HUNDREDTHS = 99_999n;\n\nexport const SUPPORTED_VAT_RATES = [0, 2.5, 5, 10.5, 21, 27] as const;\nexport type SupportedVatRate = (typeof SUPPORTED_VAT_RATES)[number];\n\nconst VAT_RATE_BASIS_POINTS: Record<SupportedVatRate, bigint> = {\n 0: 0n,\n 2.5: 250n,\n 5: 500n,\n 10.5: 1050n,\n 21: 2100n,\n 27: 2700n,\n};\n\nexport function normalizeArcaAmountToMinorUnits(\n value: number,\n field: string\n): bigint {\n return normalizeScaledNumber({\n value,\n field,\n scale: AMOUNT_SCALE,\n maximum: MAX_ARCA_AMOUNT_MINOR_UNITS,\n expected: \"a finite non-negative amount with at most 2 decimal places\",\n });\n}\n\nexport function serializeArcaAmount(value: number, field: string): string {\n return formatScaledInteger(normalizeArcaAmountToMinorUnits(value, field), 2);\n}\n\nexport function serializeArcaMinorUnits(value: number, field: string): string {\n return formatScaledInteger(assertArcaMinorUnits(value, field), 2);\n}\n\nexport function serializeArcaPercentage(value: number, field: string): string {\n const scaled = normalizeScaledNumber({\n value,\n field,\n scale: PERCENTAGE_SCALE,\n maximum: MAX_ARCA_PERCENTAGE_HUNDREDTHS,\n expected: \"a finite non-negative percentage with at most 2 decimal places\",\n });\n return formatScaledInteger(scaled, 2);\n}\n\nexport function serializeArcaExchangeRate(\n value: number | string,\n field: string\n): string {\n const scaled =\n typeof value === \"number\"\n ? normalizeExchangeRateNumber(value, field)\n : normalizeExchangeRateString(value, field);\n\n if (scaled <= 0n || scaled > MAX_ARCA_EXCHANGE_RATE_SCALED) {\n throwInvalidExchangeRate(field);\n }\n\n return formatScaledInteger(scaled, 6, true);\n}\n\nexport function assertArcaMinorUnits(value: number, field: string): bigint {\n if (!(Number.isSafeInteger(value) && value >= 0)) {\n throw new ArcaInputError(\n `${field} must be a non-negative safe integer in currency minor units.`,\n {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected: \"a non-negative safe integer in currency minor units\",\n }\n );\n }\n\n const minorUnits = BigInt(value);\n if (minorUnits > MAX_ARCA_AMOUNT_MINOR_UNITS) {\n throw new ArcaInputError(`${field} exceeds the WSFE amount limit.`, {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected: \"at most 13 integer digits and 2 decimal places\",\n });\n }\n\n return minorUnits;\n}\n\nexport function arcaMinorUnitsToNumber(\n minorUnits: bigint,\n field: string\n): number {\n if (minorUnits < 0n || minorUnits > MAX_ARCA_AMOUNT_MINOR_UNITS) {\n throw new ArcaInputError(`${field} exceeds the WSFE amount limit.`, {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected: \"at most 13 integer digits and 2 decimal places\",\n });\n }\n\n return Number(formatScaledInteger(minorUnits, 2));\n}\n\nexport function calculateVatMinorUnits(\n taxableMinorUnits: bigint,\n vatRate: SupportedVatRate,\n field: string\n): bigint {\n const basisPoints = VAT_RATE_BASIS_POINTS[vatRate];\n if (basisPoints === undefined) {\n throw new ArcaInputError(`${field} is not a supported VAT rate.`, {\n code: \"ARCA_INPUT_INVALID_VALUE\",\n field,\n expected: \"one of 0, 2.5, 5, 10.5, 21, or 27\",\n });\n }\n\n return roundHalfEvenRatio(taxableMinorUnits * basisPoints, 10_000n);\n}\n\n/**\n * Divides two non-negative integers and rounds the quotient to the nearest\n * integer, breaking exact ties toward the even neighbour.\n *\n * This is the rounding criterion the WSFE developer manual documents for the\n * service (\"Round Half Even\", section on validation tolerances), so VAT\n * derived here matches what ARCA computes for the same base and rate.\n */\nexport function roundHalfEvenRatio(\n numerator: bigint,\n denominator: bigint\n): bigint {\n if (numerator < 0n || denominator <= 0n) {\n throw new RangeError(\n \"roundHalfEvenRatio requires a non-negative numerator and a positive denominator.\"\n );\n }\n\n const quotient = numerator / denominator;\n const doubledRemainder = (numerator % denominator) * 2n;\n if (doubledRemainder > denominator) {\n return quotient + 1n;\n }\n if (doubledRemainder < denominator) {\n return quotient;\n }\n return quotient % 2n === 0n ? quotient : quotient + 1n;\n}\n\nexport function isWithinArcaTolerance(\n actualMinorUnits: bigint,\n expectedMinorUnits: bigint,\n absoluteCentAllowance = 1\n): boolean {\n const difference = absoluteBigInt(actualMinorUnits - expectedMinorUnits);\n if (difference <= BigInt(Math.max(1, absoluteCentAllowance))) {\n return true;\n }\n\n const comparisonBase = absoluteBigInt(expectedMinorUnits);\n return comparisonBase > 0n && difference * 10_000n <= comparisonBase;\n}\n\nfunction normalizeScaledNumber({\n value,\n field,\n scale,\n maximum,\n expected,\n}: {\n value: number;\n field: string;\n scale: number;\n maximum: bigint;\n expected: string;\n}): bigint {\n if (!(Number.isFinite(value) && value >= 0)) {\n throw new ArcaInputError(`${field} must be ${expected}.`, {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected,\n });\n }\n\n const scaled = value * scale;\n const nearestInteger = Math.round(scaled);\n const representationTolerance = Math.max(\n 1e-9,\n Math.abs(scaled) * Number.EPSILON * 4\n );\n\n if (Math.abs(scaled - nearestInteger) > representationTolerance) {\n throw new ArcaInputError(\n `${field} has more precision than its ARCA field allows.`,\n {\n code: \"ARCA_INPUT_AMOUNT_PRECISION\",\n field,\n expected,\n }\n );\n }\n\n if (!Number.isSafeInteger(nearestInteger)) {\n throw new ArcaInputError(`${field} exceeds the safely supported range.`, {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected,\n });\n }\n\n const normalized = BigInt(nearestInteger);\n if (normalized > maximum) {\n throw new ArcaInputError(`${field} exceeds the ARCA field limit.`, {\n code: \"ARCA_INPUT_INVALID_AMOUNT\",\n field,\n expected,\n });\n }\n\n return normalized;\n}\n\nfunction normalizeExchangeRateNumber(value: number, field: string): bigint {\n if (!(Number.isFinite(value) && value > 0)) {\n throwInvalidExchangeRate(field);\n }\n\n const scaled = value * EXCHANGE_RATE_SCALE;\n const nearestInteger = Math.round(scaled);\n const representationTolerance = Math.max(\n 1e-9,\n Math.abs(scaled) * Number.EPSILON * 4\n );\n\n if (\n Math.abs(scaled - nearestInteger) > representationTolerance ||\n !Number.isSafeInteger(nearestInteger)\n ) {\n throwInvalidExchangeRate(field);\n }\n\n return BigInt(nearestInteger);\n}\n\nfunction normalizeExchangeRateString(value: string, field: string): bigint {\n const match = value.match(/^(0|[1-9]\\d{0,3})(?:\\.(\\d{1,6}))?$/);\n if (!match) {\n throwInvalidExchangeRate(field);\n }\n\n const [, integerPart, fractionPart = \"\"] = match;\n return (\n BigInt(integerPart) * EXCHANGE_RATE_SCALE_BIGINT +\n BigInt(fractionPart.padEnd(6, \"0\"))\n );\n}\n\nfunction throwInvalidExchangeRate(field: string): never {\n throw new ArcaInputError(\n `${field} must be a positive decimal with at most 4 integer and 6 fractional digits.`,\n {\n code: \"ARCA_INPUT_INVALID_EXCHANGE_RATE\",\n field,\n expected:\n \"a positive decimal with up to 4 integer and 6 fractional digits\",\n }\n );\n}\n\nfunction formatScaledInteger(\n value: bigint,\n fractionDigits: number,\n trimTrailingZeros = false\n): string {\n const scale = 10n ** BigInt(fractionDigits);\n const integerPart = value / scale;\n const fractionPart = (value % scale).toString().padStart(fractionDigits, \"0\");\n\n if (trimTrailingZeros) {\n const trimmedFraction = fractionPart.replace(/0+$/, \"\");\n return trimmedFraction.length === 0\n ? integerPart.toString()\n : `${integerPart}.${trimmedFraction}`;\n }\n\n return `${integerPart}.${fractionPart}`;\n}\n\nfunction absoluteBigInt(value: bigint): bigint {\n return value < 0n ? -value : value;\n}\n","import {\n ArcaInputError,\n ArcaInvalidSoapResponseError,\n ArcaServiceError,\n ArcaSoapFaultError,\n ArcaTransportError,\n} from \"../errors\";\nimport {\n classifyArcaAuthenticationError,\n classifyArcaAuthenticationIssues,\n createArcaAuthenticationEvidence,\n executeWithAuthenticationRecovery,\n} from \"../internal/authentication\";\nimport { toIsoDate } from \"../internal/dates\";\nimport {\n isWithinArcaTolerance,\n normalizeArcaAmountToMinorUnits,\n serializeArcaAmount,\n serializeArcaExchangeRate,\n serializeArcaPercentage,\n} from \"../internal/decimal\";\nimport type { ArcaClientConfig, ArcaRepresentedTaxId } from \"../internal/types\";\nimport type { SoapTransport } from \"../soap\";\nimport type { WsaaAuthModule } from \"../wsaa\";\nimport type {\n ArcaAuthorizationIndeterminateReason,\n ArcaAuthorizationOutcome,\n ArcaFiscalIssue,\n ArcaFiscalResultLevel,\n ArcaVoucherLookupResult,\n} from \"./fiscal-evidence\";\n\n/** Accepted public date inputs for WSFE request fields. */\nexport type WsfeDateInput =\n | `${number}${number}${number}${number}-${number}${number}-${number}${number}`\n | `${number}${number}${number}${number}${number}${number}${number}${number}`;\n\n/** An associated voucher referenced by a WSFE invoice request. */\nexport type WsfeAssociatedVoucher = {\n type: number;\n salesPoint: number;\n number: number;\n taxId?: string;\n voucherDate?: WsfeDateInput;\n};\n\n/** An associated period used by WSFE credit/debit notes without associated vouchers. */\nexport type WsfeAssociatedPeriod = {\n startDate: WsfeDateInput;\n endDate: WsfeDateInput;\n};\n\n/** A tax (tributo) item in a WSFE invoice request. */\nexport type WsfeTax = {\n id: number;\n description?: string;\n baseAmount: number;\n rate: number;\n amount: number;\n};\n\n/** A VAT rate (alícuota IVA) item in a WSFE invoice request. */\nexport type WsfeVatRate = {\n id: number;\n baseAmount: number;\n amount: number;\n};\n\n/** An optional field (campo opcional) in a WSFE invoice request. */\nexport type WsfeOptionalField = {\n id: string;\n value: string;\n};\n\n/** A buyer (comprador) in a WSFE invoice request. */\nexport type WsfeBuyer = {\n documentType: number;\n documentNumber: number;\n percentage: number;\n};\n\n/** An activity associated with a WSFE invoice request. */\nexport type WsfeActivity = {\n id: number;\n};\n\n/** Input data for authorizing a WSFE voucher. */\nexport type WsfeVoucherInput = {\n salesPoint: number;\n voucherType: number;\n concept: number;\n documentType: number;\n documentNumber: number;\n receiverVatConditionId: number;\n voucherDate: WsfeDateInput;\n totalAmount: number;\n nonTaxableAmount: number;\n netAmount: number;\n exemptAmount: number;\n taxAmount: number;\n vatAmount: number;\n currencyId: string;\n exchangeRate?: number | string;\n sameCurrencyForeignCancellation?: \"S\" | \"N\";\n serviceStartDate?: WsfeDateInput;\n serviceEndDate?: WsfeDateInput;\n paymentDueDate?: WsfeDateInput;\n associatedVouchers?: WsfeAssociatedVoucher[];\n associatedPeriod?: WsfeAssociatedPeriod;\n taxes?: WsfeTax[];\n vatRates?: WsfeVatRate[];\n optionalFields?: WsfeOptionalField[];\n buyers?: WsfeBuyer[];\n activities?: WsfeActivity[];\n};\n\n/** Input for {@link WsfeService.issue}: one voucher with an explicit number. */\nexport type WsfeIssueInput = {\n representedTaxId?: number | string;\n data: WsfeVoucherInput;\n voucherNumber: number;\n forceRefresh?: boolean;\n /** Aborts login, submission and consultation with the caller's deadline. */\n abortSignal?: AbortSignal;\n};\n\n/** Structured evidence from one exact WSFE authorization attempt. */\nexport type WsfeAuthorizationOutcome = ArcaAuthorizationOutcome<\"wsfe\">;\n\n/**\n * A point-of-sale entry returned by {@link WsfeService.getSalesPoints}, in the\n * same shape as a WSMTXCA one. `deletedAt` is `YYYY-MM-DD` and absent while the\n * point is active.\n */\nexport type WsfeSalesPoint = {\n number: number;\n emissionType?: string;\n blocked: boolean;\n deletedAt?: string;\n};\n\n/** Voucher details returned by {@link WsfeService.lookupVoucher}. */\nexport type WsfeVoucherInfo = {\n voucherNumber: number;\n voucherDate?: string;\n salesPoint?: number;\n voucherType?: number;\n concept?: number;\n documentType?: number;\n documentNumber?: string;\n receiverVatConditionId?: number;\n totalAmount?: number;\n nonTaxableAmount?: number;\n netAmount?: number;\n exemptAmount?: number;\n taxAmount?: number;\n vatAmount?: number;\n currencyId?: string;\n exchangeRate?: number;\n result?: string;\n cae?: string;\n caeExpiry?: string;\n vatRates?: WsfeVatRate[];\n serviceStartDate?: string;\n serviceEndDate?: string;\n paymentDueDate?: string;\n taxes?: WsfeTax[];\n associatedVouchers?: WsfeAssociatedVoucher[];\n associatedPeriod?: WsfeAssociatedPeriod;\n optionalFields?: WsfeOptionalField[];\n buyers?: WsfeBuyer[];\n activities?: WsfeActivity[];\n sameCurrencyForeignCancellation?: \"S\" | \"N\";\n raw: Record<string, unknown>;\n};\n\n/** Typed exact-voucher consultation result for WSFE. */\nexport type WsfeVoucherLookupResult = ArcaVoucherLookupResult<\n WsfeVoucherInfo,\n \"wsfe\"\n>;\n\nexport type WsfeCatalogEntry = {\n id: number;\n description: string;\n};\n\nexport type WsfeActivityType = WsfeCatalogEntry & {\n order: number;\n};\n\nexport type WsfeReceiverVatCondition = WsfeCatalogEntry & {\n voucherClass: string;\n};\n\nexport type WsfeCurrencyType = {\n id: string;\n description: string;\n validFrom: string;\n validTo: string;\n};\n\nexport type WsfeServerStatus = {\n appServer: string;\n dbServer: string;\n authServer: string;\n};\n\nexport type WsfeQuotation = {\n currencyId: string;\n rate: number;\n date: string;\n};\n\n/** WSFE electronic invoicing service. */\nexport type WsfeService = {\n /**\n * Issues one exact voucher: a single FECAESolicitar for the caller-owned\n * `voucherNumber`, without transport retries, returning structured evidence\n * (`authorized`, `rejected` or `indeterminate`) instead of throwing.\n */\n issue(input: WsfeIssueInput): Promise<WsfeAuthorizationOutcome>;\n /** Returns the next available voucher number for the given sales point and type. */\n getNextVoucherNumber(input: {\n representedTaxId?: number | string;\n salesPoint: number;\n voucherType: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }): Promise<number>;\n /** Lists all configured points of sale for the taxpayer. */\n getSalesPoints(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeSalesPoint[]>;\n /** Lists voucher types accepted by WSFE. */\n getVoucherTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists document types accepted by WSFE. */\n getDocumentTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists concept types accepted by WSFE. */\n getConceptTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists live ARCA currency identifiers such as PES and DOL, not ISO codes. */\n getCurrencyTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCurrencyType[]>;\n /** Lists VAT rates accepted by WSFE. */\n getVatRates(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists tax types accepted by WSFE. */\n getTaxTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists optional field types accepted by WSFE. */\n getOptionalTypes(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeCatalogEntry[]>;\n /** Lists activities enabled for the taxpayer. */\n getActivities(input?: {\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeActivityType[]>;\n /** Lists receiver VAT condition values accepted by WSFE. */\n getReceiverVatConditions(input?: {\n representedTaxId?: number | string;\n voucherClass?: string;\n forceRefresh?: boolean;\n }): Promise<WsfeReceiverVatCondition[]>;\n /** Reports WSFE backend status without requiring taxpayer authorization. */\n getServerStatus(): Promise<WsfeServerStatus>;\n /** Returns the exchange rate for a given currency. */\n getQuotation(input: {\n currencyId: string;\n representedTaxId?: number | string;\n forceRefresh?: boolean;\n }): Promise<WsfeQuotation>;\n /** Consults one exact voucher and normalizes WSFE error 602 to `not_found`. */\n lookupVoucher(input: {\n representedTaxId?: number | string;\n number: number;\n salesPoint: number;\n voucherType: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }): Promise<WsfeVoucherLookupResult>;\n};\n\nexport type CreateWsfeServiceOptions = {\n config: ArcaClientConfig;\n auth: WsaaAuthModule;\n soap: SoapTransport;\n};\n\ntype NormalizedWsfeAssociatedVoucher = Omit<\n WsfeAssociatedVoucher,\n \"voucherDate\"\n> & {\n voucherDate?: string;\n};\n\ntype NormalizedWsfeAssociatedPeriod = {\n startDate: string;\n endDate: string;\n};\n\ntype NormalizedWsfeTax = Omit<WsfeTax, \"baseAmount\" | \"rate\" | \"amount\"> & {\n baseAmount: string;\n rate: string;\n amount: string;\n};\n\ntype NormalizedWsfeVatRate = Omit<WsfeVatRate, \"baseAmount\" | \"amount\"> & {\n baseAmount: string;\n amount: string;\n};\n\ntype NormalizedWsfeVoucherInput = Omit<\n WsfeVoucherInput,\n | \"voucherDate\"\n | \"serviceStartDate\"\n | \"serviceEndDate\"\n | \"paymentDueDate\"\n | \"associatedVouchers\"\n | \"associatedPeriod\"\n | \"totalAmount\"\n | \"nonTaxableAmount\"\n | \"netAmount\"\n | \"exemptAmount\"\n | \"taxAmount\"\n | \"vatAmount\"\n | \"exchangeRate\"\n | \"taxes\"\n | \"vatRates\"\n> & {\n voucherDate: string;\n totalAmount: string;\n nonTaxableAmount: string;\n netAmount: string;\n exemptAmount: string;\n taxAmount: string;\n vatAmount: string;\n exchangeRate?: string;\n serviceStartDate?: string;\n serviceEndDate?: string;\n paymentDueDate?: string;\n associatedVouchers?: NormalizedWsfeAssociatedVoucher[];\n associatedPeriod?: NormalizedWsfeAssociatedPeriod;\n taxes?: NormalizedWsfeTax[];\n vatRates?: NormalizedWsfeVatRate[];\n};\n\n/** Creates a WSFE service instance wired with authentication and SOAP transport. */\nexport function createWsfeService(\n options: CreateWsfeServiceOptions\n): WsfeService {\n async function executeWsfeAuthenticatedRawOperation(\n operation: string,\n input: {\n representedTaxId?: ArcaRepresentedTaxId;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n },\n body: Record<string, unknown> = {},\n retries?: number\n ) {\n const auth = await options.auth.login(\"wsfe\", {\n representedTaxId: input.representedTaxId,\n forceRefresh: input.forceRefresh,\n abortSignal: input.abortSignal,\n });\n const response = await options.soap.execute<\n Record<string, unknown>,\n Record<string, unknown>\n >({\n service: \"wsfe\",\n operation,\n ...(retries === undefined ? {} : { retries }),\n signal: input.abortSignal,\n body: {\n Auth: createWsfeAuth(\n input.representedTaxId ?? options.config.taxId,\n auth.token,\n auth.sign\n ),\n ...body,\n },\n });\n\n return unwrapWsfeOperationEnvelope(operation, response.result);\n }\n\n function executeWsfeAuthenticatedOperation(\n operation: string,\n input: {\n representedTaxId?: ArcaRepresentedTaxId;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n },\n body: Record<string, unknown> = {}\n ) {\n return executeWithAuthenticationRecovery({\n service: \"wsfe\",\n operation,\n forceRefresh: input.forceRefresh,\n async execute(forceRefresh) {\n const result = await executeWsfeAuthenticatedRawOperation(\n operation,\n {\n representedTaxId: input.representedTaxId,\n forceRefresh,\n abortSignal: input.abortSignal,\n },\n body\n );\n throwForWsfeOperationErrors(operation, result);\n return result;\n },\n });\n }\n\n async function executeWsfeOperation(\n operation: string,\n body: Record<string, unknown> = {}\n ) {\n const response = await options.soap.execute<\n Record<string, unknown>,\n Record<string, unknown>\n >({\n service: \"wsfe\",\n operation,\n body,\n });\n\n const result = unwrapWsfeOperationEnvelope(operation, response.result);\n throwForWsfeOperationErrors(operation, result);\n return result;\n }\n\n async function getNextVoucherNumber({\n representedTaxId,\n salesPoint,\n voucherType,\n forceRefresh,\n abortSignal,\n }: {\n representedTaxId?: number | string;\n salesPoint: number;\n voucherType: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }) {\n const result = await executeWsfeAuthenticatedOperation(\n \"FECompUltimoAutorizado\",\n {\n representedTaxId,\n forceRefresh,\n abortSignal,\n },\n {\n PtoVta: salesPoint,\n CbteTipo: voucherType,\n }\n );\n const rawNumber = result.CbteNro;\n const lastNumber = Number(rawNumber);\n if (\n (typeof rawNumber !== \"string\" && typeof rawNumber !== \"number\") ||\n !/^\\d+$/.test(String(rawNumber).trim()) ||\n !Number.isSafeInteger(lastNumber) ||\n lastNumber < 0 ||\n lastNumber > 99_999_999\n ) {\n throw new ArcaInvalidSoapResponseError(\n \"Invalid WSFE last authorized number\",\n {\n service: \"wsfe\",\n operation: \"FECompUltimoAutorizado\",\n }\n );\n }\n return lastNumber + 1;\n }\n\n async function getWsfeCatalog(\n operation: string,\n resultKey: string,\n input: {\n representedTaxId?: ArcaRepresentedTaxId;\n forceRefresh?: boolean;\n }\n ): Promise<WsfeCatalogEntry[]> {\n const result = await executeWsfeAuthenticatedOperation(operation, {\n representedTaxId: input.representedTaxId,\n forceRefresh: input.forceRefresh,\n });\n return getWsfeResultEntries(result, resultKey).map(mapWsfeCatalogEntry);\n }\n\n function issue({\n representedTaxId,\n data,\n voucherNumber,\n forceRefresh,\n abortSignal,\n }: WsfeIssueInput): Promise<WsfeAuthorizationOutcome> {\n const normalizedInput = normalizeWsfeVoucherInput(data);\n return executeWsfeAuthorization({\n representedTaxId,\n data: normalizedInput,\n voucherNumber,\n forceRefresh,\n abortSignal,\n }).then(({ outcome }) => outcome);\n }\n\n async function executeWsfeAuthorization({\n representedTaxId,\n data: normalizedInput,\n voucherNumber,\n forceRefresh,\n abortSignal,\n }: {\n representedTaxId?: number | string;\n data: NormalizedWsfeVoucherInput;\n voucherNumber: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }): Promise<{\n outcome: WsfeAuthorizationOutcome;\n error?: unknown;\n }> {\n const requestData = mapWsfeVoucherInput(normalizedInput, voucherNumber);\n\n try {\n const result = await executeWsfeAuthenticatedRawOperation(\n \"FECAESolicitar\",\n { representedTaxId, forceRefresh, abortSignal },\n {\n FeCAEReq: {\n FeCabReq: {\n CantReg: 1,\n PtoVta: normalizedInput.salesPoint,\n CbteTipo: normalizedInput.voucherType,\n },\n FeDetReq: {\n FECAEDetRequest: requestData,\n },\n },\n },\n 0\n );\n\n return {\n outcome: classifyWsfeAuthorization(result, voucherNumber),\n };\n } catch (error) {\n return {\n outcome: createWsfeIndeterminateOutcome(error),\n error,\n };\n }\n }\n\n function lookupVoucher({\n representedTaxId,\n number,\n salesPoint,\n voucherType,\n forceRefresh,\n abortSignal,\n }: {\n representedTaxId?: number | string;\n number: number;\n salesPoint: number;\n voucherType: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }): Promise<WsfeVoucherLookupResult> {\n return executeWithAuthenticationRecovery({\n service: \"wsfe\",\n operation: \"FECompConsultar\",\n forceRefresh,\n execute: (attemptForceRefresh) =>\n lookupVoucherOnce({\n representedTaxId,\n number,\n salesPoint,\n voucherType,\n forceRefresh: attemptForceRefresh,\n abortSignal,\n }),\n });\n }\n\n async function lookupVoucherOnce({\n representedTaxId,\n number,\n salesPoint,\n voucherType,\n forceRefresh,\n abortSignal,\n }: {\n representedTaxId?: number | string;\n number: number;\n salesPoint: number;\n voucherType: number;\n forceRefresh?: boolean;\n abortSignal?: AbortSignal;\n }): Promise<WsfeVoucherLookupResult> {\n const operation = \"FECompConsultar\";\n const result = await executeWsfeAuthenticatedRawOperation(\n operation,\n { representedTaxId, forceRefresh, abortSignal },\n {\n FeCompConsReq: {\n CbteNro: number,\n PtoVta: salesPoint,\n CbteTipo: voucherType,\n },\n }\n );\n const errors = extractWsfeGlobalIssues(result, operation);\n\n if (errors.length > 0 && errors.every((issue) => issue.code === \"602\")) {\n return {\n kind: \"not_found\",\n service: \"wsfe\",\n operation,\n errors,\n observations: [],\n raw: result,\n };\n }\n\n if (errors.length > 0) {\n throw createWsfeServiceError(operation, errors);\n }\n\n const raw = toWsfeRecord(result.ResultGet);\n if (!raw) {\n throw new ArcaServiceError(\"WSFE did not return the consulted voucher\", {\n service: \"wsfe\",\n operation,\n });\n }\n\n return {\n kind: \"found\",\n service: \"wsfe\",\n operation,\n voucher: mapWsfeVoucherInfo(raw),\n observations: [],\n raw: result,\n };\n }\n\n return {\n issue,\n getNextVoucherNumber,\n async getSalesPoints({ representedTaxId, forceRefresh } = {}) {\n const operation = \"FEParamGetPtosVenta\";\n const result = await executeWithAuthenticationRecovery({\n service: \"wsfe\",\n operation,\n forceRefresh,\n async execute(attemptForceRefresh) {\n const raw = await executeWsfeAuthenticatedRawOperation(\n operation,\n { representedTaxId, forceRefresh: attemptForceRefresh },\n {}\n );\n // A taxpayer with no sales point for web services gets WSFE error\n // 602 (Sin Resultados) instead of an empty list. That is an answer,\n // not a failure, so it becomes the empty list it means.\n const errors = extractWsfeGlobalIssues(raw, operation);\n if (\n errors.length > 0 &&\n errors.every((issue) => issue.code === \"602\")\n ) {\n return {};\n }\n throwForWsfeOperationErrors(operation, raw);\n return raw;\n },\n });\n const rawPoints = (\n result.ResultGet as Record<string, unknown> | undefined\n )?.PtoVenta;\n if (!rawPoints) {\n return [];\n }\n const entries = Array.isArray(rawPoints) ? rawPoints : [rawPoints];\n return entries.map(mapWsfeSalesPoint);\n },\n getVoucherTypes(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposCbte\", \"CbteTipo\", input);\n },\n getDocumentTypes(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposDoc\", \"DocTipo\", input);\n },\n getConceptTypes(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposConcepto\", \"ConceptoTipo\", input);\n },\n async getCurrencyTypes({ representedTaxId, forceRefresh } = {}) {\n const result = await executeWsfeAuthenticatedOperation(\n \"FEParamGetTiposMonedas\",\n {\n representedTaxId,\n forceRefresh,\n }\n );\n return getWsfeResultEntries(result, \"Moneda\").map(mapWsfeCurrencyType);\n },\n getVatRates(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposIva\", \"IvaTipo\", input);\n },\n getTaxTypes(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposTributos\", \"TributoTipo\", input);\n },\n getOptionalTypes(input = {}) {\n return getWsfeCatalog(\"FEParamGetTiposOpcional\", \"OpcionalTipo\", input);\n },\n async getActivities({ representedTaxId, forceRefresh } = {}) {\n const result = await executeWsfeAuthenticatedOperation(\n \"FEParamGetActividades\",\n {\n representedTaxId,\n forceRefresh,\n }\n );\n return getWsfeResultEntries(result, \"ActividadesTipo\").map(\n mapWsfeActivityType\n );\n },\n async getReceiverVatConditions({\n representedTaxId,\n voucherClass,\n forceRefresh,\n } = {}) {\n const result = await executeWsfeAuthenticatedOperation(\n \"FEParamGetCondicionIvaReceptor\",\n {\n representedTaxId,\n forceRefresh,\n },\n {\n ...(voucherClass === undefined ? {} : { ClaseCmp: voucherClass }),\n }\n );\n return getWsfeResultEntries(result, \"CondicionIvaReceptor\").map(\n mapWsfeReceiverVatCondition\n );\n },\n async getServerStatus() {\n const result = await executeWsfeOperation(\"FEDummy\");\n return mapWsfeServerStatus(result);\n },\n async getQuotation({ currencyId, representedTaxId, forceRefresh }) {\n const result = await executeWsfeAuthenticatedOperation(\n \"FEParamGetCotizacion\",\n {\n representedTaxId,\n forceRefresh,\n },\n {\n MonId: currencyId,\n }\n );\n const raw =\n (result.ResultGet as Record<string, unknown> | undefined) ?? {};\n return mapWsfeQuotation(raw);\n },\n lookupVoucher,\n };\n}\n\nfunction mapWsfeVoucherInput(\n input: NormalizedWsfeVoucherInput,\n voucherNumber: number\n): Record<string, unknown> {\n const data: Record<string, unknown> = {\n Concepto: input.concept,\n DocTipo: input.documentType,\n DocNro: input.documentNumber,\n CbteDesde: voucherNumber,\n CbteHasta: voucherNumber,\n CbteFch: input.voucherDate,\n ImpTotal: input.totalAmount,\n ImpTotConc: input.nonTaxableAmount,\n ImpNeto: input.netAmount,\n ImpOpEx: input.exemptAmount,\n ImpTrib: input.taxAmount,\n ImpIVA: input.vatAmount,\n MonId: input.currencyId,\n CondicionIVAReceptorId: input.receiverVatConditionId,\n PtoVta: input.salesPoint,\n CbteTipo: input.voucherType,\n };\n\n if (input.exchangeRate !== undefined) {\n data.MonCotiz = input.exchangeRate;\n }\n\n if (\n input.currencyId !== \"PES\" &&\n input.sameCurrencyForeignCancellation !== undefined\n ) {\n data.CanMisMonExt = input.sameCurrencyForeignCancellation;\n }\n\n if (input.serviceStartDate !== undefined) {\n data.FchServDesde = input.serviceStartDate;\n }\n if (input.serviceEndDate !== undefined) {\n data.FchServHasta = input.serviceEndDate;\n }\n if (input.paymentDueDate !== undefined) {\n data.FchVtoPago = input.paymentDueDate;\n }\n\n if (input.associatedVouchers) {\n data.CbtesAsoc = {\n CbteAsoc: input.associatedVouchers.map((v) => ({\n Tipo: v.type,\n PtoVta: v.salesPoint,\n Nro: v.number,\n ...(v.taxId === undefined ? {} : { Cuit: v.taxId }),\n ...(v.voucherDate === undefined ? {} : { CbteFch: v.voucherDate }),\n })),\n };\n }\n\n if (input.associatedPeriod) {\n data.PeriodoAsoc = {\n FchDesde: input.associatedPeriod.startDate,\n FchHasta: input.associatedPeriod.endDate,\n };\n }\n\n if (input.taxes) {\n data.Tributos = {\n Tributo: input.taxes.map((t) => ({\n Id: t.id,\n ...(t.description === undefined ? {} : { Desc: t.description }),\n BaseImp: t.baseAmount,\n Alic: t.rate,\n Importe: t.amount,\n })),\n };\n }\n\n if (input.vatRates) {\n data.Iva = {\n AlicIva: input.vatRates.map((v) => ({\n Id: v.id,\n BaseImp: v.baseAmount,\n Importe: v.amount,\n })),\n };\n }\n\n if (input.optionalFields) {\n data.Opcionales = {\n Opcional: input.optionalFields.map((o) => ({\n Id: o.id,\n Valor: o.value,\n })),\n };\n }\n\n if (input.buyers) {\n data.Compradores = {\n Comprador: input.buyers.map((b) => ({\n DocTipo: b.documentType,\n DocNro: b.documentNumber,\n Porcentaje: b.percentage,\n })),\n };\n }\n\n if (input.activities) {\n data.Actividades = {\n Actividad: input.activities.map((a) => ({\n Id: a.id,\n })),\n };\n }\n\n return data;\n}\n\nexport function normalizeWsfeVoucherInput(\n input: WsfeVoucherInput\n): NormalizedWsfeVoucherInput {\n if (input.receiverVatConditionId === undefined) {\n throw new ArcaInputError(\"receiverVatConditionId is required.\", {\n code: \"ARCA_INPUT_MISSING_FIELD\",\n field: \"receiverVatConditionId\",\n expected: \"a receiver VAT condition accepted for the voucher class\",\n });\n }\n\n const {\n voucherDate,\n exchangeRate,\n serviceStartDate,\n serviceEndDate,\n paymentDueDate,\n associatedVouchers,\n associatedPeriod,\n taxes,\n vatRates,\n ...rest\n } = input;\n const normalizedExchangeRate = normalizeWsfeExchangeRate(input, exchangeRate);\n const normalizedAmounts = normalizeAndValidateWsfeAmounts(input);\n\n return {\n ...rest,\n ...normalizedAmounts,\n voucherDate: normalizeWsfeDateInput(voucherDate, \"voucherDate\"),\n ...(normalizedExchangeRate === undefined\n ? {}\n : { exchangeRate: normalizedExchangeRate }),\n ...(serviceStartDate === undefined\n ? {}\n : {\n serviceStartDate: normalizeWsfeDateInput(\n serviceStartDate,\n \"serviceStartDate\"\n ),\n }),\n ...(serviceEndDate === undefined\n ? {}\n : {\n serviceEndDate: normalizeWsfeDateInput(\n serviceEndDate,\n \"serviceEndDate\"\n ),\n }),\n ...(paymentDueDate === undefined\n ? {}\n : {\n paymentDueDate: normalizeWsfeDateInput(\n paymentDueDate,\n \"paymentDueDate\"\n ),\n }),\n ...(associatedVouchers === undefined\n ? {}\n : {\n associatedVouchers: associatedVouchers.map((voucher, index) => {\n const { voucherDate: associatedVoucherDate, ...associatedRest } =\n voucher;\n\n return {\n ...associatedRest,\n ...(associatedVoucherDate === undefined\n ? {}\n : {\n voucherDate: normalizeWsfeDateInput(\n associatedVoucherDate,\n `associatedVouchers[${index}].voucherDate`\n ),\n }),\n };\n }),\n }),\n ...(associatedPeriod === undefined\n ? {}\n : {\n associatedPeriod: {\n startDate: normalizeWsfeDateInput(\n associatedPeriod.startDate,\n \"associatedPeriod.startDate\"\n ),\n endDate: normalizeWsfeDateInput(\n associatedPeriod.endDate,\n \"associatedPeriod.endDate\"\n ),\n },\n }),\n ...(taxes === undefined\n ? {}\n : {\n taxes: taxes.map((tax, index) => ({\n ...tax,\n baseAmount: serializeArcaAmount(\n tax.baseAmount,\n `taxes[${index}].baseAmount`\n ),\n rate: serializeArcaPercentage(tax.rate, `taxes[${index}].rate`),\n amount: serializeArcaAmount(tax.amount, `taxes[${index}].amount`),\n })),\n }),\n ...(vatRates === undefined\n ? {}\n : {\n vatRates: vatRates.map((vatRate, index) => ({\n ...vatRate,\n baseAmount: serializeArcaAmount(\n vatRate.baseAmount,\n `vatRates[${index}].baseAmount`\n ),\n amount: serializeArcaAmount(\n vatRate.amount,\n `vatRates[${index}].amount`\n ),\n })),\n }),\n };\n}\n\nfunction normalizeAndValidateWsfeAmounts(\n input: WsfeVoucherInput\n): Pick<\n NormalizedWsfeVoucherInput,\n | \"totalAmount\"\n | \"nonTaxableAmount\"\n | \"netAmount\"\n | \"exemptAmount\"\n | \"taxAmount\"\n | \"vatAmount\"\n> {\n const totalAmount = normalizeArcaAmountToMinorUnits(\n input.totalAmount,\n \"totalAmount\"\n );\n const nonTaxableAmount = normalizeArcaAmountToMinorUnits(\n input.nonTaxableAmount,\n \"nonTaxableAmount\"\n );\n const netAmount = normalizeArcaAmountToMinorUnits(\n input.netAmount,\n \"netAmount\"\n );\n const exemptAmount = normalizeArcaAmountToMinorUnits(\n input.exemptAmount,\n \"exemptAmount\"\n );\n const taxAmount = normalizeArcaAmountToMinorUnits(\n input.taxAmount,\n \"taxAmount\"\n );\n const vatAmount = normalizeArcaAmountToMinorUnits(\n input.vatAmount,\n \"vatAmount\"\n );\n\n const decomposedTotal =\n nonTaxableAmount + netAmount + exemptAmount + taxAmount + vatAmount;\n assertWsfeAmountMatch(\n totalAmount,\n decomposedTotal,\n \"totalAmount\",\n \"the sum of nonTaxableAmount, netAmount, exemptAmount, taxAmount, and vatAmount\"\n );\n\n const vatRates = input.vatRates ?? [];\n if (vatAmount > 0n && vatRates.length === 0) {\n throw new ArcaInputError(\n \"vatRates is required when vatAmount is greater than zero.\",\n {\n code: \"ARCA_INPUT_MISSING_FIELD\",\n field: \"vatRates\",\n expected: \"VAT detail whose amounts reconcile with vatAmount\",\n }\n );\n }\n\n if (vatRates.length > 0) {\n const normalizedVatRates = vatRates.map((vatRate, index) => ({\n baseAmount: normalizeArcaAmountToMinorUnits(\n vatRate.baseAmount,\n `vatRates[${index}].baseAmount`\n ),\n amount: normalizeArcaAmountToMinorUnits(\n vatRate.amount,\n `vatRates[${index}].amount`\n ),\n }));\n const vatRateAmountSum = normalizedVatRates.reduce(\n (sum, vatRate) => sum + vatRate.amount,\n 0n\n );\n const vatRateBaseSum = normalizedVatRates.reduce(\n (sum, vatRate) => sum + vatRate.baseAmount,\n 0n\n );\n\n assertWsfeAmountMatch(\n vatAmount,\n vatRateAmountSum,\n \"vatAmount\",\n \"the sum of vatRates[].amount\",\n vatRates.length\n );\n if (requiresWsfeVatBaseReconciliation(input.voucherType)) {\n assertWsfeAmountMatch(\n netAmount,\n vatRateBaseSum,\n \"netAmount\",\n \"the sum of vatRates[].baseAmount\",\n vatRates.length\n );\n }\n }\n\n const taxes = input.taxes ?? [];\n if (taxAmount > 0n && taxes.length === 0) {\n throw new ArcaInputError(\n \"taxes is required when taxAmount is greater than zero.\",\n {\n code: \"ARCA_INPUT_MISSING_FIELD\",\n field: \"taxes\",\n expected: \"tax detail whose amounts reconcile with taxAmount\",\n }\n );\n }\n\n if (taxes.length > 0) {\n const taxAmountSum = taxes.reduce((sum, tax, index) => {\n normalizeArcaAmountToMinorUnits(\n tax.baseAmount,\n `taxes[${index}].baseAmount`\n );\n serializeArcaPercentage(tax.rate, `taxes[${index}].rate`);\n return (\n sum +\n normalizeArcaAmountToMinorUnits(tax.amount, `taxes[${index}].amount`)\n );\n }, 0n);\n\n assertWsfeAmountMatch(\n taxAmount,\n taxAmountSum,\n \"taxAmount\",\n \"the sum of taxes[].amount\",\n taxes.length\n );\n }\n\n return {\n totalAmount: serializeArcaAmount(input.totalAmount, \"totalAmount\"),\n nonTaxableAmount: serializeArcaAmount(\n input.nonTaxableAmount,\n \"nonTaxableAmount\"\n ),\n netAmount: serializeArcaAmount(input.netAmount, \"netAmount\"),\n exemptAmount: serializeArcaAmount(input.exemptAmount, \"exemptAmount\"),\n taxAmount: serializeArcaAmount(input.taxAmount, \"taxAmount\"),\n vatAmount: serializeArcaAmount(input.vatAmount, \"vatAmount\"),\n };\n}\n\nfunction requiresWsfeVatBaseReconciliation(voucherType: number): boolean {\n // WSFE validation 10061 exempts debit/credit notes, class C vouchers,\n // and class A vouchers with the retention legend. The manual enumerates the\n // ordinary and M types only; the FCE (MiPyME) family mirrors them one to one,\n // so its notes and its class C invoice are exempt on the same grounds.\n return ![\n 2, 3, 7, 8, 11, 12, 13, 15, 52, 53, 202, 203, 207, 208, 211, 212, 213,\n ].includes(voucherType);\n}\n\nfunction assertWsfeAmountMatch(\n actual: bigint,\n expectedAmount: bigint,\n field: string,\n expectedDescription: string,\n absoluteCentAllowance = 1\n) {\n if (!isWithinArcaTolerance(actual, expectedAmount, absoluteCentAllowance)) {\n throw new ArcaInputError(\n `${field} does not reconcile within ARCA's documented tolerance.`,\n {\n code: \"ARCA_INPUT_AMOUNT_MISMATCH\",\n field,\n expected: `within ARCA tolerance of ${expectedDescription}`,\n }\n );\n }\n}\n\nfunction normalizeWsfeExchangeRate(\n input: Pick<\n WsfeVoucherInput,\n \"currencyId\" | \"sameCurrencyForeignCancellation\"\n >,\n exchangeRate: number | string | undefined\n): string | undefined {\n if (input.currencyId === \"PES\") {\n if (\n exchangeRate !== undefined &&\n serializeArcaExchangeRate(exchangeRate, \"exchangeRate\") !== \"1\"\n ) {\n throw new ArcaInputError(\n \"exchangeRate must be 1 when currencyId is PES.\",\n {\n code: \"ARCA_INPUT_INVALID_EXCHANGE_RATE\",\n field: \"exchangeRate\",\n expected: \"1 when currencyId is PES\",\n }\n );\n }\n return \"1\";\n }\n\n if (exchangeRate === undefined) {\n if (input.sameCurrencyForeignCancellation === \"S\") {\n return undefined;\n }\n throw new ArcaInputError(\n \"exchangeRate is required unless sameCurrencyForeignCancellation is S for a foreign-currency voucher.\",\n {\n code: \"ARCA_INPUT_MISSING_FIELD\",\n field: \"exchangeRate\",\n expected:\n \"a positive exchange rate unless sameCurrencyForeignCancellation is S\",\n }\n );\n }\n\n return serializeArcaExchangeRate(exchangeRate, \"exchangeRate\");\n}\n\nexport function normalizeWsfeDateInput(\n value: WsfeDateInput,\n fieldName: string\n): string {\n if (typeof value !== \"string\") {\n throw new ArcaInputError(\n `Invalid WSFE ${fieldName}: expected a YYYY-MM-DD or YYYYMMDD string`,\n {\n code: \"ARCA_INPUT_INVALID_DATE\",\n field: fieldName,\n expected: \"a YYYY-MM-DD or YYYYMMDD calendar date string\",\n }\n );\n }\n\n const normalizedValue = value.trim();\n const afipMatch = normalizedValue.match(/^(\\d{4})(\\d{2})(\\d{2})$/);\n if (afipMatch) {\n const [, year, month, day] = afipMatch;\n assertValidCalendarDate(year, month, day, fieldName);\n return normalizedValue;\n }\n\n const isoMatch = normalizedValue.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (isoMatch) {\n const [, year, month, day] = isoMatch;\n assertValidCalendarDate(year, month, day, fieldName);\n return `${year}${month}${day}`;\n }\n\n throw new ArcaInputError(\n `Invalid WSFE ${fieldName}: expected a YYYY-MM-DD or YYYYMMDD string`,\n {\n code: \"ARCA_INPUT_INVALID_DATE\",\n field: fieldName,\n expected: \"a YYYY-MM-DD or YYYYMMDD calendar date string\",\n }\n );\n}\n\nfunction assertValidCalendarDate(\n yearInput: string,\n monthInput: string,\n dayInput: string,\n fieldName: string\n) {\n const year = Number(yearInput);\n const month = Number(monthInput);\n const day = Number(dayInput);\n const candidate = new Date(Date.UTC(year, month - 1, day));\n\n if (\n candidate.getUTCFullYear() !== year ||\n candidate.getUTCMonth() !== month - 1 ||\n candidate.getUTCDate() !== day\n ) {\n throw new ArcaInputError(\n `Invalid WSFE ${fieldName}: received a non-existent calendar date`,\n {\n code: \"ARCA_INPUT_INVALID_DATE\",\n field: fieldName,\n expected: \"an existing calendar date\",\n }\n );\n }\n}\n\n/** ARCA answers `Bloqueado` as `S`/`N` and an active point's `FchBaja` as `NULL`. */\nfunction mapWsfeSalesPoint(raw: unknown): WsfeSalesPoint {\n const record = raw as Record<string, unknown>;\n const deletedAt = toIsoDate(record.FchBaja);\n return {\n number: Number(record.Nro ?? 0),\n ...(record.EmisionTipo === undefined\n ? {}\n : { emissionType: String(record.EmisionTipo) }),\n blocked:\n String(record.Bloqueado ?? \"N\")\n .trim()\n .toUpperCase() === \"S\",\n ...(deletedAt === undefined ? {} : { deletedAt }),\n };\n}\n\nfunction mapWsfeCatalogEntry(raw: unknown): WsfeCatalogEntry {\n const record = raw as Record<string, unknown>;\n return {\n id: Number(record.Id ?? 0),\n description: String(record.Desc ?? \"\"),\n };\n}\n\nfunction mapWsfeActivityType(raw: unknown): WsfeActivityType {\n const record = raw as Record<string, unknown>;\n return {\n id: Number(record.Id ?? 0),\n description: String(record.Desc ?? \"\"),\n order: Number(record.Orden ?? 0),\n };\n}\n\nfunction mapWsfeReceiverVatCondition(raw: unknown): WsfeReceiverVatCondition {\n const record = raw as Record<string, unknown>;\n return {\n id: Number(record.Id ?? 0),\n description: String(record.Desc ?? \"\"),\n voucherClass: String(record.Cmp_Clase ?? \"\"),\n };\n}\n\nfunction mapWsfeCurrencyType(raw: unknown): WsfeCurrencyType {\n const record = raw as Record<string, unknown>;\n return {\n id: String(record.Id ?? \"\"),\n description: String(record.Desc ?? \"\"),\n validFrom: String(record.FchDesde ?? \"\"),\n validTo: String(record.FchHasta ?? \"\"),\n };\n}\n\nfunction mapWsfeServerStatus(raw: Record<string, unknown>): WsfeServerStatus {\n return {\n appServer: String(raw.AppServer ?? \"\"),\n dbServer: String(raw.DbServer ?? \"\"),\n authServer: String(raw.AuthServer ?? \"\"),\n };\n}\n\nfunction mapWsfeQuotation(raw: Record<string, unknown>): WsfeQuotation {\n return {\n currencyId: String(raw.MonId ?? \"\"),\n rate: Number(raw.MonCotiz ?? 0),\n date: String(raw.FchCotiz ?? \"\"),\n };\n}\n\nfunction mapWsfeVoucherInfo(raw: Record<string, unknown>): WsfeVoucherInfo {\n const voucher: WsfeVoucherInfo = {\n voucherNumber: Number(raw.CbteDesde ?? raw.CbteHasta ?? 0),\n raw,\n };\n\n assignWsfeValue(voucher, \"voucherDate\", normalizeWsfeString(raw.CbteFch));\n assignWsfeValue(voucher, \"salesPoint\", normalizeWsfeNumber(raw.PtoVta));\n assignWsfeValue(voucher, \"voucherType\", normalizeWsfeNumber(raw.CbteTipo));\n assignWsfeValue(voucher, \"concept\", normalizeWsfeNumber(raw.Concepto));\n assignWsfeValue(voucher, \"documentType\", normalizeWsfeNumber(raw.DocTipo));\n assignWsfeValue(voucher, \"documentNumber\", normalizeWsfeString(raw.DocNro));\n assignWsfeValue(\n voucher,\n \"receiverVatConditionId\",\n normalizeWsfeNumber(raw.CondicionIVAReceptorId)\n );\n assignWsfeValue(voucher, \"totalAmount\", normalizeWsfeNumber(raw.ImpTotal));\n assignWsfeValue(\n voucher,\n \"nonTaxableAmount\",\n normalizeWsfeNumber(raw.ImpTotConc)\n );\n assignWsfeValue(voucher, \"netAmount\", normalizeWsfeNumber(raw.ImpNeto));\n assignWsfeValue(voucher, \"exemptAmount\", normalizeWsfeNumber(raw.ImpOpEx));\n assignWsfeValue(voucher, \"taxAmount\", normalizeWsfeNumber(raw.ImpTrib));\n assignWsfeValue(voucher, \"vatAmount\", normalizeWsfeNumber(raw.ImpIVA));\n assignWsfeValue(voucher, \"currencyId\", normalizeWsfeString(raw.MonId));\n assignWsfeValue(voucher, \"exchangeRate\", normalizeWsfeNumber(raw.MonCotiz));\n assignWsfeValue(voucher, \"result\", normalizeWsfeString(raw.Resultado));\n assignWsfeValue(\n voucher,\n \"cae\",\n normalizeWsfeString(raw.CodAutorizacion ?? raw.CAE)\n );\n assignWsfeValue(\n voucher,\n \"caeExpiry\",\n normalizeWsfeString(raw.FchVto ?? raw.CAEFchVto)\n );\n\n assignWsfeValue(\n voucher,\n \"serviceStartDate\",\n normalizeWsfeString(raw.FchServDesde)\n );\n assignWsfeValue(\n voucher,\n \"serviceEndDate\",\n normalizeWsfeString(raw.FchServHasta)\n );\n assignWsfeValue(\n voucher,\n \"paymentDueDate\",\n normalizeWsfeString(raw.FchVtoPago)\n );\n assignWsfeValue(\n voucher,\n \"vatRates\",\n mapWsfeLookupDetails(raw.Iva, \"AlicIva\", mapWsfeLookupVat)\n );\n assignWsfeValue(\n voucher,\n \"taxes\",\n mapWsfeLookupDetails(raw.Tributos, \"Tributo\", mapWsfeLookupTax)\n );\n\n assignWsfeValue(\n voucher,\n \"associatedVouchers\",\n mapWsfeLookupDetails(raw.CbtesAsoc, \"CbteAsoc\", (item) => {\n const type = normalizeWsfeNumber(item.Tipo);\n const salesPoint = normalizeWsfeNumber(item.PtoVta);\n const number = normalizeWsfeNumber(item.Nro);\n if (\n type === undefined ||\n salesPoint === undefined ||\n number === undefined\n ) {\n return undefined;\n }\n return {\n type,\n salesPoint,\n number,\n ...(normalizeWsfeString(item.Cuit)\n ? { taxId: normalizeWsfeString(item.Cuit) }\n : {}),\n ...(normalizeWsfeString(item.CbteFch)\n ? { voucherDate: normalizeWsfeString(item.CbteFch) as WsfeDateInput }\n : {}),\n };\n })\n );\n const period = toWsfeRecord(raw.PeriodoAsoc);\n if (period?.FchDesde && period.FchHasta) {\n voucher.associatedPeriod = {\n startDate: String(period.FchDesde) as WsfeDateInput,\n endDate: String(period.FchHasta) as WsfeDateInput,\n };\n }\n if (raw.CanMisMonExt === \"S\" || raw.CanMisMonExt === \"N\") {\n voucher.sameCurrencyForeignCancellation = raw.CanMisMonExt;\n }\n voucher.optionalFields = mapWsfeLookupDetails(\n raw.Opcionales,\n \"Opcional\",\n (item) =>\n item.Id === undefined || item.Valor === undefined\n ? undefined\n : { id: String(item.Id), value: String(item.Valor) }\n );\n voucher.buyers = mapWsfeLookupDetails(\n raw.Compradores,\n \"Comprador\",\n (item) => {\n const documentType = normalizeWsfeNumber(item.DocTipo),\n documentNumber = normalizeWsfeNumber(item.DocNro),\n percentage = normalizeWsfeNumber(item.Porcentaje);\n return documentType === undefined ||\n documentNumber === undefined ||\n percentage === undefined\n ? undefined\n : { documentType, documentNumber, percentage };\n }\n );\n voucher.activities = mapWsfeLookupDetails(\n raw.Actividades,\n \"Actividad\",\n (item) => {\n const id = normalizeWsfeNumber(item.Id);\n return id === undefined ? undefined : { id };\n }\n );\n return voucher;\n}\n\n// A missing or malformed detail stays absent; never fabricate zero-valued identity evidence.\nfunction mapWsfeLookupDetails<T>(\n container: unknown,\n key: string,\n map: (row: Record<string, unknown>) => T | undefined\n): T[] | undefined {\n const record = toWsfeRecord(container);\n if (!record || record[key] === undefined) {\n return undefined;\n }\n const rows = Array.isArray(record[key]) ? record[key] : [record[key]];\n const result: T[] = [];\n for (const value of rows) {\n const row = toWsfeRecord(value);\n const mapped = row ? map(row) : undefined;\n if (mapped === undefined) {\n return undefined;\n }\n result.push(mapped);\n }\n return result;\n}\n\nfunction mapWsfeLookupVat(\n row: Record<string, unknown>\n): WsfeVatRate | undefined {\n const id = normalizeWsfeNumber(row.Id);\n const baseAmount = normalizeWsfeNumber(row.BaseImp);\n const amount = normalizeWsfeNumber(row.Importe);\n if (id === undefined || baseAmount === undefined || amount === undefined) {\n return undefined;\n }\n return { id, baseAmount, amount };\n}\n\nfunction mapWsfeLookupTax(row: Record<string, unknown>): WsfeTax | undefined {\n const vat = mapWsfeLookupVat(row);\n const rate = normalizeWsfeNumber(row.Alic);\n if (!vat || rate === undefined) {\n return undefined;\n }\n const description = normalizeWsfeString(row.Desc);\n return {\n ...vat,\n rate,\n ...(description === undefined ? {} : { description }),\n };\n}\n\nfunction createWsfeAuth(\n representedTaxId: number | string,\n token: string,\n sign: string\n) {\n return {\n Token: token,\n Sign: sign,\n Cuit: Number.parseInt(String(representedTaxId), 10),\n };\n}\n\nfunction unwrapWsfeOperationEnvelope(\n operation: string,\n response: Record<string, unknown>\n) {\n const operationResponse = response[`${operation}Response`] as\n | Record<string, unknown>\n | undefined;\n const result = (operationResponse?.[`${operation}Result`] ??\n response[`${operation}Result`] ??\n response) as Record<string, unknown>;\n\n return result;\n}\n\nfunction throwForWsfeOperationErrors(\n operation: string,\n result: Record<string, unknown>\n) {\n const errors = extractWsfeGlobalIssues(result, operation);\n if (errors.length > 0) {\n throw createWsfeServiceError(operation, errors);\n }\n}\n\nfunction normalizeWsfeDetailResponse(result: Record<string, unknown>) {\n const detailResponse = result.FeDetResp as\n | Record<string, unknown>\n | undefined;\n const rawDetail = detailResponse?.FECAEDetResponse;\n\n if (Array.isArray(rawDetail)) {\n return (rawDetail[0] as Record<string, unknown>) ?? {};\n }\n\n return (rawDetail as Record<string, unknown> | undefined) ?? {};\n}\n\nfunction classifyWsfeAuthorization(\n result: Record<string, unknown>,\n voucherNumber: number\n): WsfeAuthorizationOutcome {\n const operation = \"FECAESolicitar\";\n const header = toWsfeRecord(result.FeCabResp) ?? {};\n const detail = normalizeWsfeDetailResponse(result);\n const headerResult = normalizeWsfeResult(header.Resultado);\n const detailResult = normalizeWsfeResult(detail.Resultado);\n const resultCode = detailResult ?? headerResult;\n const resultLevel = getWsfeResultLevel(headerResult, detailResult);\n const cae = normalizeWsfeString(detail.CAE);\n const caeExpiry = normalizeWsfeString(detail.CAEFchVto);\n const errors = extractWsfeGlobalIssues(result, operation, \"header\");\n const observations = extractWsfeObservations(\n detail,\n detailResult === \"R\" ? \"business\" : \"observation\"\n );\n const hasInfrastructureError = errors.some(\n (issue) => issue.category === \"infrastructure\"\n );\n const base = {\n service: \"wsfe\" as const,\n operation,\n results: createWsfeResults(headerResult, detailResult),\n errors,\n observations,\n raw: result,\n };\n const context: WsfeAuthorizationContext = {\n base,\n headerResult,\n detailResult,\n resultCode,\n resultLevel,\n cae,\n caeExpiry,\n };\n\n if (hasContradictoryWsfeResults(context)) {\n return createWsfeStructuredIndeterminate(context, \"contradictory_response\");\n }\n\n const authenticationError = classifyArcaAuthenticationIssues(errors, {\n service: \"wsfe\",\n operation,\n });\n if (\n authenticationError &&\n detailResult === undefined &&\n headerResult !== \"A\" &&\n headerResult !== \"O\" &&\n !cae\n ) {\n return {\n ...createWsfeStructuredIndeterminate(context, \"authentication_rejected\"),\n authentication: createArcaAuthenticationEvidence(authenticationError),\n };\n }\n\n if (hasInfrastructureError) {\n return createWsfeStructuredIndeterminate(context, \"incomplete_response\");\n }\n\n if (isAuthorizedWsfeContext(context)) {\n return {\n ...base,\n kind: \"authorized\",\n result: \"A\",\n resultLevel: \"detail\",\n cae: context.cae,\n caeExpiry: context.caeExpiry,\n voucherNumber,\n };\n }\n\n if (isRejectedWsfeDetailContext(context)) {\n return {\n ...base,\n kind: \"rejected\",\n result: \"R\",\n resultLevel: \"detail\",\n };\n }\n\n if (isRejectedWsfeHeaderContext(context)) {\n return {\n ...base,\n kind: \"rejected\",\n result: \"R\",\n resultLevel: \"header\",\n };\n }\n\n return createWsfeStructuredIndeterminate(\n context,\n hasWsfeCaeContradiction(context)\n ? \"contradictory_response\"\n : \"incomplete_response\"\n );\n}\n\ntype WsfeAuthorizationContext = {\n base: {\n service: \"wsfe\";\n operation: string;\n results: { header?: string; detail?: string };\n errors: ArcaFiscalIssue[];\n observations: ArcaFiscalIssue[];\n raw: Record<string, unknown>;\n };\n headerResult?: string;\n detailResult?: string;\n resultCode?: string;\n resultLevel?: ArcaFiscalResultLevel;\n cae?: string;\n caeExpiry?: string;\n};\n\nfunction getWsfeResultLevel(\n headerResult?: string,\n detailResult?: string\n): ArcaFiscalResultLevel | undefined {\n if (detailResult) {\n return \"detail\";\n }\n return headerResult ? \"header\" : undefined;\n}\n\nfunction hasContradictoryWsfeResults(context: WsfeAuthorizationContext) {\n return Boolean(\n context.headerResult &&\n context.detailResult &&\n context.headerResult !== context.detailResult\n );\n}\n\nfunction isAuthorizedWsfeContext(\n context: WsfeAuthorizationContext\n): context is WsfeAuthorizationContext & { cae: string; caeExpiry: string } {\n return Boolean(\n context.detailResult === \"A\" &&\n context.headerResult !== \"R\" &&\n context.base.errors.length === 0 &&\n context.cae &&\n context.caeExpiry\n );\n}\n\nfunction isRejectedWsfeDetailContext(context: WsfeAuthorizationContext) {\n return (\n context.detailResult === \"R\" && context.headerResult !== \"A\" && !context.cae\n );\n}\n\nfunction isRejectedWsfeHeaderContext(context: WsfeAuthorizationContext) {\n return (\n context.headerResult === \"R\" &&\n context.detailResult === undefined &&\n !context.cae &&\n context.base.errors.length > 0 &&\n context.base.errors.every((issue) => issue.category === \"business\")\n );\n}\n\nfunction hasWsfeCaeContradiction(context: WsfeAuthorizationContext) {\n return (\n (context.resultCode === \"A\" || context.resultCode === \"R\") &&\n Boolean(context.cae)\n );\n}\n\nfunction createWsfeStructuredIndeterminate(\n context: WsfeAuthorizationContext,\n reason: ArcaAuthorizationIndeterminateReason\n): Extract<WsfeAuthorizationOutcome, { kind: \"indeterminate\" }> {\n const outcome: Extract<WsfeAuthorizationOutcome, { kind: \"indeterminate\" }> =\n {\n ...context.base,\n kind: \"indeterminate\",\n reason,\n };\n assignWsfeValue(outcome, \"result\", context.resultCode);\n assignWsfeValue(outcome, \"resultLevel\", context.resultLevel);\n assignWsfeValue(outcome, \"cae\", context.cae);\n assignWsfeValue(outcome, \"caeExpiry\", context.caeExpiry);\n return outcome;\n}\n\nfunction createWsfeResults(headerResult?: string, detailResult?: string) {\n const results: { header?: string; detail?: string } = {};\n assignWsfeValue(results, \"header\", headerResult);\n assignWsfeValue(results, \"detail\", detailResult);\n return results;\n}\n\nfunction createWsfeIndeterminateOutcome(\n error: unknown\n): WsfeAuthorizationOutcome {\n const authenticationError = classifyArcaAuthenticationError(error, {\n service: \"wsfe\",\n operation: \"FECAESolicitar\",\n });\n return {\n kind: \"indeterminate\",\n service: \"wsfe\",\n operation: \"FECAESolicitar\",\n results: {},\n reason: authenticationError\n ? \"authentication_rejected\"\n : getArcaIndeterminateReason(error),\n ...(authenticationError\n ? {\n authentication: createArcaAuthenticationEvidence(authenticationError),\n }\n : {}),\n errors: [],\n observations: [],\n };\n}\n\nfunction getArcaIndeterminateReason(\n error: unknown\n): ArcaAuthorizationIndeterminateReason {\n if (error instanceof ArcaTransportError) {\n return \"transport_error\";\n }\n if (error instanceof ArcaSoapFaultError) {\n return \"soap_fault\";\n }\n if (error instanceof ArcaInvalidSoapResponseError) {\n return \"invalid_response\";\n }\n return \"unexpected_error\";\n}\n\nfunction createWsfeServiceError(operation: string, issues: ArcaFiscalIssue[]) {\n const authenticationError = classifyArcaAuthenticationIssues(issues, {\n service: \"wsfe\",\n operation,\n });\n if (authenticationError) {\n return authenticationError;\n }\n\n const firstIssue = issues[0];\n return new ArcaServiceError(\n firstIssue ? formatWsfeIssue(firstIssue) : \"WSFE returned a service error\",\n {\n service: \"wsfe\",\n operation,\n ...(firstIssue?.code === undefined\n ? {}\n : { serviceCode: firstIssue.code }),\n issues,\n }\n );\n}\n\nfunction extractWsfeGlobalIssues(\n result: Record<string, unknown>,\n operation: string,\n resultLevel?: ArcaFiscalResultLevel\n): ArcaFiscalIssue[] {\n const errorsContainer = toWsfeRecord(result.Errors);\n return normalizeWsfeIssueEntries(errorsContainer?.Err).map((entry) => ({\n service: \"wsfe\",\n operation,\n source: \"error\",\n category:\n operation === \"FECAESolicitar\" &&\n WSFE_AUTHORIZATION_INFRASTRUCTURE_CODES.has(entry.code ?? \"\")\n ? \"infrastructure\"\n : operation === \"FECAESolicitar\"\n ? \"business\"\n : \"unknown\",\n ...(entry.code === undefined ? {} : { code: entry.code }),\n message: entry.message,\n ...(resultLevel === undefined ? {} : { resultLevel }),\n }));\n}\n\nfunction extractWsfeObservations(\n detail: Record<string, unknown>,\n category: ArcaFiscalIssue[\"category\"]\n): ArcaFiscalIssue[] {\n const observationsContainer = toWsfeRecord(detail.Observaciones);\n return normalizeWsfeIssueEntries(observationsContainer?.Obs).map((entry) => ({\n service: \"wsfe\",\n operation: \"FECAESolicitar\",\n source: \"observation\",\n category,\n ...(entry.code === undefined ? {} : { code: entry.code }),\n message: entry.message,\n resultLevel: \"detail\",\n }));\n}\n\nfunction normalizeWsfeIssueEntries(rawErrors: unknown) {\n const entries = Array.isArray(rawErrors)\n ? rawErrors\n : rawErrors\n ? [rawErrors]\n : [];\n\n return entries\n .map((entry) => entry as Record<string, unknown>)\n .map((entry) => {\n const code = entry.Code ?? entry.code;\n const message = entry.Msg ?? entry.msg ?? \"Unknown WSFE error\";\n return {\n ...(code === undefined ? {} : { code: String(code) }),\n message: String(message),\n };\n });\n}\n\nfunction formatWsfeIssue(issue: ArcaFiscalIssue) {\n return issue.code ? `(${issue.code}) ${issue.message}` : issue.message;\n}\n\nfunction normalizeWsfeResult(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toUpperCase();\n return normalized || undefined;\n}\n\nfunction normalizeWsfeString(value: unknown): string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const normalized = String(value).trim();\n return normalized || undefined;\n}\n\nfunction normalizeWsfeNumber(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n const normalized = Number(value);\n return Number.isFinite(normalized) ? normalized : undefined;\n}\n\nfunction assignWsfeValue<TTarget, TKey extends keyof TTarget>(\n target: TTarget,\n key: TKey,\n value: TTarget[TKey] | undefined\n) {\n if (value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction toWsfeRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nconst WSFE_AUTHORIZATION_INFRASTRUCTURE_CODES = new Set([\n \"500\",\n \"501\",\n \"502\",\n \"600\",\n \"601\",\n]);\n\nfunction getWsfeResultEntries(\n result: Record<string, unknown>,\n key: string\n): Record<string, unknown>[] {\n const rawEntries = (\n result.ResultGet as Record<string, unknown> | undefined\n )?.[key];\n if (!rawEntries) {\n return [];\n }\n\n return (Array.isArray(rawEntries) ? rawEntries : [rawEntries]).map(\n (entry) => entry as Record<string, unknown>\n );\n}\n"],"mappings":"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","names":["issue"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ArcaSoapFaultError
3
- } from "./chunk-EZ4HA3LC.mjs";
3
+ } from "./chunk-NT2A6YMO.mjs";
4
4
 
5
5
  // src/services/padron.ts
6
6
  function createPadronService(options) {
@@ -240,4 +240,4 @@ async function executePadronOperation(options, service, operation, body) {
240
240
  export {
241
241
  createPadronService
242
242
  };
243
- //# sourceMappingURL=chunk-MRBFLBWX.mjs.map
243
+ //# sourceMappingURL=chunk-JP3LVU7K.mjs.map
@@ -98,10 +98,13 @@ var ArcaInputError = class extends ArcaError {
98
98
  name = "ArcaInputError";
99
99
  field;
100
100
  expected;
101
+ /** With `ARCA_INPUT_DATE_OUTSIDE_WINDOW`, the dates ARCA accepts today. */
102
+ window;
101
103
  constructor(message, options) {
102
104
  super(message, options.code, options);
103
105
  this.field = options.field;
104
106
  this.expected = options.expected;
107
+ this.window = options.window;
105
108
  }
106
109
  };
107
110
  var ArcaAuthenticationError = class extends ArcaError {
@@ -211,7 +214,11 @@ function toArcaSafeErrorMetadata(error) {
211
214
  }
212
215
  const fields = { code: error.code };
213
216
  if (error instanceof ArcaInputError) {
214
- Object.assign(fields, { field: error.field, expected: error.expected });
217
+ Object.assign(fields, {
218
+ field: error.field,
219
+ expected: error.expected,
220
+ window: error.window
221
+ });
215
222
  } else if (error instanceof ArcaAuthenticationError) {
216
223
  Object.assign(fields, {
217
224
  service: error.service,
@@ -264,4 +271,4 @@ export {
264
271
  ArcaServiceError,
265
272
  toArcaSafeErrorMetadata
266
273
  };
267
- //# sourceMappingURL=chunk-EZ4HA3LC.mjs.map
274
+ //# sourceMappingURL=chunk-NT2A6YMO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/redaction.ts","../src/errors.ts"],"sourcesContent":["export const MAX_DIAGNOSTIC_PREVIEW_LENGTH = 4096;\n\nconst MAX_DIAGNOSTIC_SCALAR_LENGTH = 512;\nconst SENSITIVE_XML_ELEMENT_NAME = \"((?:[A-Za-z_][\\\\w.-]*:)?(?:Token|Sign))\";\nconst PAIRED_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/\\\\1\\\\s*>`,\n \"gi\"\n);\nconst SELF_CLOSING_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*\\\\/\\\\s*>`,\n \"gi\"\n);\nconst UNTERMINATED_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*>[^<]*`,\n \"gi\"\n);\n\nexport type ResponseBodyDiagnostic = {\n responseBodyLength: number;\n responseBodyPreview: string;\n};\n\nexport type SafeErrorDiagnostic = {\n errorName?: string;\n errorCode?: string;\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n faultCode?: string;\n};\n\n/** Redacts credential-bearing XML elements and applies the global preview bound. */\nexport function redactDiagnosticPreview(\n value: string,\n requestedMaxLength = MAX_DIAGNOSTIC_PREVIEW_LENGTH\n): string {\n const maxLength = normalizePreviewLength(requestedMaxLength);\n\n return value\n .replace(\n PAIRED_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]</${tagName}>`\n )\n .replace(\n SELF_CLOSING_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]</${tagName}>`\n )\n .replace(\n UNTERMINATED_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]`\n )\n .slice(0, maxLength);\n}\n\n/** Produces the only response-body shape allowed in errors and logs. */\nexport function createResponseBodyDiagnostic(\n responseBody: string,\n requestedMaxLength = MAX_DIAGNOSTIC_PREVIEW_LENGTH\n): ResponseBodyDiagnostic {\n return {\n responseBodyLength: responseBody.length,\n responseBodyPreview: redactDiagnosticPreview(\n responseBody,\n requestedMaxLength\n ),\n };\n}\n\n/** Extracts a scalar allowlist from an error without exposing the error or cause. */\nexport function createSafeErrorDiagnostic(error: unknown): SafeErrorDiagnostic {\n if (!(error && typeof error === \"object\")) {\n return {};\n }\n\n const candidate = error as Record<string, unknown>;\n const diagnostic: SafeErrorDiagnostic = {};\n\n assignSafeString(diagnostic, \"errorName\", candidate.name);\n assignSafeString(diagnostic, \"errorCode\", candidate.code);\n assignSafeNumber(diagnostic, \"statusCode\", candidate.statusCode);\n assignSafeString(diagnostic, \"contentType\", candidate.contentType);\n assignSafeNumber(\n diagnostic,\n \"responseBodyLength\",\n candidate.responseBodyLength\n );\n if (typeof candidate.responseBodyPreview === \"string\") {\n diagnostic.responseBodyPreview = redactDiagnosticPreview(\n candidate.responseBodyPreview\n );\n }\n assignSafeString(diagnostic, \"faultCode\", candidate.faultCode);\n\n return diagnostic;\n}\n\nfunction normalizePreviewLength(requestedMaxLength: number): number {\n if (!Number.isFinite(requestedMaxLength)) {\n return MAX_DIAGNOSTIC_PREVIEW_LENGTH;\n }\n\n return Math.max(\n 0,\n Math.min(Math.trunc(requestedMaxLength), MAX_DIAGNOSTIC_PREVIEW_LENGTH)\n );\n}\n\nfunction assignSafeString<\n TKey extends \"errorName\" | \"errorCode\" | \"contentType\" | \"faultCode\",\n>(target: SafeErrorDiagnostic, key: TKey, value: unknown): void {\n if (typeof value === \"string\") {\n target[key] = redactDiagnosticPreview(value, MAX_DIAGNOSTIC_SCALAR_LENGTH);\n }\n}\n\nfunction assignSafeNumber<TKey extends \"statusCode\" | \"responseBodyLength\">(\n target: SafeErrorDiagnostic,\n key: TKey,\n value: unknown\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n target[key] = value;\n }\n}\n","import { redactDiagnosticPreview } from \"./internal/redaction\";\nimport type { ArcaServiceName } from \"./internal/types\";\nimport type {\n ArcaFiscalIssue,\n ArcaFiscalResultLevel,\n ArcaFiscalResults,\n} from \"./services/fiscal-evidence\";\n\n/** Base error class for all ARCA-related errors. */\nexport class ArcaError extends Error {\n readonly code: string;\n override readonly name: string = \"ArcaError\";\n\n constructor(message: string, code = \"ARCA_ERROR\", options?: ErrorOptions) {\n super(message, options);\n this.code = code;\n }\n}\n\n/** Thrown when the ARCA client configuration is missing or invalid. */\nexport class ArcaConfigurationError extends ArcaError {\n override readonly name: string = \"ArcaConfigurationError\";\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, \"ARCA_CONFIGURATION_ERROR\", options);\n }\n}\n\n/** Stable routing codes for caller-provided input failures. */\nexport type ArcaInputErrorCode =\n | \"ARCA_INPUT_IDEMPOTENCY_MISMATCH\"\n | \"ARCA_INPUT_RESERVATION_NOT_FOUND\"\n | \"ARCA_INPUT_INVALID_DATE\"\n | \"ARCA_INPUT_DATE_OUTSIDE_WINDOW\"\n | \"ARCA_INPUT_INVALID_AMOUNT\"\n | \"ARCA_INPUT_AMOUNT_PRECISION\"\n | \"ARCA_INPUT_AMOUNT_MISMATCH\"\n | \"ARCA_INPUT_INVALID_EXCHANGE_RATE\"\n | \"ARCA_INPUT_INVALID_VALUE\"\n | \"ARCA_INPUT_MISSING_FIELD\"\n | \"ARCA_INPUT_RESERVED_FIELD\";\n\n/** The first and last day ARCA accepts, both `YYYY-MM-DD` and inclusive. */\nexport type VoucherDateWindow = { from: string; to: string };\n\nexport type ArcaInputErrorOptions = ErrorOptions & {\n code: ArcaInputErrorCode;\n field?: string;\n expected?: string;\n window?: VoucherDateWindow;\n};\n\n/**\n * Thrown when caller-provided input data is missing or invalid. From\n * `issue()`, `issueCreditNote()` or `issueDebitNote()` it means that call sent\n * no authorization request, so ARCA issued nothing for it.\n */\nexport class ArcaInputError extends ArcaError {\n declare readonly code: ArcaInputErrorCode;\n override readonly name: string = \"ArcaInputError\";\n readonly field?: string;\n readonly expected?: string;\n /** With `ARCA_INPUT_DATE_OUTSIDE_WINDOW`, the dates ARCA accepts today. */\n readonly window?: VoucherDateWindow;\n\n constructor(message: string, options: ArcaInputErrorOptions) {\n super(message, options.code, options);\n this.field = options.field;\n this.expected = options.expected;\n this.window = options.window;\n }\n}\n\n/** Stable reasons exposed for explicit ARCA authentication rejections. */\nexport type ArcaAuthenticationReason =\n | \"invalid_token\"\n | \"unauthorized_computer\"\n | \"missing_relationship\"\n | \"authentication_rejected\";\n\nexport type ArcaAuthenticationErrorOptions = ErrorOptions & {\n reason: ArcaAuthenticationReason;\n service: ArcaServiceName;\n operation: string;\n providerCode?: string | number;\n};\n\n/** Thrown when ARCA explicitly rejects credentials before an operation runs. */\nexport class ArcaAuthenticationError extends ArcaError {\n declare readonly code: \"ARCA_AUTHENTICATION_ERROR\";\n override readonly name: string = \"ArcaAuthenticationError\";\n readonly reason: ArcaAuthenticationReason;\n readonly service: ArcaServiceName;\n readonly operation: string;\n readonly providerCode?: string | number;\n\n constructor(message: string, options: ArcaAuthenticationErrorOptions) {\n super(\n redactDiagnosticPreview(message),\n \"ARCA_AUTHENTICATION_ERROR\",\n options\n );\n this.reason = options.reason;\n this.service = options.service;\n this.operation = options.operation;\n this.providerCode = normalizeProviderCode(options.providerCode);\n }\n}\n\n/** Narrows unknown failures to the explicit authentication error contract. */\nexport function isArcaAuthenticationError(\n error: unknown\n): error is ArcaAuthenticationError {\n return error instanceof ArcaAuthenticationError;\n}\n\n/** Thrown when an HTTP request to an ARCA endpoint fails at the transport level. */\nexport class ArcaTransportError extends ArcaError {\n override readonly name: string = \"ArcaTransportError\";\n readonly statusCode?: number;\n readonly contentType?: string;\n readonly responseBodyLength?: number;\n readonly responseBodyPreview?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n }\n ) {\n super(message, \"ARCA_TRANSPORT_ERROR\", options);\n this.statusCode = options?.statusCode;\n this.contentType = options?.contentType;\n this.responseBodyLength = options?.responseBodyLength;\n this.responseBodyPreview =\n options?.responseBodyPreview === undefined\n ? undefined\n : redactDiagnosticPreview(options.responseBodyPreview);\n }\n}\n\n/** Thrown when the SOAP response contains a Fault element. */\nexport class ArcaSoapFaultError extends ArcaError {\n override readonly name: string = \"ArcaSoapFaultError\";\n readonly faultCode?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n faultCode?: string;\n }\n ) {\n super(redactDiagnosticPreview(message), \"ARCA_SOAP_FAULT\", options);\n this.faultCode =\n options?.faultCode === undefined\n ? undefined\n : redactDiagnosticPreview(options.faultCode);\n }\n}\n\n/** Thrown when a response cannot be parsed as a valid SOAP envelope. */\nexport class ArcaInvalidSoapResponseError extends ArcaError {\n override readonly name: string = \"ArcaInvalidSoapResponseError\";\n readonly service?: ArcaServiceName;\n readonly operation?: string;\n readonly endpointUrl?: string;\n readonly statusCode?: number;\n readonly contentType?: string;\n readonly responseBodyLength?: number;\n readonly responseBodyPreview?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n service?: ArcaServiceName;\n operation?: string;\n endpointUrl?: string;\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n }\n ) {\n super(message, \"ARCA_INVALID_SOAP_RESPONSE\", options);\n this.service = options?.service;\n this.operation = options?.operation;\n this.endpointUrl = options?.endpointUrl;\n this.statusCode = options?.statusCode;\n this.contentType = options?.contentType;\n this.responseBodyLength = options?.responseBodyLength;\n this.responseBodyPreview =\n options?.responseBodyPreview === undefined\n ? undefined\n : redactDiagnosticPreview(options.responseBodyPreview);\n }\n}\n\n/** Thrown when an ARCA service (WSFE, WSMTXCA, Padron) returns a domain-level error. */\nexport class ArcaServiceError extends ArcaError {\n override readonly name: string = \"ArcaServiceError\";\n readonly serviceCode?: string | number;\n readonly service?: ArcaServiceName;\n readonly operation?: string;\n readonly result?: string;\n readonly resultLevel?: ArcaFiscalResultLevel;\n readonly results?: ArcaFiscalResults;\n readonly cae?: string;\n readonly issues?: readonly ArcaFiscalIssue[];\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n serviceCode?: string | number;\n service?: ArcaServiceName;\n operation?: string;\n result?: string;\n resultLevel?: ArcaFiscalResultLevel;\n results?: ArcaFiscalResults;\n cae?: string;\n issues?: readonly ArcaFiscalIssue[];\n }\n ) {\n super(message, \"ARCA_SERVICE_ERROR\", options);\n this.serviceCode = options?.serviceCode;\n this.service = options?.service;\n this.operation = options?.operation;\n this.result = options?.result;\n this.resultLevel = options?.resultLevel;\n this.results = options?.results;\n this.cae = options?.cae;\n this.issues = options?.issues;\n }\n}\n\nfunction normalizeProviderCode(\n providerCode: string | number | undefined\n): string | number | undefined {\n if (typeof providerCode === \"number\") {\n return Number.isFinite(providerCode) ? providerCode : undefined;\n }\n if (typeof providerCode === \"string\") {\n return redactDiagnosticPreview(providerCode, 512);\n }\n return undefined;\n}\n\n/**\n * Narrow error evidence, safe to log or store: the typed fields the error\n * classes declare, never a cause, stack, raw response, response body preview,\n * endpoint URL, fiscal issues or CAE.\n */\nexport type ArcaSafeErrorMetadata = {\n name: string;\n message: string;\n code?: string;\n statusCode?: number;\n contentType?: string;\n service?: ArcaServiceName;\n operation?: string;\n /** ArcaAuthenticationError's stable reason. */\n reason?: ArcaAuthenticationReason;\n providerCode?: string | number;\n faultCode?: string;\n field?: string;\n expected?: string;\n window?: VoucherDateWindow;\n /** ArcaServiceError's provider code, always as a string. */\n serviceCode?: string;\n result?: string;\n resultLevel?: ArcaFiscalResultLevel;\n};\n\nexport function toArcaSafeErrorMetadata(error: unknown): ArcaSafeErrorMetadata {\n if (!(error instanceof Error)) {\n return { name: \"UnknownError\", message: String(error) };\n }\n const metadata: ArcaSafeErrorMetadata = {\n name: error.name,\n message: error.message,\n };\n if (!(error instanceof ArcaError)) {\n return metadata;\n }\n const fields: Partial<ArcaSafeErrorMetadata> = { code: error.code };\n if (error instanceof ArcaInputError) {\n Object.assign(fields, {\n field: error.field,\n expected: error.expected,\n window: error.window,\n });\n } else if (error instanceof ArcaAuthenticationError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n reason: error.reason,\n providerCode: error.providerCode,\n });\n } else if (error instanceof ArcaTransportError) {\n Object.assign(fields, {\n statusCode: error.statusCode,\n contentType: error.contentType,\n });\n } else if (error instanceof ArcaSoapFaultError) {\n Object.assign(fields, { faultCode: error.faultCode });\n } else if (error instanceof ArcaInvalidSoapResponseError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n statusCode: error.statusCode,\n contentType: error.contentType,\n });\n } else if (error instanceof ArcaServiceError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n serviceCode:\n error.serviceCode === undefined ? undefined : String(error.serviceCode),\n result: error.result,\n resultLevel: error.resultLevel,\n });\n }\n for (const [key, value] of Object.entries(fields)) {\n if (value !== undefined) {\n (metadata as Record<string, unknown>)[key] = value;\n }\n }\n return metadata;\n}\n"],"mappings":";AAAO,IAAM,gCAAgC;AAE7C,IAAM,+BAA+B;AACrC,IAAM,6BAA6B;AACnC,IAAM,+BAA+B,IAAI;AAAA,EACvC,IAAI,0BAA0B;AAAA,EAC9B;AACF;AACA,IAAM,qCAAqC,IAAI;AAAA,EAC7C,IAAI,0BAA0B;AAAA,EAC9B;AACF;AACA,IAAM,qCAAqC,IAAI;AAAA,EAC7C,IAAI,0BAA0B;AAAA,EAC9B;AACF;AAkBO,SAAS,wBACd,OACA,qBAAqB,+BACb;AACR,QAAM,YAAY,uBAAuB,kBAAkB;AAE3D,SAAO,MACJ;AAAA,IACC;AAAA,IACA,CAAC,QAAQ,YAAoB,IAAI,OAAO,gBAAgB,OAAO;AAAA,EACjE,EACC;AAAA,IACC;AAAA,IACA,CAAC,QAAQ,YAAoB,IAAI,OAAO,gBAAgB,OAAO;AAAA,EACjE,EACC;AAAA,IACC;AAAA,IACA,CAAC,QAAQ,YAAoB,IAAI,OAAO;AAAA,EAC1C,EACC,MAAM,GAAG,SAAS;AACvB;AAGO,SAAS,6BACd,cACA,qBAAqB,+BACG;AACxB,SAAO;AAAA,IACL,oBAAoB,aAAa;AAAA,IACjC,qBAAqB;AAAA,MACnB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,0BAA0B,OAAqC;AAC7E,MAAI,EAAE,SAAS,OAAO,UAAU,WAAW;AACzC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY;AAClB,QAAM,aAAkC,CAAC;AAEzC,mBAAiB,YAAY,aAAa,UAAU,IAAI;AACxD,mBAAiB,YAAY,aAAa,UAAU,IAAI;AACxD,mBAAiB,YAAY,cAAc,UAAU,UAAU;AAC/D,mBAAiB,YAAY,eAAe,UAAU,WAAW;AACjE;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACA,MAAI,OAAO,UAAU,wBAAwB,UAAU;AACrD,eAAW,sBAAsB;AAAA,MAC/B,UAAU;AAAA,IACZ;AAAA,EACF;AACA,mBAAiB,YAAY,aAAa,UAAU,SAAS;AAE7D,SAAO;AACT;AAEA,SAAS,uBAAuB,oBAAoC;AAClE,MAAI,CAAC,OAAO,SAAS,kBAAkB,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK,IAAI,KAAK,MAAM,kBAAkB,GAAG,6BAA6B;AAAA,EACxE;AACF;AAEA,SAAS,iBAEP,QAA6B,KAAW,OAAsB;AAC9D,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,GAAG,IAAI,wBAAwB,OAAO,4BAA4B;AAAA,EAC3E;AACF;AAEA,SAAS,iBACP,QACA,KACA,OACM;AACN,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AACvD,WAAO,GAAG,IAAI;AAAA,EAChB;AACF;;;ACnHO,IAAM,YAAN,cAAwB,MAAM;AAAA,EAC1B;AAAA,EACS,OAAe;AAAA,EAEjC,YAAY,SAAiB,OAAO,cAAc,SAAwB;AACxE,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,yBAAN,cAAqC,UAAU;AAAA,EAClC,OAAe;AAAA,EAEjC,YAAY,SAAiB,SAAwB;AACnD,UAAM,SAAS,4BAA4B,OAAO;AAAA,EACpD;AACF;AA+BO,IAAM,iBAAN,cAA6B,UAAU;AAAA,EAE1B,OAAe;AAAA,EACxB;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EAET,YAAY,SAAiB,SAAgC;AAC3D,UAAM,SAAS,QAAQ,MAAM,OAAO;AACpC,SAAK,QAAQ,QAAQ;AACrB,SAAK,WAAW,QAAQ;AACxB,SAAK,SAAS,QAAQ;AAAA,EACxB;AACF;AAiBO,IAAM,0BAAN,cAAsC,UAAU;AAAA,EAEnC,OAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,SAAyC;AACpE;AAAA,MACE,wBAAwB,OAAO;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AACA,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU,QAAQ;AACvB,SAAK,YAAY,QAAQ;AACzB,SAAK,eAAe,sBAAsB,QAAQ,YAAY;AAAA,EAChE;AACF;AAGO,SAAS,0BACd,OACkC;AAClC,SAAO,iBAAiB;AAC1B;AAGO,IAAM,qBAAN,cAAiC,UAAU;AAAA,EAC9B,OAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,SACA,SAMA;AACA,UAAM,SAAS,wBAAwB,OAAO;AAC9C,SAAK,aAAa,SAAS;AAC3B,SAAK,cAAc,SAAS;AAC5B,SAAK,qBAAqB,SAAS;AACnC,SAAK,sBACH,SAAS,wBAAwB,SAC7B,SACA,wBAAwB,QAAQ,mBAAmB;AAAA,EAC3D;AACF;AAGO,IAAM,qBAAN,cAAiC,UAAU;AAAA,EAC9B,OAAe;AAAA,EACxB;AAAA,EAET,YACE,SACA,SAGA;AACA,UAAM,wBAAwB,OAAO,GAAG,mBAAmB,OAAO;AAClE,SAAK,YACH,SAAS,cAAc,SACnB,SACA,wBAAwB,QAAQ,SAAS;AAAA,EACjD;AACF;AAGO,IAAM,+BAAN,cAA2C,UAAU;AAAA,EACxC,OAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,SACA,SASA;AACA,UAAM,SAAS,8BAA8B,OAAO;AACpD,SAAK,UAAU,SAAS;AACxB,SAAK,YAAY,SAAS;AAC1B,SAAK,cAAc,SAAS;AAC5B,SAAK,aAAa,SAAS;AAC3B,SAAK,cAAc,SAAS;AAC5B,SAAK,qBAAqB,SAAS;AACnC,SAAK,sBACH,SAAS,wBAAwB,SAC7B,SACA,wBAAwB,QAAQ,mBAAmB;AAAA,EAC3D;AACF;AAGO,IAAM,mBAAN,cAA+B,UAAU;AAAA,EAC5B,OAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,SACA,SAUA;AACA,UAAM,SAAS,sBAAsB,OAAO;AAC5C,SAAK,cAAc,SAAS;AAC5B,SAAK,UAAU,SAAS;AACxB,SAAK,YAAY,SAAS;AAC1B,SAAK,SAAS,SAAS;AACvB,SAAK,cAAc,SAAS;AAC5B,SAAK,UAAU,SAAS;AACxB,SAAK,MAAM,SAAS;AACpB,SAAK,SAAS,SAAS;AAAA,EACzB;AACF;AAEA,SAAS,sBACP,cAC6B;AAC7B,MAAI,OAAO,iBAAiB,UAAU;AACpC,WAAO,OAAO,SAAS,YAAY,IAAI,eAAe;AAAA,EACxD;AACA,MAAI,OAAO,iBAAiB,UAAU;AACpC,WAAO,wBAAwB,cAAc,GAAG;AAAA,EAClD;AACA,SAAO;AACT;AA4BO,SAAS,wBAAwB,OAAuC;AAC7E,MAAI,EAAE,iBAAiB,QAAQ;AAC7B,WAAO,EAAE,MAAM,gBAAgB,SAAS,OAAO,KAAK,EAAE;AAAA,EACxD;AACA,QAAM,WAAkC;AAAA,IACtC,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,EACjB;AACA,MAAI,EAAE,iBAAiB,YAAY;AACjC,WAAO;AAAA,EACT;AACA,QAAM,SAAyC,EAAE,MAAM,MAAM,KAAK;AAClE,MAAI,iBAAiB,gBAAgB;AACnC,WAAO,OAAO,QAAQ;AAAA,MACpB,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH,WAAW,iBAAiB,yBAAyB;AACnD,WAAO,OAAO,QAAQ;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,cAAc,MAAM;AAAA,IACtB,CAAC;AAAA,EACH,WAAW,iBAAiB,oBAAoB;AAC9C,WAAO,OAAO,QAAQ;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH,WAAW,iBAAiB,oBAAoB;AAC9C,WAAO,OAAO,QAAQ,EAAE,WAAW,MAAM,UAAU,CAAC;AAAA,EACtD,WAAW,iBAAiB,8BAA8B;AACxD,WAAO,OAAO,QAAQ;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH,WAAW,iBAAiB,kBAAkB;AAC5C,WAAO,OAAO,QAAQ;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,aACE,MAAM,gBAAgB,SAAY,SAAY,OAAO,MAAM,WAAW;AAAA,MACxE,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,QAAW;AACvB,MAAC,SAAqC,GAAG,IAAI;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -3,14 +3,14 @@ import {
3
3
  classifyArcaAuthenticationIssues,
4
4
  createArcaAuthenticationEvidence,
5
5
  executeWithAuthenticationRecovery
6
- } from "./chunk-WPHD2GQJ.mjs";
6
+ } from "./chunk-B2M64SIK.mjs";
7
7
  import {
8
8
  ArcaInputError,
9
9
  ArcaInvalidSoapResponseError,
10
10
  ArcaServiceError,
11
11
  ArcaSoapFaultError,
12
12
  ArcaTransportError
13
- } from "./chunk-EZ4HA3LC.mjs";
13
+ } from "./chunk-NT2A6YMO.mjs";
14
14
 
15
15
  // src/services/wsmtxca.ts
16
16
  function createWsmtxcaService(options) {
@@ -631,4 +631,4 @@ function formatCompactDateToIso(dateValue) {
631
631
  export {
632
632
  createWsmtxcaService
633
633
  };
634
- //# sourceMappingURL=chunk-4RD5VQWC.mjs.map
634
+ //# sourceMappingURL=chunk-TMSP5QPZ.mjs.map