facturas 0.20.1 → 0.20.3

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.
@@ -2,8 +2,9 @@ import {
2
2
  classifyArcaAuthenticationError,
3
3
  classifyArcaAuthenticationIssues,
4
4
  createArcaAuthenticationEvidence,
5
- executeWithAuthenticationRecovery
6
- } from "./chunk-B2M64SIK.mjs";
5
+ executeWithAuthenticationRecovery,
6
+ parseLastAuthorizedNumber
7
+ } from "./chunk-XTKZ5FDN.mjs";
7
8
  import {
8
9
  ArcaInputError,
9
10
  ArcaInvalidSoapResponseError,
@@ -286,18 +287,10 @@ function createWsfeService(options) {
286
287
  CbteTipo: voucherType
287
288
  }
288
289
  );
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
+ return parseLastAuthorizedNumber(result.CbteNro, {
291
+ service: "wsfe",
292
+ operation: "FECompUltimoAutorizado"
293
+ }) + 1;
301
294
  }
302
295
  async function getWsfeCatalog(operation, resultKey, input) {
303
296
  const result = await executeWsfeAuthenticatedOperation(operation, {
@@ -1110,7 +1103,7 @@ function mapWsfeVoucherInfo(raw) {
1110
1103
  endDate: String(period.FchHasta)
1111
1104
  };
1112
1105
  }
1113
- if (raw.CanMisMonExt === "S" || raw.CanMisMonExt === "N") {
1106
+ if (voucher.currencyId !== "PES" && (raw.CanMisMonExt === "S" || raw.CanMisMonExt === "N")) {
1114
1107
  voucher.sameCurrencyForeignCancellation = raw.CanMisMonExt;
1115
1108
  }
1116
1109
  voucher.optionalFields = mapWsfeLookupDetails(
@@ -1472,4 +1465,4 @@ export {
1472
1465
  normalizeWsfeVoucherInput,
1473
1466
  normalizeWsfeDateInput
1474
1467
  };
1475
- //# sourceMappingURL=chunk-DYBPYB52.mjs.map
1468
+ //# sourceMappingURL=chunk-3NOKGXXX.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 { parseLastAuthorizedNumber } from \"../internal/voucher-number\";\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 return (\n parseLastAuthorizedNumber(result.CbteNro, {\n service: \"wsfe\",\n operation: \"FECompUltimoAutorizado\",\n }) + 1\n );\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 // ARCA can echo this foreign-currency-only flag on peso vouchers.\n if (\n voucher.currencyId !== \"PES\" &&\n (raw.CanMisMonExt === \"S\" || raw.CanMisMonExt === \"N\")\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"]}
@@ -22,10 +22,10 @@ import {
22
22
  roundHalfEvenRatio,
23
23
  serializeArcaExchangeRate,
24
24
  toIsoDate
25
- } from "./chunk-DYBPYB52.mjs";
25
+ } from "./chunk-3NOKGXXX.mjs";
26
26
  import {
27
27
  createWsmtxcaService
28
- } from "./chunk-TMSP5QPZ.mjs";
28
+ } from "./chunk-VF3XJXBG.mjs";
29
29
  import {
30
30
  ArcaConfigurationError,
31
31
  ArcaError,
@@ -3020,7 +3020,7 @@ function wsmtxcaHeader(found) {
3020
3020
  amount: Number(t.importe),
3021
3021
  rate: 0
3022
3022
  })),
3023
- sameCurrencyForeignCancellation: raw.cancelaEnMismaMonedaExtranjera,
3023
+ sameCurrencyForeignCancellation: found.currencyId !== "PES" && (raw.cancelaEnMismaMonedaExtranjera === "S" || raw.cancelaEnMismaMonedaExtranjera === "N") ? raw.cancelaEnMismaMonedaExtranjera : void 0,
3024
3024
  optionalFields: rows(raw.arrayDatosAdicionales, "datoAdicional")?.map(
3025
3025
  (v) => ({ id: String(v.t), value: String(v.c1) })
3026
3026
  ),
@@ -3906,6 +3906,7 @@ async function runOperation(wsfe, operation, input, prepare, options, context, r
3906
3906
  environment,
3907
3907
  taxId,
3908
3908
  sequence: sequenceRecord,
3909
+ sequenceTaxId: sequence.taxId,
3909
3910
  coordinates: sequence.coordinates,
3910
3911
  select: select ?? (() => wsfe),
3911
3912
  options,
@@ -3945,6 +3946,7 @@ async function runOperation(wsfe, operation, input, prepare, options, context, r
3945
3946
  const claimed = {
3946
3947
  v: 1,
3947
3948
  key: idempotencyKey,
3949
+ issuerTaxId: taxId,
3948
3950
  number,
3949
3951
  claimedAt: (/* @__PURE__ */ new Date()).toISOString()
3950
3952
  };
@@ -3993,7 +3995,7 @@ async function runOperation(wsfe, operation, input, prepare, options, context, r
3993
3995
  readSettledRecord(recorded),
3994
3996
  options,
3995
3997
  taxId,
3996
- (other) => storeCall(() => store.get(settledKey(environment, taxId, other)))
3998
+ (owner, other) => storeCall(() => store.get(settledKey(environment, owner, other)))
3997
3999
  );
3998
4000
  }
3999
4001
  return await settle2(
@@ -4046,7 +4048,7 @@ async function recordConflict(store, key, outcome) {
4046
4048
  function readSettledRecord(json) {
4047
4049
  try {
4048
4050
  const record = JSON.parse(json);
4049
- if (record?.v !== 1 && record?.v !== 2 || !Number.isSafeInteger(record.number) || (record.kind === "conflict" ? !record.found || typeof record.found !== "object" : record.kind !== "superseded" || typeof record.by !== "string")) {
4051
+ if (record?.v !== 1 && record?.v !== 2 || !Number.isSafeInteger(record.number) || (record.kind === "conflict" ? !record.found || typeof record.found !== "object" : record.kind !== "superseded" || typeof record.by !== "string" || record.byTaxId !== void 0 && typeof record.byTaxId !== "string")) {
4050
4052
  throw new Error("Invalid settled structure");
4051
4053
  }
4052
4054
  if (record.kind === "conflict" && record.v === 1) {
@@ -4072,7 +4074,7 @@ async function settledOutcome(select, reservation, settled, options, taxId, sett
4072
4074
  true
4073
4075
  );
4074
4076
  const empty = outcome.kind === "indeterminate" && outcome.lookup.kind === "not_found";
4075
- if (!empty && (outcome.kind !== "conflict" || await successionDisputed(settled.by, settledFor))) {
4077
+ if (!empty && (outcome.kind !== "conflict" || await successionDisputed(settled, taxId, settledFor))) {
4076
4078
  return outcome;
4077
4079
  }
4078
4080
  return {
@@ -4083,7 +4085,11 @@ async function settledOutcome(select, reservation, settled, options, taxId, sett
4083
4085
  number: settled.number
4084
4086
  },
4085
4087
  attempt: replayEvidence(reservation.service),
4086
- lookup: { kind: "superseded", by: settled.by },
4088
+ lookup: {
4089
+ kind: "superseded",
4090
+ by: settled.by,
4091
+ byTaxId: settled.byTaxId ?? taxId
4092
+ },
4087
4093
  ...requestEvidence(
4088
4094
  preparedFromRecord(reservation).data,
4089
4095
  reservation.number,
@@ -4091,10 +4097,11 @@ async function settledOutcome(select, reservation, settled, options, taxId, sett
4091
4097
  )
4092
4098
  };
4093
4099
  }
4094
- async function successionDisputed(key, settledFor) {
4095
- let next = key;
4100
+ async function successionDisputed(superseded, taxId, settledFor) {
4101
+ let owner = superseded.byTaxId ?? taxId;
4102
+ let next = superseded.by;
4096
4103
  for (let hop = 0; hop < 16; hop += 1) {
4097
- const json = await settledFor(next);
4104
+ const json = await settledFor(owner, next);
4098
4105
  if (json === null) {
4099
4106
  return false;
4100
4107
  }
@@ -4102,6 +4109,7 @@ async function successionDisputed(key, settledFor) {
4102
4109
  if (record.kind === "conflict") {
4103
4110
  return true;
4104
4111
  }
4112
+ owner = record.byTaxId ?? owner;
4105
4113
  next = record.by;
4106
4114
  }
4107
4115
  return true;
@@ -4844,13 +4852,9 @@ async function recoverOperation(select, key, inputOptions, context) {
4844
4852
  readSettledRecord(recorded),
4845
4853
  options,
4846
4854
  context.taxId,
4847
- (other) => storeCall(
4855
+ (owner, other) => storeCall(
4848
4856
  () => store.get(
4849
- settledKey(
4850
- context.environment,
4851
- context.taxId,
4852
- other
4853
- )
4857
+ settledKey(context.environment, owner, other)
4854
4858
  )
4855
4859
  )
4856
4860
  );
@@ -4990,6 +4994,7 @@ async function runSequenceBarrier({
4990
4994
  environment,
4991
4995
  taxId,
4992
4996
  sequence,
4997
+ sequenceTaxId,
4993
4998
  coordinates,
4994
4999
  select,
4995
5000
  options,
@@ -5004,12 +5009,13 @@ async function runSequenceBarrier({
5004
5009
  if (claimed.resolvedAt !== void 0) {
5005
5010
  return {};
5006
5011
  }
5007
- const settled = settledKey(environment, taxId, claimed.key);
5012
+ const owner = claimed.issuerTaxId ?? taxId;
5013
+ const settled = settledKey(environment, owner, claimed.key);
5008
5014
  if (await storeCall(() => store.get(settled)) !== null) {
5009
5015
  return {};
5010
5016
  }
5011
5017
  const reservation = await storeCall(
5012
- () => store.get(attemptKey(environment, taxId, claimed.key))
5018
+ () => store.get(attemptKey(environment, owner, claimed.key))
5013
5019
  );
5014
5020
  if (reservation === null) {
5015
5021
  return {};
@@ -5020,7 +5026,7 @@ async function runSequenceBarrier({
5020
5026
  kind: "indeterminate",
5021
5027
  attempted: { ...coordinates, number: record.number },
5022
5028
  attempt: replayEvidence(options.service),
5023
- lookup: { kind: "blocked", by: claimed.key }
5029
+ lookup: { kind: "blocked", by: claimed.key, byTaxId: owner }
5024
5030
  }
5025
5031
  };
5026
5032
  const outcome = await recordConflict(
@@ -5028,12 +5034,18 @@ async function runSequenceBarrier({
5028
5034
  settled,
5029
5035
  await consultReservation(
5030
5036
  select,
5031
- record,
5037
+ // This call's certificate may not be the one that claimed. Without a
5038
+ // represented CUIT, it would read its own numbering instead of the one
5039
+ // the claim advanced.
5040
+ {
5041
+ ...record,
5042
+ representedTaxId: record.representedTaxId ?? sequenceTaxId
5043
+ },
5032
5044
  {
5033
5045
  forceRefresh: options.forceRefresh,
5034
5046
  ...options.abortSignal === void 0 ? {} : { abortSignal: options.abortSignal }
5035
5047
  },
5036
- taxId
5048
+ owner
5037
5049
  )
5038
5050
  );
5039
5051
  if (outcome.kind === "authorized" || outcome.kind === "conflict") {
@@ -5054,6 +5066,7 @@ async function runSequenceBarrier({
5054
5066
  kind: "superseded",
5055
5067
  number: record.number,
5056
5068
  by: supersededBy,
5069
+ byTaxId: taxId,
5057
5070
  settledAt: (/* @__PURE__ */ new Date()).toISOString()
5058
5071
  })
5059
5072
  )
@@ -5063,7 +5076,7 @@ async function runSequenceBarrier({
5063
5076
  function readSequenceRecord(json) {
5064
5077
  try {
5065
5078
  const record = JSON.parse(json);
5066
- if (record?.v !== 1 || typeof record.key !== "string" || !Number.isSafeInteger(record.number)) {
5079
+ if (record?.v !== 1 || typeof record.key !== "string" || record.issuerTaxId !== void 0 && typeof record.issuerTaxId !== "string" || !Number.isSafeInteger(record.number)) {
5067
5080
  throw new Error("Invalid sequence structure");
5068
5081
  }
5069
5082
  return record;
@@ -5595,4 +5608,4 @@ export {
5595
5608
  withLease,
5596
5609
  createFileStore
5597
5610
  };
5598
- //# sourceMappingURL=chunk-WQHP4O67.mjs.map
5611
+ //# sourceMappingURL=chunk-5CUMVSJY.mjs.map