{"version":3,"sources":["../../src/errors/errors.ts","../../src/documents/fa3/identifier.ts","../../src/utils/zip.ts","../../src/xml/xml.ts","../../src/xml/invoice.ts","../../src/documents/fa3/enums.ts","../../src/documents/fa3/xsd.ts","../../src/documents/fa3/xml.ts","../../src/documents/fa3/tax.ts","../../src/documents/fa3/builder.ts","../../src/documents/fa3/domain.ts","../../src/documents/fa3/sections.ts","../../src/documents/fa3/importer.ts","../../src/documents/fa3/template.ts","../../src/documents/fa3/publicApi.ts","../../src/documents/fa3/xsdMap.ts","../../src/documents/fa3/xsdAudit.ts"],"names":["path","ZipFile","XMLParser","XMLBuilder","fileURLToPath","fs","pathToFileURL","toNumber","money","mkdir","writeFile","DOMParser"],"mappings":"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","file":"fa3.cjs","sourcesContent":["import type {\n  BadRequestProblemDetails,\n  ExceptionResponse,\n  ForbiddenProblemDetails,\n  GoneProblemDetails,\n  TooManyRequestsProblemDetails,\n  TooManyRequestsResponse,\n  UnauthorizedProblemDetails,\n} from \"../types/openapi.generated\";\n\nexport interface UnknownApiProblem {\n  detail?: string;\n  raw: Record<string, unknown>;\n  status: number;\n  title: string;\n}\n\nexport type KsefApiProblem =\n  | BadRequestProblemDetails\n  | ExceptionResponse\n  | ForbiddenProblemDetails\n  | GoneProblemDetails\n  | TooManyRequestsProblemDetails\n  | TooManyRequestsResponse\n  | UnauthorizedProblemDetails\n  | UnknownApiProblem;\n\nexport class KsefError extends Error {\n  override name = \"KsefError\";\n\n  constructor(message: string) {\n    super(message);\n  }\n}\n\nexport class KsefHttpError extends KsefError {\n  override name = \"KsefHttpError\";\n  readonly problem: KsefApiProblem | undefined;\n  readonly statusCode: number;\n  readonly responseBody: string | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody?: string,\n    problem?: KsefApiProblem,\n  ) {\n    super(message);\n    this.problem = problem;\n    this.statusCode = statusCode;\n    this.responseBody = responseBody;\n  }\n}\n\nexport class KsefApiError extends KsefError {\n  override name = \"KsefApiError\";\n  readonly problem: KsefApiProblem | undefined;\n  readonly statusCode: number;\n  readonly responseBody: unknown | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    problem?: KsefApiProblem,\n  ) {\n    super(message);\n    this.problem = problem;\n    this.statusCode = statusCode;\n    this.responseBody = responseBody;\n  }\n}\n\nexport class KsefRateLimitError extends KsefApiError {\n  override name = \"KsefRateLimitError\";\n  readonly retryAfter: string | undefined;\n  readonly retryAfterSeconds: number | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    retryAfter?: string,\n    retryAfterSeconds?: number,\n    problem?: KsefApiProblem,\n  ) {\n    super(statusCode, message, responseBody, problem);\n    this.retryAfter = retryAfter;\n    this.retryAfterSeconds = retryAfterSeconds;\n  }\n}\n\nexport class KsefAuthStatusError extends KsefApiError {\n  override name = \"KsefAuthStatusError\";\n  readonly statusDetails: string[] | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    statusDetails?: string[],\n    problem?: KsefApiProblem,\n  ) {\n    super(statusCode, message, responseBody, problem);\n    this.statusDetails = statusDetails;\n  }\n}\n\nexport class KsefSessionExpiredError extends KsefError {\n  override name = \"KsefSessionExpiredError\";\n}\n\nexport class KsefValidationError extends KsefError {\n  override name = \"KsefValidationError\";\n  readonly details: string[] | undefined;\n\n  constructor(message: string, details?: string[]) {\n    super(message);\n    this.details = details;\n  }\n}\n","import { KsefValidationError } from \"../../errors/errors\";\nimport { XmlObject } from \"../../xml/xml\";\nimport type { FA3Party, FA3PartyIdentifier, FA3ValidationIssue } from \"./types\";\n\nexport const PartyIdentifierKind = {\n  NIP: \"NIP\",\n  EU_VAT: \"EU_VAT\",\n  FOREIGN: \"FOREIGN\",\n  INTERNAL: \"INTERNAL\",\n  NONE: \"NONE\",\n} as const;\n\nexport type PartyIdentifierKindValue = (typeof PartyIdentifierKind)[keyof typeof PartyIdentifierKind];\n\nexport type ResolvedPartyIdentifier = FA3PartyIdentifier;\n\nexport const SELLER_NIP_REQUIRED_MESSAGE =\n  \"Podmiot1/PodmiotUpowazniony wymaga identyfikatora NIP.\";\n\nconst EU_COUNTRY_CODES = new Set([\n  \"AT\",\n  \"BE\",\n  \"BG\",\n  \"CY\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"EE\",\n  \"EL\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"HR\",\n  \"HU\",\n  \"IE\",\n  \"IT\",\n  \"LT\",\n  \"LU\",\n  \"LV\",\n  \"MT\",\n  \"NL\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n]);\n\nfunction normalizeParty(party: FA3Party): FA3Party & { countryCode: string } {\n  return {\n    ...party,\n    countryCode: (party.countryCode ?? \"PL\").toUpperCase(),\n  };\n}\n\nexport function resolvePartyIdentifier(party: FA3Party): ResolvedPartyIdentifier {\n  if (party.identifier) {\n    const identifier = party.identifier;\n    return {\n      kind: identifier.kind,\n      ...(identifier.value !== undefined ? { value: identifier.value.trim() } : {}),\n      ...(identifier.countryCode\n        ? { countryCode: identifier.countryCode.toUpperCase() }\n        : {}),\n    };\n  }\n\n  const normalized = normalizeParty(party);\n  const taxId = normalized.taxId.trim();\n  const countryCode = normalized.countryCode;\n\n  if (normalized.internalId?.trim()) {\n    return {\n      kind: PartyIdentifierKind.INTERNAL,\n      value: normalized.internalId.trim(),\n    };\n  }\n\n  if (taxId.toUpperCase() === \"BRAK\") {\n    return { kind: PartyIdentifierKind.NONE };\n  }\n\n  const foreignMatch = /^([A-Z]{2}):(.*)$/i.exec(taxId);\n  if (foreignMatch?.[1] && foreignMatch[2]?.trim()) {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      countryCode: foreignMatch[1].toUpperCase(),\n      value: foreignMatch[2].trim(),\n    };\n  }\n\n  const vatPrefix = taxId.slice(0, 2).toUpperCase();\n  if (countryCode !== \"PL\" && EU_COUNTRY_CODES.has(vatPrefix) && taxId.length > 2) {\n    return {\n      kind: PartyIdentifierKind.EU_VAT,\n      countryCode: vatPrefix,\n      value: taxId.slice(2),\n    };\n  }\n\n  if (countryCode !== \"PL\") {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      countryCode,\n      value: taxId,\n    };\n  }\n\n  return {\n    kind: PartyIdentifierKind.NIP,\n    value: taxId,\n  };\n}\n\nexport function validatePartyIdentifier(\n  identifier: ResolvedPartyIdentifier,\n  path: string,\n): FA3ValidationIssue[] {\n  const issues: FA3ValidationIssue[] = [];\n  if (identifier.kind === PartyIdentifierKind.NONE) {\n    return issues;\n  }\n  if (!String(identifier.value ?? \"\").trim()) {\n    issues.push({\n      code: \"identifier_required\",\n      path: `${path}.identifier`,\n      message: `${path}: identyfikator jest wymagany.`,\n    });\n  }\n  if (\n    identifier.kind === PartyIdentifierKind.EU_VAT &&\n    !String(identifier.countryCode ?? \"\").trim()\n  ) {\n    issues.push({\n      code: \"eu_vat_country_required\",\n      path: `${path}.identifier.countryCode`,\n      message: `${path}: kod kraju UE jest wymagany dla numeru VAT UE.`,\n    });\n  }\n  return issues;\n}\n\nexport function validateSellerPartyIdentifier(\n  identifier: ResolvedPartyIdentifier,\n  path: string,\n): FA3ValidationIssue[] {\n  const issues = validatePartyIdentifier(identifier, path);\n  if (identifier.kind !== PartyIdentifierKind.NIP) {\n    issues.push({\n      code: \"seller_nip_required\",\n      path,\n      message: SELLER_NIP_REQUIRED_MESSAGE,\n    });\n  }\n  return issues;\n}\n\nexport function mapPartyIdentityToXml(\n  identifier: ResolvedPartyIdentifier,\n  name: string,\n  context: \"seller\" | \"buyer\",\n): XmlObject {\n  const baseName = { Nazwa: name };\n\n  if (context === \"seller\") {\n    if (identifier.kind !== PartyIdentifierKind.NIP) {\n      throw new KsefValidationError(SELLER_NIP_REQUIRED_MESSAGE);\n    }\n    return {\n      NIP: identifier.value ?? \"\",\n      ...baseName,\n    };\n  }\n\n  switch (identifier.kind) {\n    case PartyIdentifierKind.NIP:\n      return {\n        NIP: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.EU_VAT:\n      return {\n        KodUE: identifier.countryCode ?? \"\",\n        NrVatUE: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.FOREIGN:\n      return {\n        ...(identifier.countryCode ? { KodKraju: identifier.countryCode } : {}),\n        NrID: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.NONE:\n      return {\n        BrakID: \"1\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.INTERNAL:\n      return {\n        IDWew: identifier.value ?? \"\",\n        ...baseName,\n      };\n    default:\n      return {\n        NIP: identifier.value ?? \"\",\n        ...baseName,\n      };\n  }\n}\n","import { gunzipSync } from \"node:zlib\";\nimport { ZipFile } from \"yazl\";\nimport { fromBuffer, Entry } from \"yauzl\";\n\nexport interface ZipEntryInput {\n  fileName: string;\n  content: Buffer | Uint8Array;\n}\n\nexport interface UnzipOptions {\n  maxFiles?: number;\n  maxTotalUncompressedSize?: number;\n  maxFileUncompressedSize?: number;\n  maxCompressionRatio?: number | null;\n}\n\nconst DEFAULT_UNZIP_OPTIONS: Required<UnzipOptions> = {\n  maxFiles: 10_000,\n  maxTotalUncompressedSize: 2_000_000_000,\n  maxFileUncompressedSize: 500_000_000,\n  maxCompressionRatio: 200,\n};\n\nexport async function createZip(entries: ZipEntryInput[]): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    const zipfile = new ZipFile();\n    for (const entry of entries) {\n      zipfile.addBuffer(Buffer.from(entry.content), entry.fileName);\n    }\n\n    const chunks: Buffer[] = [];\n    zipfile.outputStream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n    zipfile.outputStream.on(\"error\", (err) => reject(err));\n    zipfile.outputStream.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    zipfile.end();\n  });\n}\n\nexport async function unzip(\n  buffer: Buffer,\n  options: UnzipOptions = {},\n): Promise<Map<string, Buffer>> {\n  const limits = { ...DEFAULT_UNZIP_OPTIONS, ...options };\n  return new Promise((resolve, reject) => {\n    fromBuffer(buffer, { lazyEntries: true }, (err, zipfile) => {\n      if (err || !zipfile) {\n        reject(err ?? new Error(\"Failed to open zip buffer.\"));\n        return;\n      }\n\n      const files = new Map<string, Buffer>();\n      let totalUncompressed = 0;\n      zipfile.readEntry();\n      zipfile.on(\"entry\", (entry: Entry) => {\n        if (entry.fileName.endsWith(\"/\")) {\n          zipfile.readEntry();\n          return;\n        }\n\n        if (files.size >= limits.maxFiles) {\n          reject(new Error(\"zip contains too many files\"));\n          return;\n        }\n\n        const uncompressedSize = entry.uncompressedSize ?? 0;\n        const compressedSize = entry.compressedSize ?? 0;\n\n        if (uncompressedSize > limits.maxFileUncompressedSize) {\n          reject(new Error(\"zip entry exceeds max_file_uncompressed_size\"));\n          return;\n        }\n\n        totalUncompressed += uncompressedSize;\n        if (totalUncompressed > limits.maxTotalUncompressedSize) {\n          reject(new Error(\"zip exceeds max_total_uncompressed_size\"));\n          return;\n        }\n\n        if (limits.maxCompressionRatio !== null) {\n          if (compressedSize === 0 && uncompressedSize > 0) {\n            reject(new Error(\"zip entry has suspicious compression metadata\"));\n            return;\n          }\n          if (compressedSize > 0 && uncompressedSize > 0) {\n            const ratio = uncompressedSize / compressedSize;\n            if (ratio > limits.maxCompressionRatio) {\n              reject(new Error(\"zip entry exceeds max_compression_ratio\"));\n              return;\n            }\n          }\n        }\n\n        zipfile.openReadStream(entry, (streamErr, stream) => {\n          if (streamErr || !stream) {\n            reject(streamErr ?? new Error(\"Failed to read zip entry.\"));\n            return;\n          }\n          const chunks: Buffer[] = [];\n          stream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n          stream.on(\"error\", (streamError) => reject(streamError));\n          stream.on(\"end\", () => {\n            files.set(entry.fileName, Buffer.concat(chunks));\n            zipfile.readEntry();\n          });\n        });\n      });\n      zipfile.on(\"end\", () => resolve(files));\n      zipfile.on(\"error\", (zipErr) => reject(zipErr));\n    });\n  });\n}\n\nconst TAR_BLOCK_SIZE = 512;\n\nexport async function untarGz(\n  buffer: Buffer,\n  options: UnzipOptions = {},\n): Promise<Map<string, Buffer>> {\n  const limits = { ...DEFAULT_UNZIP_OPTIONS, ...options };\n  validateArchiveLimits(limits);\n\n  const compressedSize = Math.max(buffer.length, 1);\n  let tarBuffer: Buffer;\n  try {\n    tarBuffer = gunzipSync(buffer);\n  } catch {\n    throw new Error(\"Failed to open tar.gz buffer.\");\n  }\n\n  const files = new Map<string, Buffer>();\n  let totalUncompressed = 0;\n  let offset = 0;\n\n  while (offset + TAR_BLOCK_SIZE <= tarBuffer.length) {\n    const header = tarBuffer.subarray(offset, offset + TAR_BLOCK_SIZE);\n    if (isZeroBlock(header)) {\n      break;\n    }\n\n    const name = readTarString(header, 0, 100);\n    const prefix = readTarString(header, 345, 155);\n    const size = parseTarOctal(header.subarray(124, 136));\n    const typeFlag = String.fromCharCode(header[156] as number);\n    offset += TAR_BLOCK_SIZE;\n    const paddedSize = Math.ceil(size / TAR_BLOCK_SIZE) * TAR_BLOCK_SIZE;\n\n    if (typeFlag === \"5\" || name.endsWith(\"/\")) {\n      offset += paddedSize;\n      continue;\n    }\n    if (typeFlag !== \"0\" && typeFlag !== \"\\0\") {\n      throw new Error(\"tar.gz entry must be a regular file\");\n    }\n    if (offset + size > tarBuffer.length) {\n      throw new Error(\"tar.gz entry could not be read\");\n    }\n\n    if (files.size >= limits.maxFiles) {\n      throw new Error(\"tar.gz contains too many files\");\n    }\n    if (size > limits.maxFileUncompressedSize) {\n      throw new Error(\"tar.gz contains an entry exceeding max_file_uncompressed_size\");\n    }\n\n    totalUncompressed += size;\n    if (totalUncompressed > limits.maxTotalUncompressedSize) {\n      throw new Error(\"tar.gz exceeds max_total_uncompressed_size\");\n    }\n    if (\n      limits.maxCompressionRatio !== null &&\n      totalUncompressed / compressedSize > limits.maxCompressionRatio\n    ) {\n      throw new Error(\"tar.gz exceeds max_compression_ratio\");\n    }\n\n    const fullName = prefix ? `${prefix}/${name}` : name;\n    const safeName = sanitizeArchiveEntryName(fullName, \"tar.gz\");\n    files.set(safeName, Buffer.from(tarBuffer.subarray(offset, offset + size)));\n    offset += paddedSize;\n  }\n\n  return files;\n}\n\nfunction validateArchiveLimits(limits: Required<UnzipOptions>): void {\n  if (limits.maxFiles <= 0) {\n    throw new Error(\"max_files must be positive\");\n  }\n  if (limits.maxTotalUncompressedSize <= 0) {\n    throw new Error(\"max_total_uncompressed_size must be positive\");\n  }\n  if (limits.maxFileUncompressedSize <= 0) {\n    throw new Error(\"max_file_uncompressed_size must be positive\");\n  }\n  if (limits.maxCompressionRatio !== null && limits.maxCompressionRatio <= 0) {\n    throw new Error(\"max_compression_ratio must be positive or None\");\n  }\n}\n\nfunction sanitizeArchiveEntryName(rawName: string, archiveType: string): string {\n  const normalized = rawName.replaceAll(\"\\\\\", \"/\");\n  if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized) || normalized.includes(\":\")) {\n    throw new Error(`${archiveType} entry path must be relative`);\n  }\n  const parts = normalized.split(\"/\").filter((part) => part.length > 0);\n  if (parts.length === 0 || parts.some((part) => part === \".\" || part === \"..\")) {\n    throw new Error(`${archiveType} entry path contains unsafe segments`);\n  }\n  return parts.join(\"/\");\n}\n\nfunction isZeroBlock(block: Buffer): boolean {\n  for (const byte of block) {\n    if (byte !== 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction readTarString(header: Buffer, start: number, length: number): string {\n  const slice = header.subarray(start, start + length);\n  const end = slice.indexOf(0);\n  return slice\n    .subarray(0, end === -1 ? slice.length : end)\n    .toString(\"utf8\")\n    .trim();\n}\n\nfunction parseTarOctal(value: Buffer): number {\n  const text = value.toString(\"utf8\").replaceAll(\"\\0\", \"\").trim();\n  if (!text) {\n    return 0;\n  }\n  const parsed = Number.parseInt(text, 8);\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n","import { XMLBuilder, XMLParser } from \"fast-xml-parser\";\n\nexport type XmlDocument = Array<Record<string, unknown>>;\nexport type XmlValue = string | number | boolean | null | XmlObject | XmlValue[];\nexport type XmlObject = { [key: string]: XmlValue };\n\nconst parser = new XMLParser({\n  ignoreAttributes: false,\n  preserveOrder: true,\n  attributeNamePrefix: \"@_\",\n  textNodeName: \"#text\",\n  allowBooleanAttributes: true,\n});\n\nconst builder = new XMLBuilder({\n  ignoreAttributes: false,\n  preserveOrder: true,\n  attributeNamePrefix: \"@_\",\n  textNodeName: \"#text\",\n  format: false,\n  suppressBooleanAttributes: false,\n  suppressEmptyNode: false,\n  processEntities: true,\n  declaration: {\n    include: true,\n    encoding: \"utf-8\",\n  },\n} as ConstructorParameters<typeof XMLBuilder>[0]);\n\nfunction createObjectBuilder(pretty = false): XMLBuilder {\n  return new XMLBuilder({\n    ignoreAttributes: false,\n    preserveOrder: false,\n    attributeNamePrefix: \"@_\",\n    textNodeName: \"#text\",\n    format: pretty,\n    suppressBooleanAttributes: false,\n    suppressEmptyNode: false,\n    processEntities: true,\n    declaration: {\n      include: true,\n      encoding: \"utf-8\",\n    },\n  } as ConstructorParameters<typeof XMLBuilder>[0]);\n}\n\nexport function parseXml(xml: string): XmlDocument {\n  return parser.parse(xml) as XmlDocument;\n}\n\nexport function buildXml(document: XmlDocument): string {\n  return builder.build(document);\n}\n\nexport function buildXmlFromObject(document: XmlObject, options?: { pretty?: boolean }): string {\n  return createObjectBuilder(options?.pretty).build(document);\n}\n","import { KsefValidationError } from \"../errors/errors\";\nimport { FormCode } from \"../types/common\";\nimport { buildXml, buildXmlFromObject, XmlDocument, XmlObject, XmlValue } from \"./xml\";\nimport { buildPefXml, isPefUblDocumentInput, PefUblDocumentInput } from \"./pef\";\n\nexport type InvoiceXmlInput =\n  | string\n  | Buffer\n  | XmlDocument\n  | XmlObject\n  | FakturaInput\n  | PefUblDocumentInput;\n\nexport type FakturaSchema = \"FA2\" | \"FA3\";\n\nexport interface FakturaXmlOptions {\n  schema?: FakturaSchema;\n  fakturaNamespace?: string;\n  etdNamespace?: string;\n  pretty?: boolean;\n}\n\nexport interface FakturaInput {\n  Naglowek: XmlObject;\n  Podmiot1?: XmlObject;\n  Podmiot2?: XmlObject;\n  Fa: XmlObject;\n  [key: string]: XmlValue;\n}\n\nconst DEFAULT_NAMESPACE: Record<FakturaSchema, string> = {\n  FA2: \"http://crd.gov.pl/wzor/2023/06/29/12648/\",\n  FA3: \"http://crd.gov.pl/wzor/2025/06/25/13775/\",\n};\n\nconst DEFAULT_ETD_NAMESPACE: Record<FakturaSchema, string> = {\n  FA2: \"http://crd.gov.pl/xml/schematy/2020/10/08/eDokumenty\",\n  FA3: \"http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/\",\n};\n\nconst ORDER_MAP: Record<string, string[]> = {\n  Faktura: [\"Naglowek\", \"Podmiot1\", \"Podmiot2\", \"Podmiot3\", \"Fa\", \"Stopka\", \"Zalacznik\"],\n  Naglowek: [\"KodFormularza\", \"WariantFormularza\", \"DataWytworzeniaFa\", \"SystemInfo\"],\n  Podmiot1: [\n    \"PrefiksPodatnika\",\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"StatusInfoPodatnika\",\n  ],\n  Podmiot2: [\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"NrKlienta\",\n    \"IDNabywcy\",\n    \"JST\",\n    \"GV\",\n  ],\n  Podmiot3: [\n    \"IDNabywcy\",\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"Rola\",\n    \"RolaInna\",\n    \"OpisRoli\",\n    \"Udzial\",\n    \"NrKlienta\",\n  ],\n  DaneIdentyfikacyjne: [\n    \"NIP\",\n    \"IDWew\",\n    \"KodUE\",\n    \"NrVatUE\",\n    \"KodKraju\",\n    \"NrID\",\n    \"BrakID\",\n    \"Nazwa\",\n    \"Identyfikator\",\n    \"KRS\",\n  ],\n  Adres: [\"KodKraju\", \"AdresL1\", \"AdresL2\", \"AdresL3\"],\n  DaneKontaktowe: [\"Email\", \"Telefon\"],\n  Fa: [\n    \"KodWaluty\",\n    \"P_1\",\n    \"P_1M\",\n    \"P_2\",\n    \"WZ\",\n    \"P_6\",\n    \"OkresFa\",\n    \"P_13_1\",\n    \"P_14_1\",\n    \"P_14_1W\",\n    \"P_13_2\",\n    \"P_14_2\",\n    \"P_14_2W\",\n    \"P_13_3\",\n    \"P_14_3\",\n    \"P_14_3W\",\n    \"P_13_4\",\n    \"P_14_4\",\n    \"P_14_4W\",\n    \"P_13_5\",\n    \"P_14_5\",\n    \"P_13_6_1\",\n    \"P_13_6_2\",\n    \"P_13_6_3\",\n    \"P_13_7\",\n    \"P_13_8\",\n    \"P_13_9\",\n    \"P_13_10\",\n    \"P_13_11\",\n    \"P_15\",\n    \"KursWalutyZ\",\n    \"Adnotacje\",\n    \"RodzajFaktury\",\n    \"PrzyczynaKorekty\",\n    \"TypKorekty\",\n    \"DaneFaKorygowanej\",\n    \"OkresFaKorygowanej\",\n    \"NrFaKorygowany\",\n    \"Podmiot1K\",\n    \"Podmiot2K\",\n    \"Podmiot3K\",\n    \"ZaliczkaCzesciowa\",\n    \"FP\",\n    \"TP\",\n    \"DodatkowyOpis\",\n    \"FakturaZaliczkowa\",\n    \"ZwrotAkcyzy\",\n    \"FaWiersz\",\n    \"Rozliczenie\",\n    \"Platnosc\",\n    \"WarunkiTransakcji\",\n    \"Transport\",\n    \"PodmiotPosredniczacy\",\n    \"Zamowienie\",\n  ],\n  Adnotacje: [\n    \"P_16\",\n    \"P_17\",\n    \"P_18\",\n    \"P_18A\",\n    \"Zwolnienie\",\n    \"NoweSrodkiTransportu\",\n    \"P_23\",\n    \"PMarzy\",\n  ],\n  DaneFaKorygowanej: [\n    \"DataWystFaKorygowanej\",\n    \"NrFaKorygowanej\",\n    \"NrKSeF\",\n    \"NrKSeFFaKorygowanej\",\n    \"NrKSeFN\",\n  ],\n  OkresFa: [\"P_6_Od\", \"P_6_Do\"],\n  FaWiersz: [\n    \"NrWierszaFa\",\n    \"UU_ID\",\n    \"P_6A\",\n    \"P_7\",\n    \"Indeks\",\n    \"GTIN\",\n    \"PKWiU\",\n    \"CN\",\n    \"PKOB\",\n    \"P_8A\",\n    \"P_8B\",\n    \"P_9A\",\n    \"P_9B\",\n    \"P_10\",\n    \"P_11\",\n    \"P_11A\",\n    \"P_11Vat\",\n    \"P_12\",\n    \"P_12_XII\",\n    \"P_12_Zal_15\",\n    \"KwotaAkcyzy\",\n    \"GTU\",\n    \"Procedura\",\n    \"KursWaluty\",\n    \"StanPrzed\",\n  ],\n  Rozliczenie: [\"Obciazenia\", \"SumaObciazen\", \"Odliczenia\", \"SumaOdliczen\", \"DoZaplaty\", \"DoRozliczenia\"],\n  Obciazenia: [\"Kwota\", \"Powod\"],\n  Odliczenia: [\"Kwota\", \"Powod\"],\n  Platnosc: [\n    \"Zaplacono\",\n    \"DataZaplaty\",\n    \"ZnacznikZaplatyCzesciowej\",\n    \"ZaplataCzesciowa\",\n    \"TerminPlatnosci\",\n    \"FormaPlatnosci\",\n    \"PlatnoscInna\",\n    \"OpisPlatnosci\",\n    \"RachunekBankowy\",\n    \"RachunekBankowyFaktora\",\n    \"Skonto\",\n    \"LinkDoPlatnosci\",\n    \"IPKSeF\",\n  ],\n  ZaplataCzesciowa: [\n    \"KwotaZaplatyCzesciowej\",\n    \"DataZaplatyCzesciowej\",\n    \"FormaPlatnosci\",\n    \"PlatnoscInna\",\n    \"OpisPlatnosci\",\n  ],\n  TerminPlatnosci: [\"Termin\", \"TerminOpis\"],\n  TerminOpis: [\"Ilosc\", \"Jednostka\", \"ZdarzeniePoczatkowe\"],\n  RachunekBankowy: [\"NrRB\", \"SWIFT\", \"RachunekWlasnyBanku\", \"NazwaBanku\", \"OpisRachunku\"],\n  RachunekBankowyFaktora: [\"NrRB\", \"SWIFT\", \"RachunekWlasnyBanku\", \"NazwaBanku\", \"OpisRachunku\"],\n  WarunkiTransakcji: [\n    \"Umowy\",\n    \"Zamowienia\",\n    \"NrPartiiTowaru\",\n    \"WarunkiDostawy\",\n    \"KursUmowny\",\n    \"WalutaUmowna\",\n    \"Transport\",\n    \"PodmiotPosredniczacy\",\n  ],\n  Umowy: [\"DataUmowy\", \"NrUmowy\"],\n  Zamowienia: [\"DataZamowienia\", \"NrZamowienia\"],\n  Transport: [\n    \"RodzajTransportu\",\n    \"TransportInny\",\n    \"OpisInnegoTransportu\",\n    \"Przewoznik\",\n    \"NrZleceniaTransportu\",\n    \"OpisLadunku\",\n    \"LadunekInny\",\n    \"OpisInnegoLadunku\",\n    \"JednostkaOpakowania\",\n  ],\n  Zamowienie: [\"WartoscZamowienia\", \"ZamowienieWiersz\"],\n  ZamowienieWiersz: [\n    \"NrWierszaZam\",\n    \"UU_IDZ\",\n    \"P_7Z\",\n    \"IndeksZ\",\n    \"GTINZ\",\n    \"PKWiUZ\",\n    \"CNZ\",\n    \"PKOBZ\",\n    \"P_8AZ\",\n    \"P_8BZ\",\n    \"P_9AZ\",\n    \"P_11NettoZ\",\n    \"P_11VatZ\",\n    \"P_12Z\",\n    \"P_12Z_XII\",\n    \"P_12Z_Zal_15\",\n    \"GTUZ\",\n    \"ProceduraZ\",\n    \"KwotaAkcyzyZ\",\n    \"StanPrzedZ\",\n  ],\n};\n\nfunction stripBom(input: string): string {\n  if (input.charCodeAt(0) === 0xfeff) {\n    return input.slice(1);\n  }\n  return input;\n}\n\nexport function serializeInvoiceXml(input: InvoiceXmlInput, options?: FakturaXmlOptions): Buffer {\n  if (Buffer.isBuffer(input)) {\n    return input;\n  }\n  if (typeof input === \"string\") {\n    const cleaned = stripBom(input);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (Array.isArray(input)) {\n    const xml = buildXml(input);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (isPefUblDocumentInput(input)) {\n    const xml = buildPefXml(input);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (isFakturaInput(input)) {\n    const xml = buildFakturaXml(input, options);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (typeof input === \"object\" && input) {\n    const prettyOptions = options?.pretty === undefined ? undefined : { pretty: options.pretty };\n    const xml = buildXmlFromObject(input as XmlObject, prettyOptions);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  throw new KsefValidationError(\"Unsupported invoice input type.\");\n}\n\nexport function buildFakturaXml(faktura: FakturaInput, options: FakturaXmlOptions = {}): string {\n  const schema = options.schema ?? \"FA3\";\n  const fakturaNamespace = options.fakturaNamespace ?? DEFAULT_NAMESPACE[schema];\n  const etdNamespace = options.etdNamespace ?? DEFAULT_ETD_NAMESPACE[schema];\n\n  const normalized = normalizeFakturaInput(faktura);\n  const ordered = orderXmlObject(normalized, \"Faktura\");\n  const document: XmlObject = {\n    Faktura: {\n      \"@_xmlns\": fakturaNamespace,\n      \"@_xmlns:etd\": etdNamespace,\n      ...ordered,\n    },\n  };\n\n  const prettyOptions = options.pretty === undefined ? undefined : { pretty: options.pretty };\n  return buildXmlFromObject(document, prettyOptions);\n}\n\nfunction normalizeFakturaInput(input: FakturaInput): XmlObject {\n  const result: XmlObject = {};\n  for (const [key, value] of Object.entries(input)) {\n    if (key === \"KodFormularza\" && isFormCode(value)) {\n      result[key] = toKodFormularza(value);\n      continue;\n    }\n    if (key === \"Naglowek\" && isObject(value)) {\n      result[key] = normalizeNaglowek(value as XmlObject);\n      continue;\n    }\n    result[key] = normalizeValueForKey(key, value);\n  }\n  return result;\n}\n\nfunction normalizeNaglowek(value: XmlObject): XmlObject {\n  const result: XmlObject = {};\n  for (const [key, item] of Object.entries(value)) {\n    if (key === \"KodFormularza\" && isFormCode(item)) {\n      result[key] = toKodFormularza(item);\n      continue;\n    }\n    result[key] = normalizeValueForKey(key, item);\n  }\n  return result;\n}\n\nfunction normalizeValue(value: XmlValue): XmlValue {\n  if (Array.isArray(value)) {\n    return value.map((item) => normalizeValue(item));\n  }\n  if (isObject(value)) {\n    return orderXmlObject(value as XmlObject);\n  }\n  return value;\n}\n\nfunction normalizeValueForKey(key: string, value: XmlValue): XmlValue {\n  if (Array.isArray(value)) {\n    return value.map((item) => {\n      if (isObject(item)) {\n        return orderXmlObject(item as XmlObject, key);\n      }\n      return normalizeValue(item);\n    });\n  }\n  if (isObject(value)) {\n    return orderXmlObject(value as XmlObject, key);\n  }\n  return value;\n}\n\nfunction orderXmlObject(value: XmlObject, contextKey?: string): XmlObject {\n  const order = contextKey ? ORDER_MAP[contextKey] : undefined;\n  const keys = Object.keys(value);\n  const used = new Set<string>();\n  const ordered: XmlObject = {};\n\n  if (order) {\n    for (const key of order) {\n      if (Object.prototype.hasOwnProperty.call(value, key)) {\n        const item = value[key];\n        if (item !== undefined) {\n          ordered[key] = normalizeValueForKey(key, item);\n        }\n        used.add(key);\n      }\n    }\n  }\n\n  const pKeys = keys.filter((key) => !used.has(key) && key.startsWith(\"P_\")).sort(comparePKey);\n  for (const key of pKeys) {\n    const item = value[key];\n    if (item !== undefined) {\n      ordered[key] = normalizeValueForKey(key, item);\n    }\n    used.add(key);\n  }\n\n  for (const key of keys) {\n    if (used.has(key)) {\n      continue;\n    }\n    const item = value[key];\n    if (item !== undefined) {\n      ordered[key] = normalizeValueForKey(key, item);\n    }\n  }\n\n  return ordered;\n}\n\nfunction comparePKey(a: string, b: string): number {\n  const normalize = (value: string) =>\n    value\n      .replace(/^P_/, \"\")\n      .split(\"_\")\n      .map((part) => (Number.isNaN(Number(part)) ? part : Number(part)));\n  const aParts = normalize(a);\n  const bParts = normalize(b);\n  const max = Math.max(aParts.length, bParts.length);\n  for (let i = 0; i < max; i += 1) {\n    const left = aParts[i];\n    const right = bParts[i];\n    if (left === undefined) {\n      return -1;\n    }\n    if (right === undefined) {\n      return 1;\n    }\n    if (typeof left === \"number\" && typeof right === \"number\") {\n      if (left !== right) {\n        return left - right;\n      }\n      continue;\n    }\n    const leftStr = String(left);\n    const rightStr = String(right);\n    if (leftStr !== rightStr) {\n      return leftStr.localeCompare(rightStr);\n    }\n  }\n  return 0;\n}\n\nfunction isFormCode(value: unknown): value is FormCode {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const candidate = value as {\n    systemCode?: unknown;\n    schemaVersion?: unknown;\n    value?: unknown;\n  };\n  return (\n    typeof candidate.systemCode === \"string\" &&\n    typeof candidate.schemaVersion === \"string\" &&\n    typeof candidate.value === \"string\"\n  );\n}\n\nfunction toKodFormularza(formCode: FormCode): XmlObject {\n  return {\n    \"@_kodSystemowy\": formCode.systemCode,\n    \"@_wersjaSchemy\": formCode.schemaVersion,\n    \"#text\": formCode.value,\n  };\n}\n\nfunction isFakturaInput(input: unknown): input is FakturaInput {\n  if (!isObject(input)) {\n    return false;\n  }\n  return (\n    Object.prototype.hasOwnProperty.call(input, \"Naglowek\") &&\n    Object.prototype.hasOwnProperty.call(input, \"Fa\")\n  );\n}\n\nfunction isObject(value: unknown): value is XmlObject {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","export const FA3_FORM_VARIANT = \"3\" as const;\n\nexport const CorrectionType = {\n  TAX_BASE_OR_TAX: \"1\",\n  OTHER: \"2\",\n  NO_TAX_IMPACT: \"3\",\n} as const;\n\nexport const PaymentMethod = {\n  CASH: \"1\",\n  CARD: \"2\",\n  VOUCHER: \"3\",\n  CHECK: \"4\",\n  CREDIT: \"5\",\n  TRANSFER: \"6\",\n  COMPENSATION: \"7\",\n} as const;\n\nexport const VatRateCode = {\n  RATE_23: \"23\",\n  RATE_22: \"22\",\n  RATE_8: \"8\",\n  RATE_7: \"7\",\n  RATE_5: \"5\",\n  RATE_4: \"4\",\n  RATE_3: \"3\",\n  ZERO_DOMESTIC: \"0 KR\",\n  ZERO_WDT: \"0 WDT\",\n  ZERO_EXPORT: \"0 EX\",\n  EXEMPT: \"zw\",\n  REVERSE_CHARGE: \"oo\",\n  OUTSIDE_COUNTRY_1: \"np I\",\n  OUTSIDE_COUNTRY_2: \"np II\",\n} as const;\n\nexport const LineProcedure = {\n  WSTO_EE: \"WSTO_EE\",\n  IED: \"IED\",\n  TT_D: \"TT_D\",\n  I_42: \"I_42\",\n  I_63: \"I_63\",\n  B_SPV: \"B_SPV\",\n  B_SPV_DOSTAWA: \"B_SPV_DOSTAWA\",\n  B_MPV_PROWIZJA: \"B_MPV_PROWIZJA\",\n} as const;\n\nexport const OrderLineProcedure = {\n  WSTO_EE: \"WSTO_EE\",\n  IED: \"IED\",\n  TT_D: \"TT_D\",\n  B_SPV: \"B_SPV\",\n  B_SPV_DOSTAWA: \"B_SPV_DOSTAWA\",\n  B_MPV_PROWIZJA: \"B_MPV_PROWIZJA\",\n} as const;\n\nexport const GTUCode = {\n  GTU_01: \"GTU_01\",\n  GTU_02: \"GTU_02\",\n  GTU_03: \"GTU_03\",\n  GTU_04: \"GTU_04\",\n  GTU_05: \"GTU_05\",\n  GTU_06: \"GTU_06\",\n  GTU_07: \"GTU_07\",\n  GTU_08: \"GTU_08\",\n  GTU_09: \"GTU_09\",\n  GTU_10: \"GTU_10\",\n  GTU_11: \"GTU_11\",\n  GTU_12: \"GTU_12\",\n  GTU_13: \"GTU_13\",\n} as const;\n\nexport const TransportKind = {\n  SEA: \"1\",\n  RAIL: \"2\",\n  ROAD: \"3\",\n  AIR: \"4\",\n  POSTAL: \"5\",\n  FIXED_TRANSPORT: \"7\",\n  OTHER: \"8\",\n} as const;\n\nexport const MarginProcedure = {\n  TRAVEL: \"travel\",\n  USED_GOODS: \"used_goods\",\n  ART: \"art\",\n  COLLECTIBLES: \"collectibles\",\n} as const;\n\nexport type EnumValue<T extends Record<string, string>> = T[keyof T];\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { KsefError } from \"../../errors/errors\";\n\nconst SCHEMA_FILE = \"schemat_FA(3)_v1-0E.xsd\";\nconst SCHEMA_IMPORT = \"http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/StrukturyDanych_v10-0E.xsd\";\n\nfunction moduleDir(): string {\n  return path.dirname(fileURLToPath(import.meta.url));\n}\n\nexport function resolveFa3SchemaEntryPath(candidates?: string[]): string {\n  const localDir = moduleDir();\n  const searchPaths = candidates ?? [\n    path.join(localDir, \"schemas\", SCHEMA_FILE),\n    path.join(localDir, \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n    path.resolve(process.cwd(), \"dist\", \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n    path.resolve(process.cwd(), \"src\", \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n  ];\n  const schemaPath = searchPaths.find((candidate) => fs.existsSync(candidate));\n  if (!schemaPath) {\n    throw new KsefError(`Missing FA(3) schema file. Checked: ${searchPaths.join(\", \")}`);\n  }\n  return schemaPath;\n}\n\nexport function loadFa3SchemaWithLocalImports(): { schemaContent: string; schemaBaseUrl: string; schemaPath: string } {\n  const schemaPath = resolveFa3SchemaEntryPath();\n  const schemaBaseDir = path.dirname(schemaPath);\n  const bazowePath = path.join(schemaBaseDir, \"bazowe\", \"StrukturyDanych_v10-0E.xsd\");\n  const bazoweUrl = pathToFileURL(bazowePath).href;\n  const raw = fs.readFileSync(schemaPath, \"utf8\");\n  const schemaContent = raw.replace(\n    new RegExp(`schemaLocation=\"${SCHEMA_IMPORT.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\"`, \"g\"),\n    `schemaLocation=\"${bazoweUrl}\"`,\n  );\n  return {\n    schemaContent,\n    schemaBaseUrl: pathToFileURL(`${schemaBaseDir}${path.sep}`).href,\n    schemaPath,\n  };\n}\n\ntype Fa3XmlParser = (\n  value: string,\n  options?: { baseUrl?: string },\n) => {\n  validate: (schema: unknown) => boolean;\n  validationErrors?: Array<{ message?: string }>;\n};\n\nexport async function validateFa3XmlWithParser(xml: string, parseXml: Fa3XmlParser): Promise<void> {\n  const { schemaContent, schemaBaseUrl } = loadFa3SchemaWithLocalImports();\n  const schemaDoc = parseXml(schemaContent, { baseUrl: schemaBaseUrl });\n  const xmlDoc = parseXml(xml);\n  const valid = xmlDoc.validate(schemaDoc);\n  if (!valid) {\n    const errors = (xmlDoc.validationErrors ?? [])\n      .map((err: { message?: string }) => String(err?.message ?? \"\").trim())\n      .filter(Boolean);\n    throw new KsefError(\n      errors.length > 0 ? `FA(3) XSD validation failed: ${errors.join(\" | \")}` : \"FA(3) XSD validation failed.\",\n    );\n  }\n}\n\nexport type Libxml = { parseXml: Fa3XmlParser };\n\nexport async function loadLibxml(): Promise<Libxml> {\n  // Indirect specifier keeps `libxmljs2` a runtime-only optional dependency:\n  // it must not be resolved at compile time (typecheck / dts build) because\n  // the native module is frequently absent (skipped optional install).\n  const moduleName: string = \"libxmljs2\";\n  return (await import(moduleName)) as unknown as Libxml;\n}\n\nexport async function validateFa3XmlXsd(\n  xml: string,\n  loadModule: () => Promise<Libxml> = loadLibxml,\n): Promise<void> {\n  let parseXml: Fa3XmlParser;\n  try {\n    const imported = await loadModule();\n    parseXml = imported.parseXml;\n  } catch {\n    throw new KsefError(\n      \"FA(3) XSD validation requires optional dependency `libxmljs2`. Install with `npm install libxmljs2` and retry.\",\n    );\n  }\n\n  await validateFa3XmlWithParser(xml, parseXml);\n}\n","import { KsefError } from \"../../errors/errors\";\nimport { validateFa3XmlXsd } from \"./xsd\";\nimport type { FA3Draft } from \"./builder\";\n\nexport class FA3XmlValidationError extends KsefError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"FA3XmlValidationError\";\n  }\n}\n\nexport function toFa3XmlValidationMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nexport async function validateFa3XmlWithValidator(\n  xml: string,\n  validator: (value: string) => Promise<void>,\n): Promise<void> {\n  try {\n    await validator(xml);\n  } catch (error) {\n    throw new FA3XmlValidationError(toFa3XmlValidationMessage(error));\n  }\n}\n\nexport async function validateFa3Xml(xml: string): Promise<void> {\n  return validateFa3XmlWithValidator(xml, validateFa3XmlXsd);\n}\n\nexport async function invoiceToXml(\n  draft: FA3Draft,\n  options: { pretty?: boolean; xsdValidate?: boolean } = {},\n): Promise<string> {\n  return draft.toXml(options);\n}\n\nexport const invoice_to_xml = invoiceToXml;\nexport const validate_fa3_xml_xsd = validateFa3XmlXsd;\n","import { KsefValidationError } from \"../../errors/errors\";\nimport { FA3Line } from \"./types\";\n\nfunction toNumber(value: number | string | null | undefined): number {\n  if (value == null || value === \"\") return 0;\n  const parsed = Number(String(value).replace(\",\", \".\"));\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction money(value: number): number {\n  return Number(value.toFixed(2));\n}\n\nfunction isNumericRateString(value: string): boolean {\n  return /^-?\\d+([.,]\\d+)?$/.test(value.trim());\n}\n\n/** Kubełki podsumowania VAT FA(3). */\nexport type FaVatBucketKey =\n  | \"23or22\"\n  | \"8or7\"\n  | \"5\"\n  | \"4or3\"\n  | \"0KR\"\n  | \"0WDT\"\n  | \"0EX\"\n  | \"zw\"\n  | \"npI\"\n  | \"npII\"\n  | \"oo\";\n\nconst BUCKET_ORDER: FaVatBucketKey[] = [\n  \"23or22\",\n  \"8or7\",\n  \"5\",\n  \"4or3\",\n  \"0KR\",\n  \"0WDT\",\n  \"0EX\",\n  \"zw\",\n  \"npI\",\n  \"npII\",\n  \"oo\",\n];\n\nconst BUCKET_TAGS: Record<FaVatBucketKey, { net: string; vat?: string; vatW?: string }> = {\n  \"23or22\": { net: \"P_13_1\", vat: \"P_14_1\", vatW: \"P_14_1W\" },\n  \"8or7\": { net: \"P_13_2\", vat: \"P_14_2\", vatW: \"P_14_2W\" },\n  \"5\": { net: \"P_13_3\", vat: \"P_14_3\", vatW: \"P_14_3W\" },\n  \"4or3\": { net: \"P_13_4\", vat: \"P_14_4\", vatW: \"P_14_4W\" },\n  \"0KR\": { net: \"P_13_6_1\" },\n  \"0WDT\": { net: \"P_13_6_2\" },\n  \"0EX\": { net: \"P_13_6_3\" },\n  zw: { net: \"P_13_7\" },\n  npI: { net: \"P_13_8\" },\n  npII: { net: \"P_13_9\" },\n  oo: { net: \"P_13_10\" },\n};\n\nexport interface TaxSummaryRow {\n  rateCode: string;\n  net: number;\n  vat: number;\n  gross: number;\n  vatPln: number;\n}\n\n/** Mapuje kod FA(3) / numeryczny rate na kubełek P_13_x. Pusty/nieznany → KsefValidationError. */\nexport function faVatBucketForCode(code: string | null | undefined): FaVatBucketKey {\n  const trimmed = code?.trim();\n  if (!trimmed) {\n    throw new KsefValidationError(\"Unknown FA(3) VAT rate code: (empty)\");\n  }\n  switch (trimmed) {\n    case \"23\":\n    case \"22\":\n      return \"23or22\";\n    case \"8\":\n    case \"7\":\n      return \"8or7\";\n    case \"5\":\n      return \"5\";\n    case \"4\":\n    case \"3\":\n      return \"4or3\";\n    case \"0 KR\":\n      return \"0KR\";\n    case \"0 WDT\":\n      return \"0WDT\";\n    case \"0 EX\":\n      return \"0EX\";\n    case \"zw\":\n      return \"zw\";\n    case \"np I\":\n      return \"npI\";\n    case \"np II\":\n      return \"npII\";\n    case \"oo\":\n      return \"oo\";\n    default:\n      throw new KsefValidationError(`Unknown FA(3) VAT rate code: ${trimmed}`);\n  }\n}\n\n/** Kod stawki do P_12 / grupowania: vatCode, potem nienumeryczny vatRate, potem liczba. */\nexport function resolveVatRateCode(line: FA3Line): string {\n  const fromCode = line.vatCode?.trim();\n  if (fromCode) return fromCode;\n\n  if (line.vatRate == null || line.vatRate === \"\") {\n    return \"0 KR\";\n  }\n\n  if (typeof line.vatRate === \"string\") {\n    const trimmed = line.vatRate.trim();\n    if (trimmed && !isNumericRateString(trimmed)) {\n      return trimmed;\n    }\n  }\n\n  const n = toNumber(line.vatRate);\n  if (Math.abs(n) < 1e-12) return \"0 KR\";\n  return String(n);\n}\n\nexport class TaxSummary {\n  static fromLines(\n    lines: FA3Line[],\n    options: { treatBeforeCorrectionAsNegative?: boolean } = {},\n  ): TaxSummaryRow[] {\n    const invertBefore = Boolean(options.treatBeforeCorrectionAsNegative);\n    const map = new Map<string, TaxSummaryRow>();\n    for (const line of lines) {\n      const qty = toNumber(line.quantity);\n      const unitNet = toNumber(line.unitNetPrice);\n      const rate = toNumber(line.vatRate);\n      const rateCode = resolveVatRateCode(line);\n      const sign = invertBefore && line.beforeCorrection ? -1 : 1;\n      const unsignedNet = toNumber(line.netAmount ?? qty * unitNet);\n      const unsignedVat = toNumber(line.vatAmount ?? (rate === 0 ? 0 : (unsignedNet * rate) / 100));\n      const unsignedGross = toNumber(line.grossAmount ?? unsignedNet + unsignedVat);\n      const prev = map.get(rateCode) ?? { rateCode, net: 0, vat: 0, gross: 0, vatPln: 0 };\n      prev.net = money(prev.net + sign * unsignedNet);\n      prev.vat = money(prev.vat + sign * unsignedVat);\n      prev.gross = money(prev.gross + sign * unsignedGross);\n      if (line.vatAmountPln != null && line.vatAmountPln !== \"\") {\n        prev.vatPln = money(prev.vatPln + sign * toNumber(line.vatAmountPln));\n      }\n      map.set(rateCode, prev);\n    }\n    return [...map.values()];\n  }\n}\n\ntype BucketAmounts = { net: number; vat: number; vatPln: number | null };\n\n/**\n * Zamienia wiersze TaxSummary na pola Fa (P_13_x / P_14_x / P_14_xW).\n * Wartości jako stringi xx.xx (jak money() w builderze).\n */\nexport function taxSummaryToFaFields(\n  rows: TaxSummaryRow[],\n  options: { includeVatPln?: boolean } = {},\n): Record<string, string> {\n  const includeVatPln = Boolean(options.includeVatPln);\n  const buckets = new Map<FaVatBucketKey, BucketAmounts>();\n\n  for (const row of rows) {\n    const key = faVatBucketForCode(row.rateCode);\n    const prev = buckets.get(key) ?? {\n      net: 0,\n      vat: 0,\n      vatPln: null,\n    };\n    prev.net = money(prev.net + row.net);\n    prev.vat = money(prev.vat + row.vat);\n    if (includeVatPln) {\n      prev.vatPln = money((prev.vatPln ?? 0) + (row.vatPln ?? 0));\n    }\n    buckets.set(key, prev);\n  }\n\n  const fields: Record<string, string> = {};\n  for (const key of BUCKET_ORDER) {\n    const amounts = buckets.get(key);\n    if (!amounts) continue;\n    const tags = BUCKET_TAGS[key];\n    fields[tags.net] = amounts.net.toFixed(2);\n    if (tags.vat) {\n      fields[tags.vat] = amounts.vat.toFixed(2);\n      if (includeVatPln && tags.vatW && amounts.vatPln != null) {\n        fields[tags.vatW] = amounts.vatPln.toFixed(2);\n      }\n    }\n  }\n  return fields;\n}\n","import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { createZip } from \"../../utils/zip\";\nimport { buildFakturaXml, FakturaInput } from \"../../xml/invoice\";\nimport { XmlObject } from \"../../xml/xml\";\nimport { KsefValidationError } from \"../../errors/errors\";\nimport { FA3_FORM_VARIANT } from \"./enums\";\nimport { validateFa3Xml } from \"./xml\";\nimport {\n  FA3AdvancePayment,\n  FA3BankAccount,\n  FA3DraftInput,\n  FA3InvoiceKind,\n  FA3Line,\n  FA3Party,\n  FA3PaymentMethod,\n  FA3PaymentDueDescription,\n  FA3PaymentTerms,\n  FA3Settlement,\n  FA3ValidationIssue,\n} from \"./types\";\nimport {\n  mapPartyIdentityToXml,\n  resolvePartyIdentifier,\n  validatePartyIdentifier,\n  validateSellerPartyIdentifier,\n} from \"./identifier\";\nimport { TaxSummary, resolveVatRateCode, taxSummaryToFaFields } from \"./tax\";\n\ninterface FA3XmlOptions {\n  pretty?: boolean;\n  xsdValidate?: boolean;\n}\n\ntype NormalizedFA3Draft = FA3DraftInput & {\n  kind: FA3InvoiceKind;\n  lines: FA3Line[];\n  issuePlace: string;\n  advancePayments: FA3AdvancePayment[];\n  additionalParties: FA3Party[];\n  rawExtensions: NonNullable<FA3DraftInput[\"rawExtensions\"]>;\n  additionalDescriptions: NonNullable<FA3DraftInput[\"additionalDescriptions\"]>;\n};\n\nconst KIND_CODE: Record<FA3InvoiceKind, string> = {\n  basic: \"VAT\",\n  simplified: \"UPR\",\n  correction: \"KOR\",\n  advance: \"ZAL\",\n  settlement: \"ROZ\",\n  advance_correction: \"KOR_ZAL\",\n  settlement_correction: \"KOR_ROZ\",\n};\n\nconst CORRECTION_KINDS = new Set<FA3InvoiceKind>([\n  \"correction\",\n  \"advance_correction\",\n  \"settlement_correction\",\n]);\n\nconst SETTLEMENT_KINDS = new Set<FA3InvoiceKind>([\"settlement\", \"settlement_correction\"]);\n\nconst CORRECTION_TYPE_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  tax_base_or_tax: \"1\",\n  other: \"2\",\n  no_tax_impact: \"3\",\n};\n\nconst PAYMENT_METHOD_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"5\": \"5\",\n  \"6\": \"6\",\n  \"7\": \"7\",\n  cash: \"1\",\n  card: \"2\",\n  voucher: \"3\",\n  check: \"4\",\n  credit: \"5\",\n  transfer: \"6\",\n  compensation: \"7\",\n  mobile: \"2\",\n  other: \"7\",\n};\n\nconst THIRD_PARTY_ROLE_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"8\": \"8\",\n  \"10\": \"10\",\n  \"11\": \"11\",\n  original_entity: \"1\",\n  additional_buyer: \"2\",\n  recipient: \"3\",\n  payer: \"4\",\n  jst_subunit: \"8\",\n  vat_group_member: \"10\",\n  other: \"11\",\n};\n\nconst TRANSPORT_KIND_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"5\": \"5\",\n  \"7\": \"7\",\n  \"8\": \"8\",\n  sea: \"1\",\n  rail: \"2\",\n  road: \"3\",\n  air: \"4\",\n  postal: \"5\",\n  fixed_transport: \"7\",\n  other: \"8\",\n};\n\nfunction toNumber(value: number | string): number {\n  const parsed = typeof value === \"number\" ? value : Number(String(value).replace(\",\", \".\"));\n  if (!Number.isFinite(parsed)) {\n    throw new KsefValidationError(`Invalid numeric value: ${String(value)}`);\n  }\n  return parsed;\n}\n\nfunction money(value: number | string): string {\n  return toNumber(value).toFixed(2);\n}\n\nfunction percentage(value: number | string): string {\n  const numeric = toNumber(value);\n  if (Number.isInteger(numeric)) {\n    return String(numeric);\n  }\n  return String(numeric);\n}\n\nfunction mapXiiVatRate(value: number | string | null | undefined): string | undefined {\n  if (value === null || value === undefined || isZeroVat(value)) {\n    return undefined;\n  }\n  return percentage(value);\n}\n\nfunction toDateOnly(value: string): string {\n  return value.includes(\"T\") ? value.slice(0, 10) : value;\n}\n\nfunction isZeroVat(value: number | string | null | undefined): boolean {\n  if (value === null || value === undefined) {\n    return true;\n  }\n  return Math.abs(toNumber(value)) < 1e-12;\n}\n\nfunction normalizeCurrency(value: string | undefined): string {\n  return (value ?? \"PLN\").trim().toUpperCase();\n}\n\nfunction normalizePaymentMethod(value: string | undefined): string | undefined {\n  if (!value) {\n    return undefined;\n  }\n  return PAYMENT_METHOD_TO_CODE[value] ?? value;\n}\n\nfunction mapParty(party: FA3Party, context: \"seller\" | \"buyer\" = \"buyer\"): XmlObject {\n  const identifier = resolvePartyIdentifier(party);\n  return {\n    ...(party.eori ? { NrEORI: party.eori } : {}),\n    DaneIdentyfikacyjne: mapPartyIdentityToXml(identifier, party.name, context),\n    ...((party.countryCode ?? \"PL\") && party.addressLine1\n      ? {\n          Adres: {\n            KodKraju: party.countryCode ?? \"PL\",\n            AdresL1: party.addressLine1,\n            ...(party.addressLine2 ? { AdresL2: party.addressLine2 } : {}),\n            ...(party.addressLine3 ? { AdresL3: party.addressLine3 } : {}),\n          },\n        }\n      : {}),\n    ...(party.email || party.phone\n      ? {\n          DaneKontaktowe: {\n            ...(party.email ? { Email: party.email } : {}),\n            ...(party.phone ? { Telefon: party.phone } : {}),\n          },\n        }\n      : {}),\n  };\n}\n\nfunction mapBuyer(party: FA3Party): XmlObject {\n  return {\n    ...mapParty(party, \"buyer\"),\n    JST: party.isJstSubunit ? \"1\" : \"2\",\n    GV: party.isVatGroupMember ? \"1\" : \"2\",\n  };\n}\n\nfunction mapAdditionalParty(party: FA3Party): XmlObject {\n  const roleCode = party.role ? THIRD_PARTY_ROLE_TO_CODE[party.role] ?? party.role : \"2\";\n  const role: XmlObject =\n    roleCode === \"11\" || party.role === \"other\"\n      ? { RolaInna: \"1\", ...(party.otherRoleDescription ? { OpisRoli: party.otherRoleDescription } : {}) }\n      : { Rola: roleCode };\n  return {\n    ...(party.buyerId ? { IDNabywcy: party.buyerId } : {}),\n    ...mapParty(party, \"buyer\"),\n    ...role,\n    ...(party.share !== undefined ? { Udzial: String(party.share) } : {}),\n    ...(party.customerNumber ? { NrKlienta: party.customerNumber } : {}),\n  };\n}\n\nfunction computeLineAmounts(line: FA3Line): {\n  net: number;\n  vat: number;\n  gross: number;\n  vatRate: number;\n} {\n  const quantity = toNumber(line.quantity);\n  const unitNetPrice = toNumber(line.unitNetPrice);\n  const baseNet = quantity * unitNetPrice;\n  const vatRate = isZeroVat(line.vatRate) ? 0 : toNumber(line.vatRate as number | string);\n  const vat = vatRate === 0 ? 0 : (baseNet * vatRate) / 100;\n  const gross = baseNet + vat;\n  return {\n    net: toNumber(line.netAmount ?? baseNet),\n    vat: toNumber(line.vatAmount ?? vat),\n    gross: toNumber(line.grossAmount ?? gross),\n    vatRate,\n  };\n}\n\nfunction mapLine(line: FA3Line, index: number): XmlObject {\n  const amounts = computeLineAmounts(line);\n  const xiiVatRate = mapXiiVatRate(line.xiiVatRate);\n  return {\n    NrWierszaFa: String(index + 1),\n    P_7: line.description,\n    P_8A: line.unit,\n    P_8B: String(line.quantity),\n    P_9A: money(line.unitNetPrice),\n    P_11: money(amounts.net),\n    P_11Vat: money(amounts.vat),\n    P_12: resolveVatRateCode(line),\n    ...(xiiVatRate ? { P_12_XII: xiiVatRate } : {}),\n    ...(line.annex15 ? { P_12_Zal_15: \"1\" } : {}),\n    ...(line.serviceDate ? { P_6A: toDateOnly(line.serviceDate) } : {}),\n    ...(line.beforeCorrection ? { StanPrzed: \"1\" } : {}),\n    ...(line.uniqueId ? { UU_ID: line.uniqueId } : {}),\n    ...(line.gtu ? { GTU: line.gtu } : {}),\n    ...(line.procedure ? { Procedura: line.procedure } : {}),\n  };\n}\n\ntype AdvanceSplit = {\n  net: number;\n  vat: number;\n  gross: number;\n  vatRate: number;\n  vatCode: string;\n};\n\nfunction splitAdvancePayment(payment: FA3AdvancePayment): AdvanceSplit {\n  const gross = toNumber(payment.amount);\n  const vatRate = isZeroVat(payment.vatRate) ? null : toNumber(payment.vatRate as number | string);\n  if (vatRate === null) {\n    return { net: gross, vat: 0, gross, vatRate: 0, vatCode: \"0 KR\" };\n  }\n  const divisor = 1 + vatRate / 100;\n  const net = gross / divisor;\n  const vat = gross - net;\n  return { net, vat, gross, vatRate, vatCode: String(vatRate) };\n}\n\nfunction computeAdvanceNetVat(payments: FA3AdvancePayment[]): { net: number; vat: number; gross: number } {\n  return payments.reduce(\n    (acc, payment) => {\n      const split = splitAdvancePayment(payment);\n      acc.net += split.net;\n      acc.vat += split.vat;\n      acc.gross += split.gross;\n      return acc;\n    },\n    { net: 0, vat: 0, gross: 0 },\n  );\n}\n\n/** Synthetic FA lines so advancePayments contribute to P_13_x/P_14_x buckets (not FaWiersz). */\nfunction advancePaymentsAsLines(payments: FA3AdvancePayment[]): FA3Line[] {\n  return payments.map((payment) => {\n    const split = splitAdvancePayment(payment);\n    return {\n      description: \"Zaliczka\",\n      quantity: 1,\n      unit: \"szt\",\n      unitNetPrice: split.net,\n      vatRate: split.vatRate,\n      vatCode: split.vatCode,\n      netAmount: split.net,\n      vatAmount: split.vat,\n      grossAmount: split.gross,\n    };\n  });\n}\n\nfunction extractTotals(input: NormalizedFA3Draft): { net: number; vat: number; gross: number } {\n  const linesTotals = input.lines.reduce(\n    (acc, line) => {\n      const amounts = computeLineAmounts(line);\n      const sign = CORRECTION_KINDS.has(input.kind) && line.beforeCorrection ? -1 : 1;\n      acc.net += sign * amounts.net;\n      acc.vat += sign * amounts.vat;\n      acc.gross += sign * amounts.gross;\n      return acc;\n    },\n    { net: 0, vat: 0, gross: 0 },\n  );\n  const advanceTotals = computeAdvanceNetVat(input.advancePayments);\n  return {\n    net: linesTotals.net + advanceTotals.net,\n    vat: linesTotals.vat + advanceTotals.vat,\n    gross: linesTotals.gross + advanceTotals.gross,\n  };\n}\n\nfunction mapAdnotacje(input: NormalizedFA3Draft): XmlObject {\n  const hasAnnex15Line = input.lines.some((line) => line.annex15);\n  const gross = extractTotals(input).gross;\n  const splitPaymentRequested = input.splitPaymentAnnotation === true;\n\n  const p18a =\n    splitPaymentRequested || (hasAnnex15Line && gross > 15000) ? \"1\" : \"2\";\n\n  return {\n    Adnotacje: {\n      P_16: \"2\",\n      P_17: \"2\",\n      P_18: \"2\",\n      P_18A: p18a,\n      Zwolnienie: { P_19N: \"1\" },\n      NoweSrodkiTransportu: { P_22N: \"1\" },\n      P_23: \"2\",\n      PMarzy: { P_PMarzyN: \"1\" },\n    },\n  };\n}\n\nfunction mapDaneFaKorygowanej(input: NormalizedFA3Draft): XmlObject | undefined {\n  const correctedDate = input.correctedInvoiceDate?.trim();\n  const correctedNumber = input.correctedInvoiceNumber?.trim();\n  if (!correctedDate || !correctedNumber) {\n    return undefined;\n  }\n\n  const dane: XmlObject = {\n    DataWystFaKorygowanej: correctedDate,\n    NrFaKorygowanej: correctedNumber,\n  };\n\n  const correctedKsefNumber = input.correctedKsefNumber?.trim();\n  if (correctedKsefNumber) {\n    dane.NrKSeF = \"1\";\n    dane.NrKSeFFaKorygowanej = correctedKsefNumber;\n  } else {\n    dane.NrKSeFN = \"1\";\n  }\n\n  return dane;\n}\n\nfunction mapKindSpecificFields(input: NormalizedFA3Draft): XmlObject {\n  const kind = input.kind;\n  const payload: XmlObject = { RodzajFaktury: KIND_CODE[kind] };\n\n  if (CORRECTION_KINDS.has(kind)) {\n    if (input.correctionType) {\n      payload.TypKorekty = CORRECTION_TYPE_TO_CODE[input.correctionType] ?? input.correctionType;\n    }\n    if (input.correctionReason) {\n      payload.PrzyczynaKorekty = input.correctionReason;\n    }\n    if (input.correctedPeriod) {\n      payload.OkresFaKorygowanej = input.correctedPeriod;\n    }\n    if (input.correctedInvoiceNumberOverride) {\n      payload.NrFaKorygowany = input.correctedInvoiceNumberOverride;\n    }\n    const dane = mapDaneFaKorygowanej(input);\n    if (dane) {\n      payload.DaneFaKorygowanej = dane;\n    }\n  }\n\n  if (\n    kind === \"advance\" ||\n    kind === \"advance_correction\" ||\n    kind === \"settlement\" ||\n    kind === \"settlement_correction\"\n  ) {\n    if (input.advanceInvoiceNumber || input.advanceKsefNumber) {\n      payload.FakturaZaliczkowa = {\n        ...(input.advanceInvoiceNumber ? { NrFakturyZaliczkowej: input.advanceInvoiceNumber } : {}),\n        ...(input.advanceKsefNumber ? { NrKSeFFaZaliczkowej: input.advanceKsefNumber } : {}),\n      };\n    }\n  }\n\n  if (kind === \"advance\" || kind === \"advance_correction\") {\n    if (input.advancePayments.length > 0) {\n      payload.ZaliczkaCzesciowa = input.advancePayments.map((payment) => ({\n        P_15Z: money(payment.amount),\n        ...(payment.currencyRate !== undefined ? { KursWalutyZW: String(payment.currencyRate) } : {}),\n      }));\n    }\n    if (input.foreignCurrencyRate !== undefined) {\n      payload.KursWalutyZ = String(input.foreignCurrencyRate);\n    }\n  }\n\n  return payload;\n}\n\nfunction validateBusinessRules(input: NormalizedFA3Draft): FA3ValidationIssue[] {\n  const issues: FA3ValidationIssue[] = [];\n  const kind = input.kind;\n  const currency = normalizeCurrency(input.currency);\n  const lines = input.lines;\n\n  if (!input.invoiceNumber?.trim()) {\n    issues.push({ code: \"invoice_number_required\", path: \"invoice.invoiceNumber\", message: \"Numer faktury jest wymagany.\" });\n  }\n  if (!input.issueDate?.trim()) {\n    issues.push({ code: \"issue_date_required\", path: \"invoice.issueDate\", message: \"Data wystawienia jest wymagana.\" });\n  }\n  if (!input.seller?.name?.trim() || !input.seller?.taxId?.trim()) {\n    issues.push({ code: \"seller_required\", path: \"invoice.seller\", message: \"Dane sprzedawcy są wymagane.\" });\n  } else if (input.seller) {\n    issues.push(\n      ...validateSellerPartyIdentifier(\n        resolvePartyIdentifier(input.seller),\n        \"invoice.seller\",\n      ),\n    );\n  }\n  if (!input.buyer?.name?.trim() || !input.buyer?.taxId?.trim()) {\n    issues.push({ code: \"buyer_required\", path: \"invoice.buyer\", message: \"Dane nabywcy są wymagane.\" });\n  } else if (input.buyer) {\n    issues.push(\n      ...validatePartyIdentifier(resolvePartyIdentifier(input.buyer), \"invoice.buyer\"),\n    );\n  }\n  if (lines.length === 0 && kind !== \"advance\" && kind !== \"advance_correction\") {\n    issues.push({\n      code: \"lines_required\",\n      path: \"invoice.lines\",\n      message: \"Faktura wymaga co najmniej jednej pozycji.\",\n    });\n  }\n\n  if (CORRECTION_KINDS.has(kind)) {\n    if (!input.correctionReason?.trim()) {\n      issues.push({\n        code: \"correction_reason_required\",\n        path: \"invoice.correctionReason\",\n        message: \"Przyczyna korekty jest wymagana.\",\n      });\n    }\n    if (!input.correctedInvoiceNumber?.trim()) {\n      issues.push({\n        code: \"corrected_invoice_number_required\",\n        path: \"invoice.correctedInvoiceNumber\",\n        message: \"Numer faktury korygowanej jest wymagany.\",\n      });\n    }\n    if (!input.correctedInvoiceDate?.trim()) {\n      issues.push({\n        code: \"corrected_invoice_date_required\",\n        path: \"invoice.correctedInvoiceDate\",\n        message: \"Data faktury korygowanej jest wymagana.\",\n      });\n    }\n  }\n\n  if (SETTLEMENT_KINDS.has(kind)) {\n    if (!input.advanceInvoiceNumber && !input.advanceKsefNumber) {\n      issues.push({\n        code: \"advance_reference_required\",\n        path: \"invoice.advanceInvoice\",\n        message: \"Podaj numer faktury zaliczkowej albo numer KSeF.\",\n      });\n    }\n  }\n\n  if (input.advanceInvoiceNumber && input.advanceKsefNumber) {\n    issues.push({\n      code: \"advance_reference_conflict\",\n      path: \"invoice.advanceInvoice\",\n      message: \"Podaj numer faktury zaliczkowej albo numer KSeF, nie oba.\",\n    });\n  }\n\n  if (input.saleDate && (input.periodFrom || input.periodTo)) {\n    issues.push({\n      code: \"sale_date_period_conflict\",\n      path: \"invoice.saleDate\",\n      message: \"Podaj date sprzedaży albo okres faktury, nie oba.\",\n    });\n  }\n  if ((input.periodFrom && !input.periodTo) || (!input.periodFrom && input.periodTo)) {\n    issues.push({\n      code: \"half_period\",\n      path: \"invoice.period\",\n      message: \"Okres faktury wymaga obu dat: od i do.\",\n    });\n  }\n\n  const payment = input.paymentTerms;\n  if (payment?.paidDate && (payment.partialPayments?.length ?? 0) > 0) {\n    issues.push({\n      code: \"payment_paid_vs_partial_conflict\",\n      path: \"invoice.paymentTerms\",\n      message: \"Podaj date zapłaty albo płatności częściowe, nie oba.\",\n    });\n  }\n  if (payment?.method && payment.otherMethodDescription) {\n    issues.push({\n      code: \"payment_method_other_conflict\",\n      path: \"invoice.paymentTerms\",\n      message: \"Podaj forme płatności albo opis innej formy, nie oba.\",\n    });\n  }\n  for (const [index, partial] of (payment?.partialPayments ?? []).entries()) {\n    if (partial.method && partial.otherMethodDescription) {\n      issues.push({\n        code: \"partial_payment_method_other_conflict\",\n        path: `invoice.paymentTerms.partialPayments[${index + 1}]`,\n        message: \"Podaj forme płatności albo opis innej formy, nie oba.\",\n      });\n    }\n  }\n\n  const settlement = input.settlement;\n  if (settlement?.amountDue !== undefined && settlement.amountToSettle !== undefined) {\n    issues.push({\n      code: \"settlement_choice_conflict\",\n      path: \"invoice.settlement\",\n      message: \"Podaj DoZaplaty albo DoRozliczenia, nie oba.\",\n    });\n  }\n  if (settlement?.amountDue !== undefined) {\n    const totals = extractTotals(input);\n    const charges = (settlement.charges ?? []).reduce((sum, row) => sum + toNumber(row.amount), 0);\n    const deductions = (settlement.deductions ?? []).reduce((sum, row) => sum + toNumber(row.amount), 0);\n    const expectedDue = toNumber((totals.gross + charges - deductions).toFixed(2));\n    const providedDue = toNumber(settlement.amountDue);\n    if (Math.abs(expectedDue - providedDue) > 0.009) {\n      issues.push({\n        code: \"settlement_amount_due_inconsistent\",\n        path: \"invoice.settlement.amountDue\",\n        message:\n          `Rozliczenie niespójne; oczekiwane DoZaplaty=${money(expectedDue)} ` +\n          `(P_15 + SumaObciazen - SumaOdliczen), otrzymano ${money(providedDue)}.`,\n      });\n    }\n  }\n\n  if (input.rawExtensions.length > 0) {\n    issues.push({\n      code: \"raw_extension_unsupported\",\n      path: \"invoice.rawExtensions\",\n      message: \"Raw XML extension nie jest wspierany w typed FA(3) SDK.\",\n    });\n  }\n\n  if (input.simplifiedReceiptLike) {\n    const gross = extractTotals(input).gross;\n    if (currency !== \"PLN\") {\n      issues.push({\n        code: \"simplified_receipt_currency\",\n        path: \"invoice.currency\",\n        message: \"Faktura uproszczona paragonowa z limitem 450 PLN wymaga waluty PLN.\",\n      });\n    }\n    if (gross > 450.0 + 1e-9) {\n      issues.push({\n        code: \"simplified_receipt_limit\",\n        path: \"invoice.totalGross\",\n        message: \"Faktura uproszczona paragonowa nie może przekroczyć 450 PLN.\",\n      });\n    }\n  }\n\n  for (const [index, party] of input.additionalParties.entries()) {\n    const partyPath = `invoice.additionalParties[${index + 1}]`;\n    if (party.role === \"other\" && !party.otherRoleDescription?.trim()) {\n      issues.push({\n        code: \"third_party_other_description_required\",\n        path: partyPath,\n        message: \"otherRoleDescription jest wymagany dla roli 'other'.\",\n      });\n    }\n    issues.push(...validatePartyIdentifier(resolvePartyIdentifier(party), partyPath));\n  }\n\n  if (input.buyer?.isJstSubunit) {\n    const hasJst = input.additionalParties.some((party) => party.role === \"jst_subunit\");\n    if (!hasJst) {\n      issues.push({\n        code: \"jst_subunit_missing_party3\",\n        path: \"invoice.additionalParties\",\n        message: \"JST wymaga podmiotu dodatkowego z rolą jst_subunit.\",\n      });\n    }\n  }\n\n  if (input.buyer?.isVatGroupMember) {\n    const hasGv = input.additionalParties.some((party) => party.role === \"vat_group_member\");\n    if (!hasGv) {\n      issues.push({\n        code: \"vat_group_missing_party3\",\n        path: \"invoice.additionalParties\",\n        message: \"GV wymaga podmiotu dodatkowego z rolą vat_group_member.\",\n      });\n    }\n  }\n\n  return issues;\n}\n\nfunction mapBankAccount(account: FA3BankAccount): XmlObject {\n  return {\n    NrRB: account.number,\n    ...(account.swift ? { SWIFT: account.swift } : {}),\n    ...(account.ownBankAccountType ? { RachunekWlasnyBanku: account.ownBankAccountType } : {}),\n    ...(account.bankName ? { NazwaBanku: account.bankName } : {}),\n    ...(account.description ? { OpisRachunku: account.description } : {}),\n  };\n}\n\nfunction parseDueDescription(value: string): FA3PaymentDueDescription | undefined {\n  const match = /^(\\d+(?:[.,]\\d+)?)\\s+(.+?)\\s+od\\s+(.+)$/i.exec(value.trim());\n  if (!match?.[1] || !match[2] || !match[3]) {\n    return undefined;\n  }\n  return {\n    amount: match[1],\n    unit: match[2],\n    startsFrom: match[3],\n  };\n}\n\nfunction mapDueDescription(value: FA3PaymentDueDescription): XmlObject {\n  return {\n    Ilosc: String(value.amount),\n    Jednostka: value.unit,\n    ZdarzeniePoczatkowe: value.startsFrom,\n  };\n}\n\nfunction mapPaymentChoice(method?: string, otherMethodDescription?: string): XmlObject {\n  const normalized = normalizePaymentMethod(method);\n  if (normalized && normalized !== \"7\") {\n    return { FormaPlatnosci: normalized };\n  }\n  if (otherMethodDescription) {\n    return {\n      PlatnoscInna: \"1\",\n      OpisPlatnosci: otherMethodDescription,\n    };\n  }\n  return normalized ? { FormaPlatnosci: normalized } : {};\n}\n\nfunction mapPaymentTerms(paymentTerms?: FA3PaymentTerms): XmlObject | undefined {\n  if (!paymentTerms) {\n    return undefined;\n  }\n  const dueDescription = paymentTerms.dueDescriptionParts ?? (\n    paymentTerms.dueDescription ? parseDueDescription(paymentTerms.dueDescription) : undefined\n  );\n  const partialPayments = paymentTerms.partialPayments ?? [];\n  const bankAccounts = paymentTerms.bankAccounts ?? [];\n  const factorBankAccounts = paymentTerms.factorBankAccounts ?? [];\n  return {\n    ...(paymentTerms.paidDate ? { Zaplacono: \"1\", DataZaplaty: paymentTerms.paidDate } : {}),\n    ...(partialPayments.length > 0\n      ? {\n          ZnacznikZaplatyCzesciowej: \"1\",\n          ZaplataCzesciowa: partialPayments.map((partial) => ({\n            KwotaZaplatyCzesciowej: money(partial.amount),\n            DataZaplatyCzesciowej: partial.paidOn,\n            ...mapPaymentChoice(partial.method, partial.otherMethodDescription),\n          })),\n        }\n      : {}),\n    ...(paymentTerms.dueDate || dueDescription\n      ? {\n          TerminPlatnosci: {\n            ...(paymentTerms.dueDate ? { Termin: paymentTerms.dueDate } : {}),\n            ...(dueDescription ? { TerminOpis: mapDueDescription(dueDescription) } : {}),\n          },\n        }\n      : {}),\n    ...mapPaymentChoice(paymentTerms.method, paymentTerms.otherMethodDescription),\n    ...(bankAccounts.length > 0\n      ? { RachunekBankowy: bankAccounts.map(mapBankAccount) }\n      : {}),\n    ...(factorBankAccounts.length > 0\n      ? { RachunekBankowyFaktora: factorBankAccounts.map(mapBankAccount) }\n      : {}),\n    ...(paymentTerms.paymentLink ? { LinkDoPlatnosci: paymentTerms.paymentLink } : {}),\n    ...(paymentTerms.ipksef ? { IPKSeF: paymentTerms.ipksef } : {}),\n  };\n}\n\nfunction mapSettlement(input: NormalizedFA3Draft): XmlObject | undefined {\n  const settlement = input.settlement;\n  if (!settlement && input.settlementAmount === undefined) {\n    return undefined;\n  }\n  const charges = settlement?.charges ?? [];\n  const deductions = settlement?.deductions ?? [];\n  return {\n    ...(charges.length > 0\n      ? {\n          Obciazenia: charges.map((row) => ({\n            Kwota: money(row.amount),\n            Powod: row.reason,\n          })),\n          SumaObciazen: money(charges.reduce((sum, row) => sum + toNumber(row.amount), 0)),\n        }\n      : {}),\n    ...(deductions.length > 0\n      ? {\n          Odliczenia: deductions.map((row) => ({\n            Kwota: money(row.amount),\n            Powod: row.reason,\n          })),\n          SumaOdliczen: money(deductions.reduce((sum, row) => sum + toNumber(row.amount), 0)),\n        }\n      : {}),\n    ...(settlement?.amountDue !== undefined\n      ? { DoZaplaty: money(settlement.amountDue) }\n      : {}),\n    ...(settlement?.amountToSettle !== undefined\n      ? { DoRozliczenia: money(settlement.amountToSettle) }\n      : {}),\n    ...(input.settlementAmount !== undefined ? { DoZaplaty: money(input.settlementAmount) } : {}),\n  };\n}\n\nfunction mapOrder(input: NormalizedFA3Draft): XmlObject | undefined {\n  const order = input.order;\n  const orderLines = order?.lines ?? [];\n  if (!order || order.totalGross === undefined || orderLines.length === 0) {\n    return undefined;\n  }\n  return {\n    WartoscZamowienia: money(order.totalGross),\n    ZamowienieWiersz: orderLines.map((line, index) => {\n      const net = toNumber(line.quantity) * toNumber(line.unitNetPrice);\n      const vatRate = isZeroVat(line.vatRate) ? 0 : toNumber(line.vatRate as number | string);\n      const vat = vatRate === 0 ? 0 : (net * vatRate) / 100;\n      const xiiVatRate = mapXiiVatRate(line.xiiVatRate);\n      return {\n        NrWierszaZam: String(index + 1),\n        P_7Z: line.description,\n        P_8AZ: \"szt\",\n        P_8BZ: String(line.quantity),\n        P_9AZ: money(line.unitNetPrice),\n        P_11NettoZ: money(net),\n        P_11VatZ: money(vat),\n        ...(line.vatRate !== undefined ? { P_12Z: String(line.vatRate) } : {}),\n        ...(xiiVatRate ? { P_12Z_XII: xiiVatRate } : {}),\n      };\n    }),\n  };\n}\n\nfunction mapTransport(input: NormalizedFA3Draft): XmlObject | undefined {\n  const transport = input.transport;\n  if (!transport) {\n    return undefined;\n  }\n  const kind = TRANSPORT_KIND_TO_CODE[transport.kind] ?? transport.kind;\n  return {\n    ...(kind === \"8\"\n      ? { TransportInny: \"1\", OpisInnegoTransportu: transport.kind }\n      : { RodzajTransportu: kind }),\n    ...(transport.orderNumber ? { NrZleceniaTransportu: transport.orderNumber } : {}),\n    ...(transport.cargoDescription ? { OpisLadunku: transport.cargoDescription } : {}),\n    ...(transport.packageUnit ? { JednostkaOpakowania: transport.packageUnit } : {}),\n  };\n}\n\nexport class FA3Draft {\n  private readonly value: NormalizedFA3Draft;\n\n  constructor(value: FA3DraftInput) {\n    this.value = {\n      ...value,\n      kind: value.kind ?? \"basic\",\n      currency: normalizeCurrency(value.currency),\n      issuePlace: value.issuePlace ?? \"\",\n      lines: value.lines.map((line) => ({ ...line })),\n      advancePayments: (value.advancePayments ?? []).map((row) => ({ ...row })),\n      additionalParties: (value.additionalParties ?? []).map((row) => ({ ...row })),\n      rawExtensions: (value.rawExtensions ?? []).map((row) => ({ ...row })),\n      additionalDescriptions: (value.additionalDescriptions ?? []).map((row) => ({ ...row })),\n      ...(value.contract ? { contract: { ...value.contract } } : {}),\n      ...(value.order\n        ? {\n            order: {\n              ...value.order,\n              ...(value.order.lines ? { lines: value.order.lines.map((line) => ({ ...line })) } : {}),\n            },\n          }\n        : {}),\n      ...(value.transport ? { transport: { ...value.transport } } : {}),\n      ...(value.transactionTerms ? { transactionTerms: { ...value.transactionTerms } } : {}),\n      ...(value.attachment\n        ? {\n            attachment: {\n              blocks: value.attachment.blocks.map((block) => ({\n                ...block,\n                ...(block.paragraphs ? { paragraphs: [...block.paragraphs] } : {}),\n                ...(block.tables\n                  ? {\n                      tables: block.tables.map((table) => ({\n                        ...table,\n                        headers: [...table.headers],\n                        rows: table.rows.map((row) => [...row]),\n                      })),\n                    }\n                  : {}),\n              })),\n            },\n          }\n        : {}),\n    };\n  }\n\n  static fromDict(value: FA3DraftInput | (FA3DraftInput & Record<string, unknown>)): FA3Draft {\n    const source = value as Record<string, unknown>;\n    const normalized: FA3DraftInput = {\n      ...value,\n      invoiceNumber: String(value.invoiceNumber ?? source[\"invoice_number\"] ?? \"\"),\n      issueDate: String(value.issueDate ?? source[\"issue_date\"] ?? \"\"),\n      currency: normalizeCurrency(String(value.currency ?? source[\"waluta\"] ?? \"PLN\")),\n      seller: (value.seller ?? {}) as FA3Party,\n      buyer: (value.buyer ?? {}) as FA3Party,\n      lines: (value.lines ?? []) as FA3Line[],\n    };\n    return new FA3Draft(normalized);\n  }\n\n  toDict(): FA3DraftInput {\n    return JSON.parse(JSON.stringify(this.value)) as FA3DraftInput;\n  }\n\n  validate(): FA3ValidationIssue[] {\n    return validateBusinessRules(this.value);\n  }\n\n  toFakturaInput(): FakturaInput {\n    const kind = this.value.kind;\n    const lines = this.value.lines.map((line, index) => mapLine(line, index));\n    const totals = extractTotals(this.value);\n    const currency = normalizeCurrency(this.value.currency);\n    const includeVatPln =\n      currency !== \"PLN\" && this.value.lines.some((line) => line.vatAmountPln != null && line.vatAmountPln !== \"\");\n    const taxFields = taxSummaryToFaFields(\n      TaxSummary.fromLines(\n        [...this.value.lines, ...advancePaymentsAsLines(this.value.advancePayments)],\n        {\n          treatBeforeCorrectionAsNegative: CORRECTION_KINDS.has(kind),\n        },\n      ),\n      { includeVatPln },\n    );\n    const faPayload: XmlObject = {\n      KodWaluty: currency,\n      P_1: toDateOnly(this.value.issueDate),\n      ...(this.value.issuePlace?.trim() ? { P_1M: this.value.issuePlace.trim() } : {}),\n      P_2: this.value.invoiceNumber,\n      ...taxFields,\n      P_15: money(totals.gross),\n      ...mapAdnotacje(this.value),\n      FaWiersz: lines,\n      ...mapKindSpecificFields(this.value),\n    };\n\n    const payment = mapPaymentTerms(this.value.paymentTerms);\n    if (payment) {\n      faPayload.Platnosc = payment;\n    }\n\n    if (this.value.saleDate) {\n      faPayload.P_6 = toDateOnly(this.value.saleDate);\n    }\n    if (this.value.periodFrom && this.value.periodTo) {\n      faPayload.OkresFa = {\n        P_6_Od: toDateOnly(this.value.periodFrom),\n        P_6_Do: toDateOnly(this.value.periodTo),\n      };\n    }\n    if (this.value.attachmentText) {\n      faPayload.Zalacznik = {\n        Opis: this.value.attachmentText,\n      };\n    }\n    if (this.value.additionalDescriptions.length > 0) {\n      faPayload.DodatkowyOpis = this.value.additionalDescriptions.map((item) => ({\n        Klucz: item.key,\n        Wartosc: item.value,\n      }));\n    }\n    if (this.value.transactionTerms || this.value.contract || this.value.order?.number || this.value.order?.date) {\n      const transactionTerms: XmlObject = {\n        ...(this.value.contract\n          ? {\n              Umowy: [{\n                ...(this.value.contract.date ? { DataUmowy: this.value.contract.date } : {}),\n                NrUmowy: this.value.contract.number,\n              }],\n            }\n          : {}),\n        ...(this.value.order?.number || this.value.order?.date\n          ? {\n              Zamowienia: [{\n                ...(this.value.order.date ? { DataZamowienia: this.value.order.date } : {}),\n                ...(this.value.order.number ? { NrZamowienia: this.value.order.number } : {}),\n              }],\n            }\n          : {}),\n        ...(this.value.transactionTerms?.deliveryTerms\n          ? { WarunkiDostawy: this.value.transactionTerms.deliveryTerms }\n          : {}),\n        ...(this.value.transactionTerms?.contractualRate\n          ? { KursUmowny: this.value.transactionTerms.contractualRate }\n          : {}),\n        ...(this.value.transactionTerms?.contractualCurrency\n          ? { WalutaUmowna: this.value.transactionTerms.contractualCurrency }\n          : {}),\n        ...(this.value.transactionTerms?.intermediary !== undefined\n          ? { Posrednik: this.value.transactionTerms.intermediary ? \"1\" : \"0\" }\n          : {}),\n      };\n      faPayload.WarunkiTransakcji = transactionTerms;\n    }\n    const transport = mapTransport(this.value);\n    if (transport) {\n      faPayload.Transport = transport;\n    }\n    const order = mapOrder(this.value);\n    if (order) {\n      faPayload.Zamowienie = order;\n    }\n    if (this.value.attachment && this.value.attachment.blocks.length > 0) {\n      faPayload.Zalacznik = {\n        Blok: this.value.attachment.blocks.map((block) => {\n          const blockTables = block.tables ?? [];\n          return {\n            ...(block.header ? { Naglowek: block.header } : {}),\n            ...(block.paragraphs ? { Akapit: [...block.paragraphs] } : {}),\n            ...(blockTables.length > 0\n              ? {\n                  Tabela: blockTables.map((table) => ({\n                    Naglowki: table.headers,\n                    Wiersze: table.rows,\n                  })),\n                }\n              : {}),\n          };\n        }),\n      };\n    }\n    if (kind === \"advance\" || kind === \"advance_correction\") {\n      if (this.value.advancePayments.length > 0) {\n        faPayload.ZaliczkaCzesciowa = this.value.advancePayments.map((row) => ({\n          P_15Z: money(row.amount),\n          ...(row.currencyRate !== undefined ? { KursWalutyZW: String(row.currencyRate) } : {}),\n        }));\n      }\n    }\n    if (kind === \"settlement\" || kind === \"settlement_correction\") {\n      const settlement = mapSettlement(this.value);\n      if (settlement) {\n        faPayload.Rozliczenie = settlement;\n      }\n    }\n\n    const root: FakturaInput = {\n      Naglowek: {\n        KodFormularza: {\n          systemCode: \"FA (3)\",\n          schemaVersion: \"1-0E\",\n          value: \"FA\",\n        },\n        WariantFormularza: FA3_FORM_VARIANT,\n        DataWytworzeniaFa: this.value.issueDate,\n        SystemInfo: \"ksef-client-typescript-fa3\",\n      },\n      Podmiot1: mapParty(this.value.seller, \"seller\"),\n      Podmiot2: mapBuyer(this.value.buyer),\n      Fa: faPayload,\n    };\n    if (this.value.additionalParties.length > 0) {\n      root.Podmiot3 = this.value.additionalParties.map(mapAdditionalParty);\n    }\n    return {\n      ...root,\n    };\n  }\n\n  async toXml(options: FA3XmlOptions = {}): Promise<string> {\n    const issues = this.validate();\n    if (issues.length > 0) {\n      const detail = issues.map((issue) => issue.message).join(\" \");\n      throw new KsefValidationError(detail);\n    }\n    const xml = buildFakturaXml(this.toFakturaInput(), {\n      schema: \"FA3\",\n      ...(options.pretty !== undefined ? { pretty: options.pretty } : {}),\n    });\n    return options.xsdValidate ? validateAndReturnXml(xml) : xml;\n  }\n}\n\nexport async function validateAndReturnXml(\n  xml: string,\n  validate: (value: string) => Promise<void> = validateFa3Xml,\n): Promise<string> {\n  await validate(xml);\n  return xml;\n}\n\nexport class FA3InvoiceBuilder {\n  private readonly value: FA3DraftInput;\n\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"basic\") {\n    this.value = {\n      invoiceNumber,\n      issueDate: new Date().toISOString(),\n      seller: { name: \"\", taxId: \"\" },\n      buyer: { name: \"\", taxId: \"\" },\n      lines: [],\n      kind,\n      currency: \"PLN\",\n    };\n  }\n\n  issuedOn(value: Date): FA3InvoiceBuilder {\n    this.value.issueDate = value.toISOString();\n    return this;\n  }\n\n  issueDate(value: string): FA3InvoiceBuilder {\n    this.value.issueDate = value;\n    return this;\n  }\n\n  saleDate(value: string): FA3InvoiceBuilder {\n    this.value.saleDate = value;\n    return this;\n  }\n\n  period(from: string, to: string): FA3InvoiceBuilder {\n    this.value.periodFrom = from;\n    this.value.periodTo = to;\n    return this;\n  }\n\n  seller(value: FA3Party): FA3InvoiceBuilder {\n    this.value.seller = { ...value };\n    return this;\n  }\n\n  buyer(value: FA3Party): FA3InvoiceBuilder {\n    this.value.buyer = { ...value };\n    return this;\n  }\n\n  addParty(value: FA3Party): FA3InvoiceBuilder {\n    this.value.additionalParties = [...(this.value.additionalParties ?? []), { ...value }];\n    return this;\n  }\n\n  currency(value: string): FA3InvoiceBuilder {\n    this.value.currency = normalizeCurrency(value);\n    return this;\n  }\n\n  issuePlace(value: string): FA3InvoiceBuilder {\n    this.value.issuePlace = value;\n    return this;\n  }\n\n  additionalDescription(key: string, value: string): FA3InvoiceBuilder {\n    this.value.additionalDescriptions = [\n      ...(this.value.additionalDescriptions ?? []),\n      { key, value },\n    ];\n    return this;\n  }\n\n  contract(number: string, date?: string): FA3InvoiceBuilder {\n    this.value.contract = {\n      number,\n      ...(date ? { date } : {}),\n    };\n    return this;\n  }\n\n  orderReference(number: string, date?: string): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    this.value.order = {\n      ...current,\n      number,\n      ...(date ? { date } : {}),\n    };\n    return this;\n  }\n\n  order(totalGross: number | string): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    this.value.order = {\n      ...current,\n      totalGross,\n    };\n    return this;\n  }\n\n  orderLine(value: {\n    description: string;\n    quantity: number | string;\n    unitNetPrice: number | string;\n    vatRate?: number | string | null;\n  }): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    const lines = current.lines ?? [];\n    this.value.order = {\n      ...current,\n      lines: [...lines, { ...value }],\n    };\n    return this;\n  }\n\n  transactionTerms(value: {\n    deliveryTerms?: string;\n    contractualRate?: string;\n    contractualCurrency?: string;\n    intermediary?: boolean;\n  }): FA3InvoiceBuilder {\n    this.value.transactionTerms = { ...value };\n    return this;\n  }\n\n  transport(\n    kind: string,\n    options: { orderNumber?: string; cargoDescription?: string; packageUnit?: string } = {},\n  ): FA3InvoiceBuilder {\n    this.value.transport = {\n      kind,\n      ...(options.orderNumber ? { orderNumber: options.orderNumber } : {}),\n      ...(options.cargoDescription ? { cargoDescription: options.cargoDescription } : {}),\n      ...(options.packageUnit ? { packageUnit: options.packageUnit } : {}),\n    };\n    return this;\n  }\n\n  correction(value: {\n    reason: string;\n    correctedInvoiceNumber: string;\n    correctedInvoiceDate?: string;\n    correctedKsefNumber?: string;\n    correctionType?: string;\n  }): FA3InvoiceBuilder {\n    this.value.correctionReason = value.reason;\n    this.value.correctedInvoiceNumber = value.correctedInvoiceNumber;\n    if (value.correctedInvoiceDate !== undefined) {\n      this.value.correctedInvoiceDate = value.correctedInvoiceDate;\n    }\n    if (value.correctedKsefNumber !== undefined) {\n      this.value.correctedKsefNumber = value.correctedKsefNumber;\n    }\n    if (value.correctionType !== undefined) {\n      this.value.correctionType = value.correctionType;\n    }\n    return this;\n  }\n\n  correctedPeriod(value: string): FA3InvoiceBuilder {\n    this.value.correctedPeriod = value;\n    return this;\n  }\n\n  correctedInvoiceNumberOverride(value: string): FA3InvoiceBuilder {\n    this.value.correctedInvoiceNumberOverride = value;\n    return this;\n  }\n\n  settlesAdvance(value: { invoiceNumber?: string; ksefNumber?: string } = {}): FA3InvoiceBuilder {\n    if (value.invoiceNumber === undefined) {\n      delete this.value.advanceInvoiceNumber;\n    } else {\n      this.value.advanceInvoiceNumber = value.invoiceNumber;\n    }\n    if (value.ksefNumber === undefined) {\n      delete this.value.advanceKsefNumber;\n    } else {\n      this.value.advanceKsefNumber = value.ksefNumber;\n    }\n    return this;\n  }\n\n  advanceReference(value: { invoiceNumber?: string; ksefNumber?: string }): FA3InvoiceBuilder {\n    if (value.invoiceNumber === undefined) {\n      delete this.value.advanceInvoiceNumber;\n    } else {\n      this.value.advanceInvoiceNumber = value.invoiceNumber;\n    }\n    if (value.ksefNumber === undefined) {\n      delete this.value.advanceKsefNumber;\n    } else {\n      this.value.advanceKsefNumber = value.ksefNumber;\n    }\n    return this;\n  }\n\n  advancePayment(value: FA3AdvancePayment): FA3InvoiceBuilder {\n    this.value.advancePayments = [...(this.value.advancePayments ?? []), { ...value }];\n    return this;\n  }\n\n  settlementAmount(value: number | string): FA3InvoiceBuilder {\n    this.value.settlementAmount = value;\n    return this;\n  }\n\n  settlementDetails(value: FA3Settlement): FA3InvoiceBuilder {\n    this.value.settlement = {\n      ...value,\n      charges: (value.charges ?? []).map((row) => ({ ...row })),\n      deductions: (value.deductions ?? []).map((row) => ({ ...row })),\n    };\n    return this;\n  }\n\n  payment(value: FA3PaymentTerms): FA3InvoiceBuilder {\n    this.value.paymentTerms = {\n      ...value,\n      partialPayments: (value.partialPayments ?? []).map((row) => ({ ...row })),\n      bankAccounts: (value.bankAccounts ?? []).map((row) => ({ ...row })),\n      factorBankAccounts: (value.factorBankAccounts ?? []).map((row) => ({ ...row })),\n    };\n    return this;\n  }\n\n  bankAccount(value: FA3BankAccount): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      bankAccounts: [...(current.bankAccounts ?? []), { ...value }],\n    };\n    return this;\n  }\n\n  paymentLink(value: string, ipksef?: string): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      paymentLink: value,\n      ...(ipksef ? { ipksef } : {}),\n    };\n    return this;\n  }\n\n  paymentDue(\n    date: string,\n    method: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"transfer\" | \"cash\" | \"card\" | \"voucher\" | \"check\" | \"credit\" | \"compensation\" | \"other\" = \"6\",\n  ): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      dueDate: date,\n      method,\n    };\n    return this;\n  }\n\n  paymentDueDescription(\n    amount: number,\n    unit: string,\n    startsFrom: string,\n    method: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"transfer\" | \"cash\" | \"card\" | \"voucher\" | \"check\" | \"credit\" | \"compensation\" | \"other\" = \"6\",\n  ): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      dueDescription: `${amount} ${unit} od ${startsFrom}`,\n      method,\n    };\n    return this;\n  }\n\n  paid(value: string): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      paidDate: value,\n    };\n    return this;\n  }\n\n  partiallyPaid(value: {\n    amount: number | string;\n    paidOn: string;\n    method?: FA3PaymentMethod;\n    otherMethodDescription?: string;\n  }): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    const list = current.partialPayments ?? [];\n    this.value.paymentTerms = {\n      ...current,\n      partialPayments: [...list, { ...value }],\n    };\n    return this;\n  }\n\n  foreignCurrencyRate(value: number | string): FA3InvoiceBuilder {\n    this.value.foreignCurrencyRate = value;\n    return this;\n  }\n\n  asSimplifiedReceiptLike(): FA3InvoiceBuilder {\n    this.value.simplifiedReceiptLike = true;\n    return this;\n  }\n\n  attachmentText(value: string): FA3InvoiceBuilder {\n    this.value.attachmentText = value;\n    return this;\n  }\n\n  attachment(value: {\n    blocks: Array<{\n      header?: string;\n      paragraphs?: string[];\n      tables?: Array<{ headers: string[]; rows: string[][] }>;\n    }>;\n  }): FA3InvoiceBuilder {\n    this.value.attachment = {\n      blocks: value.blocks.map((block) => ({\n        ...block,\n        ...(block.paragraphs ? { paragraphs: [...block.paragraphs] } : {}),\n        ...(block.tables\n          ? {\n              tables: block.tables.map((table) => ({\n                headers: [...table.headers],\n                rows: table.rows.map((row) => [...row]),\n              })),\n            }\n          : {}),\n      })),\n    };\n    return this;\n  }\n\n  addLine(value: FA3Line): FA3InvoiceBuilder {\n    this.value.lines.push({ ...value });\n    return this;\n  }\n\n  addGoodsLine(\n    description: string,\n    options: {\n      quantity: number | string;\n      unitNetPrice: number | string;\n      unit?: string;\n      vatRate?: number | string | null;\n      vatCode?: string;\n      vatAmountPln?: number | string | null;\n      xiiVatRate?: number | string | null;\n      gtu?: string;\n      procedure?: string;\n      annex15?: boolean;\n      netAmount?: number | string;\n      vatAmount?: number | string;\n      grossAmount?: number | string;\n    },\n  ): FA3InvoiceBuilder {\n    return this.addLine({\n      description,\n      quantity: options.quantity,\n      unit: options.unit ?? \"szt\",\n      unitNetPrice: options.unitNetPrice,\n      ...(options.vatRate !== undefined ? { vatRate: options.vatRate } : {}),\n      ...(options.vatCode !== undefined ? { vatCode: options.vatCode } : {}),\n      ...(options.vatAmountPln !== undefined ? { vatAmountPln: options.vatAmountPln } : {}),\n      ...(options.xiiVatRate !== undefined ? { xiiVatRate: options.xiiVatRate } : {}),\n      ...(options.gtu !== undefined ? { gtu: options.gtu } : {}),\n      ...(options.procedure !== undefined ? { procedure: options.procedure } : {}),\n      ...(options.annex15 !== undefined ? { annex15: options.annex15 } : {}),\n      ...(options.netAmount !== undefined ? { netAmount: options.netAmount } : {}),\n      ...(options.vatAmount !== undefined ? { vatAmount: options.vatAmount } : {}),\n      ...(options.grossAmount !== undefined ? { grossAmount: options.grossAmount } : {}),\n    });\n  }\n\n  addServiceLine(\n    description: string,\n    options: Parameters<FA3InvoiceBuilder[\"addGoodsLine\"]>[1],\n  ): FA3InvoiceBuilder {\n    return this.addGoodsLine(description, options);\n  }\n\n  splitPayment(): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      method: \"6\",\n    };\n    this.value.splitPaymentAnnotation = true;\n    return this;\n  }\n\n  addCorrectedLineBeforeAfter(value: { before: FA3Line; after: FA3Line }): FA3InvoiceBuilder {\n    this.value.lines.push({ ...value.before, beforeCorrection: true });\n    this.value.lines.push({ ...value.after, beforeCorrection: false });\n    return this;\n  }\n\n  rawExtension(pathValue: string, xml: string): FA3InvoiceBuilder {\n    this.value.rawExtensions = [...(this.value.rawExtensions ?? []), { path: pathValue, xml }];\n    return this;\n  }\n\n  build(): FA3Draft {\n    return new FA3Draft(this.value);\n  }\n\n  validate(): FA3ValidationIssue[] {\n    return this.build().validate();\n  }\n\n  async toXml(options: FA3XmlOptions = {}): Promise<string> {\n    return this.build().toXml(options);\n  }\n}\n\nexport class BasicInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"basic\");\n  }\n}\n\nexport class SimplifiedInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"simplified\");\n  }\n}\n\nexport class CorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"correction\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class AdvanceInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"advance\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class SettlementInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"settlement\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class AdvanceCorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"advance_correction\");\n  }\n}\n\nexport class SettlementCorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"settlement_correction\");\n  }\n}\n\nexport class FA3Invoice {\n  static basic(invoiceNumber: string): BasicInvoiceBuilder {\n    return new BasicInvoiceBuilder(invoiceNumber);\n  }\n\n  static simplified(invoiceNumber: string): SimplifiedInvoiceBuilder {\n    return new SimplifiedInvoiceBuilder(invoiceNumber);\n  }\n\n  static correction(invoiceNumber: string): CorrectionInvoiceBuilder {\n    return new CorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static advance(invoiceNumber: string): AdvanceInvoiceBuilder {\n    return new AdvanceInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlement(invoiceNumber: string): SettlementInvoiceBuilder {\n    return new SettlementInvoiceBuilder(invoiceNumber);\n  }\n\n  static advanceCorrection(invoiceNumber: string): AdvanceCorrectionInvoiceBuilder {\n    return new AdvanceCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlementCorrection(invoiceNumber: string): SettlementCorrectionInvoiceBuilder {\n    return new SettlementCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static advance_correction(invoiceNumber: string): AdvanceCorrectionInvoiceBuilder {\n    return new AdvanceCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlement_correction(invoiceNumber: string): SettlementCorrectionInvoiceBuilder {\n    return new SettlementCorrectionInvoiceBuilder(invoiceNumber);\n  }\n}\n\nexport class FA3BatchDraft {\n  readonly drafts: FA3Draft[];\n\n  constructor(drafts: FA3Draft[]) {\n    this.drafts = drafts;\n  }\n\n  toDict(): { drafts: FA3DraftInput[] } {\n    return {\n      drafts: this.drafts.map((draft) => draft.toDict()),\n    };\n  }\n\n  toJson(): string {\n    return JSON.stringify(this.toDict(), null, 2);\n  }\n\n  static fromJson(value: string): FA3BatchDraft {\n    const parsed = JSON.parse(value) as { drafts?: FA3DraftInput[] };\n    return new FA3BatchDraft((parsed.drafts ?? []).map((draft) => FA3Draft.fromDict(draft)));\n  }\n\n  async toXmlFiles(outDir: string, options: FA3XmlOptions = {}): Promise<string[]> {\n    const output = path.resolve(outDir);\n    await mkdir(output, { recursive: true });\n    const files: string[] = [];\n    for (let i = 0; i < this.drafts.length; i += 1) {\n      const draft = this.drafts[i];\n      if (!draft) {\n        continue;\n      }\n      const xml = await draft.toXml(options);\n      const fileName = `${sanitizeFileName(draft.toDict().invoiceNumber, `invoice-${i + 1}`)}.xml`;\n      const target = path.join(output, fileName);\n      await writeFile(target, xml, \"utf8\");\n      files.push(target);\n    }\n    return files;\n  }\n\n  async toXmlZip(targetPath: string, options: FA3XmlOptions = {}): Promise<string> {\n    const entries = [];\n    for (let i = 0; i < this.drafts.length; i += 1) {\n      const draft = this.drafts[i];\n      if (!draft) {\n        continue;\n      }\n      const xml = await draft.toXml(options);\n      entries.push({\n        fileName: `${sanitizeFileName(draft.toDict().invoiceNumber, `invoice-${i + 1}`)}.xml`,\n        content: Buffer.from(xml, \"utf8\"),\n      });\n    }\n    const zip = await createZip(entries);\n    const resolved = path.resolve(targetPath);\n    await mkdir(path.dirname(resolved), { recursive: true });\n    await writeFile(resolved, zip);\n    return resolved;\n  }\n}\n\nexport function sanitizeFileName(value: string, fallback = \"faktura\"): string {\n  const candidate = value.trim().replace(/[^A-Za-z0-9_.-]+/g, \"_\");\n  return candidate || fallback;\n}\n\nexport const BaseFA3Builder = FA3InvoiceBuilder;\n","import {\n  FA3BankAccount,\n  FA3Discount,\n  FA3Line,\n  FA3PartialPayment,\n  FA3Party,\n  FA3PartyIdentifier,\n  FA3PaymentMethod,\n  FA3PaymentTerms,\n  FA3Settlement,\n  FA3SettlementAdjustment,\n  FA3TaxCategory,\n  FA3ValidationIssue,\n} from \"./types\";\nimport { PartyIdentifierKind } from \"./identifier\";\n\nexport class FA3ValidationResult {\n  readonly errors: FA3ValidationIssue[];\n  readonly warnings: FA3ValidationIssue[];\n\n  constructor(errors: FA3ValidationIssue[] = [], warnings: FA3ValidationIssue[] = []) {\n    this.errors = errors;\n    this.warnings = warnings;\n  }\n}\n\nexport class Address {\n  static polish(line1: string, line2?: string, line3?: string): {\n    countryCode: \"PL\";\n    line1: string;\n    line2?: string;\n    line3?: string;\n  } {\n    return {\n      countryCode: \"PL\",\n      line1,\n      ...(line2 ? { line2 } : {}),\n      ...(line3 ? { line3 } : {}),\n    };\n  }\n\n  static foreign(\n    countryCode: string,\n    line1: string,\n    line2?: string,\n    line3?: string,\n  ): { countryCode: string; line1: string; line2?: string; line3?: string } {\n    return {\n      countryCode: countryCode.toUpperCase(),\n      line1,\n      ...(line2 ? { line2 } : {}),\n      ...(line3 ? { line3 } : {}),\n    };\n  }\n}\n\nexport class Contact {\n  static create(value: { email?: string; phone?: string }): { email?: string; phone?: string } {\n    return { ...value };\n  }\n}\n\nexport const ThirdPartyRole = {\n  ORIGINAL_ENTITY: \"1\",\n  ADDITIONAL_BUYER: \"2\",\n  RECIPIENT: \"3\",\n  PAYER: \"4\",\n  JST_SUBUNIT: \"8\",\n  VAT_GROUP_MEMBER: \"10\",\n  OTHER: \"11\",\n} as const;\n\nexport const AuthorizedPartyRole = {\n  REPRESENTATIVE: \"1\",\n  BAILIFF: \"2\",\n  ENFORCEMENT_AUTHORITY: \"3\",\n} as const;\n\nexport { PartyIdentifierKind } from \"./identifier\";\n\nexport class PartyIdentifier {\n  static polishNip(value: string): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.NIP, value };\n  }\n\n  static euVat(countryCode: string, vatId: string): FA3PartyIdentifier {\n    return {\n      kind: PartyIdentifierKind.EU_VAT,\n      value: vatId,\n      countryCode: countryCode.toUpperCase(),\n    };\n  }\n\n  static foreign(identifier: string, countryCode?: string): FA3PartyIdentifier {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      value: identifier,\n      ...(countryCode ? { countryCode: countryCode.toUpperCase() } : {}),\n    };\n  }\n\n  static internal(value: string): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.INTERNAL, value };\n  }\n\n  static none(): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.NONE };\n  }\n}\n\nexport class InvoiceParty {\n  static polishCompany(input: {\n    nip: string;\n    name: string;\n    address?: string;\n    email?: string;\n    phone?: string;\n  }): FA3Party {\n    return {\n      name: input.name,\n      taxId: input.nip,\n      identifier: PartyIdentifier.polishNip(input.nip),\n      ...(input.address ? { addressLine1: input.address } : {}),\n      ...(input.email ? { email: input.email } : {}),\n      ...(input.phone ? { phone: input.phone } : {}),\n    };\n  }\n\n  static euCompany(input: {\n    vatId: string;\n    countryCode: string;\n    name: string;\n    address?: string;\n    email?: string;\n    phone?: string;\n  }): FA3Party {\n    const identifier = PartyIdentifier.euVat(input.countryCode, input.vatId);\n    return {\n      name: input.name,\n      taxId: `${input.countryCode.toUpperCase()}${input.vatId}`,\n      identifier,\n      countryCode: input.countryCode.toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n      ...(input.email ? { email: input.email } : {}),\n      ...(input.phone ? { phone: input.phone } : {}),\n    };\n  }\n\n  static foreignCompany(input: {\n    identifier: string;\n    countryCode: string;\n    name: string;\n    address?: string;\n  }): FA3Party {\n    const identifier = PartyIdentifier.foreign(input.identifier, input.countryCode);\n    return {\n      name: input.name,\n      taxId: `${input.countryCode.toUpperCase()}:${input.identifier}`,\n      identifier,\n      countryCode: input.countryCode.toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n    };\n  }\n\n  static withoutTaxId(input: { name: string; countryCode?: string; address?: string }): FA3Party {\n    return {\n      name: input.name,\n      taxId: \"BRAK\",\n      identifier: PartyIdentifier.none(),\n      countryCode: (input.countryCode ?? \"PL\").toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n    };\n  }\n}\n\nexport const Party = InvoiceParty;\n\nexport class TaxCategory {\n  static standard23(): FA3TaxCategory {\n    return { code: \"23\", vatRate: 23 };\n  }\n  static standard22(): FA3TaxCategory {\n    return { code: \"22\", vatRate: 22 };\n  }\n  static reduced8(): FA3TaxCategory {\n    return { code: \"8\", vatRate: 8 };\n  }\n  static reduced7(): FA3TaxCategory {\n    return { code: \"7\", vatRate: 7 };\n  }\n  static reduced5(): FA3TaxCategory {\n    return { code: \"5\", vatRate: 5 };\n  }\n  static zeroDomestic(): FA3TaxCategory {\n    return { code: \"0 KR\", vatRate: 0 };\n  }\n  static zeroWdt(): FA3TaxCategory {\n    return { code: \"0 WDT\", vatRate: 0 };\n  }\n  static zeroExport(): FA3TaxCategory {\n    return { code: \"0 EX\", vatRate: 0 };\n  }\n  static exempt(basis: string): FA3TaxCategory {\n    return { code: \"zw\", exemptionBasis: basis, vatRate: null };\n  }\n  static outsideCountry(): FA3TaxCategory {\n    return { code: \"np I\", vatRate: null };\n  }\n  static serviceArticle100(): FA3TaxCategory {\n    return { code: \"np II\", vatRate: null };\n  }\n  static reverseCharge(): FA3TaxCategory {\n    return { code: \"oo\", vatRate: null };\n  }\n  static xii(rate: number | string): FA3TaxCategory {\n    return { xiiVatRate: rate, vatRate: null };\n  }\n}\n\nexport const VatClass = TaxCategory;\n\nexport class Discount {\n  static amount(value: number | string, reason?: string): FA3Discount {\n    return {\n      kind: \"amount\",\n      value,\n      ...(reason ? { reason } : {}),\n    };\n  }\n\n  static percent(value: number | string, reason?: string): FA3Discount {\n    return {\n      kind: \"percent\",\n      value,\n      ...(reason ? { reason } : {}),\n    };\n  }\n}\n\nexport class InvoiceLine {\n  static goods(\n    description: string,\n    input: {\n      quantity: number | string;\n      unitNetPrice: number | string;\n      unit?: string;\n      vatRate?: number | string | null;\n      beforeCorrection?: boolean;\n      gtu?: string;\n      procedure?: string;\n      annex15?: boolean;\n    },\n  ): FA3Line {\n    return {\n      description,\n      quantity: input.quantity,\n      unit: input.unit ?? \"szt\",\n      unitNetPrice: input.unitNetPrice,\n      ...(input.vatRate !== undefined ? { vatRate: input.vatRate } : {}),\n      ...(input.beforeCorrection !== undefined ? { beforeCorrection: input.beforeCorrection } : {}),\n      ...(input.gtu !== undefined ? { gtu: input.gtu } : {}),\n      ...(input.procedure !== undefined ? { procedure: input.procedure } : {}),\n      ...(input.annex15 !== undefined ? { annex15: input.annex15 } : {}),\n    };\n  }\n\n  static service(description: string, input: Parameters<typeof InvoiceLine.goods>[1]): FA3Line {\n    return InvoiceLine.goods(description, input);\n  }\n\n  static correctedBefore(\n    description: string,\n    input: Omit<Parameters<typeof InvoiceLine.goods>[1], \"beforeCorrection\">,\n  ): FA3Line {\n    return InvoiceLine.goods(description, { ...input, beforeCorrection: true });\n  }\n\n  static correctedAfter(\n    description: string,\n    input: Omit<Parameters<typeof InvoiceLine.goods>[1], \"beforeCorrection\">,\n  ): FA3Line {\n    return InvoiceLine.goods(description, { ...input, beforeCorrection: false });\n  }\n}\n\nexport interface CorrectionReference {\n  invoiceNumber: string;\n  issueDate?: string;\n  ksefNumber?: string;\n}\n\nexport type BankAccount = FA3BankAccount;\n\nexport interface PaymentTerms extends FA3PaymentTerms {\n  bankAccounts?: BankAccount[];\n  paymentLink?: string;\n  ipksef?: string;\n}\n\nexport class PartialPayment {\n  static create(\n    amount: number | string,\n    paidOn: string,\n    options: {\n      method?: FA3PaymentMethod;\n      otherMethodDescription?: string;\n    } = {},\n  ): FA3PartialPayment {\n    return {\n      amount,\n      paidOn,\n      ...(options.method !== undefined ? { method: options.method } : {}),\n      ...(options.otherMethodDescription !== undefined\n        ? { otherMethodDescription: options.otherMethodDescription }\n        : {}),\n    };\n  }\n}\n\nexport class SettlementAdjustment {\n  static create(amount: number | string, reason: string): FA3SettlementAdjustment {\n    return { amount, reason };\n  }\n}\n\nexport type Settlement = FA3Settlement;\n\nexport interface Annotation {\n  key: string;\n  value: string;\n}\n\nexport class AnnotationSet {\n  readonly items: Annotation[];\n\n  constructor(items: Annotation[] = []) {\n    this.items = items;\n  }\n\n  static default(): AnnotationSet {\n    return new AnnotationSet([]);\n  }\n\n  static splitPayment(): Annotation {\n    return { key: \"split_payment\", value: \"1\" };\n  }\n\n  static cashMethod(): Annotation {\n    return { key: \"cash_method\", value: \"1\" };\n  }\n}\n\nexport interface AttachmentTable {\n  headers: string[];\n  rows: string[][];\n  columnTypes?: string[];\n  metadata?: Array<[string, string]>;\n  description?: string;\n  footer?: string[];\n}\n\nexport interface AttachmentBlock {\n  header?: string;\n  metadata?: Array<[string, string]>;\n  paragraphs?: string[];\n  tables?: AttachmentTable[];\n}\n\nexport interface Attachment {\n  blocks: AttachmentBlock[];\n}\n\nexport interface RawXmlExtension {\n  path: string;\n  xml: string;\n}\n","import { FA3AdvancePayment } from \"./types\";\n\nexport class AdditionalDescription {\n  readonly key: string;\n  readonly value: string;\n\n  constructor(key: string, value: string) {\n    this.key = key;\n    this.value = value;\n  }\n\n  static keyValue(key: string, value: string): AdditionalDescription {\n    return new AdditionalDescription(key, value);\n  }\n}\n\nexport class Registry {\n  readonly kind: string;\n  readonly number: string;\n  readonly fullName: string | undefined;\n\n  constructor(kind: string, number: string, fullName?: string) {\n    this.kind = kind;\n    this.number = number;\n    this.fullName = fullName;\n  }\n\n  static krsEntry(number: string, fullName?: string): Registry {\n    return new Registry(\"KRS\", number, fullName);\n  }\n}\n\nexport class Footer {\n  readonly text: string;\n\n  constructor(text: string) {\n    this.text = text;\n  }\n}\n\nexport interface LineIdentifiers {\n  uniqueId?: string;\n  internalIndex?: string;\n  gtin?: string;\n  pkwiu?: string;\n  cn?: string;\n  pkob?: string;\n}\n\nexport class PaymentDue {\n  static date(value: string): string {\n    return value;\n  }\n\n  static description(amount: number, unit: string, startsFrom: string): string {\n    return `${amount} ${unit} od ${startsFrom}`;\n  }\n}\n\nexport interface NewTransportMeans {\n  allowedDate?: string;\n  rowNumber?: number;\n  kind?: string;\n  mileage?: string;\n  serialNumber?: string;\n  make?: string;\n  model?: string;\n}\n\nexport class CorrectedAdvanceState {\n  readonly text: string;\n  constructor(text: string) {\n    this.text = text;\n  }\n}\n\nexport class ExciseRefund {\n  readonly enabled: boolean;\n  constructor(enabled = true) {\n    this.enabled = enabled;\n  }\n}\n\nexport interface OrderLine {\n  description: string;\n  quantity: number | string;\n  unitNetPrice: number | string;\n  vatRate?: number | string | null;\n}\n\nexport interface Order {\n  number?: string;\n  date?: string;\n  totalGross?: number | string;\n  lines?: OrderLine[];\n}\n\nexport interface Contract {\n  number: string;\n  date?: string;\n}\n\nexport interface Transport {\n  kind: string;\n  orderNumber?: string;\n  cargoDescription?: string;\n  packageUnit?: string;\n}\n\nexport interface TransactionTerms {\n  deliveryTerms?: string;\n  contractualRate?: string;\n  contractualCurrency?: string;\n  intermediary?: boolean;\n}\n\nexport class AdvancePayment {\n  static create(\n    amount: number | string,\n    options: {\n      vatRate?: number | string | null;\n      paidOn?: string;\n      currencyRate?: number | string;\n    } = {},\n  ): FA3AdvancePayment {\n    return {\n      amount,\n      ...(options.vatRate !== undefined ? { vatRate: options.vatRate } : {}),\n      ...(options.paidOn !== undefined ? { paidOn: options.paidOn } : {}),\n      ...(options.currencyRate !== undefined ? { currencyRate: options.currencyRate } : {}),\n    };\n  }\n}\n\nexport interface ValidationContext {\n  source?: string;\n  rowNumber?: number;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FA3BatchDraft, FA3Draft } from \"./builder\";\nimport type { FA3DraftInput, FA3ValidationIssue } from \"./types\";\n\nexport const ImportMode = {\n  NORMAL: \"normal\",\n  VALIDATE_ONLY: \"validate_only\",\n  FAIL_FAST: \"fail_fast\",\n} as const;\n\nexport type ImportModeValue = (typeof ImportMode)[keyof typeof ImportMode];\n\nexport class FA3InvalidRow {\n  readonly rowNumber: number | undefined;\n  readonly invoiceNumber: string | undefined;\n  readonly message: string;\n\n  constructor(message: string, rowNumber?: number, invoiceNumber?: string) {\n    this.message = message;\n    this.rowNumber = rowNumber;\n    this.invoiceNumber = invoiceNumber;\n  }\n}\n\nexport class FA3ImportResult {\n  readonly validDrafts: FA3Draft[];\n  readonly invalidRows: FA3InvalidRow[];\n  readonly errors: FA3ValidationIssue[];\n  readonly warnings: FA3ValidationIssue[];\n\n  constructor(value: {\n    validDrafts?: FA3Draft[];\n    invalidRows?: FA3InvalidRow[];\n    errors?: FA3ValidationIssue[];\n    warnings?: FA3ValidationIssue[];\n  } = {}) {\n    this.validDrafts = [...(value.validDrafts ?? [])];\n    this.invalidRows = [...(value.invalidRows ?? [])];\n    this.errors = [...(value.errors ?? [])];\n    this.warnings = [...(value.warnings ?? [])];\n  }\n}\n\nexport class FA3ImportError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"FA3ImportError\";\n  }\n}\n\nfunction toIssue(message: string): FA3ValidationIssue {\n  return {\n    code: \"import_error\",\n    message,\n  };\n}\n\nfunction loadPayload(source: string | Record<string, unknown>): unknown {\n  if (typeof source !== \"string\") {\n    return source;\n  }\n  const resolved = path.resolve(source);\n  if (fs.existsSync(resolved)) {\n    return JSON.parse(fs.readFileSync(resolved, \"utf8\"));\n  }\n  return JSON.parse(source);\n}\n\nfunction draftRows(payload: unknown): FA3DraftInput[] {\n  if (!payload || typeof payload !== \"object\") {\n    return [];\n  }\n  const raw = payload as Record<string, unknown>;\n  const rows = raw.drafts ?? raw.faktury;\n  if (!Array.isArray(rows)) {\n    return [];\n  }\n  return rows as FA3DraftInput[];\n}\n\nexport class FA3Importer {\n  static fromJson(\n    source: string | Record<string, unknown>,\n    options: { mode?: ImportModeValue } = {},\n  ): FA3ImportResult {\n    const mode = options.mode ?? ImportMode.NORMAL;\n    let payload: unknown;\n    try {\n      payload = loadPayload(source);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      if (mode === ImportMode.FAIL_FAST) {\n        throw new FA3ImportError(`Nie można odczytać JSON: ${message}`);\n      }\n      return new FA3ImportResult({\n        validDrafts: [],\n        invalidRows: [new FA3InvalidRow(`Nie można odczytać JSON: ${message}`)],\n        errors: [toIssue(`Nie można odczytać JSON: ${message}`)],\n        warnings: [],\n      });\n    }\n\n    const rows = draftRows(payload);\n    if (rows.length === 0) {\n      const message = \"JSON draft jest nieprawidłowy: oczekiwano pola drafts lub faktury.\";\n      if (mode === ImportMode.FAIL_FAST) {\n        throw new FA3ImportError(message);\n      }\n      return new FA3ImportResult({\n        validDrafts: [],\n        invalidRows: [new FA3InvalidRow(message)],\n        errors: [toIssue(message)],\n        warnings: [],\n      });\n    }\n\n    const validDrafts: FA3Draft[] = [];\n    const invalidRows: FA3InvalidRow[] = [];\n    const errors: FA3ValidationIssue[] = [];\n    for (const [index, row] of rows.entries()) {\n      try {\n        const draft = FA3Draft.fromDict(row);\n        const issues = draft.validate();\n        if (issues.length > 0) {\n          const message = issues.map((item) => item.message).join(\" \");\n          if (mode === ImportMode.FAIL_FAST) {\n            throw new FA3ImportError(message);\n          }\n          invalidRows.push(new FA3InvalidRow(message, index + 1, draft.toDict().invoiceNumber));\n          errors.push(...issues);\n          continue;\n        }\n        if (mode !== ImportMode.VALIDATE_ONLY) {\n          validDrafts.push(draft);\n        }\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        if (mode === ImportMode.FAIL_FAST) {\n          throw new FA3ImportError(message);\n        }\n        invalidRows.push(new FA3InvalidRow(message, index + 1));\n        errors.push(toIssue(message));\n      }\n    }\n\n    return new FA3ImportResult({ validDrafts, invalidRows, errors, warnings: [] });\n  }\n\n  static fromXlsx(): never {\n    throw new FA3ImportError(\n      \"Import XLSX nie jest jeszcze dostępny w TypeScript SDK. Użyj importu JSON.\",\n    );\n  }\n\n  static from_json(\n    source: string | Record<string, unknown>,\n    options: { mode?: ImportModeValue } = {},\n  ): FA3ImportResult {\n    return FA3Importer.fromJson(source, options);\n  }\n}\n\nexport function toBatchDraft(result: FA3ImportResult): FA3BatchDraft {\n  return new FA3BatchDraft(result.validDrafts);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FA3BatchDraft, FA3Invoice } from \"./builder\";\n\nexport class FA3Template {\n  static sampleBatch(): FA3BatchDraft {\n    const draft = FA3Invoice.basic(\"FV/SAMPLE/1\")\n      .issueDate(\"2026-01-15\")\n      .seller({\n        name: \"Sprzedawca Sp. z o.o.\",\n        taxId: \"1234567890\",\n        addressLine1: \"ul. Prosta 1, 00-001 Warszawa\",\n      })\n      .buyer({\n        name: \"Nabywca Sp. z o.o.\",\n        taxId: \"1111111111\",\n        addressLine1: \"ul. Testowa 2, 00-002 Warszawa\",\n      })\n      .addLine({\n        description: \"Usługa\",\n        quantity: 1,\n        unit: \"szt\",\n        unitNetPrice: 100,\n        vatRate: 23,\n      })\n      .build();\n    return new FA3BatchDraft([draft]);\n  }\n\n  static createJson(targetPath: string): string {\n    const resolved = path.resolve(targetPath);\n    const batch = FA3Template.sampleBatch();\n    fs.mkdirSync(path.dirname(resolved), { recursive: true });\n    fs.writeFileSync(resolved, batch.toJson(), \"utf8\");\n    return resolved;\n  }\n\n  static create_xlsx(): never {\n    throw new Error(\n      \"Szablon XLSX nie jest jeszcze dostępny w TypeScript SDK. Użyj FA3Template.createJson(...).\",\n    );\n  }\n}\n","import type {\n  FA3InvoiceKind as FA3InvoiceKindType,\n  FA3Line as FA3LineType,\n  FA3Party as FA3PartyType,\n  FA3PaymentMethod,\n  FA3Settlement as FA3SettlementType,\n  FA3ValidationIssue as FA3ValidationIssueType,\n} from \"./types\";\nimport type {\n  Annotation as AnnotationType,\n  Attachment as AttachmentType,\n  AttachmentBlock as AttachmentBlockType,\n  AttachmentTable as AttachmentTableType,\n  BankAccount as BankAccountType,\n  CorrectionReference as CorrectionReferenceType,\n  PaymentTerms as PaymentTermsType,\n  RawXmlExtension as RawXmlExtensionType,\n} from \"./domain\";\nimport type {\n  Contract as ContractType,\n  LineIdentifiers as LineIdentifiersType,\n  NewTransportMeans as NewTransportMeansType,\n  Order as OrderType,\n  OrderLine as OrderLineType,\n  TransactionTerms as TransactionTermsType,\n  Transport as TransportType,\n  ValidationContext as ValidationContextType,\n} from \"./sections\";\n\nexport const FA3InvoiceKind = {\n  BASIC: \"basic\",\n  SIMPLIFIED: \"simplified\",\n  CORRECTION: \"correction\",\n  ADVANCE: \"advance\",\n  SETTLEMENT: \"settlement\",\n  ADVANCE_CORRECTION: \"advance_correction\",\n  SETTLEMENT_CORRECTION: \"settlement_correction\",\n} as const satisfies Record<string, FA3InvoiceKindType>;\n\nexport const FA3Party = {\n  create(input: FA3PartyType): FA3PartyType {\n    return { ...input };\n  },\n};\n\nexport const FA3Line = {\n  create(input: FA3LineType): FA3LineType {\n    return { ...input };\n  },\n};\n\nexport class FA3ValidationIssue implements FA3ValidationIssueType {\n  code: string;\n  message: string;\n  path?: string;\n\n  constructor(message: string, code = \"validation_issue\", path?: string) {\n    this.code = code;\n    this.message = message;\n    if (path !== undefined) {\n      this.path = path;\n    }\n  }\n\n  withLocation(path: string): FA3ValidationIssue {\n    return new FA3ValidationIssue(this.message, this.code, path);\n  }\n}\n\nexport const Annotation = {\n  create(key: string, value: string): AnnotationType {\n    return { key, value };\n  },\n  splitPayment(): AnnotationType {\n    return { key: \"split_payment\", value: \"1\" };\n  },\n  cashMethod(): AnnotationType {\n    return { key: \"cash_method\", value: \"1\" };\n  },\n};\n\nexport const AttachmentTable = {\n  create(input: AttachmentTableType): AttachmentTableType {\n    return {\n      headers: [...input.headers],\n      rows: input.rows.map((row) => [...row]),\n      ...(input.columnTypes ? { columnTypes: [...input.columnTypes] } : {}),\n      ...(input.metadata ? { metadata: [...input.metadata] } : {}),\n      ...(input.description ? { description: input.description } : {}),\n      ...(input.footer ? { footer: [...input.footer] } : {}),\n    };\n  },\n};\n\nexport const AttachmentBlock = {\n  create(input: AttachmentBlockType = {}): AttachmentBlockType {\n    return {\n      ...(input.header ? { header: input.header } : {}),\n      ...(input.metadata ? { metadata: [...input.metadata] } : {}),\n      ...(input.paragraphs ? { paragraphs: [...input.paragraphs] } : {}),\n      ...(input.tables ? { tables: [...input.tables] } : {}),\n    };\n  },\n};\n\nexport const Attachment = {\n  create(blocks: AttachmentBlockType[]): AttachmentType {\n    return { blocks: [...blocks] };\n  },\n  text(header: string, ...paragraphs: string[]): AttachmentType {\n    return {\n      blocks: [\n        {\n          header,\n          paragraphs,\n        },\n      ],\n    };\n  },\n};\n\nexport const BankAccount = {\n  create(number: string, description?: string): BankAccountType {\n    return {\n      number,\n      ...(description ? { description } : {}),\n    };\n  },\n};\n\nexport const Contract = {\n  create(number: string, date?: string): ContractType {\n    return {\n      number,\n      ...(date ? { date } : {}),\n    };\n  },\n};\n\nexport const CorrectionReference = {\n  create(invoiceNumber: string, issueDate?: string, ksefNumber?: string): CorrectionReferenceType {\n    return {\n      invoiceNumber,\n      ...(issueDate ? { issueDate } : {}),\n      ...(ksefNumber ? { ksefNumber } : {}),\n    };\n  },\n};\n\nexport const LineIdentifiers = {\n  create(value: LineIdentifiersType): LineIdentifiersType {\n    return { ...value };\n  },\n};\n\nexport const NewTransportMeans = {\n  create(value: NewTransportMeansType): NewTransportMeansType {\n    return { ...value };\n  },\n};\n\nexport const OrderLine = {\n  create(value: OrderLineType): OrderLineType {\n    return { ...value };\n  },\n};\n\nexport const Order = {\n  create(value: OrderType): OrderType {\n    return {\n      ...value,\n      ...(value.lines ? { lines: [...value.lines] } : {}),\n    };\n  },\n};\n\nexport const PaymentTerms = {\n  create(value: PaymentTermsType): PaymentTermsType {\n    return {\n      ...value,\n      ...(value.partialPayments ? { partialPayments: [...value.partialPayments] } : {}),\n      ...(value.bankAccounts ? { bankAccounts: [...value.bankAccounts] } : {}),\n    };\n  },\n  transfer(options: { dueDate?: string; bankAccount?: BankAccountType } = {}): PaymentTermsType {\n    return {\n      ...(options.dueDate ? { dueDate: options.dueDate } : {}),\n      method: \"6\" as FA3PaymentMethod,\n      ...(options.bankAccount ? { bankAccounts: [options.bankAccount] } : {}),\n    };\n  },\n};\n\nexport const RawXmlExtension = {\n  create(path: string, xml: string): RawXmlExtensionType {\n    return { path, xml };\n  },\n};\n\nexport const Settlement = {\n  create(value: FA3SettlementType): FA3SettlementType {\n    return {\n      ...value,\n      ...(value.charges ? { charges: [...value.charges] } : {}),\n      ...(value.deductions ? { deductions: [...value.deductions] } : {}),\n    };\n  },\n};\n\nexport const TransactionTerms = {\n  create(value: TransactionTermsType): TransactionTermsType {\n    return { ...value };\n  },\n};\n\nexport const Transport = {\n  create(value: TransportType): TransportType {\n    return { ...value };\n  },\n};\n\nexport const ValidationContext = {\n  create(source?: string, rowNumber?: number): ValidationContextType {\n    return {\n      ...(source ? { source } : {}),\n      ...(rowNumber !== undefined ? { rowNumber } : {}),\n    };\n  },\n};\n","import { DOMParser } from \"@xmldom/xmldom\";\n\ninterface XmlNodeListLike {\n  length: number;\n  item(index: number): XmlLikeNode | null;\n}\n\ninterface XmlLikeNode {\n  nodeName: string;\n  nodeType: number;\n  ELEMENT_NODE: number;\n  childNodes: XmlNodeListLike;\n  getAttribute?(name: string): string | null;\n  getElementsByTagNameNS?(namespace: string, localName: string): XmlNodeListLike;\n}\n\ntype XmlLikeElement = XmlLikeNode & {\n  getAttribute(name: string): string | null;\n  getElementsByTagNameNS(namespace: string, localName: string): XmlNodeListLike;\n};\n\nexport class XsdElement {\n  readonly path: string;\n  readonly name: string;\n  readonly typeName: string | undefined;\n  readonly minOccurs: string;\n  readonly maxOccurs: string;\n  readonly choices: number;\n  readonly enumValues: string[];\n\n  constructor(value: {\n    path: string;\n    name: string;\n    typeName?: string;\n    minOccurs?: string;\n    maxOccurs?: string;\n    choices?: number;\n    enumValues?: string[];\n  }) {\n    this.path = value.path;\n    this.name = value.name;\n    this.typeName = value.typeName;\n    this.minOccurs = value.minOccurs ?? \"1\";\n    this.maxOccurs = value.maxOccurs ?? \"1\";\n    this.choices = value.choices ?? 0;\n    this.enumValues = [...(value.enumValues ?? [])];\n  }\n}\n\nfunction localName(nodeName: string): string {\n  const index = nodeName.indexOf(\":\");\n  return index >= 0 ? nodeName.slice(index + 1) : nodeName;\n}\n\nfunction asElement(node: XmlLikeNode | null): XmlLikeElement | null {\n  if (!node || node.nodeType !== node.ELEMENT_NODE) {\n    return null;\n  }\n  return node as XmlLikeElement;\n}\n\nfunction elementChildren(node: XmlLikeNode): XmlLikeElement[] {\n  const out: XmlLikeElement[] = [];\n  for (let i = 0; i < node.childNodes.length; i += 1) {\n    const child = asElement(node.childNodes.item(i));\n    if (child) {\n      out.push(child);\n    }\n  }\n  return out;\n}\n\nfunction walkSimpleTypeEnums(root: XmlLikeElement): Map<string, string[]> {\n  const enums = new Map<string, string[]>();\n  const simpleTypes = root.getElementsByTagNameNS(\"*\", \"simpleType\");\n  for (let i = 0; i < simpleTypes.length; i += 1) {\n    const simpleType = simpleTypes.item(i) as XmlLikeElement;\n    const name = simpleType.getAttribute(\"name\");\n    if (!name) {\n      continue;\n    }\n    const values: string[] = [];\n    const enumNodes = simpleType.getElementsByTagNameNS(\"*\", \"enumeration\");\n    for (let enumIndex = 0; enumIndex < enumNodes.length; enumIndex += 1) {\n      const enumNode = asElement(enumNodes.item(enumIndex));\n      const value = enumNode?.getAttribute(\"value\");\n      if (value) {\n        values.push(value);\n      }\n    }\n    if (values.length > 0) {\n      enums.set(name, values);\n    }\n  }\n  return enums;\n}\n\nfunction countChoices(node: XmlLikeElement): number {\n  return node.getElementsByTagNameNS(\"*\", \"choice\").length;\n}\n\nfunction walkParticles(\n  node: XmlLikeElement,\n  path: string,\n  out: XsdElement[],\n  enums: Map<string, string[]>,\n): void {\n  for (const child of elementChildren(node)) {\n    const childLocalName = localName(child.nodeName);\n    if (childLocalName === \"element\") {\n      const name = child.getAttribute(\"name\");\n      if (name) {\n        walkElement(child, `${path}/${name}`, out, enums);\n      }\n      continue;\n    }\n    if (childLocalName === \"sequence\" || childLocalName === \"choice\" || childLocalName === \"all\") {\n      walkParticles(child, path, out, enums);\n    }\n  }\n}\n\nfunction walkElement(\n  node: XmlLikeElement,\n  path: string,\n  out: XsdElement[],\n  enums: Map<string, string[]>,\n): void {\n  const typeName = node.getAttribute(\"type\") || undefined;\n  const localTypeName = typeName ? localName(typeName) : undefined;\n  out.push(\n    new XsdElement({\n      path,\n      name: path.slice(path.lastIndexOf(\"/\") + 1),\n      ...(typeName ? { typeName } : {}),\n      minOccurs: node.getAttribute(\"minOccurs\") || \"1\",\n      maxOccurs: node.getAttribute(\"maxOccurs\") || \"1\",\n      choices: countChoices(node),\n      enumValues: localTypeName ? enums.get(localTypeName) ?? [] : [],\n    }),\n  );\n\n  for (const child of elementChildren(node)) {\n    if (localName(child.nodeName) === \"complexType\") {\n      walkParticles(child, path, out, enums);\n    }\n  }\n}\n\nexport function parseFa3XsdElements(schemaText: string): XsdElement[] {\n  const doc = new DOMParser().parseFromString(schemaText, \"text/xml\");\n  const root = doc?.documentElement;\n  if (!root) {\n    return [];\n  }\n  const enums = walkSimpleTypeEnums(root);\n  const allElements = root.getElementsByTagNameNS(\"*\", \"element\");\n  let fakturaElement: XmlLikeElement | null = null;\n  for (let i = 0; i < allElements.length; i += 1) {\n    const candidate = asElement(allElements.item(i));\n    if (candidate?.getAttribute(\"name\") === \"Faktura\") {\n      fakturaElement = candidate;\n      break;\n    }\n  }\n  if (!fakturaElement) {\n    return [];\n  }\n  const out: XsdElement[] = [];\n  walkElement(fakturaElement, \"/Faktura\", out, enums);\n  return out;\n}\n\nexport const parse_fa3_xsd_elements = parseFa3XsdElements;\n","import { parseFa3XsdElements, type XsdElement } from \"./xsdMap\";\nimport { loadFa3SchemaWithLocalImports } from \"./xsd\";\n\nexport const CoverageStatus = {\n  SUPPORTED: \"supported\",\n  PARTIALLY_SUPPORTED: \"partially_supported\",\n  RAW_EXTENSION: \"raw_extension\",\n  UNSUPPORTED: \"unsupported\",\n} as const;\n\nexport type CoverageStatusValue = (typeof CoverageStatus)[keyof typeof CoverageStatus];\n\nexport class XsdCoverageEntry {\n  readonly path: string;\n  readonly status: CoverageStatusValue;\n  readonly note: string;\n  readonly domainField: string | undefined;\n  readonly handler: string | undefined;\n\n  constructor(value: {\n    path: string;\n    status: CoverageStatusValue;\n    note: string;\n    domainField?: string;\n    handler?: string;\n  }) {\n    this.path = value.path;\n    this.status = value.status;\n    this.note = value.note;\n    this.domainField = value.domainField;\n    this.handler = value.handler;\n  }\n}\n\nexport class XsdCoverageReport {\n  readonly elements: XsdElement[];\n  readonly coverage: XsdCoverageEntry[];\n\n  constructor(elements: XsdElement[], coverage: XsdCoverageEntry[]) {\n    this.elements = elements;\n    this.coverage = coverage;\n  }\n}\n\nconst SUPPORTED_PATHS = new Set([\n  \"/Faktura\",\n  \"/Faktura/Naglowek\",\n  \"/Faktura/Naglowek/KodFormularza\",\n  \"/Faktura/Naglowek/WariantFormularza\",\n  \"/Faktura/Naglowek/DataWytworzeniaFa\",\n  \"/Faktura/Naglowek/SystemInfo\",\n  \"/Faktura/Podmiot1\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne/NIP\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne/Nazwa\",\n  \"/Faktura/Podmiot1/Adres\",\n  \"/Faktura/Podmiot1/DaneKontaktowe\",\n  \"/Faktura/Podmiot2\",\n  \"/Faktura/Podmiot2/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot2/Adres\",\n  \"/Faktura/Podmiot2/DaneKontaktowe\",\n  \"/Faktura/Podmiot2/JST\",\n  \"/Faktura/Podmiot2/GV\",\n  \"/Faktura/Podmiot3\",\n  \"/Faktura/Podmiot3/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot3/Adres\",\n  \"/Faktura/Podmiot3/DaneKontaktowe\",\n  \"/Faktura/Podmiot3/Rola\",\n  \"/Faktura/Podmiot3/RolaInna\",\n  \"/Faktura/Podmiot3/OpisRoli\",\n  \"/Faktura/Podmiot3/Udzial\",\n  \"/Faktura/Fa\",\n  \"/Faktura/Fa/KodWaluty\",\n  \"/Faktura/Fa/P_1\",\n  \"/Faktura/Fa/P_1M\",\n  \"/Faktura/Fa/P_2\",\n  \"/Faktura/Fa/P_6\",\n  \"/Faktura/Fa/OkresFa\",\n  \"/Faktura/Fa/P_13_1\",\n  \"/Faktura/Fa/P_14_1\",\n  \"/Faktura/Fa/P_15\",\n  \"/Faktura/Fa/KursWalutyZ\",\n  \"/Faktura/Fa/Adnotacje\",\n  \"/Faktura/Fa/Adnotacje/P_16\",\n  \"/Faktura/Fa/Adnotacje/P_17\",\n  \"/Faktura/Fa/Adnotacje/P_18\",\n  \"/Faktura/Fa/Adnotacje/P_18A\",\n  \"/Faktura/Fa/Adnotacje/Zwolnienie\",\n  \"/Faktura/Fa/Adnotacje/NoweSrodkiTransportu\",\n  \"/Faktura/Fa/Adnotacje/P_23\",\n  \"/Faktura/Fa/Adnotacje/PMarzy\",\n  \"/Faktura/Fa/RodzajFaktury\",\n  \"/Faktura/Fa/PrzyczynaKorekty\",\n  \"/Faktura/Fa/TypKorekty\",\n  \"/Faktura/Fa/DaneFaKorygowanej\",\n  \"/Faktura/Fa/OkresFaKorygowanej\",\n  \"/Faktura/Fa/NrFaKorygowany\",\n  \"/Faktura/Fa/ZaliczkaCzesciowa\",\n  \"/Faktura/Fa/DodatkowyOpis\",\n  \"/Faktura/Fa/FakturaZaliczkowa\",\n  \"/Faktura/Fa/FaWiersz\",\n  \"/Faktura/Fa/Rozliczenie\",\n  \"/Faktura/Fa/Platnosc\",\n]);\n\nconst PARTIALLY_SUPPORTED_PREFIXES = [\n  \"/Faktura/Fa/WarunkiTransakcji\",\n  \"/Faktura/Fa/Transport\",\n  \"/Faktura/Fa/Zamowienie\",\n  \"/Faktura/Zalacznik\",\n  \"/Faktura/Stopka\",\n];\n\nconst SUPPORTED_PREFIXES = [\n  \"/Faktura/Fa/FaWiersz/\",\n  \"/Faktura/Fa/Rozliczenie/\",\n  \"/Faktura/Fa/Platnosc/\",\n  \"/Faktura/Fa/DodatkowyOpis/\",\n  \"/Faktura/Fa/ZaliczkaCzesciowa/\",\n  \"/Faktura/Fa/FakturaZaliczkowa/\",\n  \"/Faktura/Fa/DaneFaKorygowanej/\",\n];\n\nfunction coverageStatus(pathValue: string): CoverageStatusValue {\n  if (SUPPORTED_PATHS.has(pathValue) || SUPPORTED_PREFIXES.some((prefix) => pathValue.startsWith(prefix))) {\n    return CoverageStatus.SUPPORTED;\n  }\n  if (PARTIALLY_SUPPORTED_PREFIXES.some((prefix) => pathValue === prefix || pathValue.startsWith(`${prefix}/`))) {\n    return CoverageStatus.PARTIALLY_SUPPORTED;\n  }\n  if (pathValue.includes(\"RawXmlExtension\")) {\n    return CoverageStatus.RAW_EXTENSION;\n  }\n  return CoverageStatus.UNSUPPORTED;\n}\n\nfunction coverageNote(status: CoverageStatusValue): string {\n  if (status === CoverageStatus.SUPPORTED) {\n    return \"covered by typed FA(3) builder or serializer\";\n  }\n  if (status === CoverageStatus.PARTIALLY_SUPPORTED) {\n    return \"covered for a documented subset of fields\";\n  }\n  if (status === CoverageStatus.RAW_EXTENSION) {\n    return \"reserved for raw XML extension handling\";\n  }\n  return \"not exposed by the typed FA(3) contract\";\n}\n\nfunction handlerName(pathValue: string, status: CoverageStatusValue): string | undefined {\n  if (status === CoverageStatus.UNSUPPORTED) {\n    return undefined;\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Platnosc\")) {\n    return \"mapPaymentTerms\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/FaWiersz\")) {\n    return \"mapLine\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Zamowienie\")) {\n    return \"mapOrder\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Rozliczenie\")) {\n    return \"mapSettlement\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Transport\")) {\n    return \"mapTransport\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Podmiot\")) {\n    return \"mapParty\";\n  }\n  return \"FA3Draft.toFakturaInput\";\n}\n\nfunction domainField(pathValue: string): string {\n  return `invoice.${pathValue.replace(/^\\/Faktura\\/?/, \"\").replaceAll(\"/\", \".\")}`;\n}\n\nexport function auditFa3XsdCoverage(options: { elements?: XsdElement[] } = {}): XsdCoverageReport {\n  const elements =\n    options.elements ??\n    parseFa3XsdElements(loadFa3SchemaWithLocalImports().schemaContent);\n  const coverage = elements.map((element) => {\n    const status = coverageStatus(element.path);\n    const handler = handlerName(element.path, status);\n    return new XsdCoverageEntry({\n      path: element.path,\n      status,\n      note: coverageNote(status),\n      ...(status === CoverageStatus.UNSUPPORTED ? {} : { domainField: domainField(element.path) }),\n      ...(handler ? { handler } : {}),\n    });\n  });\n  return new XsdCoverageReport(elements, coverage);\n}\n\nexport const audit_fa3_xsd_coverage = auditFa3XsdCoverage;\n"]}