fiskalizacija2 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/time.ts","../src/builders/zahtjevi.ts","../src/builders/ubl.ts","../src/util/xml.ts","../src/models/xml/regex.ts","../src/models/xml/businessTerms.ts","../src/models/xml/businessGroups.ts","../src/util/error.ts","../src/models/xml/const.ts","../src/models/xml/fiskalizacija.ts","../src/models/xml/common.ts","../src/models/xml/izvjestavanje.ts","../src/models/api.ts","../src/util/signing.ts","../src/util/cert.ts","../src/fiskalizacija.ts","../src/util/http.ts"],"sourcesContent":["export function getCurrentDateTimeString() {\n const now = new Date();\n\n const pad = (number: number, length = 2) => String(number).padStart(length, \"0\");\n const padMilliseconds = (ms: number) => String(ms).padEnd(4, \"0\");\n\n const year = now.getFullYear();\n const month = pad(now.getMonth() + 1);\n const day = pad(now.getDate());\n const hours = pad(now.getHours());\n const minutes = pad(now.getMinutes());\n const seconds = pad(now.getSeconds());\n const milliseconds = padMilliseconds(now.getMilliseconds());\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n","import type {\n IERacun,\n IEvidentirajERacunZahtjev,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeZahtjev,\n INaplata,\n IOdbijanje,\n IRacun\n} from \"../types\";\nimport { getCurrentDateTimeString } from \"../util/time\";\n\nexport function getEvidentirajERacunZahtjev(vrsta: \"I\" | \"U\", eracun: IERacun | IERacun[]): IEvidentirajERacunZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString(),\n vrstaERacuna: vrsta\n },\n ERacun: Array.isArray(eracun) ? eracun : [eracun]\n };\n}\n\nexport function getEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev(racun: IRacun | IRacun[]): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString(),\n vrstaRacuna: \"IR\"\n },\n Racun: Array.isArray(racun) ? racun : [racun]\n };\n}\n\nexport function getEvidentirajNaplatuZahtjev(naplata: INaplata | INaplata[]): IEvidentirajNaplatuZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString()\n },\n Naplata: Array.isArray(naplata) ? naplata : [naplata]\n };\n}\n\nexport function getEvidentirajOdbijanjeZahtjev(odbijanje: IOdbijanje | IOdbijanje[]): IEvidentirajOdbijanjeZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString()\n },\n Odbijanje: Array.isArray(odbijanje) ? odbijanje : [odbijanje]\n };\n}\n","import { XmlDocument } from \"libxml2-wasm\";\nimport type { IERacun, IRacun } from \"../types\";\nimport { usingXmlDocument } from \"../util/xml\";\nimport { ERacun, Racun } from \"../models\";\nimport { ValidationError } from \"../util/error\";\n\nexport function getERacunFromUbl(doc: string | Buffer | XmlDocument): IERacun {\n if (!(doc instanceof XmlDocument)) {\n return usingXmlDocument(doc, (xmlDoc: XmlDocument) => {\n return getERacunFromUbl(xmlDoc);\n });\n }\n const el = doc.root;\n const type = el.name;\n if (type !== \"Invoice\" && type !== \"CreditNote\") {\n throw new ValidationError(`Expected 'Invoice' or 'CreditNote' as root element, got '${type}'`, doc);\n }\n return ERacun.fromUblElement(el, type);\n}\n\nexport function getRacunFromUbl(doc: string | Buffer | XmlDocument): IRacun {\n if (!(doc instanceof XmlDocument)) {\n return usingXmlDocument(doc, (xmlDoc: XmlDocument) => {\n return getRacunFromUbl(xmlDoc);\n });\n }\n const el = doc.root;\n const type = el.name;\n if (type !== \"Invoice\" && type !== \"CreditNote\") {\n throw new ValidationError(`Expected 'Invoice' or 'CreditNote' as root element, got '${type}'`, doc);\n }\n return Racun.fromUblElement(el, type);\n}\n","import type { XmlElement } from \"libxml2-wasm\";\nimport type { RegexKey } from \"../models/xml/regex\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport { REGEX } from \"../models/xml/regex\";\nimport { BUSINESS_TERMS } from \"../models/xml/businessTerms\";\nimport { BUSINESS_GROUPS } from \"../models/xml/businessGroups\";\nimport { ValidationError } from \"./error\";\n\nfunction removePrefix(str: string, prefix: string) {\n return str.startsWith(prefix) ? str.slice(prefix.length + 1) : str;\n}\n\nexport function getBusinessTermXpath(\n id: keyof typeof BUSINESS_TERMS,\n type: \"Invoice\" | \"CreditNote\",\n group: keyof typeof BUSINESS_GROUPS | null = null\n): string {\n const term = BUSINESS_TERMS[id];\n if (group) {\n return removePrefix(term.xpath[type].join(\"/\"), getBusinessGroupXpath(group, type));\n }\n return term.xpath[type].join(\"/\");\n}\n\nexport function getBusinessGroupXpath(id: keyof typeof BUSINESS_GROUPS, type: \"Invoice\" | \"CreditNote\"): string {\n const term = BUSINESS_GROUPS[id];\n return term.xpath[type].join(\"/\");\n}\n\ninterface ExtractionOptions {\n regexKey?: RegexKey;\n lenient?: boolean;\n errors?: ValidationError[];\n}\n\nexport function getElementContent(parentEl: XmlElement, tag: string, ns: Record<string, string>, options: ExtractionOptions = {}): string {\n const { regexKey, lenient, errors } = options;\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n if (regexKey && !REGEX[regexKey].test(el.content)) {\n const err = new ValidationError(`Element '${tag}' ne zadovoljava regex ${REGEX[regexKey]}`, el.content);\n if (lenient) {\n if (errors) {\n errors.push(err);\n }\n } else {\n throw err;\n }\n }\n return el.content;\n}\n\nexport function getOptionalElementContent(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n options: ExtractionOptions = {}\n): string | undefined {\n const { regexKey, lenient, errors } = options;\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n return undefined;\n }\n if (regexKey && !REGEX[regexKey].test(el.content)) {\n const err = new ValidationError(`Element '${tag}' ne zadovoljava regex ${REGEX[regexKey]}`, el.content);\n if (lenient) {\n if (errors) {\n errors.push(err);\n }\n } else {\n throw err;\n }\n }\n return el.content;\n}\n\nexport function getElementContentNumber(parentEl: XmlElement, tag: string, ns: Record<string, string>, options: ExtractionOptions = {}): number {\n const content = getElementContent(parentEl, tag, ns, options);\n const num = Number(content);\n if (isNaN(num)) {\n const err = new ValidationError(`Element '${tag}' ne sadrži valjani broj: ${content}`, content);\n if (options.lenient) {\n if (options.errors) {\n options.errors.push(err);\n }\n return 0;\n } else {\n throw err;\n }\n }\n return num;\n}\n\nexport function getOptionalElementContentNumber(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n options: ExtractionOptions = {}\n): number | undefined {\n const content = getOptionalElementContent(parentEl, tag, ns, options);\n if (content === undefined) {\n return undefined;\n }\n const num = Number(content);\n if (isNaN(num)) {\n const err = new ValidationError(`Element '${tag}' ne sadrži valjani broj: ${content}`, content);\n if (options.lenient) {\n if (options.errors) {\n options.errors.push(err);\n }\n return undefined;\n } else {\n throw err;\n }\n }\n return num;\n}\n\nexport function extractElement<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T {\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n return fn(el);\n}\n\nexport function extractOptionalElement<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T | undefined {\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n return undefined;\n }\n return fn(el);\n}\n\nexport function extractElements<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T[] {\n const elements = parentEl.find(tag, ns);\n if (!elements || elements.length === 0) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n return elements.map(el => fn(el as XmlElement));\n}\n\nexport function extractOptionalElements<T>(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n fn: (el: XmlElement) => T\n): T[] | undefined {\n const elements = parentEl.find(tag, ns);\n if (!elements || elements.length === 0) {\n return undefined;\n }\n return elements.map(el => fn(el as XmlElement));\n}\n\nexport function getOptionalAttributeValue(\n el: XmlElement,\n name: string,\n ns: Record<string, string>,\n regexKey?: keyof typeof REGEX\n): string | undefined {\n const xpath = `@${name}`;\n const attrs = el.find(xpath, ns);\n if (!attrs || attrs.length === 0) {\n return undefined;\n }\n const value = attrs[0].content;\n if (regexKey && !REGEX[regexKey].test(value)) {\n throw new ValidationError(`Atribut '${name}' ne zadovoljava regex ${REGEX[regexKey]}`, value);\n }\n return value;\n}\n\nexport function getAttributeValue(el: XmlElement, name: string, ns: Record<string, string>, regexKey?: keyof typeof REGEX): string {\n const xpath = `@${name}`;\n const attrs = el.find(xpath, ns);\n if (!attrs || attrs.length === 0) {\n throw new ValidationError(`Atribut '${name}' nije pronađen u elementu '${el.prefix}:${el.name}'`, undefined);\n }\n const value = attrs[0].content;\n if (regexKey && !REGEX[regexKey].test(value)) {\n throw new ValidationError(`Atribut '${name}' ne zadovoljava regex ${REGEX[regexKey]}`, value);\n }\n return value;\n}\n\nexport function xmlEscape(val: string): string {\n if (!val) {\n return \"\";\n }\n return val.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n}\n\nexport function usingXmlDocument<T>(doc: string | Uint8Array | XmlDocument, fn: (r: XmlDocument) => T): T {\n if (!doc) {\n throw new Error(\"XML document is required for processing\");\n }\n if (typeof doc === \"string\") {\n doc = XmlDocument.fromString(doc);\n } else if (doc instanceof Uint8Array) {\n doc = XmlDocument.fromBuffer(doc);\n }\n try {\n return fn(doc);\n } finally {\n doc.dispose();\n }\n}\n","export const REGEX = {\n decimal: /^[\\-+]?[0-9]+(\\.[0-9]+)?$/,\n datumVrijemeDeci: /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{4}$/,\n datumVrijeme: /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/,\n datum: /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/,\n vrstaERacuna: /^(I|U|IR)$/,\n uuid: /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,\n jedinicaMjere: /^[A-Za-z0-9]{2,3}$/,\n izuzecePdv: /^[A-Za-z0-9-]{1,20}$/,\n valuta: /^[A-Za-z]{3}$/,\n vrstaDokumenta: /^[0-9]{2,3}$/,\n nacinPlacanja: /^[A-Za-z0-9]{1,3}$/,\n kategorijaPdv: /^[A-Za-z]{1,2}$/,\n klasifikacijaArtikla: /^[A-Za-z]{2,3}$/,\n tekst3: /^.{1,3}$/,\n tekst10: /^.{1,10}$/,\n tekst20: /^.{1,20}$/,\n tekst25: /^.{1,25}$/,\n tekst34: /^.{1,34}$/,\n tekst35: /^.{1,35}$/,\n tekst50: /^.{1,50}$/,\n tekst100: /^.{1,100}$/,\n tekst120: /^.{1,120}$/,\n tekst300: /^.{1,300}$/,\n tekst500: /^.{1,500}$/,\n tekst1024: /^.{1,1024}$/,\n decimal2: /^[+-]?([0-9]+(\\.[0-9]{1,2})?|\\.[0-9]{1,2})$/,\n decimalPositive2: /^[+]?([0-9]+(\\.[0-9]{1,2})?|\\.[0-9]{1,2})$/,\n greska: /^(S001|S002|S003|S004|S005|S006|S007|S008|S009|S010|S011|S012)$/ /* 9 i 10 samo za izvještavanje */,\n razlogOdbijanja: /^[NUO]$/,\n drzava: /^[A-Z]{2}$/,\n shemaIdentifikator: /^[0-9]{4}$/,\n boolean: /^(true|false)$/,\n redniBroj: /^(0|[1-9][0-9]*)$/,\n hrKategorijaPdv: /^([Hh][Rr]):(([Pp][Dd][Vv][0-9]{1,2})|([A-Za-z]{1,10}))$/,\n razlogPopusta: /^[0-9]{1,3}$/\n};\n\nexport type RegexKey = keyof typeof REGEX;\n","import type { IBusinessTermXpath } from \"../../types\";\n\nexport const BUSINESS_TERMS: Record<string, IBusinessTermXpath> = {\n \"BT-1\": {\n id: \"BT-1\",\n name: \"Broj računa\",\n xpath: {\n Invoice: [\"cbc:ID\"],\n CreditNote: [\"cbc:ID\"]\n }\n },\n \"BT-2\": {\n id: \"BT-2\",\n name: \"Datum izdavanja računa\",\n xpath: {\n Invoice: [\"cbc:IssueDate\"],\n CreditNote: [\"cbc:IssueDate\"]\n }\n },\n \"BT-3\": {\n id: \"BT-3\",\n name: \"Kod tipa računa\",\n xpath: {\n Invoice: [\"cbc:InvoiceTypeCode\"],\n CreditNote: [\"cbc:CreditNoteTypeCode\"]\n }\n },\n \"BT-5\": {\n id: \"BT-5\",\n name: \"Kod valute računa\",\n xpath: {\n Invoice: [\"cbc:DocumentCurrencyCode\"],\n CreditNote: [\"cbc:DocumentCurrencyCode\"]\n }\n },\n \"BT-6\": {\n id: \"BT-6\",\n name: \"Kod računovodstvene valute za PDV\",\n xpath: {\n Invoice: [\"cbc:TaxCurrencyCode\"],\n CreditNote: [\"cbc:TaxCurrencyCode\"]\n }\n },\n \"BT-7\": {\n id: \"BT-7\",\n name: \"Datum nastanka obveze poreza na dodanu vrijednost\",\n xpath: {\n Invoice: [\"cbc:TaxPointDate\"],\n CreditNote: [\"cbc:TaxPointDate\"]\n }\n },\n \"BT-8\": {\n id: \"BT-8\",\n name: \"Kod datuma nastanka obveze poreza na dodanu vrijednost\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:DescriptionCode\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:DescriptionCode\"]\n }\n },\n \"BT-9\": {\n id: \"BT-9\",\n name: \"Datum dospijeća plaćanja\",\n xpath: {\n Invoice: [\"cbc:DueDate\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentDueDate\"]\n }\n },\n \"BT-10\": {\n id: \"BT-10\",\n name: \"Interni identifikator kupca\",\n xpath: {\n Invoice: [\"cbc:BuyerReference\"],\n CreditNote: [\"cbc:BuyerReference\"]\n }\n },\n \"BT-11\": {\n id: \"BT-11\",\n name: \"Referenca projekta\",\n xpath: {\n Invoice: [\"cac:ProjectReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-12\": {\n id: \"BT-12\",\n name: \"Referenca ugovora\",\n xpath: {\n Invoice: [\"cac:ContractDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:ContractDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-13\": {\n id: \"BT-13\",\n name: \"Referenca narudžbenice\",\n xpath: {\n Invoice: [\"cac:OrderReference\", \"cbc:ID\"],\n CreditNote: [\"cac:OrderReference\", \"cbc:ID\"]\n }\n },\n \"BT-14\": {\n id: \"BT-14\",\n name: \"Referenca naloga za isporuku (eng. Sales order)\",\n xpath: {\n Invoice: [\"cac:OrderReference\", \"cbc:SalesOrderID\"],\n CreditNote: [\"cac:OrderReference\", \"cbc:SalesOrderID\"]\n }\n },\n \"BT-15\": {\n id: \"BT-15\",\n name: \"Referenca primke\",\n xpath: {\n Invoice: [\"cac:ReceiptDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:ReceiptDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-16\": {\n id: \"BT-16\",\n name: \"Referenca otpremnice\",\n xpath: {\n Invoice: [\"cac:DespatchDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:DespatchDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-17\": {\n id: \"BT-17\",\n name: \"Referenca javnog nadmetanja ili grupe/lota\",\n xpath: {\n Invoice: [\"cac:OriginatorDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:OriginatorDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-18\": {\n id: \"BT-18\",\n name: \"Identifikator fakturiranog objekta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-19\": {\n id: \"BT-19\",\n name: \"Računovodstvena oznaka kupca\",\n xpath: {\n Invoice: [\"cbc:AccountingCost\"],\n CreditNote: [\"cbc:AccountingCost\"]\n }\n },\n \"BT-20\": {\n id: \"BT-20\",\n name: \"Uvjeti plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentTerms\", \"cbc:Note\"],\n CreditNote: [\"cac:PaymentTerms\", \"cbc:Note\"]\n }\n },\n \"BT-21\": {\n id: \"BT-21\",\n name: \"Kod predmeta napomene za račun\",\n xpath: {\n Invoice: [\"cbc:Note\"],\n CreditNote: [\"cbc:Note\"]\n }\n },\n \"BT-22\": {\n id: \"BT-22\",\n name: \"Napomena za račun\",\n xpath: {\n Invoice: [\"cbc:Note\"],\n CreditNote: [\"cbc:Note\"]\n }\n },\n \"BT-23\": {\n id: \"BT-23\",\n name: \"Tip poslovnoga procesa\",\n xpath: {\n Invoice: [\"cbc:ProfileID\"],\n CreditNote: [\"cbc:ProfileID\"]\n }\n },\n \"BT-24\": {\n id: \"BT-24\",\n name: \"Identifikator specifikacije\",\n xpath: {\n Invoice: [\"cbc:CustomizationID\"],\n CreditNote: [\"cbc:CustomizationID\"]\n }\n },\n \"BT-25\": {\n id: \"BT-25\",\n name: \"Referenca prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-26\": {\n id: \"BT-26\",\n name: \"Datum izdavanja prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:IssueDate\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:IssueDate\"]\n }\n },\n \"BT-27\": {\n id: \"BT-27\",\n name: \"Ime prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"]\n }\n },\n \"BT-28\": {\n id: \"BT-28\",\n name: \"Trgovački naziv prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-29\": {\n id: \"BT-29\",\n name: \"Identifikator prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-30\": {\n id: \"BT-30\",\n name: \"Identifikator pravne registracije prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-31\": {\n id: \"BT-31\",\n name: \"Identifikator prodavatelja za PDV\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-32\": {\n id: \"BT-32\",\n name: \"Identifikator porezne registracije prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-33\": {\n id: \"BT-33\",\n name: \"Dodatni pravni podaci prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyLegalForm\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyLegalForm\"]\n }\n },\n \"BT-34\": {\n id: \"BT-34\",\n name: \"Elektronička adresa prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cbc:EndpointID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cbc:EndpointID\"]\n }\n },\n \"BT-35\": {\n id: \"BT-35\",\n name: \"1. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-36\": {\n id: \"BT-36\",\n name: \"2. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-37\": {\n id: \"BT-37\",\n name: \"Grad prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-38\": {\n id: \"BT-38\",\n name: \"Poštanski broj prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-39\": {\n id: \"BT-39\",\n name: \"Oznaka pokrajine države prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-40\": {\n id: \"BT-40\",\n name: \"Kod države prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-41\": {\n id: \"BT-41\",\n name: \"Kontaktna točka prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"]\n }\n },\n \"BT-42\": {\n id: \"BT-42\",\n name: \"Broj telefona za kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"]\n }\n },\n \"BT-43\": {\n id: \"BT-43\",\n name: \"Adresa e-pošte za kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"]\n }\n },\n \"BT-44\": {\n id: \"BT-44\",\n name: \"Ime kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"]\n }\n },\n \"BT-45\": {\n id: \"BT-45\",\n name: \"Trgovački naziv kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-46\": {\n id: \"BT-46\",\n name: \"Identifikator kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-47\": {\n id: \"BT-47\",\n name: \"Identifikator pravne registracije kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-48\": {\n id: \"BT-48\",\n name: \"Identifikator kupca za PDV\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-49\": {\n id: \"BT-49\",\n name: \"Elektronička adresa kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cbc:EndpointID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cbc:EndpointID\"]\n }\n },\n \"BT-50\": {\n id: \"BT-50\",\n name: \"Redak adrese kupca 1\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-51\": {\n id: \"BT-51\",\n name: \"Redak adrese kupca 2\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-52\": {\n id: \"BT-52\",\n name: \"Grad kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-53\": {\n id: \"BT-53\",\n name: \"Poštanski broj kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-54\": {\n id: \"BT-54\",\n name: \"Županija kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-55\": {\n id: \"BT-55\",\n name: \"Šifra države kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-56\": {\n id: \"BT-56\",\n name: \"Broj telefona za kontakt kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"]\n }\n },\n \"BT-57\": {\n id: \"BT-57\",\n name: \"Telefonski broj kontakta kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"]\n }\n },\n \"BT-58\": {\n id: \"BT-58\",\n name: \"Adresa e-pošte za kontakt kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"]\n }\n },\n \"BT-59\": {\n id: \"BT-59\",\n name: \"Ime primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-60\": {\n id: \"BT-60\",\n name: \"Identifikator primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-61\": {\n id: \"BT-61\",\n name: \"Identifikator pravne registracije primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-62\": {\n id: \"BT-62\",\n name: \"Ime poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-63\": {\n id: \"BT-63\",\n name: \"Identifikator za PDV poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-64\": {\n id: \"BT-64\",\n name: \"1. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-65\": {\n id: \"BT-65\",\n name: \"2. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-66\": {\n id: \"BT-66\",\n name: \"Grad poreznog zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-67\": {\n id: \"BT-67\",\n name: \"Poštanski broj poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-68\": {\n id: \"BT-68\",\n name: \"Pokrajina poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-69\": {\n id: \"BT-69\",\n name: \"Kod države poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-70\": {\n id: \"BT-70\",\n name: \"Ime strane primatelja isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-71\": {\n id: \"BT-71\",\n name: \"Identifikator lokacije isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cbc:ID\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cbc:ID\"]\n }\n },\n \"BT-72\": {\n id: \"BT-72\",\n name: \"Stvarni datum isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cbc:ActualDeliveryDate\"],\n CreditNote: [\"cac:Delivery\", \"cbc:ActualDeliveryDate\"]\n }\n },\n \"BT-73\": {\n id: \"BT-73\",\n name: \"Početni datum obračunskog razdoblja\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:StartDate\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:StartDate\"]\n }\n },\n \"BT-74\": {\n id: \"BT-74\",\n name: \"Završni datum obračunskog razdoblja\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:EndDate\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:EndDate\"]\n }\n },\n \"BT-75\": {\n id: \"BT-75\",\n name: \"1. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:StreetName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:StreetName\"]\n }\n },\n \"BT-76\": {\n id: \"BT-76\",\n name: \"2. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-77\": {\n id: \"BT-77\",\n name: \"Grad isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CityName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CityName\"]\n }\n },\n \"BT-78\": {\n id: \"BT-78\",\n name: \"Poštanski broj isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:PostalZone\"]\n }\n },\n \"BT-79\": {\n id: \"BT-79\",\n name: \"Pokrajina države isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-80\": {\n id: \"BT-80\",\n name: \"Kod države isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-81\": {\n id: \"BT-81\",\n name: \"Kod načina plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:PaymentMeansCode\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentMeansCode\"]\n }\n },\n \"BT-82\": {\n id: \"BT-82\",\n name: \"Tekst načina plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:InstructionNote\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:InstructionNote\"]\n }\n },\n \"BT-83\": {\n id: \"BT-83\",\n name: \"Podaci o doznaci\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:PaymentID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentID\"]\n }\n },\n \"BT-84\": {\n id: \"BT-84\",\n name: \"Identifikator računa za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:ID\"]\n }\n },\n \"BT-85\": {\n id: \"BT-85\",\n name: \"Naziv računa za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:Name\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:Name\"]\n }\n },\n \"BT-86\": {\n id: \"BT-86\",\n name: \"Identifikator pružanja platnih usluga\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cac:FinancialInstitutionBranch\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cac:FinancialInstitutionBranch\", \"cbc:ID\"]\n }\n },\n \"BT-87\": {\n id: \"BT-87\",\n name: \"Primarni broj računa platne kartice\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:PrimaryAccountNumberID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:PrimaryAccountNumberID\"]\n }\n },\n \"BT-88\": {\n id: \"BT-88\",\n name: \"Ime imatelja platne kartice\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:HolderName\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:HolderName\"]\n }\n },\n \"BT-89\": {\n id: \"BT-89\",\n name: \"Identifikator reference ovlaštenja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cbc:ID\"]\n }\n },\n \"BT-90\": {\n id: \"BT-90\",\n name: \"Bankovni identifikator vjerovnika\",\n xpath: {\n Invoice: [\n \"cac:AccountingSupplierParty\",\n \"cac:Party\",\n \"cac:PartyIdentification\",\n \"cbc:ID\",\n \"cac:PayeeParty\",\n \"cac:PartyIdentification\",\n \"cbc:ID\"\n ],\n CreditNote: [\n \"cac:AccountingSupplierParty\",\n \"cac:Party\",\n \"cac:PartyIdentification\",\n \"cbc:ID\",\n \"cac:PayeeParty\",\n \"cac:PartyIdentification\",\n \"cbc:ID\"\n ]\n }\n },\n \"BT-91\": {\n id: \"BT-91\",\n name: \"Identifikator računa za terećenje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cac:PayerFinancialAccount\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cac:PayerFinancialAccount\", \"cbc:ID\"]\n }\n },\n \"BT-92\": {\n id: \"BT-92\",\n name: \"Iznos popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-93\": {\n id: \"BT-93\",\n name: \"Osnovica popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-94\": {\n id: \"BT-94\",\n name: \"Postotak popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-95\": {\n id: \"BT-95\",\n name: \"Kod kategorije PDV-a za popust na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-96\": {\n id: \"BT-96\",\n name: \"Stopa PDV-a popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-97\": {\n id: \"BT-97\",\n name: \"Razlog popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-98\": {\n id: \"BT-98\",\n name: \"Kod razloga popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-99\": {\n id: \"BT-99\",\n name: \"Iznos troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-100\": {\n id: \"BT-100\",\n name: \"Osnovica troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-101\": {\n id: \"BT-101\",\n name: \"Postotak troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-102\": {\n id: \"BT-102\",\n name: \"Kod kategorije PDV-a troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-103\": {\n id: \"BT-103\",\n name: \"Stopa PDV-a troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-104\": {\n id: \"BT-104\",\n name: \"Razlog troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-105\": {\n id: \"BT-105\",\n name: \"Kod razloga troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-106\": {\n id: \"BT-106\",\n name: \"Zbroj neto iznosa stavki računa\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:LineExtensionAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:LineExtensionAmount\"]\n }\n },\n \"BT-107\": {\n id: \"BT-107\",\n name: \"Zbroj popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:AllowanceTotalAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:AllowanceTotalAmount\"]\n }\n },\n \"BT-108\": {\n id: \"BT-108\",\n name: \"Zbroj troškova na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:ChargeTotalAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:ChargeTotalAmount\"]\n }\n },\n \"BT-109\": {\n id: \"BT-109\",\n name: \"Ukupni iznos računa bez PDV-a\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:TaxExclusiveAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:TaxExclusiveAmount\"]\n }\n },\n \"BT-110\": {\n id: \"BT-110\",\n name: \"Ukupni iznos PDV-a za račun\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-111\": {\n id: \"BT-111\",\n name: \"Ukupni iznos PDV-a za račun u računovodstvenoj valuti\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-112\": {\n id: \"BT-112\",\n name: \"Ukupni iznos računa s PDV-om\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:TaxInclusiveAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:TaxInclusiveAmount\"]\n }\n },\n \"BT-113\": {\n id: \"BT-113\",\n name: \"Plaćen iznos\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PrepaidAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PrepaidAmount\"]\n }\n },\n \"BT-114\": {\n id: \"BT-114\",\n name: \"Iznos zaokruživanja\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PayableRoundingAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PayableRoundingAmount\"]\n }\n },\n \"BT-115\": {\n id: \"BT-115\",\n name: \"Iznos koji dospijeva na plaćanje\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PayableAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PayableAmount\"]\n }\n },\n \"BT-116\": {\n id: \"BT-116\",\n name: \"Oporezivi iznos kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxableAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxableAmount\"]\n }\n },\n \"BT-117\": {\n id: \"BT-117\",\n name: \"Iznos poreza kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-118\": {\n id: \"BT-118\",\n name: \"Kod kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-119\": {\n id: \"BT-119\",\n name: \"Stopa kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-120\": {\n id: \"BT-120\",\n name: \"Tekst razloga za oslobođenje od PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"BT-121\": {\n id: \"BT-121\",\n name: \"Kod razloga za oslobođenje od PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"BT-122\": {\n id: \"BT-122\",\n name: \"Referenca popratnog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-123\": {\n id: \"BT-123\",\n name: \"Opis popratnog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:DocumentDescription\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:DocumentDescription\"]\n }\n },\n \"BT-124\": {\n id: \"BT-124\",\n name: \"Lokacija vanjskog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cac:ExternalReference\", \"cbc:URI\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cac:ExternalReference\", \"cbc:URI\"]\n }\n },\n \"BT-125\": {\n id: \"BT-125\",\n name: \"Priloženi dokument\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cbc:EmbeddedDocumentBinaryObject\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cbc:EmbeddedDocumentBinaryObject\"]\n }\n },\n \"BT-126\": {\n id: \"BT-126\",\n name: \"Identifikator stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:ID\"]\n }\n },\n \"BT-127\": {\n id: \"BT-127\",\n name: \"Napomena stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:Note\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:Note\"]\n }\n },\n \"BT-128\": {\n id: \"BT-128\",\n name: \"Identifikator objekta stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:DocumentReference\", \"cbc:DocumentTypeCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:DocumentReference\", \"cbc:DocumentTypeCode\"]\n }\n },\n \"BT-129\": {\n id: \"BT-129\",\n name: \"Obračunata količina\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:InvoicedQuantity\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:CreditedQuantity\"]\n }\n },\n \"BT-130\": {\n id: \"BT-130\",\n name: \"Kod jedinice mjere obračunate količine\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:InvoicedQuantity\", \"@unitCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:CreditedQuantity\", \"@unitCode\"]\n }\n },\n \"BT-131\": {\n id: \"BT-131\",\n name: \"Neto iznos stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:LineExtensionAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:LineExtensionAmount\"]\n }\n },\n \"BT-132\": {\n id: \"BT-132\",\n name: \"Referencirana referenca stavke narudžbenice\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:OrderLineReference\", \"cbc:LineID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:OrderLineReference\", \"cbc:LineID\"]\n }\n },\n \"BT-133\": {\n id: \"BT-133\",\n name: \"Računovodstvena oznaka kupca na stavci računa (mjesto troška)\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:AccountingCost\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:AccountingCost\"]\n }\n },\n \"BT-134\": {\n id: \"BT-134\",\n name: \"Početni datum obračunskog razdoblja stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\", \"cbc:StartDate\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\", \"cbc:StartDate\"]\n }\n },\n \"BT-135\": {\n id: \"BT-135\",\n name: \"Završni datum obračunskog razdoblja stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\", \"cbc:EndDate\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\", \"cbc:EndDate\"]\n }\n },\n \"BT-136\": {\n id: \"BT-136\",\n name: \"Iznos popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-137\": {\n id: \"BT-137\",\n name: \"Osnovica iznosa popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-138\": {\n id: \"BT-138\",\n name: \"Postotak popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-139\": {\n id: \"BT-139\",\n name: \"Razlog popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-140\": {\n id: \"BT-140\",\n name: \"Kod razloga popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-141\": {\n id: \"BT-141\",\n name: \"Iznos troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-142\": {\n id: \"BT-142\",\n name: \"Osnovica iznosa troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-143\": {\n id: \"BT-143\",\n name: \"Postotak troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-144\": {\n id: \"BT-144\",\n name: \"Razlog troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-145\": {\n id: \"BT-145\",\n name: \"Kod razloga za trošak na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-146\": {\n id: \"BT-146\",\n name: \"Neto cijena artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:PriceAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:PriceAmount\"]\n }\n },\n \"BT-147\": {\n id: \"BT-147\",\n name: \"Popust na cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-148\": {\n id: \"BT-148\",\n name: \"Bruto cijena artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-149\": {\n id: \"BT-149\",\n name: \"Jedinična količina za cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:BaseQuantity\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:BaseQuantity\"]\n }\n },\n \"BT-150\": {\n id: \"BT-150\",\n name: \"Kod jedinice mjere za jediničnu količinu za cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:BaseQuantity\", \"@unitCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:BaseQuantity\", \"@unitCode\"]\n }\n },\n \"BT-151\": {\n id: \"BT-151\",\n name: \"Kod kategorije PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-152\": {\n id: \"BT-152\",\n name: \"Stopa PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-153\": {\n id: \"BT-153\",\n name: \"Naziv artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cbc:Name\"]\n }\n },\n \"BT-154\": {\n id: \"BT-154\",\n name: \"Opis artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cbc:Description\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cbc:Description\"]\n }\n },\n \"BT-155\": {\n id: \"BT-155\",\n name: \"Prodavateljev identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:SellersItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:SellersItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-156\": {\n id: \"BT-156\",\n name: \"Kupčev identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:BuyersItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:BuyersItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-157\": {\n id: \"BT-157\",\n name: \"Standardni identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:StandardItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:StandardItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-158\": {\n id: \"BT-158\",\n name: \"Identifikator klasifikacije artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:CommodityClassification\", \"cbc:ItemClassificationCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:CommodityClassification\", \"cbc:ItemClassificationCode\"]\n }\n },\n \"BT-159\": {\n id: \"BT-159\",\n name: \"Zemlja podrijetla artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:OriginCountry\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:OriginCountry\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-160\": {\n id: \"BT-160\",\n name: \"Ime atributa artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Name\"]\n }\n },\n \"BT-161\": {\n id: \"BT-161\",\n name: \"Vrijednost atributa artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Value\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Value\"]\n }\n },\n \"BT-162\": {\n id: \"BT-162\",\n name: \"3. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-163\": {\n id: \"BT-163\",\n name: \"Redak adrese kupca 3\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-164\": {\n id: \"BT-164\",\n name: \"3. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-165\": {\n id: \"BT-165\",\n name: \"3. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"HR-BT-1\": {\n id: \"HR-BT-1\",\n name: \"Indikator kopije računa\",\n xpath: {\n Invoice: [\"cbc:CopyIndicator\"],\n CreditNote: [\"cbc:CopyIndicator\"]\n }\n },\n \"HR-BT-2\": {\n id: \"HR-BT-2\",\n name: \"Vrijeme izdavanja računa\",\n xpath: {\n Invoice: [\"cbc:IssueTime\"],\n CreditNote: [\"cbc:IssueTime\"]\n }\n },\n \"HR-BT-3\": {\n id: \"HR-BT-3\",\n name: \"Opis prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:DocumentDescription\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:DocumentDescription\"]\n }\n },\n \"HR-BT-4\": {\n id: \"HR-BT-4\",\n name: \"Oznaka operatera\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:Name\"]\n }\n },\n \"HR-BT-5\": {\n id: \"HR-BT-5\",\n name: \"OIB operatera\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:ID\"]\n }\n },\n \"HR-BT-6\": {\n id: \"HR-BT-6\",\n name: \"HR Oznaka porezne kategorije\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Name\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Name\"]\n }\n },\n \"HR-BT-7\": {\n id: \"HR-BT-7\",\n name: \"Razlog oslobođenja PDV-a\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"HR-BT-8\": {\n id: \"HR-BT-8\",\n name: \"Kod oslobođenja od PDV-a\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"HR-BT-9\": {\n id: \"HR-BT-9\",\n name: \"Referenca narudžbenice na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:OrderLineReference\", \"cac:OrderReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:OrderLineReference\", \"cac:OrderReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-10\": {\n id: \"HR-BT-10\",\n name: \"Referenca otpremnice na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:DespatchLineReference\", \"cac:DocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:DespatchLineReference\", \"cac:DocumentReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-11\": {\n id: \"HR-BT-11\",\n name: \"Referenca primke na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:ReceiptLineReference\", \"cac:DocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:ReceiptLineReference\", \"cac:DocumentReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-12\": {\n id: \"HR-BT-12\",\n name: \"Oznaka porezne kategorije artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Name\"]\n }\n },\n \"HR-BT-13\": {\n id: \"HR-BT-13\",\n name: \"Razlog oslobođenja od PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"HR-BT-14\": {\n id: \"HR-BT-14\",\n name: \"Kod razloga oslobođenja od PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"HR-BT-15\": {\n id: \"HR-BT-15\",\n name: \"Obračun PDV-a po naplaćenoj naknadi\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRObracunPDVPoNaplati\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRObracunPDVPoNaplati\"]\n }\n },\n \"HR-BT-16\": {\n id: \"HR-BT-16\",\n name: \"HR iznos osnovice kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxableAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxableAmount\"\n ]\n }\n },\n \"HR-BT-17\": {\n id: \"HR-BT-17\",\n name: \"HR iznos kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxAmount\"\n ],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxSubtotal\", \"cbc:TaxAmount\"]\n }\n },\n \"HR-BT-18\": {\n id: \"HR-BT-18\",\n name: \"HR kod kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:ID\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:ID\"\n ]\n }\n },\n \"HR-BT-19\": {\n id: \"HR-BT-19\",\n name: \"HR stopa kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Percent\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Percent\"\n ]\n }\n },\n \"HR-BT-20\": {\n id: \"HR-BT-20\",\n name: \"HR tekst razloga oslobođenja kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReason\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReason\"\n ]\n }\n },\n \"HR-BT-21\": {\n id: \"HR-BT-21\",\n name: \"HR kod razloga oslobođenja kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReasonCode\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReasonCode\"\n ]\n }\n },\n \"HR-BT-22\": {\n id: \"HR-BT-22\",\n name: \"HR Oznaka kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Name\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Name\"\n ]\n }\n },\n \"HR-BT-23\": {\n id: \"HR-BT-23\",\n name: \"HR iznos osnovice za PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"hrextac:HRTaxExclusiveAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"hrextac:HRTaxExclusiveAmount\"\n ]\n }\n },\n \"HR-BT-24\": {\n id: \"HR-BT-24\",\n name: \"HR Neoporezivi iznos\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"cbc:OutOfScopeOfVATAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"cbc:OutOfScopeOfVATAmount\"\n ]\n }\n },\n \"HR-BT-25\": {\n id: \"HR-BT-25\",\n name: \"HR ukupni iznos PDV\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxTotal\", \"cbc:TaxAmount\"]\n }\n }\n};\n","import type { IBusinessTermXpath } from \"../../types\";\n\nexport const BUSINESS_GROUPS: Record<string, IBusinessTermXpath> = {\n \"BG-1\": {\n id: \"BG-1\",\n name: \"Napomena za račun\",\n xpath: {\n Invoice: [],\n CreditNote: []\n }\n },\n \"BG-2\": {\n id: \"BG-2\",\n name: \"Procesna kontrola\",\n xpath: {\n Invoice: [],\n CreditNote: []\n }\n },\n \"BG-3\": {\n id: \"BG-3\",\n name: \"Referenca prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\"],\n CreditNote: [\"cac:BillingReference\"]\n }\n },\n \"BG-4\": {\n id: \"BG-4\",\n name: \"Prodavatelj\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\"],\n CreditNote: [\"cac:AccountingSupplierParty\"]\n }\n },\n \"BG-5\": {\n id: \"BG-5\",\n name: \"Poštanska adresa prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\"]\n }\n },\n \"BG-6\": {\n id: \"BG-6\",\n name: \"Kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\"]\n }\n },\n \"BG-7\": {\n id: \"BG-7\",\n name: \"Kupac\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\"],\n CreditNote: [\"cac:AccountingCustomerParty\"]\n }\n },\n \"BG-8\": {\n id: \"BG-8\",\n name: \"Poštanska adresa kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\"]\n }\n },\n \"BG-9\": {\n id: \"BG-9\",\n name: \"Kontaktni podaci kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\"]\n }\n },\n \"BG-10\": {\n id: \"BG-10\",\n name: \"Primatelj plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\"],\n CreditNote: [\"cac:PayeeParty\"]\n }\n },\n \"BG-11\": {\n id: \"BG-11\",\n name: \"Porezni zastupnik prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\"],\n CreditNote: [\"cac:TaxRepresentativeParty\"]\n }\n },\n \"BG-12\": {\n id: \"BG-12\",\n name: \"Poštanska adresa poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\"]\n }\n },\n \"BG-13\": {\n id: \"BG-13\",\n name: \"Podaci o isporuci\",\n xpath: {\n Invoice: [\"cac:Delivery\"],\n CreditNote: [\"cac:Delivery\"]\n }\n },\n \"BG-14\": {\n id: \"BG-14\",\n name: \"Obračunsko razdoblje\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\"],\n CreditNote: [\"cac:InvoicePeriod\"]\n }\n },\n \"BG-15\": {\n id: \"BG-15\",\n name: \"Adresa isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\"]\n }\n },\n \"BG-16\": {\n id: \"BG-16\",\n name: \"Upute za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\"],\n CreditNote: [\"cac:PaymentMeans\"]\n }\n },\n \"BG-17\": {\n id: \"BG-17\",\n name: \"Kreditni transfer\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\"]\n }\n },\n \"BG-18\": {\n id: \"BG-18\",\n name: \"Podaci o platnoj kartici\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\"]\n }\n },\n \"BG-19\": {\n id: \"BG-19\",\n name: \"Izravno terećenje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\"]\n }\n },\n \"BG-20\": {\n id: \"BG-20\",\n name: \"Popusti na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\"],\n CreditNote: [\"cac:AllowanceCharge\"]\n }\n },\n \"BG-21\": {\n id: \"BG-21\",\n name: \"Troškovi na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\"],\n CreditNote: [\"cac:AllowanceCharge\"]\n }\n },\n \"BG-22\": {\n id: \"BG-22\",\n name: \"Ukupni iznosi na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\"],\n CreditNote: [\"cac:LegalMonetaryTotal\"]\n }\n },\n \"BG-23\": {\n id: \"BG-23\",\n name: \"Raspodjela PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\"]\n }\n },\n \"BG-24\": {\n id: \"BG-24\",\n name: \"Dodatni popratni dokumenti\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\"],\n CreditNote: [\"cac:AdditionalDocumentReference\"]\n }\n },\n \"BG-25\": {\n id: \"BG-25\",\n name: \"Stavka računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\"],\n CreditNote: [\"cac:CreditNoteLine\"]\n }\n },\n \"BG-26\": {\n id: \"BG-26\",\n name: \"Obračunsko razdoblje stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\"]\n }\n },\n \"BG-27\": {\n id: \"BG-27\",\n name: \"Popusti na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\"]\n }\n },\n \"BG-28\": {\n id: \"BG-28\",\n name: \"Troškovi na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\"]\n }\n },\n \"BG-29\": {\n id: \"BG-29\",\n name: \"Pojedinosti cijene\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\"]\n }\n },\n \"BG-30\": {\n id: \"BG-30\",\n name: \"Podaci o PDV-u stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\"]\n }\n },\n \"BG-31\": {\n id: \"BG-31\",\n name: \"Podaci o artiklu\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\"]\n }\n },\n \"BG-32\": {\n id: \"BG-32\",\n name: \"Atributi artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\"]\n }\n },\n \"HR-BG-1\": {\n id: \"HR-BG-1\",\n name: \"HR proširenja\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\"]\n }\n },\n \"HR-BG-2\": {\n id: \"HR-BG-2\",\n name: \"HR Raspodjela PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\"\n ]\n }\n },\n \"HR-BG-3\": {\n id: \"HR-BG-3\",\n name: \"HR ukupni iznosi\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRLegalMonetaryTotal\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRLegalMonetaryTotal\"]\n }\n }\n};\n","import type { IErrorWithMessage } from \"../types\";\n\nexport class ValidationError extends Error {\n value: unknown;\n\n constructor(message: string, value: unknown) {\n super(message);\n this.value = value;\n }\n\n toString(): string {\n if (this.value === undefined || this.value === null) {\n return `ValidationError: ${this.message}`;\n } else if (typeof this.value === \"string\") {\n return `ValidationError: ${this.message} (value: \"${this.value}\")`;\n } else {\n return `ValidationError: ${this.message} (value: ${JSON.stringify(this.value)})`;\n }\n }\n}\n\nexport function parseError(error: unknown): IErrorWithMessage {\n let message: string;\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = (error as { message: string }).message;\n } else if (error && typeof error === \"object\" && \"toString\" in error) {\n message = (error as { toString: () => string }).toString();\n } else {\n message = JSON.stringify(error);\n }\n return {\n message,\n thrown: error\n };\n}\n","export const FISK_NS = {\n soapenv: \"http://schemas.xmlsoap.org/soap/envelope/\",\n ds: \"http://www.w3.org/2000/09/xmldsig#\",\n efis: \"http://www.porezna-uprava.gov.hr/fin/2024/types/eFiskalizacija\",\n eizv: \"http://www.porezna-uprava.gov.hr/fin/2024/types/eIzvjestavanje\"\n};\n\nexport const getFiskNsPrefix = (namespaceUri: string): string => {\n switch (namespaceUri) {\n case FISK_NS.soapenv:\n return \"soapenv\";\n case FISK_NS.ds:\n return \"ds\";\n case FISK_NS.efis:\n return \"efis\";\n case FISK_NS.eizv:\n return \"eizv\";\n default:\n throw new Error(`FISK_NS.getPrefix: Unknown namespace URI: ${namespaceUri}`);\n }\n};\n\nexport const UBL_NS = {\n invoice: \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\",\n creditnote: \"urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2\",\n cac: \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\",\n cbc: \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\",\n ext: \"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\",\n hrextac: \"urn:hzn.hr:schema:xsd:HRExtensionAggregateComponents-1\"\n};\n\nexport const getUblNsPrefix = (namespaceUri: string): string => {\n switch (namespaceUri) {\n case UBL_NS.invoice:\n return \"invoice\";\n case UBL_NS.creditnote:\n return \"creditnote\";\n case UBL_NS.cac:\n return \"cac\";\n case UBL_NS.cbc:\n return \"cbc\";\n case UBL_NS.ext:\n return \"ext\";\n default:\n throw new Error(`UBL_NS.getPrefix: Unknown namespace URI: ${namespaceUri}`);\n }\n};\n","import type {\n ERacunSerializable,\n EvidentirajERacunOdgovorSerializable,\n EvidentirajERacunZahtjevSerializable,\n IERacun,\n IEvidentirajERacunOdgovor,\n IEvidentirajERacunZahtjev,\n IPrethodniERacun,\n IStavkaERacuna,\n IZaglavljeFiskalizacija,\n PrethodniERacunSerializable,\n StavkaERacunaSerializable,\n ZaglavljeFiskalizacijaSerializable\n} from \"../../types\";\nimport { FISK_NS, UBL_NS } from \"./const\";\nimport {\n extractElement,\n extractElements,\n extractOptionalElements,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n usingXmlDocument,\n xmlEscape\n} from \"../../util/xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport {\n ArtiklIdentifikatorKlasifikacija,\n DokumentUkupanIznos,\n Izdavatelj,\n PrijenosSredstava,\n Primatelj,\n RaspodjelaPdv,\n Odgovor,\n DokumentPopust,\n DokumentTrosak\n} from \"./common\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class EvidentirajERacunZahtjev implements EvidentirajERacunZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeFiskalizacija;\n ERacun: ERacun[];\n\n constructor(args: IEvidentirajERacunZahtjev) {\n this._id = args._id;\n this.Zaglavlje = new ZaglavljeFiskalizacija(args.Zaglavlje);\n this.ERacun = args.ERacun.map(eracun => new ERacun(eracun));\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajERacunZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajERacunZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajERacunZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajERacunZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/efis:EvidentirajERacunZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajERacunZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajERacunZahtjev\" || el.namespaceUri !== FISK_NS.efis) {\n throw new ValidationError(`Expected 'EvidentirajERacunZahtjev' element with namespace '${FISK_NS.efis}'`, xml);\n }\n return EvidentirajERacunZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajERacunZahtjev {\n return {\n _id: getAttributeValue(el, \"efis:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"efis:Zaglavlje\", FISK_NS, ZaglavljeFiskalizacija.fromXmlElement),\n ERacun: extractElements(el, \"efis:ERacun\", FISK_NS, ERacun.fromXmlElement)\n };\n }\n\n public toXmlString() {\n let res = \"\";\n res += `<efis:EvidentirajERacunZahtjev xmlns:ds=\"${FISK_NS[\"ds\"]}\" xmlns:efis=\"${FISK_NS[\"efis\"]}\" efis:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.ERacun.forEach(eracun => (res += eracun.toXmlString()));\n res += \"</efis:EvidentirajERacunZahtjev>\";\n return res;\n }\n}\n\nexport class ZaglavljeFiskalizacija implements ZaglavljeFiskalizacijaSerializable {\n datumVrijemeSlanja: string;\n vrstaERacuna: string;\n\n constructor(args: IZaglavljeFiskalizacija) {\n this.datumVrijemeSlanja = args.datumVrijemeSlanja;\n this.vrstaERacuna = args.vrstaERacuna;\n }\n\n public toXmlString() {\n let res = \"\";\n res += \"<efis:Zaglavlje>\";\n res += `<efis:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</efis:datumVrijemeSlanja>`;\n res += `<efis:vrstaERacuna>${xmlEscape(this.vrstaERacuna)}</efis:vrstaERacuna>`;\n res += \"</efis:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeFiskalizacija {\n return {\n datumVrijemeSlanja: getElementContent(el, \"efis:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" }),\n vrstaERacuna: getElementContent(el, \"efis:vrstaERacuna\", FISK_NS, { regexKey: \"vrstaERacuna\" })\n };\n }\n}\n\nexport class ERacun implements ERacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n vrstaDokumenta: string;\n valutaERacuna: string;\n datumDospijecaPlacanja?: string | undefined;\n vrstaPoslovnogProcesa: string;\n referencaNaUgovor?: string | undefined;\n datumIsporuke?: string | undefined;\n PrethodniERacun?: PrethodniERacun[] | undefined;\n Izdavatelj: Izdavatelj;\n Primatelj: Primatelj;\n PrijenosSredstava?: PrijenosSredstava[] | undefined;\n DokumentUkupanIznos: DokumentUkupanIznos;\n RaspodjelaPdv: RaspodjelaPdv[];\n DokumentPopust?: DokumentPopust[] | undefined;\n DokumentTrosak?: DokumentTrosak[] | undefined;\n StavkaERacuna: StavkaERacuna[];\n indikatorKopije: boolean;\n\n constructor(args: IERacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n this.vrstaDokumenta = args.vrstaDokumenta;\n this.valutaERacuna = args.valutaERacuna;\n this.datumDospijecaPlacanja = args.datumDospijecaPlacanja;\n this.vrstaPoslovnogProcesa = args.vrstaPoslovnogProcesa;\n this.referencaNaUgovor = args.referencaNaUgovor;\n this.datumIsporuke = args.datumIsporuke;\n this.PrethodniERacun = args.PrethodniERacun?.map(i => new PrethodniERacun(i));\n this.Izdavatelj = new Izdavatelj(args.Izdavatelj, \"efis\");\n this.Primatelj = new Primatelj(args.Primatelj, \"efis\");\n this.PrijenosSredstava = args.PrijenosSredstava?.map(i => new PrijenosSredstava(i, \"efis\"));\n this.DokumentUkupanIznos = new DokumentUkupanIznos(args.DokumentUkupanIznos, \"efis\");\n this.RaspodjelaPdv = args.RaspodjelaPdv.map(i => new RaspodjelaPdv(i, \"efis\"));\n this.DokumentPopust = args.DokumentPopust?.map(i => new DokumentPopust(i, \"efis\"));\n this.DokumentTrosak = args.DokumentTrosak?.map(i => new DokumentTrosak(i, \"efis\"));\n this.StavkaERacuna = args.StavkaERacuna.map(i => new StavkaERacuna(i));\n this.indikatorKopije = args.indikatorKopije;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:ERacun>\";\n res += \"<efis:brojDokumenta>\" + xmlEscape(this.brojDokumenta) + \"</efis:brojDokumenta>\";\n res += \"<efis:datumIzdavanja>\" + xmlEscape(this.datumIzdavanja) + \"</efis:datumIzdavanja>\";\n res += \"<efis:vrstaDokumenta>\" + xmlEscape(this.vrstaDokumenta) + \"</efis:vrstaDokumenta>\";\n res += \"<efis:valutaERacuna>\" + xmlEscape(this.valutaERacuna) + \"</efis:valutaERacuna>\";\n if (this.datumDospijecaPlacanja) {\n res += \"<efis:datumDospijecaPlacanja>\" + xmlEscape(this.datumDospijecaPlacanja) + \"</efis:datumDospijecaPlacanja>\";\n }\n res += \"<efis:vrstaPoslovnogProcesa>\" + xmlEscape(this.vrstaPoslovnogProcesa) + \"</efis:vrstaPoslovnogProcesa>\";\n if (this.referencaNaUgovor) {\n res += \"<efis:referencaNaUgovor>\" + xmlEscape(this.referencaNaUgovor) + \"</efis:referencaNaUgovor>\";\n }\n if (this.datumIsporuke) {\n res += \"<efis:datumIsporuke>\" + xmlEscape(this.datumIsporuke) + \"</efis:datumIsporuke>\";\n }\n if (this.PrethodniERacun) {\n this.PrethodniERacun.forEach(i => (res += i.toXmlString()));\n }\n res += this.Izdavatelj.toXmlString();\n res += this.Primatelj.toXmlString();\n if (this.PrijenosSredstava) {\n this.PrijenosSredstava.forEach(i => (res += i.toXmlString()));\n }\n res += this.DokumentUkupanIznos.toXmlString();\n this.RaspodjelaPdv.forEach(i => (res += i.toXmlString()));\n if (this.DokumentPopust) {\n this.DokumentPopust.forEach(i => (res += i.toXmlString()));\n }\n if (this.DokumentTrosak) {\n this.DokumentTrosak.forEach(i => (res += i.toXmlString()));\n }\n this.StavkaERacuna.forEach(i => (res += i.toXmlString()));\n res += `<efis:indikatorKopije>${xmlEscape(String(this.indikatorKopije))}</efis:indikatorKopije>`;\n res += \"</efis:ERacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IERacun {\n return {\n brojDokumenta: getElementContent(el, \"efis:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"efis:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, \"efis:vrstaDokumenta\", FISK_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaERacuna: getElementContent(el, \"efis:valutaERacuna\", FISK_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, \"efis:datumDospijecaPlacanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, \"efis:vrstaPoslovnogProcesa\", FISK_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, \"efis:referencaNaUgovor\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, \"efis:datumIsporuke\", FISK_NS, { regexKey: \"datum\" }),\n PrethodniERacun: extractOptionalElements(el, \"efis:PrethodniERacun\", FISK_NS, PrethodniERacun.fromXmlElement),\n Izdavatelj: extractElement(el, \"efis:Izdavatelj\", FISK_NS, Izdavatelj.fromXmlElement),\n Primatelj: extractElement(el, \"efis:Primatelj\", FISK_NS, Primatelj.fromXmlElement),\n PrijenosSredstava: extractOptionalElements(el, \"efis:PrijenosSredstava\", FISK_NS, PrijenosSredstava.fromXmlElement),\n DokumentUkupanIznos: extractElement(el, \"efis:DokumentUkupanIznos\", FISK_NS, DokumentUkupanIznos.fromXmlElement),\n RaspodjelaPdv: extractElements(el, \"efis:RaspodjelaPdv\", FISK_NS, RaspodjelaPdv.fromXmlElement),\n DokumentPopust: extractOptionalElements(el, \"efis:DokumentPopust\", FISK_NS, DokumentPopust.fromXmlElement),\n DokumentTrosak: extractOptionalElements(el, \"efis:DokumentTrosak\", FISK_NS, DokumentTrosak.fromXmlElement),\n StavkaERacuna: extractElements(el, \"efis:StavkaERacuna\", FISK_NS, StavkaERacuna.fromXmlElement),\n indikatorKopije: getElementContent(el, \"efis:indikatorKopije\", FISK_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IERacun {\n return {\n brojDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-1\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, getBusinessTermXpath(\"BT-2\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-3\", type), UBL_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaERacuna: getElementContent(el, getBusinessTermXpath(\"BT-5\", type), UBL_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, getBusinessTermXpath(\"BT-9\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, getBusinessTermXpath(\"BT-23\", type), UBL_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, getBusinessTermXpath(\"BT-12\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, getBusinessTermXpath(\"BT-72\", type), UBL_NS, { regexKey: \"datum\" }),\n PrethodniERacun: PrethodniERacun.fromUblElement(el, type),\n Izdavatelj: Izdavatelj.fromUblElement(el, type),\n Primatelj: Primatelj.fromUblElement(el, type),\n PrijenosSredstava: PrijenosSredstava.fromUblElement(el, type),\n DokumentUkupanIznos: DokumentUkupanIznos.fromUblElement(el, type),\n RaspodjelaPdv: RaspodjelaPdv.fromUblElement(el, type),\n DokumentPopust: DokumentPopust.fromUblElement(el, type),\n DokumentTrosak: DokumentTrosak.fromUblElement(el, type),\n StavkaERacuna: StavkaERacuna.fromUblElement(el, type),\n indikatorKopije: getOptionalElementContent(el, getBusinessTermXpath(\"HR-BT-1\", type), UBL_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n}\n\nexport class PrethodniERacun implements PrethodniERacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n\n constructor(args: IPrethodniERacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:PrethodniERacun>\";\n res += `<efis:brojDokumenta>${xmlEscape(this.brojDokumenta)}</efis:brojDokumenta>`;\n res += `<efis:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</efis:datumIzdavanja>`;\n res += \"</efis:PrethodniERacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrethodniERacun {\n return {\n brojDokumenta: getElementContent(el, \"efis:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"efis:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrethodniERacun[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-3\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n brojDokumenta: getElementContent(groupEl, getBusinessTermXpath(\"BT-25\", type, \"BG-3\"), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(groupEl, getBusinessTermXpath(\"BT-26\", type, \"BG-3\"), UBL_NS, { regexKey: \"datum\" })\n };\n });\n }\n}\n\nexport class StavkaERacuna implements StavkaERacunaSerializable {\n kolicina: number;\n jedinicaMjere: string;\n neto: number;\n artiklNetoCijena: number;\n artiklBrutoCijena?: number | undefined;\n artiklOsnovnaKolicina?: number | undefined;\n artiklJedinicaMjereZaOsnovnuKolicinu?: string | undefined;\n artiklKategorijaPdv: string;\n artiklStopaPdv: number;\n artiklNaziv: string;\n artiklOpis?: string | undefined;\n artiklHrOznakaKategorijaPdv?: string | undefined;\n ArtiklIdentifikatorKlasifikacija?: ArtiklIdentifikatorKlasifikacija[] | undefined;\n\n constructor(args: IStavkaERacuna) {\n this.kolicina = args.kolicina;\n this.jedinicaMjere = args.jedinicaMjere;\n this.neto = args.neto;\n this.artiklNetoCijena = args.artiklNetoCijena;\n this.artiklBrutoCijena = args.artiklBrutoCijena;\n this.artiklOsnovnaKolicina = args.artiklOsnovnaKolicina;\n this.artiklJedinicaMjereZaOsnovnuKolicinu = args.artiklJedinicaMjereZaOsnovnuKolicinu;\n this.artiklKategorijaPdv = args.artiklKategorijaPdv;\n this.artiklStopaPdv = args.artiklStopaPdv;\n this.artiklNaziv = args.artiklNaziv;\n this.artiklOpis = args.artiklOpis;\n this.artiklHrOznakaKategorijaPdv = args.artiklHrOznakaKategorijaPdv;\n this.ArtiklIdentifikatorKlasifikacija = args.ArtiklIdentifikatorKlasifikacija?.map(i => new ArtiklIdentifikatorKlasifikacija(i, \"efis\"));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:StavkaERacuna>\";\n res += `<efis:kolicina>${this.kolicina.toFixed(2)}</efis:kolicina>`;\n res += `<efis:jedinicaMjere>${xmlEscape(this.jedinicaMjere)}</efis:jedinicaMjere>`;\n res += `<efis:neto>${this.neto.toFixed(2)}</efis:neto>`;\n res += `<efis:artiklNetoCijena>${this.artiklNetoCijena.toFixed(2)}</efis:artiklNetoCijena>`;\n if (this.artiklBrutoCijena !== undefined) {\n res += `<efis:artiklBrutoCijena>${this.artiklBrutoCijena.toFixed(2)}</efis:artiklBrutoCijena>`;\n }\n if (this.artiklOsnovnaKolicina !== undefined) {\n res += `<efis:artiklOsnovnaKolicina>${this.artiklOsnovnaKolicina.toFixed(2)}</efis:artiklOsnovnaKolicina>`;\n }\n if (this.artiklJedinicaMjereZaOsnovnuKolicinu !== undefined) {\n res += `<efis:artiklJedinicaMjereZaOsnovnuKolicinu>${xmlEscape(this.artiklJedinicaMjereZaOsnovnuKolicinu)}</efis:artiklJedinicaMjereZaOsnovnuKolicinu>`;\n }\n res += `<efis:artiklKategorijaPdv>${xmlEscape(this.artiklKategorijaPdv)}</efis:artiklKategorijaPdv>`;\n res += `<efis:artiklStopaPdv>${this.artiklStopaPdv.toFixed(2)}</efis:artiklStopaPdv>`;\n res += `<efis:artiklNaziv>${xmlEscape(this.artiklNaziv)}</efis:artiklNaziv>`;\n if (this.artiklOpis !== undefined) {\n res += `<efis:artiklOpis>${xmlEscape(this.artiklOpis)}</efis:artiklOpis>`;\n }\n if (this.artiklHrOznakaKategorijaPdv !== undefined) {\n res += `<efis:artiklHrOznakaKategorijaPdv>${xmlEscape(this.artiklHrOznakaKategorijaPdv)}</efis:artiklHrOznakaKategorijaPdv>`;\n }\n if (this.ArtiklIdentifikatorKlasifikacija) {\n this.ArtiklIdentifikatorKlasifikacija.forEach(a => (res += a.toXmlString()));\n }\n res += \"</efis:StavkaERacuna>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IStavkaERacuna {\n return {\n kolicina: getElementContentNumber(el, \"efis:kolicina\", FISK_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(el, \"efis:jedinicaMjere\", FISK_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(el, \"efis:neto\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(el, \"efis:artiklNetoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(el, \"efis:artiklBrutoCijena\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(el, \"efis:artiklOsnovnaKolicina\", FISK_NS, { regexKey: \"decimal\" }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(el, \"efis:artiklJedinicaMjereZaOsnovnuKolicinu\", FISK_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(el, \"efis:artiklKategorijaPdv\", FISK_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getElementContentNumber(el, \"efis:artiklStopaPdv\", FISK_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(el, \"efis:artiklNaziv\", FISK_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(el, \"efis:artiklOpis\", FISK_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(el, \"efis:artiklHrOznakaKategorijaPdv\", FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(\n el,\n \"efis:ArtiklIdentifikatorKlasifikacija\",\n FISK_NS,\n ArtiklIdentifikatorKlasifikacija.fromXmlElement\n )\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\") {\n const groups = el.find(getBusinessGroupXpath(\"BG-25\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-25' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kolicina: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-129\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(groupEl, getBusinessTermXpath(\"BT-130\", type, \"BG-25\"), UBL_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-131\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-146\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-148\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-149\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-150\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-151\", type, \"BG-25\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-152\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(groupEl, getBusinessTermXpath(\"BT-153\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-154\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-12\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(groupEl, getBusinessTermXpath(\"BT-158\", type, \"BG-25\"), UBL_NS, el =>\n ArtiklIdentifikatorKlasifikacija.fromUblElement(el, type)\n )\n };\n });\n }\n}\n\nexport class EvidentirajERacunOdgovor implements EvidentirajERacunOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(args: IEvidentirajERacunOdgovor) {\n this._id = args._id;\n this.datumVrijemeSlanja = args.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(args.Odgovor, \"efis\");\n }\n\n public static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajERacunOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"efis:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"efis:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"efis:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n\n toXmlString(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import type {\n ArtiklIdentifikatorKlasifikacijaSerializable,\n DokumentPopustSerializable,\n DokumentTrosakSerializable,\n DokumentUkupanIznosSerializable,\n GreskaSerializable,\n IArtiklIdentifikatorKlasifikacija,\n IDokumentPopust,\n IDokumentTrosak,\n IDokumentUkupanIznos,\n IGreska,\n IIzdavatelj,\n IOdgovor,\n IPrijenosSredstava,\n IPrimatelj,\n IRaspodjelaPdv,\n IzdavateljSerializable,\n OdgovorSerializable,\n PrijenosSredstavaSerializable,\n PrimateljSerializable,\n RaspodjelaPdvSerializable\n} from \"../../types\";\nimport {\n extractOptionalElement,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalAttributeValue,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n xmlEscape\n} from \"../../util/xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { FISK_NS, getFiskNsPrefix, UBL_NS } from \"./const\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class Izdavatelj implements IzdavateljSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n ime: string;\n oibPorezniBroj: string;\n oibOperatera: string;\n\n constructor(args: IIzdavatelj, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.ime = args.ime;\n this.oibPorezniBroj = args.oibPorezniBroj;\n this.oibOperatera = args.oibOperatera;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Izdavatelj>`;\n res += `<${this._prefix}:ime>${xmlEscape(this.ime)}</${this._prefix}:ime>`;\n res += `<${this._prefix}:oibPorezniBroj>${xmlEscape(this.oibPorezniBroj)}</${this._prefix}:oibPorezniBroj>`;\n res += `<${this._prefix}:oibOperatera>${xmlEscape(this.oibOperatera)}</${this._prefix}:oibOperatera>`;\n res += `</${this._prefix}:Izdavatelj>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IIzdavatelj {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n ime: getElementContent(el, `${prefix}:ime`, FISK_NS, { regexKey: \"tekst500\" }),\n oibPorezniBroj: getElementContent(el, `${prefix}:oibPorezniBroj`, FISK_NS, { regexKey: \"tekst20\" }),\n oibOperatera: getElementContent(el, `${prefix}:oibOperatera`, FISK_NS, { regexKey: \"tekst20\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IIzdavatelj {\n const groupEl = el.get(getBusinessGroupXpath(\"BG-4\", type), UBL_NS) as XmlElement | null;\n if (!groupEl) {\n throw new ValidationError(`Grupa 'BG-4' nije pronađena u dokumentu '${type}'`, undefined);\n }\n return {\n ime: getElementContent(groupEl, getBusinessTermXpath(\"BT-27\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst500\" }),\n // TODO: Iako je u specifikaciji navedeno da u ovo polje može ići OIB ili porezni broj,\n // ako se šalje porezni broj, na demo serveru se poruka odbija sa greškom:\n // S006: PT nije ovlaštena za dostavu podataka na fiskalizaciju.Inicijalna provjera za valjanost oib-a kod evidentiranja izlaznog eRačuna (Record: 1)\n // stoga za sada mičemo \"HR\" dio iz polja BT-31\n oibPorezniBroj: getElementContent(groupEl, getBusinessTermXpath(\"BT-31\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst20\" }).replace(\n /^HR/,\n \"\"\n ),\n oibOperatera: getElementContent(groupEl, getBusinessTermXpath(\"HR-BT-5\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst20\" })\n };\n }\n}\n\nexport class Primatelj implements PrimateljSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n ime: string;\n oibPorezniBroj: string;\n\n constructor(args: IPrimatelj, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.ime = args.ime;\n this.oibPorezniBroj = args.oibPorezniBroj;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Primatelj>`;\n res += `<${this._prefix}:ime>${xmlEscape(this.ime)}</${this._prefix}:ime>`;\n res += `<${this._prefix}:oibPorezniBroj>${xmlEscape(this.oibPorezniBroj)}</${this._prefix}:oibPorezniBroj>`;\n res += `</${this._prefix}:Primatelj>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrimatelj {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n ime: getElementContent(el, `${prefix}:ime`, FISK_NS, { regexKey: \"tekst500\" }),\n oibPorezniBroj: getElementContent(el, `${prefix}:oibPorezniBroj`, FISK_NS, { regexKey: \"tekst20\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrimatelj {\n const groupEl = el.get(getBusinessGroupXpath(\"BG-7\", type), UBL_NS) as XmlElement | null;\n if (!groupEl) {\n throw new ValidationError(`Grupa 'BG-7' nije pronađena u dokumentu '${type}'`, undefined);\n }\n return {\n ime: getElementContent(groupEl, getBusinessTermXpath(\"BT-44\", type, \"BG-7\"), UBL_NS, { regexKey: \"tekst500\" }),\n // TODO: Iako je u specifikaciji navedeno da u ovo polje može ići OIB ili porezni broj,\n // ako se šalje porezni broj, na demo serveru se poruka odbija sa greškom:\n // S006: PT nije ovlaštena za dostavu podataka na fiskalizaciju.Inicijalna provjera za valjanost oib-a kod evidentiranja izlaznog eRačuna (Record: 1)\n // stoga za sada mičemo \"HR\" dio iz polja BT-48\n oibPorezniBroj: getElementContent(groupEl, getBusinessTermXpath(\"BT-48\", type, \"BG-7\"), UBL_NS, { regexKey: \"tekst20\" }).replace(\n /^HR/,\n \"\"\n )\n };\n }\n}\n\nexport class PrijenosSredstava implements PrijenosSredstavaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n identifikatorRacunaZaPlacanje: string;\n nazivRacunaZaPlacanje?: string | undefined;\n identifikatorPruzateljaPlatnihUsluga?: string | undefined;\n\n constructor(args: IPrijenosSredstava, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.identifikatorRacunaZaPlacanje = args.identifikatorRacunaZaPlacanje;\n this.nazivRacunaZaPlacanje = args.nazivRacunaZaPlacanje;\n this.identifikatorPruzateljaPlatnihUsluga = args.identifikatorPruzateljaPlatnihUsluga;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:PrijenosSredstava>`;\n res += `<${this._prefix}:identifikatorRacunaZaPlacanje>${xmlEscape(this.identifikatorRacunaZaPlacanje)}</${this._prefix}:identifikatorRacunaZaPlacanje>`;\n if (this.nazivRacunaZaPlacanje) {\n res += `<${this._prefix}:nazivRacunaZaPlacanje>${xmlEscape(this.nazivRacunaZaPlacanje)}</${this._prefix}:nazivRacunaZaPlacanje>`;\n }\n if (this.identifikatorPruzateljaPlatnihUsluga) {\n res += `<${this._prefix}:identifikatorPruzateljaPlatnihUsluga>${xmlEscape(this.identifikatorPruzateljaPlatnihUsluga)}</${this._prefix}:identifikatorPruzateljaPlatnihUsluga>`;\n }\n res += `</${this._prefix}:PrijenosSredstava>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrijenosSredstava {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n identifikatorRacunaZaPlacanje: getElementContent(el, `${prefix}:identifikatorRacunaZaPlacanje`, FISK_NS, { regexKey: \"tekst34\" }),\n nazivRacunaZaPlacanje: getOptionalElementContent(el, `${prefix}:nazivRacunaZaPlacanje`, FISK_NS, { regexKey: \"tekst35\" }),\n identifikatorPruzateljaPlatnihUsluga: getOptionalElementContent(el, `${prefix}:identifikatorPruzateljaPlatnihUsluga`, FISK_NS, {\n regexKey: \"tekst25\"\n })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrijenosSredstava[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-17\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n identifikatorRacunaZaPlacanje: getElementContent(groupEl, getBusinessTermXpath(\"BT-84\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst34\"\n }),\n nazivRacunaZaPlacanje: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-85\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst35\"\n }),\n identifikatorPruzateljaPlatnihUsluga: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-86\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst25\"\n })\n };\n });\n }\n}\n\nexport class DokumentUkupanIznos implements DokumentUkupanIznosSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n neto: number;\n popust?: number | undefined;\n trosak?: number | undefined;\n iznosBezPdv: number;\n pdv: number;\n iznosSPdv: number;\n placeniIznos?: number | undefined;\n iznosKojiDospijevaZaPlacanje: number;\n\n constructor(args: IDokumentUkupanIznos, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.neto = args.neto;\n this.popust = args.popust;\n this.trosak = args.trosak;\n this.iznosBezPdv = args.iznosBezPdv;\n this.pdv = args.pdv;\n this.iznosSPdv = args.iznosSPdv;\n this.placeniIznos = args.placeniIznos;\n this.iznosKojiDospijevaZaPlacanje = args.iznosKojiDospijevaZaPlacanje;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentUkupanIznos>`;\n res += `<${this._prefix}:neto>${this.neto.toFixed(2)}</${this._prefix}:neto>`;\n if (this.popust !== undefined) {\n res += `<${this._prefix}:popust>${this.popust.toFixed(2)}</${this._prefix}:popust>`;\n }\n if (this.trosak !== undefined) {\n res += `<${this._prefix}:trosak>${this.trosak.toFixed(2)}</${this._prefix}:trosak>`;\n }\n res += `<${this._prefix}:iznosBezPdv>${this.iznosBezPdv.toFixed(2)}</${this._prefix}:iznosBezPdv>`;\n res += `<${this._prefix}:pdv>${this.pdv.toFixed(2)}</${this._prefix}:pdv>`;\n res += `<${this._prefix}:iznosSPdv>${this.iznosSPdv.toFixed(2)}</${this._prefix}:iznosSPdv>`;\n if (this.placeniIznos !== undefined) {\n res += `<${this._prefix}:placeniIznos>${this.placeniIznos.toFixed(2)}</${this._prefix}:placeniIznos>`;\n }\n res += `<${this._prefix}:iznosKojiDospijevaZaPlacanje>${this.iznosKojiDospijevaZaPlacanje.toFixed(2)}</${this._prefix}:iznosKojiDospijevaZaPlacanje>`;\n res += `</${this._prefix}:DokumentUkupanIznos>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentUkupanIznos {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n neto: getElementContentNumber(el, `${prefix}:neto`, FISK_NS, { regexKey: \"decimal2\" }),\n popust: getOptionalElementContentNumber(el, `${prefix}:popust`, FISK_NS, { regexKey: \"decimal2\" }),\n trosak: getOptionalElementContentNumber(el, `${prefix}:trosak`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosBezPdv: getElementContentNumber(el, `${prefix}:iznosBezPdv`, FISK_NS, { regexKey: \"decimal2\" }),\n pdv: getElementContentNumber(el, `${prefix}:pdv`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosSPdv: getElementContentNumber(el, `${prefix}:iznosSPdv`, FISK_NS, { regexKey: \"decimal2\" }),\n placeniIznos: getOptionalElementContentNumber(el, `${prefix}:placeniIznos`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosKojiDospijevaZaPlacanje: getElementContentNumber(el, `${prefix}:iznosKojiDospijevaZaPlacanje`, FISK_NS, { regexKey: \"decimal2\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentUkupanIznos {\n return {\n neto: getElementContentNumber(el, getBusinessTermXpath(\"BT-106\", type), UBL_NS, { regexKey: \"decimal2\" }),\n popust: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-107\", type), UBL_NS, { regexKey: \"decimal2\" }),\n trosak: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-108\", type), UBL_NS, { regexKey: \"decimal2\" }),\n iznosBezPdv: getElementContentNumber(el, getBusinessTermXpath(\"BT-109\", type), UBL_NS, { regexKey: \"decimal2\" }),\n /** BT-110 nije obvezan u specifikaciji eRacuna, ali je pdv obvezan u specifikaciji fiskalizacije */\n pdv: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-110\", type), UBL_NS, { regexKey: \"decimal2\" }) || 0,\n iznosSPdv: getElementContentNumber(el, getBusinessTermXpath(\"BT-112\", type), UBL_NS, { regexKey: \"decimal2\" }),\n placeniIznos: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-113\", type), UBL_NS, { regexKey: \"decimal2\" }),\n iznosKojiDospijevaZaPlacanje: getElementContentNumber(el, getBusinessTermXpath(\"BT-115\", type), UBL_NS, { regexKey: \"decimal2\" })\n };\n }\n}\n\nexport class RaspodjelaPdv implements RaspodjelaPdvSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n kategorijaPdv: string;\n oporeziviIznos: number;\n iznosPoreza: number;\n stopa?: number | undefined;\n razlogOslobodenja?: string | undefined;\n tekstRazlogaOslobodenja?: string | undefined;\n hrOznakaKategorijaPdv?: string | undefined;\n\n constructor(args: IRaspodjelaPdv, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.kategorijaPdv = args.kategorijaPdv;\n this.oporeziviIznos = args.oporeziviIznos;\n this.iznosPoreza = args.iznosPoreza;\n this.stopa = args.stopa;\n this.razlogOslobodenja = args.razlogOslobodenja;\n this.tekstRazlogaOslobodenja = args.tekstRazlogaOslobodenja;\n this.hrOznakaKategorijaPdv = args.hrOznakaKategorijaPdv;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:RaspodjelaPdv>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n res += `<${this._prefix}:oporeziviIznos>${this.oporeziviIznos.toFixed(2)}</${this._prefix}:oporeziviIznos>`;\n res += `<${this._prefix}:iznosPoreza>${this.iznosPoreza.toFixed(2)}</${this._prefix}:iznosPoreza>`;\n if (this.stopa !== undefined) {\n res += `<${this._prefix}:stopa>${this.stopa.toFixed(2)}</${this._prefix}:stopa>`;\n }\n if (this.razlogOslobodenja !== undefined) {\n res += `<${this._prefix}:razlogOslobodenja>${xmlEscape(this.razlogOslobodenja)}</${this._prefix}:razlogOslobodenja>`;\n }\n if (this.tekstRazlogaOslobodenja !== undefined) {\n res += `<${this._prefix}:tekstRazlogaOslobodenja>${xmlEscape(this.tekstRazlogaOslobodenja)}</${this._prefix}:tekstRazlogaOslobodenja>`;\n }\n if (this.hrOznakaKategorijaPdv !== undefined) {\n res += `<${this._prefix}:hrOznakaKategorijaPdv>${xmlEscape(this.hrOznakaKategorijaPdv)}</${this._prefix}:hrOznakaKategorijaPdv>`;\n }\n res += `</${this._prefix}:RaspodjelaPdv>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IRaspodjelaPdv {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n oporeziviIznos: getElementContentNumber(el, `${prefix}:oporeziviIznos`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosPoreza: getElementContentNumber(el, `${prefix}:iznosPoreza`, FISK_NS, { regexKey: \"decimal2\" }),\n stopa: getOptionalElementContentNumber(el, `${prefix}:stopa`, FISK_NS, { regexKey: \"decimal\" }),\n razlogOslobodenja: getOptionalElementContent(el, `${prefix}:razlogOslobodenja`, FISK_NS, { regexKey: \"izuzecePdv\" }),\n tekstRazlogaOslobodenja: getOptionalElementContent(el, `${prefix}:tekstRazlogaOslobodenja`, FISK_NS, { regexKey: \"tekst1024\" }),\n hrOznakaKategorijaPdv: getOptionalElementContent(el, `${prefix}:hrOznakaKategorijaPdv`, FISK_NS, { regexKey: \"hrKategorijaPdv\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IRaspodjelaPdv[] {\n const hrfiskGroups = el.find(getBusinessGroupXpath(\"HR-BG-2\", type), UBL_NS) as XmlElement[];\n if (hrfiskGroups.length > 0) {\n return hrfiskGroups.map(groupEl => {\n return {\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"HR-BT-18\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"kategorijaPdv\"\n }),\n oporeziviIznos: getElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-16\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n iznosPoreza: getElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-17\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n stopa: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-19\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n razlogOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-21\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n }),\n tekstRazlogaOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-20\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n hrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-22\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n })\n };\n });\n }\n\n const groups = el.find(getBusinessGroupXpath(\"BG-23\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-23' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-118\", type, \"BG-23\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n oporeziviIznos: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-116\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal2\" }),\n iznosPoreza: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-117\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal2\" }),\n stopa: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-119\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal\" }),\n razlogOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-121\", type, \"BG-23\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n }),\n tekstRazlogaOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-120\", type, \"BG-23\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n hrOznakaKategorijaPdv: undefined\n };\n });\n }\n}\n\nexport class ArtiklIdentifikatorKlasifikacija implements ArtiklIdentifikatorKlasifikacijaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n identifikatorKlasifikacije: string;\n identifikatorSheme: string;\n verzijaSheme?: string | undefined;\n\n constructor(args: IArtiklIdentifikatorKlasifikacija, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.identifikatorKlasifikacije = args.identifikatorKlasifikacije;\n this.identifikatorSheme = args.identifikatorSheme;\n this.verzijaSheme = args.verzijaSheme;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:ArtiklIdentifikatorKlasifikacija>`;\n res += `<${this._prefix}:identifikatorKlasifikacije>${xmlEscape(this.identifikatorKlasifikacije)}</${this._prefix}:identifikatorKlasifikacije>`;\n res += `<${this._prefix}:identifikatorSheme>${xmlEscape(this.identifikatorSheme)}</${this._prefix}:identifikatorSheme>`;\n if (this.verzijaSheme !== undefined) {\n res += `<${this._prefix}:verzijaSheme>${xmlEscape(this.verzijaSheme)}</${this._prefix}:verzijaSheme>`;\n }\n res += `</${this._prefix}:ArtiklIdentifikatorKlasifikacija>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IArtiklIdentifikatorKlasifikacija {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n identifikatorKlasifikacije: getElementContent(el, `${prefix}:identifikatorKlasifikacije`, FISK_NS, { regexKey: \"tekst10\" }),\n identifikatorSheme: getElementContent(el, `${prefix}:identifikatorSheme`, FISK_NS, { regexKey: \"klasifikacijaArtikla\" }),\n verzijaSheme: getOptionalElementContent(el, `${prefix}:verzijaSheme`, FISK_NS, { regexKey: \"tekst10\" })\n };\n }\n\n static fromUblElement(el: XmlElement, _type: \"Invoice\" | \"CreditNote\") {\n return {\n identifikatorKlasifikacije: getElementContent(el, \".\", UBL_NS, { regexKey: \"tekst10\" }),\n identifikatorSheme: getAttributeValue(el, \"listID\", UBL_NS),\n verzijaSheme: getOptionalAttributeValue(el, \"listVersionID\", UBL_NS) || undefined\n };\n }\n}\n\nexport class Odgovor implements OdgovorSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n idZahtjeva: string;\n prihvacenZahtjev: boolean;\n greska?: Greska | undefined;\n\n constructor(props: IOdgovor, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.idZahtjeva = props.idZahtjeva;\n this.prihvacenZahtjev = props.prihvacenZahtjev;\n if (props.greska) {\n this.greska = new Greska(props.greska, prefix);\n }\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Odgovor>`;\n res += `<${this._prefix}:idZahtjeva>${xmlEscape(this.idZahtjeva)}</${this._prefix}:idZahtjeva>`;\n res += `<${this._prefix}:prihvacenZahtjev>${this.prihvacenZahtjev}</${this._prefix}:prihvacenZahtjev>`;\n if (this.greska) {\n res += this.greska.toXmlString();\n }\n res += `</${this._prefix}:Odgovor>`;\n return res;\n }\n\n public static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IOdgovor {\n const { lenient = false, errors } = options || {};\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n idZahtjeva: getElementContent(el, `${prefix}:idZahtjeva`, FISK_NS, { regexKey: \"uuid\", lenient, errors }),\n prihvacenZahtjev: getElementContent(el, `${prefix}:prihvacenZahtjev`, FISK_NS, { regexKey: \"boolean\", lenient, errors }) === \"true\",\n greska: extractOptionalElement(el, `${prefix}:greska`, FISK_NS, greskaEl => Greska.fromXmlElement(greskaEl, options))\n };\n }\n}\n\nexport class Greska implements GreskaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n sifra: string;\n redniBrojZapisa: string;\n opis: string;\n\n constructor(props: IGreska, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.sifra = props.sifra;\n this.redniBrojZapisa = props.redniBrojZapisa;\n this.opis = props.opis;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Greska>`;\n res += `<${this._prefix}:sifra>${xmlEscape(this.sifra)}</${this._prefix}:sifra>`;\n res += `<${this._prefix}:redniBrojZapisa>${xmlEscape(this.redniBrojZapisa)}</${this._prefix}:redniBrojZapisa>`;\n res += `<${this._prefix}:opis>${xmlEscape(this.opis)}</${this._prefix}:opis>`;\n res += `</${this._prefix}:Greska>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IGreska {\n const { lenient = false, errors } = options || {};\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n sifra: getElementContent(el, `${prefix}:sifra`, FISK_NS, { regexKey: \"greska\", lenient, errors }),\n redniBrojZapisa: getElementContent(el, `${prefix}:redniBrojZapisa`, FISK_NS, { regexKey: \"redniBroj\", lenient, errors }),\n opis: getElementContent(el, `${prefix}:opis`, FISK_NS, { regexKey: \"tekst1024\", lenient, errors })\n };\n }\n}\n\nexport class DokumentPopust implements DokumentPopustSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n iznosPopust: number;\n kategorijaPdv: string;\n stopaPdv?: number | undefined;\n tekstRazlogaPopusta?: string | undefined;\n razlogPopusta?: string | undefined;\n\n constructor(args: IDokumentPopust, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.iznosPopust = args.iznosPopust;\n this.kategorijaPdv = args.kategorijaPdv;\n this.stopaPdv = args.stopaPdv;\n this.tekstRazlogaPopusta = args.tekstRazlogaPopusta;\n this.razlogPopusta = args.razlogPopusta;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentPopust>`;\n res += `<${this._prefix}:iznosPopust>${this.iznosPopust.toFixed(2)}</${this._prefix}:iznosPopust>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n if (this.stopaPdv !== undefined) {\n res += `<${this._prefix}:stopaPdv>${this.stopaPdv.toFixed(2)}</${this._prefix}:stopaPdv>`;\n }\n if (this.tekstRazlogaPopusta !== undefined) {\n res += `<${this._prefix}:tekstRazlogaPopusta>${xmlEscape(this.tekstRazlogaPopusta)}</${this._prefix}:tekstRazlogaPopusta>`;\n }\n if (this.razlogPopusta !== undefined) {\n res += `<${this._prefix}:razlogPopusta>${xmlEscape(this.razlogPopusta)}</${this._prefix}:razlogPopusta>`;\n }\n res += `</${this._prefix}:DokumentPopust>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentPopust {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n iznosPopust: getElementContentNumber(el, `${prefix}:iznosPopust`, FISK_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(el, `${prefix}:stopaPdv`, FISK_NS, { regexKey: \"decimal\" }),\n tekstRazlogaPopusta: getOptionalElementContent(el, `${prefix}:tekstRazlogaPopusta`, FISK_NS, { regexKey: \"tekst1024\" }),\n razlogPopusta: getOptionalElementContent(el, `${prefix}:razlogPopusta`, FISK_NS, { regexKey: \"razlogPopusta\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentPopust[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-20\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n iznosPopust: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-92\", type, \"BG-20\"), UBL_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-95\", type, \"BG-20\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-96\", type, \"BG-20\"), UBL_NS, { regexKey: \"decimal\" }),\n tekstRazlogaPopusta: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-97\", type, \"BG-20\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n razlogPopusta: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-98\", type, \"BG-20\"), UBL_NS, { regexKey: \"razlogPopusta\" })\n };\n });\n }\n}\n\nexport class DokumentTrosak implements DokumentTrosakSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n iznosTrosak: number;\n kategorijaPdv: string;\n hrOznakaPorezneKategorije?: string | undefined;\n stopaPdv?: number | undefined;\n tekstRazlogaOslobodenjaPdv?: string | undefined;\n razlogOslobodenjaPdv?: string | undefined;\n\n constructor(args: IDokumentTrosak, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.iznosTrosak = args.iznosTrosak;\n this.kategorijaPdv = args.kategorijaPdv;\n this.hrOznakaPorezneKategorije = args.hrOznakaPorezneKategorije;\n this.stopaPdv = args.stopaPdv;\n this.tekstRazlogaOslobodenjaPdv = args.tekstRazlogaOslobodenjaPdv;\n this.razlogOslobodenjaPdv = args.razlogOslobodenjaPdv;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentTrosak>`;\n res += `<${this._prefix}:iznosTrosak>${this.iznosTrosak.toFixed(2)}</${this._prefix}:iznosTrosak>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n if (this.hrOznakaPorezneKategorije !== undefined) {\n res += `<${this._prefix}:hrOznakaPorezneKategorije>${xmlEscape(this.hrOznakaPorezneKategorije)}</${this._prefix}:hrOznakaPorezneKategorije>`;\n }\n if (this.stopaPdv !== undefined) {\n res += `<${this._prefix}:stopaPdv>${this.stopaPdv.toFixed(2)}</${this._prefix}:stopaPdv>`;\n }\n if (this.tekstRazlogaOslobodenjaPdv !== undefined) {\n res += `<${this._prefix}:tekstRazlogaOslobodenjaPdv>${xmlEscape(this.tekstRazlogaOslobodenjaPdv)}</${this._prefix}:tekstRazlogaOslobodenjaPdv>`;\n }\n if (this.razlogOslobodenjaPdv !== undefined) {\n res += `<${this._prefix}:razlogOslobodenjaPdv>${xmlEscape(this.razlogOslobodenjaPdv)}</${this._prefix}:razlogOslobodenjaPdv>`;\n }\n res += `</${this._prefix}:DokumentTrosak>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentTrosak {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n iznosTrosak: getElementContentNumber(el, `${prefix}:iznosTrosak`, FISK_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n hrOznakaPorezneKategorije: getOptionalElementContent(el, `${prefix}:hrOznakaPorezneKategorije`, FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(el, `${prefix}:stopaPdv`, FISK_NS, { regexKey: \"decimal\" }),\n tekstRazlogaOslobodenjaPdv: getOptionalElementContent(el, `${prefix}:tekstRazlogaOslobodenjaPdv`, FISK_NS, { regexKey: \"tekst1024\" }),\n razlogOslobodenjaPdv: getOptionalElementContent(el, `${prefix}:razlogOslobodenjaPdv`, FISK_NS, { regexKey: \"izuzecePdv\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentTrosak[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-21\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n iznosTrosak: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-99\", type, \"BG-21\"), UBL_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-102\", type, \"BG-21\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n hrOznakaPorezneKategorije: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-6\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n stopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-103\", type, \"BG-21\"), UBL_NS, { regexKey: \"decimal\" }),\n tekstRazlogaOslobodenjaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-7\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n razlogOslobodenjaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-8\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n })\n };\n });\n }\n}\n","import type {\n EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovorSerializable,\n EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjevSerializable,\n EvidentirajNaplatuOdgovorSerializable,\n EvidentirajNaplatuZahtjevSerializable,\n EvidentirajOdbijanjeOdgovorSerializable,\n EvidentirajOdbijanjeZahtjevSerializable,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuOdgovor,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeOdgovor,\n IEvidentirajOdbijanjeZahtjev,\n INaplata,\n IOdbijanje,\n IPrethodniRacun,\n IRacun,\n IStavkaRacuna,\n IZaglavljeIsporuka,\n IZaglavljeIzvjestavanje,\n NaplataSerializable,\n OdbijanjeSerializable,\n PrethodniRacunSerializable,\n RacunSerializable,\n StavkaRacunaSerializable,\n ZaglavljeIsporukaSerializable,\n ZaglavljeIzvjestavanjeSerializable\n} from \"../../types\";\nimport {\n extractElement,\n extractElements,\n extractOptionalElements,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n usingXmlDocument,\n xmlEscape\n} from \"../../util/xml\";\nimport { FISK_NS, UBL_NS } from \"./const\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport {\n ArtiklIdentifikatorKlasifikacija,\n DokumentUkupanIznos,\n Izdavatelj,\n Odgovor,\n PrijenosSredstava,\n Primatelj,\n RaspodjelaPdv,\n DokumentPopust,\n DokumentTrosak\n} from \"./common\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class EvidentirajNaplatuZahtjev implements EvidentirajNaplatuZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIzvjestavanje;\n Naplata: Naplata[];\n\n constructor(props: IEvidentirajNaplatuZahtjev) {\n this._id = props._id;\n this.Zaglavlje = new ZaglavljeIzvjestavanje(props.Zaglavlje);\n this.Naplata = props.Naplata.map(i => new Naplata(i));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajNaplatuZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Naplata.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajNaplatuZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajNaplatuZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajNaplatuZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajNaplatuZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajNaplatuZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajNaplatuZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajNaplatuZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajNaplatuZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(`Expected 'EvidentirajNaplatuZahtjev' element with namespace '${FISK_NS.eizv}'`, xml);\n }\n return EvidentirajNaplatuZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajNaplatuZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIzvjestavanje.fromXmlElement),\n Naplata: extractElements(el, \"eizv:Naplata\", FISK_NS, Naplata.fromXmlElement)\n };\n }\n}\n\nexport class EvidentirajOdbijanjeZahtjev implements EvidentirajOdbijanjeZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIzvjestavanje;\n Odbijanje: Odbijanje[];\n\n constructor(props: IEvidentirajOdbijanjeZahtjev) {\n this.Odbijanje = props.Odbijanje.map(i => new Odbijanje(i));\n this.Zaglavlje = new ZaglavljeIzvjestavanje(props.Zaglavlje);\n this._id = props._id;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajOdbijanjeZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Odbijanje.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajOdbijanjeZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajOdbijanjeZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajOdbijanjeZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajOdbijanjeZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajOdbijanjeZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajOdbijanjeZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajOdbijanjeZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajOdbijanjeZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(`Expected 'EvidentirajOdbijanjeZahtjev' element with namespace '${FISK_NS.eizv}'`, xml);\n }\n return EvidentirajOdbijanjeZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajOdbijanjeZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIzvjestavanje.fromXmlElement),\n Odbijanje: extractElements(el, \"eizv:Odbijanje\", FISK_NS, Odbijanje.fromXmlElement)\n };\n }\n}\n\nexport class EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev implements EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIsporuka;\n Racun: Racun[];\n\n constructor(props: IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev) {\n this._id = props._id;\n this.Zaglavlje = new ZaglavljeIsporuka(props.Zaglavlje);\n this.Racun = props.Racun.map(i => new Racun(i));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Racun.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(xml.root);\n } else {\n const el = xml as XmlElement;\n if (el.name !== \"EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(\n `Expected 'EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev' element with namespace '${FISK_NS.eizv}'`,\n JSON.stringify({ name: el.name, namespaceUri: el.namespaceUri })\n );\n }\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIsporuka.fromXmlElement),\n Racun: extractElements(el, \"eizv:Racun\", FISK_NS, Racun.fromXmlElement)\n };\n }\n}\n\nexport class ZaglavljeIzvjestavanje implements ZaglavljeIzvjestavanjeSerializable {\n datumVrijemeSlanja: string;\n\n constructor(props: IZaglavljeIzvjestavanje) {\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Zaglavlje>\";\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += \"</eizv:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeIzvjestavanje {\n return {\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" })\n };\n }\n}\n\nexport class ZaglavljeIsporuka implements ZaglavljeIsporukaSerializable {\n datumVrijemeSlanja: string;\n vrstaRacuna: string;\n\n constructor(props: IZaglavljeIsporuka) {\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.vrstaRacuna = props.vrstaRacuna;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Zaglavlje>\";\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += `<eizv:vrstaRacuna>${xmlEscape(this.vrstaRacuna)}</eizv:vrstaRacuna>`;\n res += \"</eizv:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeIsporuka {\n return {\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" }),\n // TODO: ovo bi trebalo uvijek biti `IR`\n vrstaRacuna: getElementContent(el, \"eizv:vrstaRacuna\", FISK_NS, { regexKey: \"vrstaERacuna\" })\n };\n }\n}\n\nexport class Naplata implements NaplataSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n oibPorezniBrojIzdavatelja: string;\n oibPorezniBrojPrimatelja: string;\n datumNaplate: string;\n naplaceniIznos: number;\n nacinPlacanja: string;\n\n constructor(props: INaplata) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.oibPorezniBrojIzdavatelja = props.oibPorezniBrojIzdavatelja;\n this.oibPorezniBrojPrimatelja = props.oibPorezniBrojPrimatelja;\n this.datumNaplate = props.datumNaplate;\n this.naplaceniIznos = props.naplaceniIznos;\n this.nacinPlacanja = props.nacinPlacanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Naplata>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:oibPorezniBrojIzdavatelja>${xmlEscape(this.oibPorezniBrojIzdavatelja)}</eizv:oibPorezniBrojIzdavatelja>`;\n res += `<eizv:oibPorezniBrojPrimatelja>${xmlEscape(this.oibPorezniBrojPrimatelja)}</eizv:oibPorezniBrojPrimatelja>`;\n res += `<eizv:datumNaplate>${xmlEscape(this.datumNaplate)}</eizv:datumNaplate>`;\n res += `<eizv:naplaceniIznos>${this.naplaceniIznos.toFixed(2)}</eizv:naplaceniIznos>`;\n res += `<eizv:nacinPlacanja>${xmlEscape(this.nacinPlacanja)}</eizv:nacinPlacanja>`;\n res += \"</eizv:Naplata>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): INaplata {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n oibPorezniBrojIzdavatelja: getElementContent(el, \"eizv:oibPorezniBrojIzdavatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n oibPorezniBrojPrimatelja: getElementContent(el, \"eizv:oibPorezniBrojPrimatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n datumNaplate: getElementContent(el, \"eizv:datumNaplate\", FISK_NS, { regexKey: \"datum\" }),\n naplaceniIznos: getElementContentNumber(el, \"eizv:naplaceniIznos\", FISK_NS, { regexKey: \"decimal2\" }),\n nacinPlacanja: getElementContent(el, \"eizv:nacinPlacanja\", FISK_NS, { regexKey: \"nacinPlacanja\" })\n };\n }\n}\n\nexport class Odbijanje implements OdbijanjeSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n oibPorezniBrojIzdavatelja: string;\n oibPorezniBrojPrimatelja: string;\n datumOdbijanja: string;\n vrstaRazlogaOdbijanja: string;\n razlogOdbijanja: string;\n\n constructor(props: IOdbijanje) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.oibPorezniBrojIzdavatelja = props.oibPorezniBrojIzdavatelja;\n this.oibPorezniBrojPrimatelja = props.oibPorezniBrojPrimatelja;\n this.datumOdbijanja = props.datumOdbijanja;\n this.vrstaRazlogaOdbijanja = props.vrstaRazlogaOdbijanja;\n this.razlogOdbijanja = props.razlogOdbijanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Odbijanje>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:oibPorezniBrojIzdavatelja>${xmlEscape(this.oibPorezniBrojIzdavatelja)}</eizv:oibPorezniBrojIzdavatelja>`;\n res += `<eizv:oibPorezniBrojPrimatelja>${xmlEscape(this.oibPorezniBrojPrimatelja)}</eizv:oibPorezniBrojPrimatelja>`;\n res += `<eizv:datumOdbijanja>${xmlEscape(this.datumOdbijanja)}</eizv:datumOdbijanja>`;\n res += `<eizv:vrstaRazlogaOdbijanja>${xmlEscape(this.vrstaRazlogaOdbijanja)}</eizv:vrstaRazlogaOdbijanja>`;\n res += `<eizv:razlogOdbijanja>${xmlEscape(this.razlogOdbijanja)}</eizv:razlogOdbijanja>`;\n res += \"</eizv:Odbijanje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IOdbijanje {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n oibPorezniBrojIzdavatelja: getElementContent(el, \"eizv:oibPorezniBrojIzdavatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n oibPorezniBrojPrimatelja: getElementContent(el, \"eizv:oibPorezniBrojPrimatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n datumOdbijanja: getElementContent(el, \"eizv:datumOdbijanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaRazlogaOdbijanja: getElementContent(el, \"eizv:vrstaRazlogaOdbijanja\", FISK_NS, { regexKey: \"razlogOdbijanja\" }),\n razlogOdbijanja: getElementContent(el, \"eizv:razlogOdbijanja\", FISK_NS, { regexKey: \"tekst1024\" })\n };\n }\n}\n\nexport class PrethodniRacun implements PrethodniRacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n\n constructor(args: IPrethodniRacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:PrethodniRacun>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += \"</eizv:PrethodniRacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrethodniRacun {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrethodniRacun[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-3\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n brojDokumenta: getElementContent(groupEl, getBusinessTermXpath(\"BT-25\", type, \"BG-3\"), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(groupEl, getBusinessTermXpath(\"BT-26\", type, \"BG-3\"), UBL_NS, { regexKey: \"datum\" })\n };\n });\n }\n}\n\nexport class StavkaRacuna implements StavkaRacunaSerializable {\n kolicina: number;\n jedinicaMjere: string;\n neto: number;\n artiklNetoCijena: number;\n artiklBrutoCijena?: number | undefined;\n artiklOsnovnaKolicina?: number | undefined;\n artiklJedinicaMjereZaOsnovnuKolicinu?: string | undefined;\n artiklKategorijaPdv: string;\n artiklStopaPdv: number;\n artiklNaziv: string;\n artiklOpis?: string | undefined;\n artiklHrOznakaKategorijaPdv?: string | undefined;\n ArtiklIdentifikatorKlasifikacija?: ArtiklIdentifikatorKlasifikacija[] | undefined;\n\n constructor(args: IStavkaRacuna) {\n this.kolicina = args.kolicina;\n this.jedinicaMjere = args.jedinicaMjere;\n this.neto = args.neto;\n this.artiklNetoCijena = args.artiklNetoCijena;\n this.artiklBrutoCijena = args.artiklBrutoCijena;\n this.artiklOsnovnaKolicina = args.artiklOsnovnaKolicina;\n this.artiklJedinicaMjereZaOsnovnuKolicinu = args.artiklJedinicaMjereZaOsnovnuKolicinu;\n this.artiklKategorijaPdv = args.artiklKategorijaPdv;\n this.artiklStopaPdv = args.artiklStopaPdv;\n this.artiklNaziv = args.artiklNaziv;\n this.artiklOpis = args.artiklOpis;\n this.artiklHrOznakaKategorijaPdv = args.artiklHrOznakaKategorijaPdv;\n this.ArtiklIdentifikatorKlasifikacija = args.ArtiklIdentifikatorKlasifikacija?.map(i => new ArtiklIdentifikatorKlasifikacija(i, \"eizv\"));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:StavkaRacuna>\";\n res += `<eizv:kolicina>${this.kolicina.toFixed(2)}</eizv:kolicina>`;\n res += `<eizv:jedinicaMjere>${xmlEscape(this.jedinicaMjere)}</eizv:jedinicaMjere>`;\n res += `<eizv:neto>${this.neto.toFixed(2)}</eizv:neto>`;\n res += `<eizv:artiklNetoCijena>${this.artiklNetoCijena.toFixed(2)}</eizv:artiklNetoCijena>`;\n if (this.artiklBrutoCijena !== undefined) {\n res += `<eizv:artiklBrutoCijena>${this.artiklBrutoCijena.toFixed(2)}</eizv:artiklBrutoCijena>`;\n }\n if (this.artiklOsnovnaKolicina !== undefined) {\n res += `<eizv:artiklOsnovnaKolicina>${this.artiklOsnovnaKolicina.toFixed(2)}</eizv:artiklOsnovnaKolicina>`;\n }\n if (this.artiklJedinicaMjereZaOsnovnuKolicinu !== undefined) {\n res += `<eizv:artiklJedinicaMjereZaOsnovnuKolicinu>${xmlEscape(this.artiklJedinicaMjereZaOsnovnuKolicinu)}</eizv:artiklJedinicaMjereZaOsnovnuKolicinu>`;\n }\n res += `<eizv:artiklKategorijaPdv>${xmlEscape(this.artiklKategorijaPdv)}</eizv:artiklKategorijaPdv>`;\n res += `<eizv:artiklStopaPdv>${this.artiklStopaPdv.toFixed(2)}</eizv:artiklStopaPdv>`;\n res += `<eizv:artiklNaziv>${xmlEscape(this.artiklNaziv)}</eizv:artiklNaziv>`;\n if (this.artiklOpis !== undefined) {\n res += `<eizv:artiklOpis>${xmlEscape(this.artiklOpis)}</eizv:artiklOpis>`;\n }\n if (this.artiklHrOznakaKategorijaPdv !== undefined) {\n res += `<eizv:artiklHrOznakaKategorijaPdv>${xmlEscape(this.artiklHrOznakaKategorijaPdv)}</eizv:artiklHrOznakaKategorijaPdv>`;\n }\n if (this.ArtiklIdentifikatorKlasifikacija) {\n this.ArtiklIdentifikatorKlasifikacija.forEach(a => (res += a.toXmlString()));\n }\n res += \"</eizv:StavkaRacuna>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IStavkaRacuna {\n return {\n kolicina: getElementContentNumber(el, \"eizv:kolicina\", FISK_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(el, \"eizv:jedinicaMjere\", FISK_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(el, \"eizv:neto\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(el, \"eizv:artiklNetoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(el, \"eizv:artiklBrutoCijena\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(el, \"eizv:artiklOsnovnaKolicina\", FISK_NS, { regexKey: \"decimal\" }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(el, \"eizv:artiklJedinicaMjereZaOsnovnuKolicinu\", FISK_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(el, \"eizv:artiklKategorijaPdv\", FISK_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getElementContentNumber(el, \"eizv:artiklStopaPdv\", FISK_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(el, \"eizv:artiklNaziv\", FISK_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(el, \"eizv:artiklOpis\", FISK_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(el, \"eizv:artiklHrOznakaKategorijaPdv\", FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(\n el,\n \"eizv:ArtiklIdentifikatorKlasifikacija\",\n FISK_NS,\n ArtiklIdentifikatorKlasifikacija.fromXmlElement\n )\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\") {\n const groups = el.find(getBusinessGroupXpath(\"BG-25\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-25' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kolicina: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-129\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(groupEl, getBusinessTermXpath(\"BT-130\", type, \"BG-25\"), UBL_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-131\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-146\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-148\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-149\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-150\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-151\", type, \"BG-25\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-152\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(groupEl, getBusinessTermXpath(\"BT-153\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-154\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-12\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(groupEl, getBusinessTermXpath(\"BT-158\", type, \"BG-25\"), UBL_NS, el =>\n ArtiklIdentifikatorKlasifikacija.fromUblElement(el, type)\n )\n };\n });\n }\n}\n\nexport class Racun implements RacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n vrstaDokumenta: string;\n valutaRacuna: string;\n datumDospijecaPlacanja?: string;\n vrstaPoslovnogProcesa: string;\n referencaNaUgovor?: string;\n datumIsporuke?: string;\n PrethodniRacun?: PrethodniRacun[];\n Izdavatelj: Izdavatelj;\n Primatelj: Primatelj;\n PrijenosSredstava?: PrijenosSredstava[];\n DokumentUkupanIznos: DokumentUkupanIznos;\n RaspodjelaPdv: RaspodjelaPdv[];\n DokumentPopust?: DokumentPopust[];\n DokumentTrosak?: DokumentTrosak[];\n StavkaRacuna: StavkaRacuna[];\n indikatorKopije: boolean;\n\n constructor(props: IRacun) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.vrstaDokumenta = props.vrstaDokumenta;\n this.valutaRacuna = props.valutaRacuna;\n this.datumDospijecaPlacanja = props.datumDospijecaPlacanja;\n this.vrstaPoslovnogProcesa = props.vrstaPoslovnogProcesa;\n this.referencaNaUgovor = props.referencaNaUgovor;\n this.datumIsporuke = props.datumIsporuke;\n if (props.PrethodniRacun) {\n this.PrethodniRacun = props.PrethodniRacun.map(i => new PrethodniRacun(i));\n }\n this.Izdavatelj = new Izdavatelj(props.Izdavatelj, \"eizv\");\n this.Primatelj = new Primatelj(props.Primatelj, \"eizv\");\n if (props.PrijenosSredstava) {\n this.PrijenosSredstava = props.PrijenosSredstava.map(i => new PrijenosSredstava(i, \"eizv\"));\n }\n this.DokumentUkupanIznos = new DokumentUkupanIznos(props.DokumentUkupanIznos, \"eizv\");\n this.RaspodjelaPdv = props.RaspodjelaPdv.map(i => new RaspodjelaPdv(i, \"eizv\"));\n this.DokumentPopust = props.DokumentPopust?.map(i => new DokumentPopust(i, \"eizv\"));\n this.DokumentTrosak = props.DokumentTrosak?.map(i => new DokumentTrosak(i, \"eizv\"));\n this.StavkaRacuna = props.StavkaRacuna.map(i => new StavkaRacuna(i));\n this.indikatorKopije = props.indikatorKopije;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Racun>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:vrstaDokumenta>${xmlEscape(this.vrstaDokumenta)}</eizv:vrstaDokumenta>`;\n res += `<eizv:valutaRacuna>${xmlEscape(this.valutaRacuna)}</eizv:valutaRacuna>`;\n if (this.datumDospijecaPlacanja) {\n res += `<eizv:datumDospijecaPlacanja>${xmlEscape(this.datumDospijecaPlacanja)}</eizv:datumDospijecaPlacanja>`;\n }\n res += `<eizv:vrstaPoslovnogProcesa>${xmlEscape(this.vrstaPoslovnogProcesa)}</eizv:vrstaPoslovnogProcesa>`;\n if (this.referencaNaUgovor) {\n res += `<eizv:referencaNaUgovor>${xmlEscape(this.referencaNaUgovor)}</eizv:referencaNaUgovor>`;\n }\n if (this.datumIsporuke) {\n res += `<eizv:datumIsporuke>${xmlEscape(this.datumIsporuke)}</eizv:datumIsporuke>`;\n }\n if (this.PrethodniRacun) {\n this.PrethodniRacun.forEach(i => {\n res += i.toXmlString();\n });\n }\n res += this.Izdavatelj.toXmlString();\n res += this.Primatelj.toXmlString();\n if (this.PrijenosSredstava) {\n this.PrijenosSredstava.forEach(i => (res += i.toXmlString()));\n }\n res += this.DokumentUkupanIznos.toXmlString();\n this.RaspodjelaPdv.forEach(i => (res += i.toXmlString()));\n if (this.DokumentPopust) {\n this.DokumentPopust.forEach(i => (res += i.toXmlString()));\n }\n if (this.DokumentTrosak) {\n this.DokumentTrosak.forEach(i => (res += i.toXmlString()));\n }\n this.StavkaRacuna.forEach(i => (res += i.toXmlString()));\n res += `<eizv:indikatorKopije>${this.indikatorKopije}</eizv:indikatorKopije>`;\n res += \"</eizv:Racun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IRacun {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, \"eizv:vrstaDokumenta\", FISK_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaRacuna: getElementContent(el, \"eizv:valutaRacuna\", FISK_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, \"eizv:datumDospijecaPlacanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, \"eizv:vrstaPoslovnogProcesa\", FISK_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, \"eizv:referencaNaUgovor\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, \"eizv:datumIsporuke\", FISK_NS, { regexKey: \"datum\" }),\n PrethodniRacun: extractOptionalElements(el, \"eizv:PrethodniRacun\", FISK_NS, PrethodniRacun.fromXmlElement),\n Izdavatelj: extractElement(el, \"eizv:Izdavatelj\", FISK_NS, Izdavatelj.fromXmlElement),\n Primatelj: extractElement(el, \"eizv:Primatelj\", FISK_NS, Primatelj.fromXmlElement),\n PrijenosSredstava: extractOptionalElements(el, \"eizv:PrijenosSredstava\", FISK_NS, PrijenosSredstava.fromXmlElement),\n DokumentUkupanIznos: extractElement(el, \"eizv:DokumentUkupanIznos\", FISK_NS, DokumentUkupanIznos.fromXmlElement),\n RaspodjelaPdv: extractElements(el, \"eizv:RaspodjelaPdv\", FISK_NS, RaspodjelaPdv.fromXmlElement),\n DokumentPopust: extractOptionalElements(el, \"eizv:DokumentPopust\", FISK_NS, DokumentPopust.fromXmlElement),\n DokumentTrosak: extractOptionalElements(el, \"eizv:DokumentTrosak\", FISK_NS, DokumentTrosak.fromXmlElement),\n StavkaRacuna: extractElements(el, \"eizv:StavkaRacuna\", FISK_NS, StavkaRacuna.fromXmlElement),\n indikatorKopije: getElementContent(el, \"eizv:indikatorKopije\", FISK_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IRacun {\n return {\n brojDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-1\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, getBusinessTermXpath(\"BT-2\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-3\", type), UBL_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaRacuna: getElementContent(el, getBusinessTermXpath(\"BT-5\", type), UBL_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, getBusinessTermXpath(\"BT-9\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, getBusinessTermXpath(\"BT-23\", type), UBL_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, getBusinessTermXpath(\"BT-12\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, getBusinessTermXpath(\"BT-72\", type), UBL_NS, { regexKey: \"datum\" }),\n PrethodniRacun: PrethodniRacun.fromUblElement(el, type),\n Izdavatelj: Izdavatelj.fromUblElement(el, type),\n Primatelj: Primatelj.fromUblElement(el, type),\n PrijenosSredstava: PrijenosSredstava.fromUblElement(el, type),\n DokumentUkupanIznos: DokumentUkupanIznos.fromUblElement(el, type),\n RaspodjelaPdv: RaspodjelaPdv.fromUblElement(el, type),\n DokumentPopust: DokumentPopust.fromUblElement(el, type),\n DokumentTrosak: DokumentTrosak.fromUblElement(el, type),\n StavkaRacuna: StavkaRacuna.fromUblElement(el, type),\n indikatorKopije: getOptionalElementContent(el, getBusinessTermXpath(\"HR-BT-1\", type), UBL_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n}\n\nexport class EvidentirajNaplatuOdgovor implements EvidentirajNaplatuOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajNaplatuOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajNaplatuOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajNaplatuOdgovor>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajNaplatuOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n\nexport class EvidentirajOdbijanjeOdgovor implements EvidentirajOdbijanjeOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajOdbijanjeOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajOdbijanjeOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajOdbijanjeOdgovor>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajOdbijanjeOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n\nexport class EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor implements EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor>\";\n return res;\n }\n\n static fromXmlElement(\n el: XmlElement,\n options?: { lenient?: boolean; errors?: ValidationError[] }\n ): IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n","export const FiskalizacijaService = {\n test: \"https://cis.porezna-uprava.hr:8511/FiskalizacijaService\",\n prod: \"https://cis.porezna-uprava.hr:8509/FiskalizacijaService\"\n};\n","import { pemToDer, SignedXml } from \"xml-crypto\";\nimport { Sha256 } from \"xml-crypto/lib/hash-algorithms.js\";\nimport type { SigningOptions } from \"../types\";\nimport { randomUUID } from \"node:crypto\";\nimport { usingXmlDocument } from \"./xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { FISK_NS } from \"../models/xml/const\";\nimport { extractPemCertificate, extractPemPrivateKey } from \"./cert\";\n\nexport class XmlSigner {\n private options: SigningOptions;\n\n private defaultOptions = {\n signatureAlgorithm: \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\",\n canonicalizationAlgorithm: \"http://www.w3.org/2001/10/xml-exc-c14n#\",\n digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\"\n };\n\n constructor(options: SigningOptions) {\n this.options = { ...this.defaultOptions, ...options };\n this.options.publicCert = extractPemCertificate(this.options.publicCert);\n this.options.privateKey = extractPemPrivateKey(this.options.privateKey);\n }\n\n static generateId(prefix?: string): string {\n return prefix ? `${prefix}-${randomUUID()}` : randomUUID();\n }\n\n private getXAdESContent(signatureId: string, signedPropertiesId: string, signingTime: string): string {\n let publicCertPem = this.options.publicCert;\n if (Buffer.isBuffer(publicCertPem)) {\n publicCertPem = publicCertPem.toString(\"utf8\");\n }\n const publicCertDer = pemToDer(publicCertPem);\n const publicCertDigest = new Sha256().getHash(publicCertDer);\n let res = \"\";\n res += `<xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#${signatureId}\">`;\n res += `<xades:SignedProperties Id=\"${signedPropertiesId}\">`;\n res += \"<xades:SignedSignatureProperties>\";\n res += `<xades:SigningTime>${signingTime}</xades:SigningTime>`;\n res += \"<xades:SigningCertificateV2><xades:Cert><xades:CertDigest>\";\n res += '<ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/>';\n res += `<ds:DigestValue>${publicCertDigest}</ds:DigestValue>`;\n res += \"</xades:CertDigest></xades:Cert></xades:SigningCertificateV2>\";\n res += \"</xades:SignedSignatureProperties>\";\n res += \"</xades:SignedProperties>\";\n res += \"</xades:QualifyingProperties>\";\n return res;\n }\n\n /**\n * Sign a fiscalization request XML document\n * @param xml - The XML string to sign\n * @param referenceURI - the value of the Id attribute to sign\n * @returns The signed XML string\n */\n signFiscalizationRequest(xml: string, referenceURI: string): string {\n const signatureId = XmlSigner.generateId(\"Sig\");\n const signedPropertiesId = XmlSigner.generateId(\"xades\");\n const signingTime = new Date().toISOString(); // TODO: provjeriti da li treba biti lokalno vrijeme ili može biti UTC\n\n // Create SignedXml instance\n const sig = new SignedXml({\n publicCert: this.options.publicCert,\n privateKey: this.options.privateKey,\n signatureAlgorithm: this.options.signatureAlgorithm,\n canonicalizationAlgorithm: this.options.canonicalizationAlgorithm,\n objects: [{ content: this.getXAdESContent(signatureId, signedPropertiesId, signingTime) }]\n });\n\n // Add reference to the entire document\n sig.addReference({\n xpath: `//*[@*[local-name()='id'] = '${referenceURI}']`,\n digestAlgorithm: this.options.digestAlgorithm,\n transforms: [\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\", \"http://www.w3.org/2001/10/xml-exc-c14n#\"]\n });\n\n // Add reference to the SignedProperties\n sig.addReference({\n xpath: `//*[@Id='${signedPropertiesId}']`,\n type: \"http://uri.etsi.org/01903#SignedProperties\",\n digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n transforms: [\"http://www.w3.org/2001/10/xml-exc-c14n#\"]\n });\n\n // Compute signature and insert it into the document\n sig.computeSignature(xml, {\n prefix: \"ds\",\n location: {\n reference: \"/*\",\n action: \"append\"\n },\n attrs: {\n Id: signatureId\n }\n });\n\n return sig.getSignedXml();\n }\n\n static isValidSignature(signedXml: string | Buffer): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert: string | Buffer): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert: string | Buffer, signature: XmlElement): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert?: string | Buffer, signature?: XmlElement): boolean {\n if (!signedXml) {\n throw new Error(\"Signed XML is required for signature validation\");\n }\n if (signature === undefined) {\n return usingXmlDocument(signedXml, doc => {\n const signature = doc.get(\"//ds:Signature\", FISK_NS) as XmlElement | null;\n if (!signature) {\n throw new Error(\"No signature found in the signed XML\");\n }\n if (publicCert === undefined) {\n const certElement = signature.get(\"ds:KeyInfo/ds:X509Data/ds:X509Certificate\", FISK_NS);\n if (!certElement) {\n throw new Error(\"No public certificate found in the signature\");\n }\n publicCert = certElement.content.trim();\n const pemCert = `-----BEGIN CERTIFICATE-----\\n${publicCert}\\n-----END CERTIFICATE-----`;\n return this.isValidSignature(signedXml, pemCert, signature);\n }\n return this.isValidSignature(signedXml, publicCert, signature);\n });\n }\n if (Buffer.isBuffer(signedXml)) {\n signedXml = signedXml.toString(\"utf8\");\n }\n const sig = new SignedXml({\n publicCert: extractPemCertificate(publicCert!)\n });\n sig.loadSignature(signature.toString({ format: false, noDeclaration: true }));\n try {\n return sig.checkSignature(signedXml);\n } catch (_error) {\n return false;\n }\n }\n}\n","export function extractPemCertificate(pem: string | Buffer): string {\n if (Buffer.isBuffer(pem)) {\n pem = pem.toString(\"utf8\");\n }\n const match = pem.match(/-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----/s);\n if (match && match[0]) {\n return match[0].trim();\n }\n throw new Error(\"Invalid PEM certificate format\");\n}\n\nexport function extractPemPrivateKey(pem: string | Buffer): string {\n if (Buffer.isBuffer(pem)) {\n pem = pem.toString(\"utf8\");\n }\n const match = pem.match(/-----BEGIN (?:RSA )?PRIVATE KEY-----(.*?)-----END (?:RSA )?PRIVATE KEY-----/s);\n if (match && match[0]) {\n return match[0].trim();\n }\n throw new Error(\"Invalid PEM private key format\");\n}\n","import { XmlSigner } from \"./util/signing\";\nimport { EvidentirajERacunOdgovor, EvidentirajERacunZahtjev } from \"./models/xml/fiskalizacija\";\nimport type {\n FiskalizacijaOptions,\n FiskalizacijaResult,\n IEvidentirajERacunZahtjev,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeZahtjev,\n IGreska\n} from \"./types\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport { FISK_NS } from \"./models/xml/const\";\nimport { usingXmlDocument } from \"./util/xml\";\nimport { postRequest } from \"./util/http\";\nimport { parseError, ValidationError } from \"./util/error\";\nimport {\n EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n EvidentirajNaplatuOdgovor,\n EvidentirajNaplatuZahtjev,\n EvidentirajOdbijanjeOdgovor,\n EvidentirajOdbijanjeZahtjev\n} from \"./models/xml/izvjestavanje\";\n\ninterface SerializableRequest {\n toXmlString(): string;\n _id: string;\n}\n\ninterface ParsedResponse {\n Odgovor: {\n prihvacenZahtjev: boolean;\n greska?: IGreska;\n };\n}\n\ntype RequestClass<TReqData, TReq extends SerializableRequest> = new (arg: TReqData) => TReq;\ntype ResponseClass<TRes extends ParsedResponse> = {\n fromXmlElement(elem: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): TRes;\n};\n\ninterface RequestConfig<TReqData, TReq extends SerializableRequest, TRes extends ParsedResponse> {\n RequestClass: RequestClass<TReqData, TReq>;\n ResponseClass: ResponseClass<TRes>;\n xpath: string;\n}\n\nexport class FiskalizacijaClient {\n private readonly signer: XmlSigner;\n private readonly options: FiskalizacijaOptions;\n\n constructor(options: FiskalizacijaOptions) {\n this.options = {\n timeout: 30000,\n headers: {\n \"Content-Type\": \"application/xml; charset=utf-8\",\n \"SOAPAction\": \"\"\n },\n ...options\n };\n\n this.signer = new XmlSigner(options);\n }\n\n private async execute<TReqData, TReq extends SerializableRequest, TRes extends ParsedResponse>(\n zahtjev: TReq | TReqData,\n config: RequestConfig<TReqData, TReq, TRes>\n ): Promise<FiskalizacijaResult<TReq, TRes>> {\n const result: FiskalizacijaResult<TReq, TRes> = { success: false };\n\n try {\n const requestInstance = zahtjev instanceof config.RequestClass ? zahtjev : new config.RequestClass(zahtjev as TReqData);\n\n result.reqObject = requestInstance;\n\n const signedXml = this.signer.signFiscalizationRequest(requestInstance.toXmlString(), requestInstance._id);\n const soap = this.generateSoapEnvelope(signedXml);\n result.soapReqRaw = soap;\n\n const { statusCode, data } = await postRequest(soap, this.options);\n result.httpStatusCode = statusCode;\n result.soapResRaw = data;\n\n try {\n result.soapResSignatureValid = XmlSigner.isValidSignature(result.soapResRaw);\n } catch (error) {\n result.soapResSignatureValid = false;\n result.error = parseError(error);\n }\n\n usingXmlDocument(XmlDocument.fromString(data), (doc: XmlDocument) => {\n const odgovorElement = doc.get(config.xpath, FISK_NS) as XmlElement;\n if (!odgovorElement) {\n throw new ValidationError(`HTTP ${statusCode} | ${config.xpath}`, data);\n }\n\n const resErrors: ValidationError[] = [];\n result.resObject = config.ResponseClass.fromXmlElement(odgovorElement, { lenient: true, errors: resErrors });\n\n if (resErrors.length > 0) {\n result.resErrors = resErrors.map(err => parseError(err));\n }\n\n result.success = result.resObject.Odgovor.prihvacenZahtjev && !result.resObject.Odgovor.greska;\n });\n } catch (error) {\n result.error = parseError(error);\n }\n\n return result;\n }\n\n async evidentirajERacun(zahtjev: IEvidentirajERacunZahtjev | EvidentirajERacunZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajERacunZahtjev,\n ResponseClass: EvidentirajERacunOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/efis:EvidentirajERacunOdgovor\"\n });\n }\n\n async evidentirajNaplatu(zahtjev: IEvidentirajNaplatuZahtjev | EvidentirajNaplatuZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajNaplatuZahtjev,\n ResponseClass: EvidentirajNaplatuOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajNaplatuOdgovor\"\n });\n }\n\n async evidentirajOdbijanje(zahtjev: IEvidentirajOdbijanjeZahtjev | EvidentirajOdbijanjeZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajOdbijanjeZahtjev,\n ResponseClass: EvidentirajOdbijanjeOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajOdbijanjeOdgovor\"\n });\n }\n\n async evidentirajIsporukuZaKojuNijeIzdanERacun(\n zahtjev: IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev | EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev\n ) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n ResponseClass: EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor\"\n });\n }\n\n private generateSoapEnvelope(body: string, withXmlDec: boolean = true): string {\n let res = \"\";\n if (withXmlDec) {\n res += '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';\n }\n res += '<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">';\n res += \"<soap:Body>\";\n res += body;\n res += \"</soap:Body>\";\n res += \"</soap:Envelope>\";\n return res;\n }\n}\n","import https from \"node:https\";\nimport { URL } from \"node:url\";\nimport type { FiskalizacijaOptions } from \"../types\";\n\nconst defaultOptions: Partial<FiskalizacijaOptions> = {\n timeout: 30000,\n allowSelfSigned: false\n};\n\nexport async function postRequest(data: string, userOptions: FiskalizacijaOptions): Promise<{ statusCode: number; data: string }> {\n const options = { ...defaultOptions, ...userOptions };\n const url = new URL(options.service);\n\n const agentOptions: https.AgentOptions = {\n rejectUnauthorized: !options.allowSelfSigned\n };\n\n if (options.ca) {\n agentOptions.ca = options.ca;\n }\n\n const httpsAgent = new https.Agent(agentOptions);\n\n return new Promise((resolve, reject) => {\n const req = https.request(\n {\n hostname: url.hostname,\n port: url.port || 443,\n path: url.pathname + url.search,\n method: \"POST\",\n headers: {\n ...options.headers,\n \"Content-Length\": Buffer.byteLength(data)\n },\n agent: httpsAgent,\n timeout: options.timeout\n },\n res => {\n let body = \"\";\n res.setEncoding(\"utf8\");\n res.on(\"data\", chunk => (body += chunk));\n res.on(\"end\", () => {\n resolve({\n statusCode: res.statusCode ?? 0,\n data: body\n });\n });\n }\n );\n\n req.on(\"error\", reject);\n req.on(\"timeout\", () => {\n req.destroy(new Error(\"Request timed out\"));\n });\n\n req.write(data);\n req.end();\n });\n}\n"],"mappings":"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ACA,wBACA,wBACA,aACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,mDACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,wBACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,wBACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,iDACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,4BACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,4BACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,2BACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,UACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,UACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,2BACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,+BACA,8BACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,+BACA,8BACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,uBACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,+BACA,2BACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,+BACA,2BACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,sBACN,MAAO,CACH,QAAS,CAAC,iBAAkB,gBAAiB,uBAAwB,uBAAwB,qBAAsB,eAAe,EAClI,WAAY,CAAC,iBAAkB,gBAAiB,uBAAwB,uBAAwB,qBAAsB,eAAe,CACzI,CACJ,CACJ,ECvoDO,IAAMC,GAAsD,CAC/D,OAAQ,CACJ,GAAI,OACJ,KAAM,yBACN,MAAO,CACH,QAAS,CAAC,EACV,WAAY,CAAC,CACjB,CACJ,EACA,OAAQ,CACJ,GAAI,OACJ,KAAM,oBACN,MAAO,CACH,QAAS,CAAC,EACV,WAA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","names":["getCurrentDateTimeString","now","pad","number","length","padMilliseconds","ms","year","month","day","hours","minutes","seconds","milliseconds","getEvidentirajERacunZahtjev","vrsta","eracun","getCurrentDateTimeString","getEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","racun","getEvidentirajNaplatuZahtjev","naplata","getEvidentirajOdbijanjeZahtjev","odbijanje","XmlDocument","XmlDocument","REGEX","BUSINESS_TERMS","BUSINESS_GROUPS","ValidationError","message","value","parseError","error","removePrefix","str","prefix","getBusinessTermXpath","id","type","group","term","BUSINESS_TERMS","getBusinessGroupXpath","BUSINESS_GROUPS","getElementContent","parentEl","tag","ns","options","regexKey","lenient","errors","el","ValidationError","REGEX","err","getOptionalElementContent","getElementContentNumber","content","num","getOptionalElementContentNumber","extractElement","fn","extractOptionalElement","extractElements","elements","extractOptionalElements","getOptionalAttributeValue","name","xpath","attrs","value","getAttributeValue","xmlEscape","val","usingXmlDocument","doc","XmlDocument","FISK_NS","getFiskNsPrefix","namespaceUri","UBL_NS","XmlDocument","Izdavatelj","args","prefix","res","xmlEscape","el","getFiskNsPrefix","getElementContent","FISK_NS","type","groupEl","getBusinessGroupXpath","UBL_NS","ValidationError","getBusinessTermXpath","Primatelj","PrijenosSredstava","getOptionalElementContent","groups","DokumentUkupanIznos","getElementContentNumber","getOptionalElementContentNumber","RaspodjelaPdv","hrfiskGroups","ArtiklIdentifikatorKlasifikacija","_type","getAttributeValue","getOptionalAttributeValue","Odgovor","props","Greska","options","lenient","errors","extractOptionalElement","greskaEl","DokumentPopust","DokumentTrosak","EvidentirajERacunZahtjev","_EvidentirajERacunZahtjev","args","ZaglavljeFiskalizacija","eracun","ERacun","xml","usingXmlDocument","XmlDocument","doc","el","FISK_NS","el2","ValidationError","getAttributeValue","extractElement","extractElements","res","xmlEscape","getElementContent","i","PrethodniERacun","Izdavatelj","Primatelj","PrijenosSredstava","DokumentUkupanIznos","RaspodjelaPdv","DokumentPopust","DokumentTrosak","StavkaERacuna","getOptionalElementContent","extractOptionalElements","type","getBusinessTermXpath","UBL_NS","groups","getBusinessGroupXpath","groupEl","ArtiklIdentifikatorKlasifikacija","getElementContentNumber","getOptionalElementContentNumber","EvidentirajERacunOdgovor","Odgovor","options","lenient","errors","odgovorEl","XmlDocument","EvidentirajNaplatuZahtjev","_EvidentirajNaplatuZahtjev","props","ZaglavljeIzvjestavanje","i","Naplata","res","FISK_NS","xmlEscape","xml","usingXmlDocument","XmlDocument","doc","el","el2","ValidationError","getAttributeValue","extractElement","extractElements","EvidentirajOdbijanjeZahtjev","_EvidentirajOdbijanjeZahtjev","Odbijanje","EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","_EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","ZaglavljeIsporuka","Racun","getElementContent","getElementContentNumber","PrethodniRacun","args","type","groups","getBusinessGroupXpath","UBL_NS","groupEl","getBusinessTermXpath","StavkaRacuna","ArtiklIdentifikatorKlasifikacija","getOptionalElementContentNumber","getOptionalElementContent","extractOptionalElements","Izdavatelj","Primatelj","PrijenosSredstava","DokumentUkupanIznos","RaspodjelaPdv","DokumentPopust","DokumentTrosak","EvidentirajNaplatuOdgovor","Odgovor","options","lenient","errors","odgovorEl","EvidentirajOdbijanjeOdgovor","EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor","FiskalizacijaService","getERacunFromUbl","doc","XmlDocument","usingXmlDocument","xmlDoc","el","type","ValidationError","ERacun","getRacunFromUbl","Racun","pemToDer","SignedXml","Sha256","randomUUID","extractPemCertificate","pem","match","extractPemPrivateKey","XmlSigner","_XmlSigner","options","extractPemCertificate","extractPemPrivateKey","prefix","randomUUID","signatureId","signedPropertiesId","signingTime","publicCertPem","publicCertDer","pemToDer","publicCertDigest","Sha256","res","xml","referenceURI","sig","SignedXml","signedXml","publicCert","signature","usingXmlDocument","doc","FISK_NS","certElement","pemCert","XmlDocument","https","URL","defaultOptions","postRequest","data","userOptions","options","url","agentOptions","httpsAgent","resolve","reject","req","res","body","chunk","FiskalizacijaClient","options","XmlSigner","zahtjev","config","result","requestInstance","signedXml","soap","statusCode","data","postRequest","error","parseError","usingXmlDocument","XmlDocument","doc","odgovorElement","FISK_NS","ValidationError","resErrors","err","EvidentirajERacunZahtjev","EvidentirajERacunOdgovor","EvidentirajNaplatuZahtjev","EvidentirajNaplatuOdgovor","EvidentirajOdbijanjeZahtjev","EvidentirajOdbijanjeOdgovor","EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor","body","withXmlDec","res"]}
1
+ {"version":3,"sources":["../src/util/time.ts","../src/builders/zahtjevi.ts","../src/builders/ubl.ts","../src/util/xml.ts","../src/models/xml/regex.ts","../src/models/xml/businessTerms.ts","../src/models/xml/businessGroups.ts","../src/util/error.ts","../src/models/xml/const.ts","../src/models/xml/fiskalizacija.ts","../src/models/xml/common.ts","../src/models/xml/izvjestavanje.ts","../src/models/api.ts","../src/util/signing.ts","../src/util/cert.ts","../src/fiskalizacija.ts","../src/util/http.ts"],"sourcesContent":["export function getCurrentDateTimeString() {\n const now = new Date();\n\n const pad = (number: number, length = 2) => String(number).padStart(length, \"0\");\n const padMilliseconds = (ms: number) => String(ms).padEnd(4, \"0\");\n\n const year = now.getFullYear();\n const month = pad(now.getMonth() + 1);\n const day = pad(now.getDate());\n const hours = pad(now.getHours());\n const minutes = pad(now.getMinutes());\n const seconds = pad(now.getSeconds());\n const milliseconds = padMilliseconds(now.getMilliseconds());\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n","import type {\n IERacun,\n IEvidentirajERacunZahtjev,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeZahtjev,\n INaplata,\n IOdbijanje,\n IRacun\n} from \"../types\";\nimport { getCurrentDateTimeString } from \"../util/time\";\n\nexport function getEvidentirajERacunZahtjev(vrsta: \"I\" | \"U\", eracun: IERacun | IERacun[]): IEvidentirajERacunZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString(),\n vrstaERacuna: vrsta\n },\n ERacun: Array.isArray(eracun) ? eracun : [eracun]\n };\n}\n\nexport function getEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev(racun: IRacun | IRacun[]): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString(),\n vrstaRacuna: \"IR\"\n },\n Racun: Array.isArray(racun) ? racun : [racun]\n };\n}\n\nexport function getEvidentirajNaplatuZahtjev(naplata: INaplata | INaplata[]): IEvidentirajNaplatuZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString()\n },\n Naplata: Array.isArray(naplata) ? naplata : [naplata]\n };\n}\n\nexport function getEvidentirajOdbijanjeZahtjev(odbijanje: IOdbijanje | IOdbijanje[]): IEvidentirajOdbijanjeZahtjev {\n return {\n _id: crypto.randomUUID(),\n Zaglavlje: {\n datumVrijemeSlanja: getCurrentDateTimeString()\n },\n Odbijanje: Array.isArray(odbijanje) ? odbijanje : [odbijanje]\n };\n}\n","import { XmlDocument } from \"libxml2-wasm\";\nimport type { IERacun, IRacun } from \"../types\";\nimport { usingXmlDocument } from \"../util/xml\";\nimport { ERacun, Racun } from \"../models\";\nimport { ValidationError } from \"../util/error\";\n\nexport function getERacunFromUbl(doc: string | Buffer | XmlDocument): IERacun {\n if (!(doc instanceof XmlDocument)) {\n return usingXmlDocument(doc, (xmlDoc: XmlDocument) => {\n return getERacunFromUbl(xmlDoc);\n });\n }\n const el = doc.root;\n const type = el.name;\n if (type !== \"Invoice\" && type !== \"CreditNote\") {\n throw new ValidationError(`Expected 'Invoice' or 'CreditNote' as root element, got '${type}'`, doc);\n }\n return ERacun.fromUblElement(el, type);\n}\n\nexport function getRacunFromUbl(doc: string | Buffer | XmlDocument): IRacun {\n if (!(doc instanceof XmlDocument)) {\n return usingXmlDocument(doc, (xmlDoc: XmlDocument) => {\n return getRacunFromUbl(xmlDoc);\n });\n }\n const el = doc.root;\n const type = el.name;\n if (type !== \"Invoice\" && type !== \"CreditNote\") {\n throw new ValidationError(`Expected 'Invoice' or 'CreditNote' as root element, got '${type}'`, doc);\n }\n return Racun.fromUblElement(el, type);\n}\n","import type { XmlElement } from \"libxml2-wasm\";\nimport type { RegexKey } from \"../models/xml/regex\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport { REGEX } from \"../models/xml/regex\";\nimport { BUSINESS_TERMS } from \"../models/xml/businessTerms\";\nimport { BUSINESS_GROUPS } from \"../models/xml/businessGroups\";\nimport { ValidationError } from \"./error\";\n\nfunction removePrefix(str: string, prefix: string) {\n return str.startsWith(prefix) ? str.slice(prefix.length + 1) : str;\n}\n\nexport function getBusinessTermXpath(\n id: keyof typeof BUSINESS_TERMS,\n type: \"Invoice\" | \"CreditNote\",\n group: keyof typeof BUSINESS_GROUPS | null = null\n): string {\n const term = BUSINESS_TERMS[id];\n if (group) {\n return removePrefix(term.xpath[type].join(\"/\"), getBusinessGroupXpath(group, type));\n }\n return term.xpath[type].join(\"/\");\n}\n\nexport function getBusinessGroupXpath(id: keyof typeof BUSINESS_GROUPS, type: \"Invoice\" | \"CreditNote\"): string {\n const term = BUSINESS_GROUPS[id];\n return term.xpath[type].join(\"/\");\n}\n\ninterface ExtractionOptions {\n regexKey?: RegexKey;\n lenient?: boolean;\n errors?: ValidationError[];\n}\n\nexport function getElementContent(parentEl: XmlElement, tag: string, ns: Record<string, string>, options: ExtractionOptions = {}): string {\n const { regexKey, lenient, errors } = options;\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n if (regexKey && !REGEX[regexKey].test(el.content)) {\n const err = new ValidationError(`Element '${tag}' ne zadovoljava regex ${REGEX[regexKey]}`, el.content);\n if (lenient) {\n if (errors) {\n errors.push(err);\n }\n } else {\n throw err;\n }\n }\n return el.content;\n}\n\nexport function getOptionalElementContent(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n options: ExtractionOptions = {}\n): string | undefined {\n const { regexKey, lenient, errors } = options;\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n return undefined;\n }\n if (regexKey && !REGEX[regexKey].test(el.content)) {\n const err = new ValidationError(`Element '${tag}' ne zadovoljava regex ${REGEX[regexKey]}`, el.content);\n if (lenient) {\n if (errors) {\n errors.push(err);\n }\n } else {\n throw err;\n }\n }\n return el.content;\n}\n\nexport function getElementContentNumber(parentEl: XmlElement, tag: string, ns: Record<string, string>, options: ExtractionOptions = {}): number {\n const content = getElementContent(parentEl, tag, ns, options);\n const num = Number(content);\n if (isNaN(num)) {\n const err = new ValidationError(`Element '${tag}' ne sadrži valjani broj: ${content}`, content);\n if (options.lenient) {\n if (options.errors) {\n options.errors.push(err);\n }\n return 0;\n } else {\n throw err;\n }\n }\n return num;\n}\n\nexport function getOptionalElementContentNumber(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n options: ExtractionOptions = {}\n): number | undefined {\n const content = getOptionalElementContent(parentEl, tag, ns, options);\n if (content === undefined) {\n return undefined;\n }\n const num = Number(content);\n if (isNaN(num)) {\n const err = new ValidationError(`Element '${tag}' ne sadrži valjani broj: ${content}`, content);\n if (options.lenient) {\n if (options.errors) {\n options.errors.push(err);\n }\n return undefined;\n } else {\n throw err;\n }\n }\n return num;\n}\n\nexport function extractElement<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T {\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n return fn(el);\n}\n\nexport function extractOptionalElement<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T | undefined {\n const el = parentEl.get(tag, ns) as XmlElement | null;\n if (!el) {\n return undefined;\n }\n return fn(el);\n}\n\nexport function extractElements<T>(parentEl: XmlElement, tag: string, ns: Record<string, string>, fn: (el: XmlElement) => T): T[] {\n const elements = parentEl.find(tag, ns);\n if (!elements || elements.length === 0) {\n throw new ValidationError(`Element '${tag}' nije pronađen u elementu '${parentEl.prefix}:${parentEl.name}'`, undefined);\n }\n return elements.map(el => fn(el as XmlElement));\n}\n\nexport function extractOptionalElements<T>(\n parentEl: XmlElement,\n tag: string,\n ns: Record<string, string>,\n fn: (el: XmlElement) => T\n): T[] | undefined {\n const elements = parentEl.find(tag, ns);\n if (!elements || elements.length === 0) {\n return undefined;\n }\n return elements.map(el => fn(el as XmlElement));\n}\n\nexport function getOptionalAttributeValue(\n el: XmlElement,\n name: string,\n ns: Record<string, string>,\n regexKey?: keyof typeof REGEX\n): string | undefined {\n const xpath = `@${name}`;\n const attrs = el.find(xpath, ns);\n if (!attrs || attrs.length === 0) {\n return undefined;\n }\n const value = attrs[0].content;\n if (regexKey && !REGEX[regexKey].test(value)) {\n throw new ValidationError(`Atribut '${name}' ne zadovoljava regex ${REGEX[regexKey]}`, value);\n }\n return value;\n}\n\nexport function getAttributeValue(el: XmlElement, name: string, ns: Record<string, string>, regexKey?: keyof typeof REGEX): string {\n const xpath = `@${name}`;\n const attrs = el.find(xpath, ns);\n if (!attrs || attrs.length === 0) {\n throw new ValidationError(`Atribut '${name}' nije pronađen u elementu '${el.prefix}:${el.name}'`, undefined);\n }\n const value = attrs[0].content;\n if (regexKey && !REGEX[regexKey].test(value)) {\n throw new ValidationError(`Atribut '${name}' ne zadovoljava regex ${REGEX[regexKey]}`, value);\n }\n return value;\n}\n\nexport function xmlEscape(val: string): string {\n if (!val) {\n return \"\";\n }\n return val.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n}\n\nexport function usingXmlDocument<T>(doc: string | Uint8Array | XmlDocument, fn: (r: XmlDocument) => T): T {\n if (!doc) {\n throw new Error(\"XML document is required for processing\");\n }\n if (typeof doc === \"string\") {\n doc = XmlDocument.fromString(doc);\n } else if (doc instanceof Uint8Array) {\n doc = XmlDocument.fromBuffer(doc);\n }\n try {\n return fn(doc);\n } finally {\n doc.dispose();\n }\n}\n","export const REGEX = {\n decimal: /^[\\-+]?[0-9]+(\\.[0-9]+)?$/,\n datumVrijemeDeci: /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{4}$/,\n datumVrijeme: /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/,\n datum: /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/,\n vrstaERacuna: /^(I|U|IR)$/,\n uuid: /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,\n jedinicaMjere: /^[A-Za-z0-9]{2,3}$/,\n izuzecePdv: /^[A-Za-z0-9-]{1,20}$/,\n valuta: /^[A-Za-z]{3}$/,\n vrstaDokumenta: /^[0-9]{2,3}$/,\n nacinPlacanja: /^[TOZ]$/,\n kategorijaPdv: /^[A-Za-z]{1,2}$/,\n klasifikacijaArtikla: /^[A-Za-z]{2,3}$/,\n tekst3: /^.{1,3}$/,\n tekst10: /^.{1,10}$/,\n tekst20: /^.{1,20}$/,\n tekst25: /^.{1,25}$/,\n tekst34: /^.{1,34}$/,\n tekst35: /^.{1,35}$/,\n tekst50: /^.{1,50}$/,\n tekst100: /^.{1,100}$/,\n tekst120: /^.{1,120}$/,\n tekst200: /^.{1,200}$/,\n tekst300: /^.{1,300}$/,\n tekst500: /^.{1,500}$/,\n tekst1024: /^.{1,1024}$/,\n decimal2: /^[+-]?([0-9]+(\\.[0-9]{1,2})?|\\.[0-9]{1,2})$/,\n decimalPositive2: /^[+]?([0-9]+(\\.[0-9]{1,2})?|\\.[0-9]{1,2})$/,\n greska: /^(S001|S002|S003|S004|S005|S006|S007|S008|S009|S010|S011|S012)$/ /* 9 i 10 samo za izvještavanje */,\n razlogOdbijanja: /^[NUO]$/,\n drzava: /^[A-Z]{2}$/,\n shemaIdentifikator: /^[0-9]{4}$/,\n boolean: /^(true|false)$/,\n redniBroj: /^(0|[1-9][0-9]*)$/,\n hrKategorijaPdv: /^([Hh][Rr]):(([Pp][Dd][Vv][0-9]{1,2})|([A-Za-z]{1,10}))$/,\n razlogPopusta: /^[0-9]{1,3}$/\n};\n\nexport type RegexKey = keyof typeof REGEX;\n","import type { IBusinessTermXpath } from \"../../types\";\n\nexport const BUSINESS_TERMS: Record<string, IBusinessTermXpath> = {\n \"BT-1\": {\n id: \"BT-1\",\n name: \"Broj računa\",\n xpath: {\n Invoice: [\"cbc:ID\"],\n CreditNote: [\"cbc:ID\"]\n }\n },\n \"BT-2\": {\n id: \"BT-2\",\n name: \"Datum izdavanja računa\",\n xpath: {\n Invoice: [\"cbc:IssueDate\"],\n CreditNote: [\"cbc:IssueDate\"]\n }\n },\n \"BT-3\": {\n id: \"BT-3\",\n name: \"Kod tipa računa\",\n xpath: {\n Invoice: [\"cbc:InvoiceTypeCode\"],\n CreditNote: [\"cbc:CreditNoteTypeCode\"]\n }\n },\n \"BT-5\": {\n id: \"BT-5\",\n name: \"Kod valute računa\",\n xpath: {\n Invoice: [\"cbc:DocumentCurrencyCode\"],\n CreditNote: [\"cbc:DocumentCurrencyCode\"]\n }\n },\n \"BT-6\": {\n id: \"BT-6\",\n name: \"Kod računovodstvene valute za PDV\",\n xpath: {\n Invoice: [\"cbc:TaxCurrencyCode\"],\n CreditNote: [\"cbc:TaxCurrencyCode\"]\n }\n },\n \"BT-7\": {\n id: \"BT-7\",\n name: \"Datum nastanka obveze poreza na dodanu vrijednost\",\n xpath: {\n Invoice: [\"cbc:TaxPointDate\"],\n CreditNote: [\"cbc:TaxPointDate\"]\n }\n },\n \"BT-8\": {\n id: \"BT-8\",\n name: \"Kod datuma nastanka obveze poreza na dodanu vrijednost\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:DescriptionCode\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:DescriptionCode\"]\n }\n },\n \"BT-9\": {\n id: \"BT-9\",\n name: \"Datum dospijeća plaćanja\",\n xpath: {\n Invoice: [\"cbc:DueDate\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentDueDate\"]\n }\n },\n \"BT-10\": {\n id: \"BT-10\",\n name: \"Interni identifikator kupca\",\n xpath: {\n Invoice: [\"cbc:BuyerReference\"],\n CreditNote: [\"cbc:BuyerReference\"]\n }\n },\n \"BT-11\": {\n id: \"BT-11\",\n name: \"Referenca projekta\",\n xpath: {\n Invoice: [\"cac:ProjectReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-12\": {\n id: \"BT-12\",\n name: \"Referenca ugovora\",\n xpath: {\n Invoice: [\"cac:ContractDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:ContractDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-13\": {\n id: \"BT-13\",\n name: \"Referenca narudžbenice\",\n xpath: {\n Invoice: [\"cac:OrderReference\", \"cbc:ID\"],\n CreditNote: [\"cac:OrderReference\", \"cbc:ID\"]\n }\n },\n \"BT-14\": {\n id: \"BT-14\",\n name: \"Referenca naloga za isporuku (eng. Sales order)\",\n xpath: {\n Invoice: [\"cac:OrderReference\", \"cbc:SalesOrderID\"],\n CreditNote: [\"cac:OrderReference\", \"cbc:SalesOrderID\"]\n }\n },\n \"BT-15\": {\n id: \"BT-15\",\n name: \"Referenca primke\",\n xpath: {\n Invoice: [\"cac:ReceiptDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:ReceiptDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-16\": {\n id: \"BT-16\",\n name: \"Referenca otpremnice\",\n xpath: {\n Invoice: [\"cac:DespatchDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:DespatchDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-17\": {\n id: \"BT-17\",\n name: \"Referenca javnog nadmetanja ili grupe/lota\",\n xpath: {\n Invoice: [\"cac:OriginatorDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:OriginatorDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-18\": {\n id: \"BT-18\",\n name: \"Identifikator fakturiranog objekta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-19\": {\n id: \"BT-19\",\n name: \"Računovodstvena oznaka kupca\",\n xpath: {\n Invoice: [\"cbc:AccountingCost\"],\n CreditNote: [\"cbc:AccountingCost\"]\n }\n },\n \"BT-20\": {\n id: \"BT-20\",\n name: \"Uvjeti plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentTerms\", \"cbc:Note\"],\n CreditNote: [\"cac:PaymentTerms\", \"cbc:Note\"]\n }\n },\n \"BT-21\": {\n id: \"BT-21\",\n name: \"Kod predmeta napomene za račun\",\n xpath: {\n Invoice: [\"cbc:Note\"],\n CreditNote: [\"cbc:Note\"]\n }\n },\n \"BT-22\": {\n id: \"BT-22\",\n name: \"Napomena za račun\",\n xpath: {\n Invoice: [\"cbc:Note\"],\n CreditNote: [\"cbc:Note\"]\n }\n },\n \"BT-23\": {\n id: \"BT-23\",\n name: \"Tip poslovnoga procesa\",\n xpath: {\n Invoice: [\"cbc:ProfileID\"],\n CreditNote: [\"cbc:ProfileID\"]\n }\n },\n \"BT-24\": {\n id: \"BT-24\",\n name: \"Identifikator specifikacije\",\n xpath: {\n Invoice: [\"cbc:CustomizationID\"],\n CreditNote: [\"cbc:CustomizationID\"]\n }\n },\n \"BT-25\": {\n id: \"BT-25\",\n name: \"Referenca prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-26\": {\n id: \"BT-26\",\n name: \"Datum izdavanja prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:IssueDate\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:IssueDate\"]\n }\n },\n \"BT-27\": {\n id: \"BT-27\",\n name: \"Ime prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"]\n }\n },\n \"BT-28\": {\n id: \"BT-28\",\n name: \"Trgovački naziv prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-29\": {\n id: \"BT-29\",\n name: \"Identifikator prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-30\": {\n id: \"BT-30\",\n name: \"Identifikator pravne registracije prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-31\": {\n id: \"BT-31\",\n name: \"Identifikator prodavatelja za PDV\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-32\": {\n id: \"BT-32\",\n name: \"Identifikator porezne registracije prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-33\": {\n id: \"BT-33\",\n name: \"Dodatni pravni podaci prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyLegalForm\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyLegalForm\"]\n }\n },\n \"BT-34\": {\n id: \"BT-34\",\n name: \"Elektronička adresa prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cbc:EndpointID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cbc:EndpointID\"]\n }\n },\n \"BT-35\": {\n id: \"BT-35\",\n name: \"1. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-36\": {\n id: \"BT-36\",\n name: \"2. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-37\": {\n id: \"BT-37\",\n name: \"Grad prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-38\": {\n id: \"BT-38\",\n name: \"Poštanski broj prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-39\": {\n id: \"BT-39\",\n name: \"Oznaka pokrajine države prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-40\": {\n id: \"BT-40\",\n name: \"Kod države prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-41\": {\n id: \"BT-41\",\n name: \"Kontaktna točka prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"]\n }\n },\n \"BT-42\": {\n id: \"BT-42\",\n name: \"Broj telefona za kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"]\n }\n },\n \"BT-43\": {\n id: \"BT-43\",\n name: \"Adresa e-pošte za kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"]\n }\n },\n \"BT-44\": {\n id: \"BT-44\",\n name: \"Ime kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:RegistrationName\"]\n }\n },\n \"BT-45\": {\n id: \"BT-45\",\n name: \"Trgovački naziv kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-46\": {\n id: \"BT-46\",\n name: \"Identifikator kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-47\": {\n id: \"BT-47\",\n name: \"Identifikator pravne registracije kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-48\": {\n id: \"BT-48\",\n name: \"Identifikator kupca za PDV\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-49\": {\n id: \"BT-49\",\n name: \"Elektronička adresa kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cbc:EndpointID\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cbc:EndpointID\"]\n }\n },\n \"BT-50\": {\n id: \"BT-50\",\n name: \"Redak adrese kupca 1\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-51\": {\n id: \"BT-51\",\n name: \"Redak adrese kupca 2\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-52\": {\n id: \"BT-52\",\n name: \"Grad kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-53\": {\n id: \"BT-53\",\n name: \"Poštanski broj kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-54\": {\n id: \"BT-54\",\n name: \"Županija kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-55\": {\n id: \"BT-55\",\n name: \"Šifra države kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-56\": {\n id: \"BT-56\",\n name: \"Broj telefona za kontakt kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Name\"]\n }\n },\n \"BT-57\": {\n id: \"BT-57\",\n name: \"Telefonski broj kontakta kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:Telephone\"]\n }\n },\n \"BT-58\": {\n id: \"BT-58\",\n name: \"Adresa e-pošte za kontakt kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\", \"cbc:ElectronicMail\"]\n }\n },\n \"BT-59\": {\n id: \"BT-59\",\n name: \"Ime primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-60\": {\n id: \"BT-60\",\n name: \"Identifikator primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-61\": {\n id: \"BT-61\",\n name: \"Identifikator pravne registracije primatelja plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:PayeeParty\", \"cac:PartyLegalEntity\", \"cbc:CompanyID\"]\n }\n },\n \"BT-62\": {\n id: \"BT-62\",\n name: \"Ime poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-63\": {\n id: \"BT-63\",\n name: \"Identifikator za PDV poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PartyTaxScheme\", \"cbc:CompanyID\"]\n }\n },\n \"BT-64\": {\n id: \"BT-64\",\n name: \"1. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:StreetName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:StreetName\"]\n }\n },\n \"BT-65\": {\n id: \"BT-65\",\n name: \"2. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-66\": {\n id: \"BT-66\",\n name: \"Grad poreznog zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CityName\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CityName\"]\n }\n },\n \"BT-67\": {\n id: \"BT-67\",\n name: \"Poštanski broj poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:PostalZone\"]\n }\n },\n \"BT-68\": {\n id: \"BT-68\",\n name: \"Pokrajina poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-69\": {\n id: \"BT-69\",\n name: \"Kod države poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-70\": {\n id: \"BT-70\",\n name: \"Ime strane primatelja isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryParty\", \"cac:PartyName\", \"cbc:Name\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryParty\", \"cac:PartyName\", \"cbc:Name\"]\n }\n },\n \"BT-71\": {\n id: \"BT-71\",\n name: \"Identifikator lokacije isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cbc:ID\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cbc:ID\"]\n }\n },\n \"BT-72\": {\n id: \"BT-72\",\n name: \"Stvarni datum isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cbc:ActualDeliveryDate\"],\n CreditNote: [\"cac:Delivery\", \"cbc:ActualDeliveryDate\"]\n }\n },\n \"BT-73\": {\n id: \"BT-73\",\n name: \"Početni datum obračunskog razdoblja\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:StartDate\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:StartDate\"]\n }\n },\n \"BT-74\": {\n id: \"BT-74\",\n name: \"Završni datum obračunskog razdoblja\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\", \"cbc:EndDate\"],\n CreditNote: [\"cac:InvoicePeriod\", \"cbc:EndDate\"]\n }\n },\n \"BT-75\": {\n id: \"BT-75\",\n name: \"1. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:StreetName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:StreetName\"]\n }\n },\n \"BT-76\": {\n id: \"BT-76\",\n name: \"2. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:AdditionalStreetName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:AdditionalStreetName\"]\n }\n },\n \"BT-77\": {\n id: \"BT-77\",\n name: \"Grad isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CityName\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CityName\"]\n }\n },\n \"BT-78\": {\n id: \"BT-78\",\n name: \"Poštanski broj isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:PostalZone\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:PostalZone\"]\n }\n },\n \"BT-79\": {\n id: \"BT-79\",\n name: \"Pokrajina države isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CountrySubentity\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cbc:CountrySubentity\"]\n }\n },\n \"BT-80\": {\n id: \"BT-80\",\n name: \"Kod države isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:Country\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:Country\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-81\": {\n id: \"BT-81\",\n name: \"Kod načina plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:PaymentMeansCode\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentMeansCode\"]\n }\n },\n \"BT-82\": {\n id: \"BT-82\",\n name: \"Tekst načina plaćanja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:InstructionNote\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:InstructionNote\"]\n }\n },\n \"BT-83\": {\n id: \"BT-83\",\n name: \"Podaci o doznaci\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cbc:PaymentID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cbc:PaymentID\"]\n }\n },\n \"BT-84\": {\n id: \"BT-84\",\n name: \"Identifikator računa za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:ID\"]\n }\n },\n \"BT-85\": {\n id: \"BT-85\",\n name: \"Naziv računa za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:Name\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cbc:Name\"]\n }\n },\n \"BT-86\": {\n id: \"BT-86\",\n name: \"Identifikator pružanja platnih usluga\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cac:FinancialInstitutionBranch\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\", \"cac:FinancialInstitutionBranch\", \"cbc:ID\"]\n }\n },\n \"BT-87\": {\n id: \"BT-87\",\n name: \"Primarni broj računa platne kartice\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:PrimaryAccountNumberID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:PrimaryAccountNumberID\"]\n }\n },\n \"BT-88\": {\n id: \"BT-88\",\n name: \"Ime imatelja platne kartice\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:HolderName\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\", \"cbc:HolderName\"]\n }\n },\n \"BT-89\": {\n id: \"BT-89\",\n name: \"Identifikator reference ovlaštenja\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cbc:ID\"]\n }\n },\n \"BT-90\": {\n id: \"BT-90\",\n name: \"Bankovni identifikator vjerovnika\",\n xpath: {\n Invoice: [\n \"cac:AccountingSupplierParty\",\n \"cac:Party\",\n \"cac:PartyIdentification\",\n \"cbc:ID\",\n \"cac:PayeeParty\",\n \"cac:PartyIdentification\",\n \"cbc:ID\"\n ],\n CreditNote: [\n \"cac:AccountingSupplierParty\",\n \"cac:Party\",\n \"cac:PartyIdentification\",\n \"cbc:ID\",\n \"cac:PayeeParty\",\n \"cac:PartyIdentification\",\n \"cbc:ID\"\n ]\n }\n },\n \"BT-91\": {\n id: \"BT-91\",\n name: \"Identifikator računa za terećenje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cac:PayerFinancialAccount\", \"cbc:ID\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\", \"cac:PayerFinancialAccount\", \"cbc:ID\"]\n }\n },\n \"BT-92\": {\n id: \"BT-92\",\n name: \"Iznos popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-93\": {\n id: \"BT-93\",\n name: \"Osnovica popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-94\": {\n id: \"BT-94\",\n name: \"Postotak popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-95\": {\n id: \"BT-95\",\n name: \"Kod kategorije PDV-a za popust na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-96\": {\n id: \"BT-96\",\n name: \"Stopa PDV-a popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-97\": {\n id: \"BT-97\",\n name: \"Razlog popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-98\": {\n id: \"BT-98\",\n name: \"Kod razloga popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-99\": {\n id: \"BT-99\",\n name: \"Iznos troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-100\": {\n id: \"BT-100\",\n name: \"Osnovica troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-101\": {\n id: \"BT-101\",\n name: \"Postotak troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-102\": {\n id: \"BT-102\",\n name: \"Kod kategorije PDV-a troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-103\": {\n id: \"BT-103\",\n name: \"Stopa PDV-a troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-104\": {\n id: \"BT-104\",\n name: \"Razlog troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-105\": {\n id: \"BT-105\",\n name: \"Kod razloga troška na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-106\": {\n id: \"BT-106\",\n name: \"Zbroj neto iznosa stavki računa\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:LineExtensionAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:LineExtensionAmount\"]\n }\n },\n \"BT-107\": {\n id: \"BT-107\",\n name: \"Zbroj popusta na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:AllowanceTotalAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:AllowanceTotalAmount\"]\n }\n },\n \"BT-108\": {\n id: \"BT-108\",\n name: \"Zbroj troškova na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:ChargeTotalAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:ChargeTotalAmount\"]\n }\n },\n \"BT-109\": {\n id: \"BT-109\",\n name: \"Ukupni iznos računa bez PDV-a\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:TaxExclusiveAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:TaxExclusiveAmount\"]\n }\n },\n \"BT-110\": {\n id: \"BT-110\",\n name: \"Ukupni iznos PDV-a za račun\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-111\": {\n id: \"BT-111\",\n name: \"Ukupni iznos PDV-a za račun u računovodstvenoj valuti\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-112\": {\n id: \"BT-112\",\n name: \"Ukupni iznos računa s PDV-om\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:TaxInclusiveAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:TaxInclusiveAmount\"]\n }\n },\n \"BT-113\": {\n id: \"BT-113\",\n name: \"Plaćen iznos\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PrepaidAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PrepaidAmount\"]\n }\n },\n \"BT-114\": {\n id: \"BT-114\",\n name: \"Iznos zaokruživanja\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PayableRoundingAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PayableRoundingAmount\"]\n }\n },\n \"BT-115\": {\n id: \"BT-115\",\n name: \"Iznos koji dospijeva na plaćanje\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\", \"cbc:PayableAmount\"],\n CreditNote: [\"cac:LegalMonetaryTotal\", \"cbc:PayableAmount\"]\n }\n },\n \"BT-116\": {\n id: \"BT-116\",\n name: \"Oporezivi iznos kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxableAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxableAmount\"]\n }\n },\n \"BT-117\": {\n id: \"BT-117\",\n name: \"Iznos poreza kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cbc:TaxAmount\"]\n }\n },\n \"BT-118\": {\n id: \"BT-118\",\n name: \"Kod kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-119\": {\n id: \"BT-119\",\n name: \"Stopa kategorije PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-120\": {\n id: \"BT-120\",\n name: \"Tekst razloga za oslobođenje od PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"BT-121\": {\n id: \"BT-121\",\n name: \"Kod razloga za oslobođenje od PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"BT-122\": {\n id: \"BT-122\",\n name: \"Referenca popratnog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:ID\"]\n }\n },\n \"BT-123\": {\n id: \"BT-123\",\n name: \"Opis popratnog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cbc:DocumentDescription\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cbc:DocumentDescription\"]\n }\n },\n \"BT-124\": {\n id: \"BT-124\",\n name: \"Lokacija vanjskog dokumenta\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cac:ExternalReference\", \"cbc:URI\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cac:ExternalReference\", \"cbc:URI\"]\n }\n },\n \"BT-125\": {\n id: \"BT-125\",\n name: \"Priloženi dokument\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cbc:EmbeddedDocumentBinaryObject\"],\n CreditNote: [\"cac:AdditionalDocumentReference\", \"cac:Attachment\", \"cbc:EmbeddedDocumentBinaryObject\"]\n }\n },\n \"BT-126\": {\n id: \"BT-126\",\n name: \"Identifikator stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:ID\"]\n }\n },\n \"BT-127\": {\n id: \"BT-127\",\n name: \"Napomena stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:Note\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:Note\"]\n }\n },\n \"BT-128\": {\n id: \"BT-128\",\n name: \"Identifikator objekta stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:DocumentReference\", \"cbc:DocumentTypeCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:DocumentReference\", \"cbc:DocumentTypeCode\"]\n }\n },\n \"BT-129\": {\n id: \"BT-129\",\n name: \"Obračunata količina\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:InvoicedQuantity\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:CreditedQuantity\"]\n }\n },\n \"BT-130\": {\n id: \"BT-130\",\n name: \"Kod jedinice mjere obračunate količine\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:InvoicedQuantity\", \"@unitCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:CreditedQuantity\", \"@unitCode\"]\n }\n },\n \"BT-131\": {\n id: \"BT-131\",\n name: \"Neto iznos stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:LineExtensionAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:LineExtensionAmount\"]\n }\n },\n \"BT-132\": {\n id: \"BT-132\",\n name: \"Referencirana referenca stavke narudžbenice\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:OrderLineReference\", \"cbc:LineID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:OrderLineReference\", \"cbc:LineID\"]\n }\n },\n \"BT-133\": {\n id: \"BT-133\",\n name: \"Računovodstvena oznaka kupca na stavci računa (mjesto troška)\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cbc:AccountingCost\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cbc:AccountingCost\"]\n }\n },\n \"BT-134\": {\n id: \"BT-134\",\n name: \"Početni datum obračunskog razdoblja stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\", \"cbc:StartDate\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\", \"cbc:StartDate\"]\n }\n },\n \"BT-135\": {\n id: \"BT-135\",\n name: \"Završni datum obračunskog razdoblja stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\", \"cbc:EndDate\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\", \"cbc:EndDate\"]\n }\n },\n \"BT-136\": {\n id: \"BT-136\",\n name: \"Iznos popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-137\": {\n id: \"BT-137\",\n name: \"Osnovica iznosa popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-138\": {\n id: \"BT-138\",\n name: \"Postotak popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-139\": {\n id: \"BT-139\",\n name: \"Razlog popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-140\": {\n id: \"BT-140\",\n name: \"Kod razloga popusta na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-141\": {\n id: \"BT-141\",\n name: \"Iznos troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-142\": {\n id: \"BT-142\",\n name: \"Osnovica iznosa troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-143\": {\n id: \"BT-143\",\n name: \"Postotak troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:MultiplierFactorNumeric\"]\n }\n },\n \"BT-144\": {\n id: \"BT-144\",\n name: \"Razlog troška na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReason\"]\n }\n },\n \"BT-145\": {\n id: \"BT-145\",\n name: \"Kod razloga za trošak na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\", \"cbc:AllowanceChargeReasonCode\"]\n }\n },\n \"BT-146\": {\n id: \"BT-146\",\n name: \"Neto cijena artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:PriceAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:PriceAmount\"]\n }\n },\n \"BT-147\": {\n id: \"BT-147\",\n name: \"Popust na cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:Amount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:Amount\"]\n }\n },\n \"BT-148\": {\n id: \"BT-148\",\n name: \"Bruto cijena artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cac:AllowanceCharge\", \"cbc:BaseAmount\"]\n }\n },\n \"BT-149\": {\n id: \"BT-149\",\n name: \"Jedinična količina za cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:BaseQuantity\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:BaseQuantity\"]\n }\n },\n \"BT-150\": {\n id: \"BT-150\",\n name: \"Kod jedinice mjere za jediničnu količinu za cijenu artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\", \"cbc:BaseQuantity\", \"@unitCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\", \"cbc:BaseQuantity\", \"@unitCode\"]\n }\n },\n \"BT-151\": {\n id: \"BT-151\",\n name: \"Kod kategorije PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:ID\"]\n }\n },\n \"BT-152\": {\n id: \"BT-152\",\n name: \"Stopa PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Percent\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Percent\"]\n }\n },\n \"BT-153\": {\n id: \"BT-153\",\n name: \"Naziv artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cbc:Name\"]\n }\n },\n \"BT-154\": {\n id: \"BT-154\",\n name: \"Opis artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cbc:Description\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cbc:Description\"]\n }\n },\n \"BT-155\": {\n id: \"BT-155\",\n name: \"Prodavateljev identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:SellersItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:SellersItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-156\": {\n id: \"BT-156\",\n name: \"Kupčev identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:BuyersItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:BuyersItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-157\": {\n id: \"BT-157\",\n name: \"Standardni identifikator artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:StandardItemIdentification\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:StandardItemIdentification\", \"cbc:ID\"]\n }\n },\n \"BT-158\": {\n id: \"BT-158\",\n name: \"Identifikator klasifikacije artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:CommodityClassification\", \"cbc:ItemClassificationCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:CommodityClassification\", \"cbc:ItemClassificationCode\"]\n }\n },\n \"BT-159\": {\n id: \"BT-159\",\n name: \"Zemlja podrijetla artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:OriginCountry\", \"cbc:IdentificationCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:OriginCountry\", \"cbc:IdentificationCode\"]\n }\n },\n \"BT-160\": {\n id: \"BT-160\",\n name: \"Ime atributa artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Name\"]\n }\n },\n \"BT-161\": {\n id: \"BT-161\",\n name: \"Vrijednost atributa artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Value\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\", \"cbc:Value\"]\n }\n },\n \"BT-162\": {\n id: \"BT-162\",\n name: \"3. redak adrese prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-163\": {\n id: \"BT-163\",\n name: \"Redak adrese kupca 3\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-164\": {\n id: \"BT-164\",\n name: \"3. redak adrese poreznoga zastupnika\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"BT-165\": {\n id: \"BT-165\",\n name: \"3. redak adrese isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:AddressLine\", \"cbc:Line\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\", \"cac:AddressLine\", \"cbc:Line\"]\n }\n },\n \"HR-BT-1\": {\n id: \"HR-BT-1\",\n name: \"Indikator kopije računa\",\n xpath: {\n Invoice: [\"cbc:CopyIndicator\"],\n CreditNote: [\"cbc:CopyIndicator\"]\n }\n },\n \"HR-BT-2\": {\n id: \"HR-BT-2\",\n name: \"Vrijeme izdavanja računa\",\n xpath: {\n Invoice: [\"cbc:IssueTime\"],\n CreditNote: [\"cbc:IssueTime\"]\n }\n },\n \"HR-BT-3\": {\n id: \"HR-BT-3\",\n name: \"Opis prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:DocumentDescription\"],\n CreditNote: [\"cac:BillingReference\", \"cac:InvoiceDocumentReference\", \"cbc:DocumentDescription\"]\n }\n },\n \"HR-BT-4\": {\n id: \"HR-BT-4\",\n name: \"Oznaka operatera\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:Name\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:Name\"]\n }\n },\n \"HR-BT-5\": {\n id: \"HR-BT-5\",\n name: \"OIB operatera\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:ID\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:SellerContact\", \"cbc:ID\"]\n }\n },\n \"HR-BT-6\": {\n id: \"HR-BT-6\",\n name: \"HR Oznaka porezne kategorije\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Name\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:Name\"]\n }\n },\n \"HR-BT-7\": {\n id: \"HR-BT-7\",\n name: \"Razlog oslobođenja PDV-a\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"HR-BT-8\": {\n id: \"HR-BT-8\",\n name: \"Kod oslobođenja od PDV-a\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:AllowanceCharge\", \"cac:TaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"HR-BT-9\": {\n id: \"HR-BT-9\",\n name: \"Referenca narudžbenice na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:OrderLineReference\", \"cac:OrderReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:OrderLineReference\", \"cac:OrderReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-10\": {\n id: \"HR-BT-10\",\n name: \"Referenca otpremnice na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:DespatchLineReference\", \"cac:DocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:DespatchLineReference\", \"cac:DocumentReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-11\": {\n id: \"HR-BT-11\",\n name: \"Referenca primke na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:ReceiptLineReference\", \"cac:DocumentReference\", \"cbc:ID\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:ReceiptLineReference\", \"cac:DocumentReference\", \"cbc:ID\"]\n }\n },\n \"HR-BT-12\": {\n id: \"HR-BT-12\",\n name: \"Oznaka porezne kategorije artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Name\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:Name\"]\n }\n },\n \"HR-BT-13\": {\n id: \"HR-BT-13\",\n name: \"Razlog oslobođenja od PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReason\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReason\"]\n }\n },\n \"HR-BT-14\": {\n id: \"HR-BT-14\",\n name: \"Kod razloga oslobođenja od PDV-a stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReasonCode\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\", \"cbc:TaxExemptionReasonCode\"]\n }\n },\n \"HR-BT-15\": {\n id: \"HR-BT-15\",\n name: \"Obračun PDV-a po naplaćenoj naknadi\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRObracunPDVPoNaplati\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRObracunPDVPoNaplati\"]\n }\n },\n \"HR-BT-16\": {\n id: \"HR-BT-16\",\n name: \"HR iznos osnovice kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxableAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxableAmount\"\n ]\n }\n },\n \"HR-BT-17\": {\n id: \"HR-BT-17\",\n name: \"HR iznos kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"cbc:TaxAmount\"\n ],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxSubtotal\", \"cbc:TaxAmount\"]\n }\n },\n \"HR-BT-18\": {\n id: \"HR-BT-18\",\n name: \"HR kod kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:ID\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:ID\"\n ]\n }\n },\n \"HR-BT-19\": {\n id: \"HR-BT-19\",\n name: \"HR stopa kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Percent\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Percent\"\n ]\n }\n },\n \"HR-BT-20\": {\n id: \"HR-BT-20\",\n name: \"HR tekst razloga oslobođenja kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReason\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReason\"\n ]\n }\n },\n \"HR-BT-21\": {\n id: \"HR-BT-21\",\n name: \"HR kod razloga oslobođenja kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReasonCode\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:TaxExemptionReasonCode\"\n ]\n }\n },\n \"HR-BT-22\": {\n id: \"HR-BT-22\",\n name: \"HR Oznaka kategorije PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Name\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\",\n \"hrextac:HRTaxCategory\",\n \"cbc:Name\"\n ]\n }\n },\n \"HR-BT-23\": {\n id: \"HR-BT-23\",\n name: \"HR iznos osnovice za PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"cbc:TaxExclusiveAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"cbc:TaxExclusiveAmount\"\n ]\n }\n },\n \"HR-BT-24\": {\n id: \"HR-BT-24\",\n name: \"HR Neoporezivi iznos\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"hrextac:OutOfScopeOfVATAmount\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRLegalMonetaryTotal\",\n \"hrextac:OutOfScopeOfVATAmount\"\n ]\n }\n },\n \"HR-BT-25\": {\n id: \"HR-BT-25\",\n name: \"HR ukupni iznos PDV\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxTotal\", \"cbc:TaxAmount\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRTaxTotal\", \"cbc:TaxAmount\"]\n }\n }\n};\n","import type { IBusinessTermXpath } from \"../../types\";\n\nexport const BUSINESS_GROUPS: Record<string, IBusinessTermXpath> = {\n \"BG-1\": {\n id: \"BG-1\",\n name: \"Napomena za račun\",\n xpath: {\n Invoice: [],\n CreditNote: []\n }\n },\n \"BG-2\": {\n id: \"BG-2\",\n name: \"Procesna kontrola\",\n xpath: {\n Invoice: [],\n CreditNote: []\n }\n },\n \"BG-3\": {\n id: \"BG-3\",\n name: \"Referenca prethodnog računa\",\n xpath: {\n Invoice: [\"cac:BillingReference\"],\n CreditNote: [\"cac:BillingReference\"]\n }\n },\n \"BG-4\": {\n id: \"BG-4\",\n name: \"Prodavatelj\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\"],\n CreditNote: [\"cac:AccountingSupplierParty\"]\n }\n },\n \"BG-5\": {\n id: \"BG-5\",\n name: \"Poštanska adresa prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:PostalAddress\"]\n }\n },\n \"BG-6\": {\n id: \"BG-6\",\n name: \"Kontakt prodavatelja\",\n xpath: {\n Invoice: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\"],\n CreditNote: [\"cac:AccountingSupplierParty\", \"cac:Party\", \"cac:Contact\"]\n }\n },\n \"BG-7\": {\n id: \"BG-7\",\n name: \"Kupac\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\"],\n CreditNote: [\"cac:AccountingCustomerParty\"]\n }\n },\n \"BG-8\": {\n id: \"BG-8\",\n name: \"Poštanska adresa kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:PostalAddress\"]\n }\n },\n \"BG-9\": {\n id: \"BG-9\",\n name: \"Kontaktni podaci kupca\",\n xpath: {\n Invoice: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\"],\n CreditNote: [\"cac:AccountingCustomerParty\", \"cac:Party\", \"cac:Contact\"]\n }\n },\n \"BG-10\": {\n id: \"BG-10\",\n name: \"Primatelj plaćanja\",\n xpath: {\n Invoice: [\"cac:PayeeParty\"],\n CreditNote: [\"cac:PayeeParty\"]\n }\n },\n \"BG-11\": {\n id: \"BG-11\",\n name: \"Porezni zastupnik prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\"],\n CreditNote: [\"cac:TaxRepresentativeParty\"]\n }\n },\n \"BG-12\": {\n id: \"BG-12\",\n name: \"Poštanska adresa poreznog zastupnika prodavatelja\",\n xpath: {\n Invoice: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\"],\n CreditNote: [\"cac:TaxRepresentativeParty\", \"cac:PostalAddress\"]\n }\n },\n \"BG-13\": {\n id: \"BG-13\",\n name: \"Podaci o isporuci\",\n xpath: {\n Invoice: [\"cac:Delivery\"],\n CreditNote: [\"cac:Delivery\"]\n }\n },\n \"BG-14\": {\n id: \"BG-14\",\n name: \"Obračunsko razdoblje\",\n xpath: {\n Invoice: [\"cac:InvoicePeriod\"],\n CreditNote: [\"cac:InvoicePeriod\"]\n }\n },\n \"BG-15\": {\n id: \"BG-15\",\n name: \"Adresa isporuke\",\n xpath: {\n Invoice: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\"],\n CreditNote: [\"cac:Delivery\", \"cac:DeliveryLocation\", \"cac:Address\"]\n }\n },\n \"BG-16\": {\n id: \"BG-16\",\n name: \"Upute za plaćanje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\"],\n CreditNote: [\"cac:PaymentMeans\"]\n }\n },\n \"BG-17\": {\n id: \"BG-17\",\n name: \"Kreditni transfer\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PayeeFinancialAccount\"]\n }\n },\n \"BG-18\": {\n id: \"BG-18\",\n name: \"Podaci o platnoj kartici\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:CardAccount\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:CardAccount\"]\n }\n },\n \"BG-19\": {\n id: \"BG-19\",\n name: \"Izravno terećenje\",\n xpath: {\n Invoice: [\"cac:PaymentMeans\", \"cac:PaymentMandate\"],\n CreditNote: [\"cac:PaymentMeans\", \"cac:PaymentMandate\"]\n }\n },\n \"BG-20\": {\n id: \"BG-20\",\n name: \"Popusti na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\"],\n CreditNote: [\"cac:AllowanceCharge\"]\n }\n },\n \"BG-21\": {\n id: \"BG-21\",\n name: \"Troškovi na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:AllowanceCharge\"],\n CreditNote: [\"cac:AllowanceCharge\"]\n }\n },\n \"BG-22\": {\n id: \"BG-22\",\n name: \"Ukupni iznosi na razini dokumenta\",\n xpath: {\n Invoice: [\"cac:LegalMonetaryTotal\"],\n CreditNote: [\"cac:LegalMonetaryTotal\"]\n }\n },\n \"BG-23\": {\n id: \"BG-23\",\n name: \"Raspodjela PDV-a\",\n xpath: {\n Invoice: [\"cac:TaxTotal\", \"cac:TaxSubtotal\"],\n CreditNote: [\"cac:TaxTotal\", \"cac:TaxSubtotal\"]\n }\n },\n \"BG-24\": {\n id: \"BG-24\",\n name: \"Dodatni popratni dokumenti\",\n xpath: {\n Invoice: [\"cac:AdditionalDocumentReference\"],\n CreditNote: [\"cac:AdditionalDocumentReference\"]\n }\n },\n \"BG-25\": {\n id: \"BG-25\",\n name: \"Stavka računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\"],\n CreditNote: [\"cac:CreditNoteLine\"]\n }\n },\n \"BG-26\": {\n id: \"BG-26\",\n name: \"Obračunsko razdoblje stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:InvoicePeriod\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:InvoicePeriod\"]\n }\n },\n \"BG-27\": {\n id: \"BG-27\",\n name: \"Popusti na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\"]\n }\n },\n \"BG-28\": {\n id: \"BG-28\",\n name: \"Troškovi na stavci računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:AllowanceCharge\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:AllowanceCharge\"]\n }\n },\n \"BG-29\": {\n id: \"BG-29\",\n name: \"Pojedinosti cijene\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Price\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Price\"]\n }\n },\n \"BG-30\": {\n id: \"BG-30\",\n name: \"Podaci o PDV-u stavke računa\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:ClassifiedTaxCategory\"]\n }\n },\n \"BG-31\": {\n id: \"BG-31\",\n name: \"Podaci o artiklu\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\"]\n }\n },\n \"BG-32\": {\n id: \"BG-32\",\n name: \"Atributi artikla\",\n xpath: {\n Invoice: [\"cac:InvoiceLine\", \"cac:Item\", \"cac:AdditionalItemProperty\"],\n CreditNote: [\"cac:CreditNoteLine\", \"cac:Item\", \"cac:AdditionalItemProperty\"]\n }\n },\n \"HR-BG-1\": {\n id: \"HR-BG-1\",\n name: \"HR proširenja\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\"]\n }\n },\n \"HR-BG-2\": {\n id: \"HR-BG-2\",\n name: \"HR Raspodjela PDV\",\n xpath: {\n Invoice: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\"\n ],\n CreditNote: [\n \"ext:Extensions\",\n \"ext:Extension\",\n \"ext:ExtensionContent\",\n \"hrextac:HRFISK20Data\",\n \"hrextac:HRTaxTotal\",\n \"hrextac:HRTaxSubtotal\"\n ]\n }\n },\n \"HR-BG-3\": {\n id: \"HR-BG-3\",\n name: \"HR ukupni iznosi\",\n xpath: {\n Invoice: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRLegalMonetaryTotal\"],\n CreditNote: [\"ext:Extensions\", \"ext:Extension\", \"ext:ExtensionContent\", \"hrextac:HRFISK20Data\", \"hrextac:HRLegalMonetaryTotal\"]\n }\n }\n};\n","import type { IErrorWithMessage } from \"../types\";\n\nexport class ValidationError extends Error {\n value: unknown;\n\n constructor(message: string, value: unknown) {\n super(message);\n this.value = value;\n }\n\n toString(): string {\n if (this.value === undefined || this.value === null) {\n return `ValidationError: ${this.message}`;\n } else if (typeof this.value === \"string\") {\n return `ValidationError: ${this.message} (value: \"${this.value}\")`;\n } else {\n return `ValidationError: ${this.message} (value: ${JSON.stringify(this.value)})`;\n }\n }\n}\n\nexport function parseError(error: unknown): IErrorWithMessage {\n let message: string;\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = (error as { message: string }).message;\n } else if (error && typeof error === \"object\" && \"toString\" in error) {\n message = (error as { toString: () => string }).toString();\n } else {\n message = JSON.stringify(error);\n }\n return {\n message,\n thrown: error\n };\n}\n","export const FISK_NS = {\n soapenv: \"http://schemas.xmlsoap.org/soap/envelope/\",\n ds: \"http://www.w3.org/2000/09/xmldsig#\",\n efis: \"http://www.porezna-uprava.gov.hr/fin/2024/types/eFiskalizacija\",\n eizv: \"http://www.porezna-uprava.gov.hr/fin/2024/types/eIzvjestavanje\"\n};\n\nexport const getFiskNsPrefix = (namespaceUri: string): string => {\n switch (namespaceUri) {\n case FISK_NS.soapenv:\n return \"soapenv\";\n case FISK_NS.ds:\n return \"ds\";\n case FISK_NS.efis:\n return \"efis\";\n case FISK_NS.eizv:\n return \"eizv\";\n default:\n throw new Error(`FISK_NS.getPrefix: Unknown namespace URI: ${namespaceUri}`);\n }\n};\n\nexport const UBL_NS = {\n invoice: \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\",\n creditnote: \"urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2\",\n cac: \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\",\n cbc: \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\",\n ext: \"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\",\n hrextac: \"urn:hzn.hr:schema:xsd:HRExtensionAggregateComponents-1\"\n};\n\nexport const getUblNsPrefix = (namespaceUri: string): string => {\n switch (namespaceUri) {\n case UBL_NS.invoice:\n return \"invoice\";\n case UBL_NS.creditnote:\n return \"creditnote\";\n case UBL_NS.cac:\n return \"cac\";\n case UBL_NS.cbc:\n return \"cbc\";\n case UBL_NS.ext:\n return \"ext\";\n default:\n throw new Error(`UBL_NS.getPrefix: Unknown namespace URI: ${namespaceUri}`);\n }\n};\n","import type {\n ERacunSerializable,\n EvidentirajERacunOdgovorSerializable,\n EvidentirajERacunZahtjevSerializable,\n IERacun,\n IEvidentirajERacunOdgovor,\n IEvidentirajERacunZahtjev,\n IPrethodniERacun,\n IStavkaERacuna,\n IZaglavljeFiskalizacija,\n PrethodniERacunSerializable,\n StavkaERacunaSerializable,\n ZaglavljeFiskalizacijaSerializable\n} from \"../../types\";\nimport { FISK_NS, UBL_NS } from \"./const\";\nimport {\n extractElement,\n extractElements,\n extractOptionalElements,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n usingXmlDocument,\n xmlEscape\n} from \"../../util/xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport {\n ArtiklIdentifikatorKlasifikacija,\n DokumentUkupanIznos,\n Izdavatelj,\n PrijenosSredstava,\n Primatelj,\n RaspodjelaPdv,\n Odgovor,\n DokumentPopust,\n DokumentTrosak\n} from \"./common\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class EvidentirajERacunZahtjev implements EvidentirajERacunZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeFiskalizacija;\n ERacun: ERacun[];\n\n constructor(args: IEvidentirajERacunZahtjev) {\n this._id = args._id;\n this.Zaglavlje = new ZaglavljeFiskalizacija(args.Zaglavlje);\n this.ERacun = args.ERacun.map(eracun => new ERacun(eracun));\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajERacunZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajERacunZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajERacunZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajERacunZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/efis:EvidentirajERacunZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajERacunZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajERacunZahtjev\" || el.namespaceUri !== FISK_NS.efis) {\n throw new ValidationError(`Expected 'EvidentirajERacunZahtjev' element with namespace '${FISK_NS.efis}'`, xml);\n }\n return EvidentirajERacunZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajERacunZahtjev {\n return {\n _id: getAttributeValue(el, \"efis:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"efis:Zaglavlje\", FISK_NS, ZaglavljeFiskalizacija.fromXmlElement),\n ERacun: extractElements(el, \"efis:ERacun\", FISK_NS, ERacun.fromXmlElement)\n };\n }\n\n public toXmlString() {\n let res = \"\";\n res += `<efis:EvidentirajERacunZahtjev xmlns:ds=\"${FISK_NS[\"ds\"]}\" xmlns:efis=\"${FISK_NS[\"efis\"]}\" efis:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.ERacun.forEach(eracun => (res += eracun.toXmlString()));\n res += \"</efis:EvidentirajERacunZahtjev>\";\n return res;\n }\n}\n\nexport class ZaglavljeFiskalizacija implements ZaglavljeFiskalizacijaSerializable {\n datumVrijemeSlanja: string;\n vrstaERacuna: string;\n\n constructor(args: IZaglavljeFiskalizacija) {\n this.datumVrijemeSlanja = args.datumVrijemeSlanja;\n this.vrstaERacuna = args.vrstaERacuna;\n }\n\n public toXmlString() {\n let res = \"\";\n res += \"<efis:Zaglavlje>\";\n res += `<efis:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</efis:datumVrijemeSlanja>`;\n res += `<efis:vrstaERacuna>${xmlEscape(this.vrstaERacuna)}</efis:vrstaERacuna>`;\n res += \"</efis:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeFiskalizacija {\n return {\n datumVrijemeSlanja: getElementContent(el, \"efis:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" }),\n vrstaERacuna: getElementContent(el, \"efis:vrstaERacuna\", FISK_NS, { regexKey: \"vrstaERacuna\" })\n };\n }\n}\n\nexport class ERacun implements ERacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n vrstaDokumenta: string;\n valutaERacuna: string;\n datumDospijecaPlacanja?: string | undefined;\n vrstaPoslovnogProcesa: string;\n referencaNaUgovor?: string | undefined;\n datumIsporuke?: string | undefined;\n PrethodniERacun?: PrethodniERacun[] | undefined;\n Izdavatelj: Izdavatelj;\n Primatelj: Primatelj;\n PrijenosSredstava?: PrijenosSredstava[] | undefined;\n DokumentUkupanIznos: DokumentUkupanIznos;\n RaspodjelaPdv: RaspodjelaPdv[];\n DokumentPopust?: DokumentPopust[] | undefined;\n DokumentTrosak?: DokumentTrosak[] | undefined;\n StavkaERacuna: StavkaERacuna[];\n indikatorKopije: boolean;\n\n constructor(args: IERacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n this.vrstaDokumenta = args.vrstaDokumenta;\n this.valutaERacuna = args.valutaERacuna;\n this.datumDospijecaPlacanja = args.datumDospijecaPlacanja;\n this.vrstaPoslovnogProcesa = args.vrstaPoslovnogProcesa;\n this.referencaNaUgovor = args.referencaNaUgovor;\n this.datumIsporuke = args.datumIsporuke;\n this.PrethodniERacun = args.PrethodniERacun?.map(i => new PrethodniERacun(i));\n this.Izdavatelj = new Izdavatelj(args.Izdavatelj, \"efis\");\n this.Primatelj = new Primatelj(args.Primatelj, \"efis\");\n this.PrijenosSredstava = args.PrijenosSredstava?.map(i => new PrijenosSredstava(i, \"efis\"));\n this.DokumentUkupanIznos = new DokumentUkupanIznos(args.DokumentUkupanIznos, \"efis\");\n this.RaspodjelaPdv = args.RaspodjelaPdv.map(i => new RaspodjelaPdv(i, \"efis\"));\n this.DokumentPopust = args.DokumentPopust?.map(i => new DokumentPopust(i, \"efis\"));\n this.DokumentTrosak = args.DokumentTrosak?.map(i => new DokumentTrosak(i, \"efis\"));\n this.StavkaERacuna = args.StavkaERacuna.map(i => new StavkaERacuna(i));\n this.indikatorKopije = args.indikatorKopije;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:ERacun>\";\n res += \"<efis:brojDokumenta>\" + xmlEscape(this.brojDokumenta) + \"</efis:brojDokumenta>\";\n res += \"<efis:datumIzdavanja>\" + xmlEscape(this.datumIzdavanja) + \"</efis:datumIzdavanja>\";\n res += \"<efis:vrstaDokumenta>\" + xmlEscape(this.vrstaDokumenta) + \"</efis:vrstaDokumenta>\";\n res += \"<efis:valutaERacuna>\" + xmlEscape(this.valutaERacuna) + \"</efis:valutaERacuna>\";\n if (this.datumDospijecaPlacanja) {\n res += \"<efis:datumDospijecaPlacanja>\" + xmlEscape(this.datumDospijecaPlacanja) + \"</efis:datumDospijecaPlacanja>\";\n }\n res += \"<efis:vrstaPoslovnogProcesa>\" + xmlEscape(this.vrstaPoslovnogProcesa) + \"</efis:vrstaPoslovnogProcesa>\";\n if (this.referencaNaUgovor) {\n res += \"<efis:referencaNaUgovor>\" + xmlEscape(this.referencaNaUgovor) + \"</efis:referencaNaUgovor>\";\n }\n if (this.datumIsporuke) {\n res += \"<efis:datumIsporuke>\" + xmlEscape(this.datumIsporuke) + \"</efis:datumIsporuke>\";\n }\n if (this.PrethodniERacun) {\n this.PrethodniERacun.forEach(i => (res += i.toXmlString()));\n }\n res += this.Izdavatelj.toXmlString();\n res += this.Primatelj.toXmlString();\n if (this.PrijenosSredstava) {\n this.PrijenosSredstava.forEach(i => (res += i.toXmlString()));\n }\n res += this.DokumentUkupanIznos.toXmlString();\n this.RaspodjelaPdv.forEach(i => (res += i.toXmlString()));\n if (this.DokumentPopust) {\n this.DokumentPopust.forEach(i => (res += i.toXmlString()));\n }\n if (this.DokumentTrosak) {\n this.DokumentTrosak.forEach(i => (res += i.toXmlString()));\n }\n this.StavkaERacuna.forEach(i => (res += i.toXmlString()));\n res += `<efis:indikatorKopije>${xmlEscape(String(this.indikatorKopije))}</efis:indikatorKopije>`;\n res += \"</efis:ERacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IERacun {\n return {\n brojDokumenta: getElementContent(el, \"efis:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"efis:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, \"efis:vrstaDokumenta\", FISK_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaERacuna: getElementContent(el, \"efis:valutaERacuna\", FISK_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, \"efis:datumDospijecaPlacanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, \"efis:vrstaPoslovnogProcesa\", FISK_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, \"efis:referencaNaUgovor\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, \"efis:datumIsporuke\", FISK_NS, { regexKey: \"datum\" }),\n PrethodniERacun: extractOptionalElements(el, \"efis:PrethodniERacun\", FISK_NS, PrethodniERacun.fromXmlElement),\n Izdavatelj: extractElement(el, \"efis:Izdavatelj\", FISK_NS, Izdavatelj.fromXmlElement),\n Primatelj: extractElement(el, \"efis:Primatelj\", FISK_NS, Primatelj.fromXmlElement),\n PrijenosSredstava: extractOptionalElements(el, \"efis:PrijenosSredstava\", FISK_NS, PrijenosSredstava.fromXmlElement),\n DokumentUkupanIznos: extractElement(el, \"efis:DokumentUkupanIznos\", FISK_NS, DokumentUkupanIznos.fromXmlElement),\n RaspodjelaPdv: extractElements(el, \"efis:RaspodjelaPdv\", FISK_NS, RaspodjelaPdv.fromXmlElement),\n DokumentPopust: extractOptionalElements(el, \"efis:DokumentPopust\", FISK_NS, DokumentPopust.fromXmlElement),\n DokumentTrosak: extractOptionalElements(el, \"efis:DokumentTrosak\", FISK_NS, DokumentTrosak.fromXmlElement),\n StavkaERacuna: extractElements(el, \"efis:StavkaERacuna\", FISK_NS, StavkaERacuna.fromXmlElement),\n indikatorKopije: getElementContent(el, \"efis:indikatorKopije\", FISK_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IERacun {\n return {\n brojDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-1\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, getBusinessTermXpath(\"BT-2\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-3\", type), UBL_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaERacuna: getElementContent(el, getBusinessTermXpath(\"BT-5\", type), UBL_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, getBusinessTermXpath(\"BT-9\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, getBusinessTermXpath(\"BT-23\", type), UBL_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, getBusinessTermXpath(\"BT-12\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, getBusinessTermXpath(\"BT-72\", type), UBL_NS, { regexKey: \"datum\" }),\n PrethodniERacun: PrethodniERacun.fromUblElement(el, type),\n Izdavatelj: Izdavatelj.fromUblElement(el, type),\n Primatelj: Primatelj.fromUblElement(el, type),\n PrijenosSredstava: PrijenosSredstava.fromUblElement(el, type),\n DokumentUkupanIznos: DokumentUkupanIznos.fromUblElement(el, type),\n RaspodjelaPdv: RaspodjelaPdv.fromUblElement(el, type),\n DokumentPopust: DokumentPopust.fromUblElement(el, type),\n DokumentTrosak: DokumentTrosak.fromUblElement(el, type),\n StavkaERacuna: StavkaERacuna.fromUblElement(el, type),\n indikatorKopije: getOptionalElementContent(el, getBusinessTermXpath(\"HR-BT-1\", type), UBL_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n}\n\nexport class PrethodniERacun implements PrethodniERacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n\n constructor(args: IPrethodniERacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:PrethodniERacun>\";\n res += `<efis:brojDokumenta>${xmlEscape(this.brojDokumenta)}</efis:brojDokumenta>`;\n res += `<efis:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</efis:datumIzdavanja>`;\n res += \"</efis:PrethodniERacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrethodniERacun {\n return {\n brojDokumenta: getElementContent(el, \"efis:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"efis:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrethodniERacun[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-3\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n brojDokumenta: getElementContent(groupEl, getBusinessTermXpath(\"BT-25\", type, \"BG-3\"), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(groupEl, getBusinessTermXpath(\"BT-26\", type, \"BG-3\"), UBL_NS, { regexKey: \"datum\" })\n };\n });\n }\n}\n\nexport class StavkaERacuna implements StavkaERacunaSerializable {\n kolicina: number;\n jedinicaMjere: string;\n neto: number;\n artiklNetoCijena: number;\n artiklBrutoCijena?: number | undefined;\n artiklOsnovnaKolicina?: number | undefined;\n artiklJedinicaMjereZaOsnovnuKolicinu?: string | undefined;\n artiklKategorijaPdv: string;\n artiklStopaPdv?: number | undefined;\n artiklNaziv: string;\n artiklOpis?: string | undefined;\n artiklHrOznakaKategorijaPdv?: string | undefined;\n ArtiklIdentifikatorKlasifikacija?: ArtiklIdentifikatorKlasifikacija[] | undefined;\n\n constructor(args: IStavkaERacuna) {\n this.kolicina = args.kolicina;\n this.jedinicaMjere = args.jedinicaMjere;\n this.neto = args.neto;\n this.artiklNetoCijena = args.artiklNetoCijena;\n this.artiklBrutoCijena = args.artiklBrutoCijena;\n this.artiklOsnovnaKolicina = args.artiklOsnovnaKolicina;\n this.artiklJedinicaMjereZaOsnovnuKolicinu = args.artiklJedinicaMjereZaOsnovnuKolicinu;\n this.artiklKategorijaPdv = args.artiklKategorijaPdv;\n this.artiklStopaPdv = args.artiklStopaPdv;\n this.artiklNaziv = args.artiklNaziv;\n this.artiklOpis = args.artiklOpis;\n this.artiklHrOznakaKategorijaPdv = args.artiklHrOznakaKategorijaPdv;\n this.ArtiklIdentifikatorKlasifikacija = args.ArtiklIdentifikatorKlasifikacija?.map(i => new ArtiklIdentifikatorKlasifikacija(i, \"efis\"));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<efis:StavkaERacuna>\";\n res += `<efis:kolicina>${this.kolicina.toFixed(2)}</efis:kolicina>`;\n res += `<efis:jedinicaMjere>${xmlEscape(this.jedinicaMjere)}</efis:jedinicaMjere>`;\n res += `<efis:neto>${this.neto.toFixed(2)}</efis:neto>`;\n res += `<efis:artiklNetoCijena>${this.artiklNetoCijena.toFixed(2)}</efis:artiklNetoCijena>`;\n if (this.artiklBrutoCijena !== undefined) {\n res += `<efis:artiklBrutoCijena>${this.artiklBrutoCijena.toFixed(2)}</efis:artiklBrutoCijena>`;\n }\n if (this.artiklOsnovnaKolicina !== undefined) {\n res += `<efis:artiklOsnovnaKolicina>${this.artiklOsnovnaKolicina.toFixed(2)}</efis:artiklOsnovnaKolicina>`;\n }\n if (this.artiklJedinicaMjereZaOsnovnuKolicinu !== undefined) {\n res += `<efis:artiklJedinicaMjereZaOsnovnuKolicinu>${xmlEscape(this.artiklJedinicaMjereZaOsnovnuKolicinu)}</efis:artiklJedinicaMjereZaOsnovnuKolicinu>`;\n }\n res += `<efis:artiklKategorijaPdv>${xmlEscape(this.artiklKategorijaPdv)}</efis:artiklKategorijaPdv>`;\n if (this.artiklStopaPdv !== undefined) {\n res += `<efis:artiklStopaPdv>${this.artiklStopaPdv.toFixed(2)}</efis:artiklStopaPdv>`;\n }\n res += `<efis:artiklNaziv>${xmlEscape(this.artiklNaziv)}</efis:artiklNaziv>`;\n if (this.artiklOpis !== undefined) {\n res += `<efis:artiklOpis>${xmlEscape(this.artiklOpis)}</efis:artiklOpis>`;\n }\n if (this.artiklHrOznakaKategorijaPdv !== undefined) {\n res += `<efis:artiklHrOznakaKategorijaPdv>${xmlEscape(this.artiklHrOznakaKategorijaPdv)}</efis:artiklHrOznakaKategorijaPdv>`;\n }\n if (this.ArtiklIdentifikatorKlasifikacija) {\n this.ArtiklIdentifikatorKlasifikacija.forEach(a => (res += a.toXmlString()));\n }\n res += \"</efis:StavkaERacuna>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IStavkaERacuna {\n return {\n kolicina: getElementContentNumber(el, \"efis:kolicina\", FISK_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(el, \"efis:jedinicaMjere\", FISK_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(el, \"efis:neto\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(el, \"efis:artiklNetoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(el, \"efis:artiklBrutoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(el, \"efis:artiklOsnovnaKolicina\", FISK_NS, { regexKey: \"decimal\" }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(el, \"efis:artiklJedinicaMjereZaOsnovnuKolicinu\", FISK_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(el, \"efis:artiklKategorijaPdv\", FISK_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getOptionalElementContentNumber(el, \"efis:artiklStopaPdv\", FISK_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(el, \"efis:artiklNaziv\", FISK_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(el, \"efis:artiklOpis\", FISK_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(el, \"efis:artiklHrOznakaKategorijaPdv\", FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(\n el,\n \"efis:ArtiklIdentifikatorKlasifikacija\",\n FISK_NS,\n ArtiklIdentifikatorKlasifikacija.fromXmlElement\n )\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\") {\n const groups = el.find(getBusinessGroupXpath(\"BG-25\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-25' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kolicina: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-129\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(groupEl, getBusinessTermXpath(\"BT-130\", type, \"BG-25\"), UBL_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-131\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-146\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-148\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-149\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-150\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-151\", type, \"BG-25\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-152\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklNaziv: getElementContent(groupEl, getBusinessTermXpath(\"BT-153\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-154\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-12\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(groupEl, getBusinessTermXpath(\"BT-158\", type, \"BG-25\"), UBL_NS, el =>\n ArtiklIdentifikatorKlasifikacija.fromUblElement(el, type)\n )\n };\n });\n }\n}\n\nexport class EvidentirajERacunOdgovor implements EvidentirajERacunOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(args: IEvidentirajERacunOdgovor) {\n this._id = args._id;\n this.datumVrijemeSlanja = args.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(args.Odgovor, \"efis\");\n }\n\n public static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajERacunOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"efis:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"efis:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"efis:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n\n toXmlString(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import type {\n ArtiklIdentifikatorKlasifikacijaSerializable,\n DokumentPopustSerializable,\n DokumentTrosakSerializable,\n DokumentUkupanIznosSerializable,\n GreskaSerializable,\n IArtiklIdentifikatorKlasifikacija,\n IDokumentPopust,\n IDokumentTrosak,\n IDokumentUkupanIznos,\n IGreska,\n IIzdavatelj,\n IOdgovor,\n IPrijenosSredstava,\n IPrimatelj,\n IRaspodjelaPdv,\n IzdavateljSerializable,\n OdgovorSerializable,\n PrijenosSredstavaSerializable,\n PrimateljSerializable,\n RaspodjelaPdvSerializable\n} from \"../../types\";\nimport {\n extractOptionalElement,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalAttributeValue,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n xmlEscape\n} from \"../../util/xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { FISK_NS, getFiskNsPrefix, UBL_NS } from \"./const\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class Izdavatelj implements IzdavateljSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n ime: string;\n oibPorezniBroj: string;\n oibOperatera: string;\n\n constructor(args: IIzdavatelj, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.ime = args.ime;\n this.oibPorezniBroj = args.oibPorezniBroj;\n this.oibOperatera = args.oibOperatera;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Izdavatelj>`;\n res += `<${this._prefix}:ime>${xmlEscape(this.ime)}</${this._prefix}:ime>`;\n res += `<${this._prefix}:oibPorezniBroj>${xmlEscape(this.oibPorezniBroj)}</${this._prefix}:oibPorezniBroj>`;\n res += `<${this._prefix}:oibOperatera>${xmlEscape(this.oibOperatera)}</${this._prefix}:oibOperatera>`;\n res += `</${this._prefix}:Izdavatelj>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IIzdavatelj {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n ime: getElementContent(el, `${prefix}:ime`, FISK_NS, { regexKey: \"tekst500\" }),\n oibPorezniBroj: getElementContent(el, `${prefix}:oibPorezniBroj`, FISK_NS, { regexKey: \"tekst200\" }),\n oibOperatera: getElementContent(el, `${prefix}:oibOperatera`, FISK_NS, { regexKey: \"tekst200\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IIzdavatelj {\n const groupEl = el.get(getBusinessGroupXpath(\"BG-4\", type), UBL_NS) as XmlElement | null;\n if (!groupEl) {\n throw new ValidationError(`Grupa 'BG-4' nije pronađena u dokumentu '${type}'`, undefined);\n }\n return {\n ime: getElementContent(groupEl, getBusinessTermXpath(\"BT-27\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst500\" }),\n // TODO: Iako je u specifikaciji navedeno da u ovo polje može ići OIB ili porezni broj,\n // ako se šalje porezni broj, na demo serveru se poruka odbija sa greškom:\n // S006: PT nije ovlaštena za dostavu podataka na fiskalizaciju.Inicijalna provjera za valjanost oib-a kod evidentiranja izlaznog eRačuna (Record: 1)\n // stoga za sada mičemo \"HR\" dio iz polja BT-31\n oibPorezniBroj: getElementContent(groupEl, getBusinessTermXpath(\"BT-31\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst200\" }).replace(\n /^HR/,\n \"\"\n ),\n oibOperatera: getElementContent(groupEl, getBusinessTermXpath(\"HR-BT-5\", type, \"BG-4\"), UBL_NS, { regexKey: \"tekst200\" })\n };\n }\n}\n\nexport class Primatelj implements PrimateljSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n ime: string;\n oibPorezniBroj: string;\n\n constructor(args: IPrimatelj, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.ime = args.ime;\n this.oibPorezniBroj = args.oibPorezniBroj;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Primatelj>`;\n res += `<${this._prefix}:ime>${xmlEscape(this.ime)}</${this._prefix}:ime>`;\n res += `<${this._prefix}:oibPorezniBroj>${xmlEscape(this.oibPorezniBroj)}</${this._prefix}:oibPorezniBroj>`;\n res += `</${this._prefix}:Primatelj>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrimatelj {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n ime: getElementContent(el, `${prefix}:ime`, FISK_NS, { regexKey: \"tekst500\" }),\n oibPorezniBroj: getElementContent(el, `${prefix}:oibPorezniBroj`, FISK_NS, { regexKey: \"tekst200\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrimatelj {\n const groupEl = el.get(getBusinessGroupXpath(\"BG-7\", type), UBL_NS) as XmlElement | null;\n if (!groupEl) {\n throw new ValidationError(`Grupa 'BG-7' nije pronađena u dokumentu '${type}'`, undefined);\n }\n return {\n ime: getElementContent(groupEl, getBusinessTermXpath(\"BT-44\", type, \"BG-7\"), UBL_NS, { regexKey: \"tekst500\" }),\n // TODO: Iako je u specifikaciji navedeno da u ovo polje može ići OIB ili porezni broj,\n // ako se šalje porezni broj, na demo serveru se poruka odbija sa greškom:\n // S006: PT nije ovlaštena za dostavu podataka na fiskalizaciju.Inicijalna provjera za valjanost oib-a kod evidentiranja ulaznog eRačuna (Record: 1)\n // stoga za sada mičemo \"HR\" dio iz polja BT-48\n oibPorezniBroj: getElementContent(groupEl, getBusinessTermXpath(\"BT-48\", type, \"BG-7\"), UBL_NS, { regexKey: \"tekst200\" }).replace(\n /^HR/,\n \"\"\n )\n };\n }\n}\n\nexport class PrijenosSredstava implements PrijenosSredstavaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n identifikatorRacunaZaPlacanje: string;\n nazivRacunaZaPlacanje?: string | undefined;\n identifikatorPruzateljaPlatnihUsluga?: string | undefined;\n\n constructor(args: IPrijenosSredstava, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.identifikatorRacunaZaPlacanje = args.identifikatorRacunaZaPlacanje;\n this.nazivRacunaZaPlacanje = args.nazivRacunaZaPlacanje;\n this.identifikatorPruzateljaPlatnihUsluga = args.identifikatorPruzateljaPlatnihUsluga;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:PrijenosSredstava>`;\n res += `<${this._prefix}:identifikatorRacunaZaPlacanje>${xmlEscape(this.identifikatorRacunaZaPlacanje)}</${this._prefix}:identifikatorRacunaZaPlacanje>`;\n if (this.nazivRacunaZaPlacanje) {\n res += `<${this._prefix}:nazivRacunaZaPlacanje>${xmlEscape(this.nazivRacunaZaPlacanje)}</${this._prefix}:nazivRacunaZaPlacanje>`;\n }\n if (this.identifikatorPruzateljaPlatnihUsluga) {\n res += `<${this._prefix}:identifikatorPruzateljaPlatnihUsluga>${xmlEscape(this.identifikatorPruzateljaPlatnihUsluga)}</${this._prefix}:identifikatorPruzateljaPlatnihUsluga>`;\n }\n res += `</${this._prefix}:PrijenosSredstava>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrijenosSredstava {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n identifikatorRacunaZaPlacanje: getElementContent(el, `${prefix}:identifikatorRacunaZaPlacanje`, FISK_NS, { regexKey: \"tekst34\" }),\n nazivRacunaZaPlacanje: getOptionalElementContent(el, `${prefix}:nazivRacunaZaPlacanje`, FISK_NS, { regexKey: \"tekst35\" }),\n identifikatorPruzateljaPlatnihUsluga: getOptionalElementContent(el, `${prefix}:identifikatorPruzateljaPlatnihUsluga`, FISK_NS, {\n regexKey: \"tekst25\"\n })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrijenosSredstava[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-17\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n identifikatorRacunaZaPlacanje: getElementContent(groupEl, getBusinessTermXpath(\"BT-84\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst34\"\n }),\n nazivRacunaZaPlacanje: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-85\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst35\"\n }),\n identifikatorPruzateljaPlatnihUsluga: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-86\", type, \"BG-17\"), UBL_NS, {\n regexKey: \"tekst25\"\n })\n };\n });\n }\n}\n\nexport class DokumentUkupanIznos implements DokumentUkupanIznosSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n neto: number;\n popust?: number | undefined;\n trosak?: number | undefined;\n iznosBezPdv: number;\n pdv: number;\n iznosSPdv: number;\n placeniIznos?: number | undefined;\n iznosKojiDospijevaZaPlacanje: number;\n\n constructor(args: IDokumentUkupanIznos, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.neto = args.neto;\n this.popust = args.popust;\n this.trosak = args.trosak;\n this.iznosBezPdv = args.iznosBezPdv;\n this.pdv = args.pdv;\n this.iznosSPdv = args.iznosSPdv;\n this.placeniIznos = args.placeniIznos;\n this.iznosKojiDospijevaZaPlacanje = args.iznosKojiDospijevaZaPlacanje;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentUkupanIznos>`;\n res += `<${this._prefix}:neto>${this.neto.toFixed(2)}</${this._prefix}:neto>`;\n if (this.popust !== undefined) {\n res += `<${this._prefix}:popust>${this.popust.toFixed(2)}</${this._prefix}:popust>`;\n }\n if (this.trosak !== undefined) {\n res += `<${this._prefix}:trosak>${this.trosak.toFixed(2)}</${this._prefix}:trosak>`;\n }\n res += `<${this._prefix}:iznosBezPdv>${this.iznosBezPdv.toFixed(2)}</${this._prefix}:iznosBezPdv>`;\n res += `<${this._prefix}:pdv>${this.pdv.toFixed(2)}</${this._prefix}:pdv>`;\n res += `<${this._prefix}:iznosSPdv>${this.iznosSPdv.toFixed(2)}</${this._prefix}:iznosSPdv>`;\n if (this.placeniIznos !== undefined) {\n res += `<${this._prefix}:placeniIznos>${this.placeniIznos.toFixed(2)}</${this._prefix}:placeniIznos>`;\n }\n res += `<${this._prefix}:iznosKojiDospijevaZaPlacanje>${this.iznosKojiDospijevaZaPlacanje.toFixed(2)}</${this._prefix}:iznosKojiDospijevaZaPlacanje>`;\n res += `</${this._prefix}:DokumentUkupanIznos>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentUkupanIznos {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n neto: getElementContentNumber(el, `${prefix}:neto`, FISK_NS, { regexKey: \"decimal2\" }),\n popust: getOptionalElementContentNumber(el, `${prefix}:popust`, FISK_NS, { regexKey: \"decimal2\" }),\n trosak: getOptionalElementContentNumber(el, `${prefix}:trosak`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosBezPdv: getElementContentNumber(el, `${prefix}:iznosBezPdv`, FISK_NS, { regexKey: \"decimal2\" }),\n pdv: getElementContentNumber(el, `${prefix}:pdv`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosSPdv: getElementContentNumber(el, `${prefix}:iznosSPdv`, FISK_NS, { regexKey: \"decimal2\" }),\n placeniIznos: getOptionalElementContentNumber(el, `${prefix}:placeniIznos`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosKojiDospijevaZaPlacanje: getElementContentNumber(el, `${prefix}:iznosKojiDospijevaZaPlacanje`, FISK_NS, { regexKey: \"decimal2\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentUkupanIznos {\n return {\n neto: getElementContentNumber(el, getBusinessTermXpath(\"BT-106\", type), UBL_NS, { regexKey: \"decimal2\" }),\n popust: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-107\", type), UBL_NS, { regexKey: \"decimal2\" }),\n trosak: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-108\", type), UBL_NS, { regexKey: \"decimal2\" }),\n iznosBezPdv: getElementContentNumber(el, getBusinessTermXpath(\"BT-109\", type), UBL_NS, { regexKey: \"decimal2\" }),\n /** BT-110 nije obvezan u specifikaciji eRacuna, ali je pdv obvezan u specifikaciji fiskalizacije */\n pdv: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-110\", type), UBL_NS, { regexKey: \"decimal2\" }) || 0,\n iznosSPdv: getElementContentNumber(el, getBusinessTermXpath(\"BT-112\", type), UBL_NS, { regexKey: \"decimal2\" }),\n placeniIznos: getOptionalElementContentNumber(el, getBusinessTermXpath(\"BT-113\", type), UBL_NS, { regexKey: \"decimal2\" }),\n iznosKojiDospijevaZaPlacanje: getElementContentNumber(el, getBusinessTermXpath(\"BT-115\", type), UBL_NS, { regexKey: \"decimal2\" })\n };\n }\n}\n\nexport class RaspodjelaPdv implements RaspodjelaPdvSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n kategorijaPdv: string;\n oporeziviIznos: number;\n iznosPoreza: number;\n stopa?: number | undefined;\n razlogOslobodenja?: string | undefined;\n tekstRazlogaOslobodenja?: string | undefined;\n hrOznakaKategorijaPdv?: string | undefined;\n\n constructor(args: IRaspodjelaPdv, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.kategorijaPdv = args.kategorijaPdv;\n this.oporeziviIznos = args.oporeziviIznos;\n this.iznosPoreza = args.iznosPoreza;\n this.stopa = args.stopa;\n this.razlogOslobodenja = args.razlogOslobodenja;\n this.tekstRazlogaOslobodenja = args.tekstRazlogaOslobodenja;\n this.hrOznakaKategorijaPdv = args.hrOznakaKategorijaPdv;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:RaspodjelaPdv>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n res += `<${this._prefix}:oporeziviIznos>${this.oporeziviIznos.toFixed(2)}</${this._prefix}:oporeziviIznos>`;\n res += `<${this._prefix}:iznosPoreza>${this.iznosPoreza.toFixed(2)}</${this._prefix}:iznosPoreza>`;\n if (this.stopa !== undefined) {\n res += `<${this._prefix}:stopa>${this.stopa.toFixed(2)}</${this._prefix}:stopa>`;\n }\n if (this.razlogOslobodenja !== undefined) {\n res += `<${this._prefix}:razlogOslobodenja>${xmlEscape(this.razlogOslobodenja)}</${this._prefix}:razlogOslobodenja>`;\n }\n if (this.tekstRazlogaOslobodenja !== undefined) {\n res += `<${this._prefix}:tekstRazlogaOslobodenja>${xmlEscape(this.tekstRazlogaOslobodenja)}</${this._prefix}:tekstRazlogaOslobodenja>`;\n }\n if (this.hrOznakaKategorijaPdv !== undefined) {\n res += `<${this._prefix}:hrOznakaKategorijaPdv>${xmlEscape(this.hrOznakaKategorijaPdv)}</${this._prefix}:hrOznakaKategorijaPdv>`;\n }\n res += `</${this._prefix}:RaspodjelaPdv>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IRaspodjelaPdv {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n oporeziviIznos: getElementContentNumber(el, `${prefix}:oporeziviIznos`, FISK_NS, { regexKey: \"decimal2\" }),\n iznosPoreza: getElementContentNumber(el, `${prefix}:iznosPoreza`, FISK_NS, { regexKey: \"decimal2\" }),\n stopa: getOptionalElementContentNumber(el, `${prefix}:stopa`, FISK_NS, { regexKey: \"decimal\" }),\n razlogOslobodenja: getOptionalElementContent(el, `${prefix}:razlogOslobodenja`, FISK_NS, { regexKey: \"izuzecePdv\" }),\n tekstRazlogaOslobodenja: getOptionalElementContent(el, `${prefix}:tekstRazlogaOslobodenja`, FISK_NS, { regexKey: \"tekst1024\" }),\n hrOznakaKategorijaPdv: getOptionalElementContent(el, `${prefix}:hrOznakaKategorijaPdv`, FISK_NS, { regexKey: \"hrKategorijaPdv\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IRaspodjelaPdv[] {\n const hrfiskGroups = el.find(getBusinessGroupXpath(\"HR-BG-2\", type), UBL_NS) as XmlElement[];\n if (hrfiskGroups.length > 0) {\n return hrfiskGroups.map(groupEl => {\n return {\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"HR-BT-18\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"kategorijaPdv\"\n }),\n oporeziviIznos: getElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-16\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n iznosPoreza: getElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-17\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal2\"\n }),\n stopa: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"HR-BT-19\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n razlogOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-21\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n }),\n tekstRazlogaOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-20\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n hrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-22\", type, \"HR-BG-2\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n })\n };\n });\n }\n\n const groups = el.find(getBusinessGroupXpath(\"BG-23\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-23' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-118\", type, \"BG-23\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n oporeziviIznos: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-116\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal2\" }),\n iznosPoreza: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-117\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal2\" }),\n stopa: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-119\", type, \"BG-23\"), UBL_NS, { regexKey: \"decimal\" }),\n razlogOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-121\", type, \"BG-23\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n }),\n tekstRazlogaOslobodenja: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-120\", type, \"BG-23\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n hrOznakaKategorijaPdv: undefined\n };\n });\n }\n}\n\nexport class ArtiklIdentifikatorKlasifikacija implements ArtiklIdentifikatorKlasifikacijaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n identifikatorKlasifikacije: string;\n identifikatorSheme: string;\n verzijaSheme?: string | undefined;\n\n constructor(args: IArtiklIdentifikatorKlasifikacija, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.identifikatorKlasifikacije = args.identifikatorKlasifikacije;\n this.identifikatorSheme = args.identifikatorSheme;\n this.verzijaSheme = args.verzijaSheme;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:ArtiklIdentifikatorKlasifikacija>`;\n res += `<${this._prefix}:identifikatorKlasifikacije>${xmlEscape(this.identifikatorKlasifikacije)}</${this._prefix}:identifikatorKlasifikacije>`;\n res += `<${this._prefix}:identifikatorSheme>${xmlEscape(this.identifikatorSheme)}</${this._prefix}:identifikatorSheme>`;\n if (this.verzijaSheme !== undefined) {\n res += `<${this._prefix}:verzijaSheme>${xmlEscape(this.verzijaSheme)}</${this._prefix}:verzijaSheme>`;\n }\n res += `</${this._prefix}:ArtiklIdentifikatorKlasifikacija>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IArtiklIdentifikatorKlasifikacija {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n identifikatorKlasifikacije: getElementContent(el, `${prefix}:identifikatorKlasifikacije`, FISK_NS, { regexKey: \"tekst10\" }),\n identifikatorSheme: getElementContent(el, `${prefix}:identifikatorSheme`, FISK_NS, { regexKey: \"klasifikacijaArtikla\" }),\n verzijaSheme: getOptionalElementContent(el, `${prefix}:verzijaSheme`, FISK_NS, { regexKey: \"tekst10\" })\n };\n }\n\n static fromUblElement(el: XmlElement, _type: \"Invoice\" | \"CreditNote\") {\n return {\n identifikatorKlasifikacije: getElementContent(el, \".\", UBL_NS, { regexKey: \"tekst10\" }),\n identifikatorSheme: getAttributeValue(el, \"listID\", UBL_NS),\n verzijaSheme: getOptionalAttributeValue(el, \"listVersionID\", UBL_NS) || undefined\n };\n }\n}\n\nexport class Odgovor implements OdgovorSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n idZahtjeva: string;\n prihvacenZahtjev: boolean;\n greska?: Greska | undefined;\n\n constructor(props: IOdgovor, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.idZahtjeva = props.idZahtjeva;\n this.prihvacenZahtjev = props.prihvacenZahtjev;\n if (props.greska) {\n this.greska = new Greska(props.greska, prefix);\n }\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Odgovor>`;\n res += `<${this._prefix}:idZahtjeva>${xmlEscape(this.idZahtjeva)}</${this._prefix}:idZahtjeva>`;\n res += `<${this._prefix}:prihvacenZahtjev>${this.prihvacenZahtjev}</${this._prefix}:prihvacenZahtjev>`;\n if (this.greska) {\n res += this.greska.toXmlString();\n }\n res += `</${this._prefix}:Odgovor>`;\n return res;\n }\n\n public static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IOdgovor {\n const { lenient = false, errors } = options || {};\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n idZahtjeva: getElementContent(el, `${prefix}:idZahtjeva`, FISK_NS, { regexKey: \"uuid\", lenient, errors }),\n prihvacenZahtjev: getElementContent(el, `${prefix}:prihvacenZahtjev`, FISK_NS, { regexKey: \"boolean\", lenient, errors }) === \"true\",\n greska: extractOptionalElement(el, `${prefix}:greska`, FISK_NS, greskaEl => Greska.fromXmlElement(greskaEl, options))\n };\n }\n}\n\nexport class Greska implements GreskaSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n sifra: string;\n redniBrojZapisa: string;\n opis: string;\n\n constructor(props: IGreska, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.sifra = props.sifra;\n this.redniBrojZapisa = props.redniBrojZapisa;\n this.opis = props.opis;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:Greska>`;\n res += `<${this._prefix}:sifra>${xmlEscape(this.sifra)}</${this._prefix}:sifra>`;\n res += `<${this._prefix}:redniBrojZapisa>${xmlEscape(this.redniBrojZapisa)}</${this._prefix}:redniBrojZapisa>`;\n res += `<${this._prefix}:opis>${xmlEscape(this.opis)}</${this._prefix}:opis>`;\n res += `</${this._prefix}:Greska>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IGreska {\n const { lenient = false, errors } = options || {};\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n sifra: getElementContent(el, `${prefix}:sifra`, FISK_NS, { regexKey: \"greska\", lenient, errors }),\n redniBrojZapisa: getElementContent(el, `${prefix}:redniBrojZapisa`, FISK_NS, { regexKey: \"redniBroj\", lenient, errors }),\n opis: getElementContent(el, `${prefix}:opis`, FISK_NS, { regexKey: \"tekst1024\", lenient, errors })\n };\n }\n}\n\nexport class DokumentPopust implements DokumentPopustSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n iznosPopust: number;\n kategorijaPdv: string;\n stopaPdv?: number | undefined;\n tekstRazlogaPopusta?: string | undefined;\n razlogPopusta?: string | undefined;\n\n constructor(args: IDokumentPopust, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.iznosPopust = args.iznosPopust;\n this.kategorijaPdv = args.kategorijaPdv;\n this.stopaPdv = args.stopaPdv;\n this.tekstRazlogaPopusta = args.tekstRazlogaPopusta;\n this.razlogPopusta = args.razlogPopusta;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentPopust>`;\n res += `<${this._prefix}:iznosPopust>${this.iznosPopust.toFixed(2)}</${this._prefix}:iznosPopust>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n if (this.stopaPdv !== undefined) {\n res += `<${this._prefix}:stopaPdv>${this.stopaPdv.toFixed(2)}</${this._prefix}:stopaPdv>`;\n }\n if (this.tekstRazlogaPopusta !== undefined) {\n res += `<${this._prefix}:tekstRazlogaPopusta>${xmlEscape(this.tekstRazlogaPopusta)}</${this._prefix}:tekstRazlogaPopusta>`;\n }\n if (this.razlogPopusta !== undefined) {\n res += `<${this._prefix}:razlogPopusta>${xmlEscape(this.razlogPopusta)}</${this._prefix}:razlogPopusta>`;\n }\n res += `</${this._prefix}:DokumentPopust>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentPopust {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n iznosPopust: getElementContentNumber(el, `${prefix}:iznosPopust`, FISK_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(el, `${prefix}:stopaPdv`, FISK_NS, { regexKey: \"decimal\" }),\n tekstRazlogaPopusta: getOptionalElementContent(el, `${prefix}:tekstRazlogaPopusta`, FISK_NS, { regexKey: \"tekst1024\" }),\n razlogPopusta: getOptionalElementContent(el, `${prefix}:razlogPopusta`, FISK_NS, { regexKey: \"razlogPopusta\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentPopust[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-20\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n iznosPopust: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-92\", type, \"BG-20\"), UBL_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-95\", type, \"BG-20\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-96\", type, \"BG-20\"), UBL_NS, { regexKey: \"decimal\" }),\n tekstRazlogaPopusta: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-97\", type, \"BG-20\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n razlogPopusta: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-98\", type, \"BG-20\"), UBL_NS, { regexKey: \"razlogPopusta\" })\n };\n });\n }\n}\n\nexport class DokumentTrosak implements DokumentTrosakSerializable {\n private readonly _prefix: \"efis\" | \"eizv\";\n iznosTrosak: number;\n kategorijaPdv: string;\n hrOznakaPorezneKategorije?: string | undefined;\n stopaPdv?: number | undefined;\n tekstRazlogaOslobodenjaPdv?: string | undefined;\n razlogOslobodenjaPdv?: string | undefined;\n\n constructor(args: IDokumentTrosak, prefix: \"efis\" | \"eizv\") {\n this._prefix = prefix;\n this.iznosTrosak = args.iznosTrosak;\n this.kategorijaPdv = args.kategorijaPdv;\n this.hrOznakaPorezneKategorije = args.hrOznakaPorezneKategorije;\n this.stopaPdv = args.stopaPdv;\n this.tekstRazlogaOslobodenjaPdv = args.tekstRazlogaOslobodenjaPdv;\n this.razlogOslobodenjaPdv = args.razlogOslobodenjaPdv;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<${this._prefix}:DokumentTrosak>`;\n res += `<${this._prefix}:iznosTrosak>${this.iznosTrosak.toFixed(2)}</${this._prefix}:iznosTrosak>`;\n res += `<${this._prefix}:kategorijaPdv>${xmlEscape(this.kategorijaPdv)}</${this._prefix}:kategorijaPdv>`;\n if (this.hrOznakaPorezneKategorije !== undefined) {\n res += `<${this._prefix}:hrOznakaPorezneKategorije>${xmlEscape(this.hrOznakaPorezneKategorije)}</${this._prefix}:hrOznakaPorezneKategorije>`;\n }\n if (this.stopaPdv !== undefined) {\n res += `<${this._prefix}:stopaPdv>${this.stopaPdv.toFixed(2)}</${this._prefix}:stopaPdv>`;\n }\n if (this.tekstRazlogaOslobodenjaPdv !== undefined) {\n res += `<${this._prefix}:tekstRazlogaOslobodenjaPdv>${xmlEscape(this.tekstRazlogaOslobodenjaPdv)}</${this._prefix}:tekstRazlogaOslobodenjaPdv>`;\n }\n if (this.razlogOslobodenjaPdv !== undefined) {\n res += `<${this._prefix}:razlogOslobodenjaPdv>${xmlEscape(this.razlogOslobodenjaPdv)}</${this._prefix}:razlogOslobodenjaPdv>`;\n }\n res += `</${this._prefix}:DokumentTrosak>`;\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IDokumentTrosak {\n const prefix = getFiskNsPrefix(el.namespaceUri);\n return {\n iznosTrosak: getElementContentNumber(el, `${prefix}:iznosTrosak`, FISK_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(el, `${prefix}:kategorijaPdv`, FISK_NS, { regexKey: \"kategorijaPdv\" }),\n hrOznakaPorezneKategorije: getOptionalElementContent(el, `${prefix}:hrOznakaPorezneKategorije`, FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n stopaPdv: getOptionalElementContentNumber(el, `${prefix}:stopaPdv`, FISK_NS, { regexKey: \"decimal\" }),\n tekstRazlogaOslobodenjaPdv: getOptionalElementContent(el, `${prefix}:tekstRazlogaOslobodenjaPdv`, FISK_NS, { regexKey: \"tekst1024\" }),\n razlogOslobodenjaPdv: getOptionalElementContent(el, `${prefix}:razlogOslobodenjaPdv`, FISK_NS, { regexKey: \"izuzecePdv\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IDokumentTrosak[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-21\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n iznosTrosak: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-99\", type, \"BG-21\"), UBL_NS, { regexKey: \"decimal2\" }),\n kategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-102\", type, \"BG-21\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n hrOznakaPorezneKategorije: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-6\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n stopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-103\", type, \"BG-21\"), UBL_NS, { regexKey: \"decimal\" }),\n tekstRazlogaOslobodenjaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-7\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"tekst1024\"\n }),\n razlogOslobodenjaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-8\", type, \"BG-21\"), UBL_NS, {\n regexKey: \"izuzecePdv\"\n })\n };\n });\n }\n}\n","import type {\n EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovorSerializable,\n EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjevSerializable,\n EvidentirajNaplatuOdgovorSerializable,\n EvidentirajNaplatuZahtjevSerializable,\n EvidentirajOdbijanjeOdgovorSerializable,\n EvidentirajOdbijanjeZahtjevSerializable,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuOdgovor,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeOdgovor,\n IEvidentirajOdbijanjeZahtjev,\n INaplata,\n IOdbijanje,\n IPrethodniRacun,\n IRacun,\n IStavkaRacuna,\n IZaglavljeIsporuka,\n IZaglavljeIzvjestavanje,\n NaplataSerializable,\n OdbijanjeSerializable,\n PrethodniRacunSerializable,\n RacunSerializable,\n StavkaRacunaSerializable,\n ZaglavljeIsporukaSerializable,\n ZaglavljeIzvjestavanjeSerializable\n} from \"../../types\";\nimport {\n extractElement,\n extractElements,\n extractOptionalElements,\n getAttributeValue,\n getBusinessGroupXpath,\n getBusinessTermXpath,\n getElementContent,\n getElementContentNumber,\n getOptionalElementContent,\n getOptionalElementContentNumber,\n usingXmlDocument,\n xmlEscape\n} from \"../../util/xml\";\nimport { FISK_NS, UBL_NS } from \"./const\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport {\n ArtiklIdentifikatorKlasifikacija,\n DokumentUkupanIznos,\n Izdavatelj,\n Odgovor,\n PrijenosSredstava,\n Primatelj,\n RaspodjelaPdv,\n DokumentPopust,\n DokumentTrosak\n} from \"./common\";\nimport { ValidationError } from \"../../util/error\";\n\nexport class EvidentirajNaplatuZahtjev implements EvidentirajNaplatuZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIzvjestavanje;\n Naplata: Naplata[];\n\n constructor(props: IEvidentirajNaplatuZahtjev) {\n this._id = props._id;\n this.Zaglavlje = new ZaglavljeIzvjestavanje(props.Zaglavlje);\n this.Naplata = props.Naplata.map(i => new Naplata(i));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajNaplatuZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Naplata.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajNaplatuZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajNaplatuZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajNaplatuZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajNaplatuZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajNaplatuZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajNaplatuZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajNaplatuZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajNaplatuZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(`Expected 'EvidentirajNaplatuZahtjev' element with namespace '${FISK_NS.eizv}'`, xml);\n }\n return EvidentirajNaplatuZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajNaplatuZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIzvjestavanje.fromXmlElement),\n Naplata: extractElements(el, \"eizv:Naplata\", FISK_NS, Naplata.fromXmlElement)\n };\n }\n}\n\nexport class EvidentirajOdbijanjeZahtjev implements EvidentirajOdbijanjeZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIzvjestavanje;\n Odbijanje: Odbijanje[];\n\n constructor(props: IEvidentirajOdbijanjeZahtjev) {\n this.Odbijanje = props.Odbijanje.map(i => new Odbijanje(i));\n this.Zaglavlje = new ZaglavljeIzvjestavanje(props.Zaglavlje);\n this._id = props._id;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajOdbijanjeZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Odbijanje.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajOdbijanjeZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajOdbijanjeZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajOdbijanjeZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajOdbijanjeZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajOdbijanjeZahtjev.fromXml(xml.root);\n } else {\n let el = xml as XmlElement;\n if (el.name === \"Envelope\" && el.namespaceUri === FISK_NS.soapenv) {\n const el2 = el.get(\"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajOdbijanjeZahtjev\", FISK_NS) as XmlElement | null;\n if (!el2) {\n throw new ValidationError(\"Expected 'EvidentirajOdbijanjeZahtjev' element in SOAP body\", xml);\n }\n el = el2;\n }\n if (el.name !== \"EvidentirajOdbijanjeZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(`Expected 'EvidentirajOdbijanjeZahtjev' element with namespace '${FISK_NS.eizv}'`, xml);\n }\n return EvidentirajOdbijanjeZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajOdbijanjeZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIzvjestavanje.fromXmlElement),\n Odbijanje: extractElements(el, \"eizv:Odbijanje\", FISK_NS, Odbijanje.fromXmlElement)\n };\n }\n}\n\nexport class EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev implements EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjevSerializable {\n _id: string;\n Zaglavlje: ZaglavljeIsporuka;\n Racun: Racun[];\n\n constructor(props: IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev) {\n this._id = props._id;\n this.Zaglavlje = new ZaglavljeIsporuka(props.Zaglavlje);\n this.Racun = props.Racun.map(i => new Racun(i));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += this.Zaglavlje.toXmlString();\n this.Racun.forEach(i => (res += i.toXmlString()));\n res += \"</eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev>\";\n return res;\n }\n\n public static fromXml(xml: string | Uint8Array | XmlDocument | XmlElement): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n if (typeof xml === \"string\") {\n return usingXmlDocument(XmlDocument.fromString(xml), doc => {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(doc);\n });\n } else if (Buffer.isBuffer(xml)) {\n return usingXmlDocument(XmlDocument.fromBuffer(xml), doc => {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(doc);\n });\n } else if (xml instanceof XmlDocument) {\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXml(xml.root);\n } else {\n const el = xml as XmlElement;\n if (el.name !== \"EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev\" || el.namespaceUri !== FISK_NS.eizv) {\n throw new ValidationError(\n `Expected 'EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev' element with namespace '${FISK_NS.eizv}'`,\n JSON.stringify({ name: el.name, namespaceUri: el.namespaceUri })\n );\n }\n return EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev.fromXmlElement(el);\n }\n }\n\n static fromXmlElement(el: XmlElement): IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev {\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n Zaglavlje: extractElement(el, \"eizv:Zaglavlje\", FISK_NS, ZaglavljeIsporuka.fromXmlElement),\n Racun: extractElements(el, \"eizv:Racun\", FISK_NS, Racun.fromXmlElement)\n };\n }\n}\n\nexport class ZaglavljeIzvjestavanje implements ZaglavljeIzvjestavanjeSerializable {\n datumVrijemeSlanja: string;\n\n constructor(props: IZaglavljeIzvjestavanje) {\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Zaglavlje>\";\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += \"</eizv:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeIzvjestavanje {\n return {\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" })\n };\n }\n}\n\nexport class ZaglavljeIsporuka implements ZaglavljeIsporukaSerializable {\n datumVrijemeSlanja: string;\n vrstaRacuna: string;\n\n constructor(props: IZaglavljeIsporuka) {\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.vrstaRacuna = props.vrstaRacuna;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Zaglavlje>\";\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += `<eizv:vrstaRacuna>${xmlEscape(this.vrstaRacuna)}</eizv:vrstaRacuna>`;\n res += \"</eizv:Zaglavlje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IZaglavljeIsporuka {\n return {\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\" }),\n // TODO: ovo bi trebalo uvijek biti `IR`\n vrstaRacuna: getElementContent(el, \"eizv:vrstaRacuna\", FISK_NS, { regexKey: \"vrstaERacuna\" })\n };\n }\n}\n\nexport class Naplata implements NaplataSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n oibPorezniBrojIzdavatelja: string;\n oibPorezniBrojPrimatelja: string;\n datumNaplate: string;\n naplaceniIznos: number;\n nacinPlacanja: string;\n\n constructor(props: INaplata) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.oibPorezniBrojIzdavatelja = props.oibPorezniBrojIzdavatelja;\n this.oibPorezniBrojPrimatelja = props.oibPorezniBrojPrimatelja;\n this.datumNaplate = props.datumNaplate;\n this.naplaceniIznos = props.naplaceniIznos;\n this.nacinPlacanja = props.nacinPlacanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Naplata>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:oibPorezniBrojIzdavatelja>${xmlEscape(this.oibPorezniBrojIzdavatelja)}</eizv:oibPorezniBrojIzdavatelja>`;\n res += `<eizv:oibPorezniBrojPrimatelja>${xmlEscape(this.oibPorezniBrojPrimatelja)}</eizv:oibPorezniBrojPrimatelja>`;\n res += `<eizv:datumNaplate>${xmlEscape(this.datumNaplate)}</eizv:datumNaplate>`;\n res += `<eizv:naplaceniIznos>${this.naplaceniIznos.toFixed(2)}</eizv:naplaceniIznos>`;\n res += `<eizv:nacinPlacanja>${xmlEscape(this.nacinPlacanja)}</eizv:nacinPlacanja>`;\n res += \"</eizv:Naplata>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): INaplata {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n oibPorezniBrojIzdavatelja: getElementContent(el, \"eizv:oibPorezniBrojIzdavatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n oibPorezniBrojPrimatelja: getElementContent(el, \"eizv:oibPorezniBrojPrimatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n datumNaplate: getElementContent(el, \"eizv:datumNaplate\", FISK_NS, { regexKey: \"datum\" }),\n naplaceniIznos: getElementContentNumber(el, \"eizv:naplaceniIznos\", FISK_NS, { regexKey: \"decimal2\" }),\n nacinPlacanja: getElementContent(el, \"eizv:nacinPlacanja\", FISK_NS, { regexKey: \"nacinPlacanja\" })\n };\n }\n}\n\nexport class Odbijanje implements OdbijanjeSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n oibPorezniBrojIzdavatelja: string;\n oibPorezniBrojPrimatelja: string;\n datumOdbijanja: string;\n vrstaRazlogaOdbijanja: string;\n razlogOdbijanja: string;\n\n constructor(props: IOdbijanje) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.oibPorezniBrojIzdavatelja = props.oibPorezniBrojIzdavatelja;\n this.oibPorezniBrojPrimatelja = props.oibPorezniBrojPrimatelja;\n this.datumOdbijanja = props.datumOdbijanja;\n this.vrstaRazlogaOdbijanja = props.vrstaRazlogaOdbijanja;\n this.razlogOdbijanja = props.razlogOdbijanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Odbijanje>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:oibPorezniBrojIzdavatelja>${xmlEscape(this.oibPorezniBrojIzdavatelja)}</eizv:oibPorezniBrojIzdavatelja>`;\n res += `<eizv:oibPorezniBrojPrimatelja>${xmlEscape(this.oibPorezniBrojPrimatelja)}</eizv:oibPorezniBrojPrimatelja>`;\n res += `<eizv:datumOdbijanja>${xmlEscape(this.datumOdbijanja)}</eizv:datumOdbijanja>`;\n res += `<eizv:vrstaRazlogaOdbijanja>${xmlEscape(this.vrstaRazlogaOdbijanja)}</eizv:vrstaRazlogaOdbijanja>`;\n res += `<eizv:razlogOdbijanja>${xmlEscape(this.razlogOdbijanja)}</eizv:razlogOdbijanja>`;\n res += \"</eizv:Odbijanje>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IOdbijanje {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n oibPorezniBrojIzdavatelja: getElementContent(el, \"eizv:oibPorezniBrojIzdavatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n oibPorezniBrojPrimatelja: getElementContent(el, \"eizv:oibPorezniBrojPrimatelja\", FISK_NS, { regexKey: \"tekst20\" }),\n datumOdbijanja: getElementContent(el, \"eizv:datumOdbijanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaRazlogaOdbijanja: getElementContent(el, \"eizv:vrstaRazlogaOdbijanja\", FISK_NS, { regexKey: \"razlogOdbijanja\" }),\n razlogOdbijanja: getElementContent(el, \"eizv:razlogOdbijanja\", FISK_NS, { regexKey: \"tekst1024\" })\n };\n }\n}\n\nexport class PrethodniRacun implements PrethodniRacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n\n constructor(args: IPrethodniRacun) {\n this.brojDokumenta = args.brojDokumenta;\n this.datumIzdavanja = args.datumIzdavanja;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:PrethodniRacun>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += \"</eizv:PrethodniRacun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IPrethodniRacun {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" })\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IPrethodniRacun[] | undefined {\n const groups = el.find(getBusinessGroupXpath(\"BG-3\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n return undefined;\n }\n return groups.map(groupEl => {\n return {\n brojDokumenta: getElementContent(groupEl, getBusinessTermXpath(\"BT-25\", type, \"BG-3\"), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(groupEl, getBusinessTermXpath(\"BT-26\", type, \"BG-3\"), UBL_NS, { regexKey: \"datum\" })\n };\n });\n }\n}\n\nexport class StavkaRacuna implements StavkaRacunaSerializable {\n kolicina: number;\n jedinicaMjere: string;\n neto: number;\n artiklNetoCijena: number;\n artiklBrutoCijena?: number | undefined;\n artiklOsnovnaKolicina?: number | undefined;\n artiklJedinicaMjereZaOsnovnuKolicinu?: string | undefined;\n artiklKategorijaPdv: string;\n artiklStopaPdv?: number | undefined;\n artiklNaziv: string;\n artiklOpis?: string | undefined;\n artiklHrOznakaKategorijaPdv?: string | undefined;\n ArtiklIdentifikatorKlasifikacija?: ArtiklIdentifikatorKlasifikacija[] | undefined;\n\n constructor(args: IStavkaRacuna) {\n this.kolicina = args.kolicina;\n this.jedinicaMjere = args.jedinicaMjere;\n this.neto = args.neto;\n this.artiklNetoCijena = args.artiklNetoCijena;\n this.artiklBrutoCijena = args.artiklBrutoCijena;\n this.artiklOsnovnaKolicina = args.artiklOsnovnaKolicina;\n this.artiklJedinicaMjereZaOsnovnuKolicinu = args.artiklJedinicaMjereZaOsnovnuKolicinu;\n this.artiklKategorijaPdv = args.artiklKategorijaPdv;\n this.artiklStopaPdv = args.artiklStopaPdv;\n this.artiklNaziv = args.artiklNaziv;\n this.artiklOpis = args.artiklOpis;\n this.artiklHrOznakaKategorijaPdv = args.artiklHrOznakaKategorijaPdv;\n this.ArtiklIdentifikatorKlasifikacija = args.ArtiklIdentifikatorKlasifikacija?.map(i => new ArtiklIdentifikatorKlasifikacija(i, \"eizv\"));\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:StavkaRacuna>\";\n res += `<eizv:kolicina>${this.kolicina.toFixed(2)}</eizv:kolicina>`;\n res += `<eizv:jedinicaMjere>${xmlEscape(this.jedinicaMjere)}</eizv:jedinicaMjere>`;\n res += `<eizv:neto>${this.neto.toFixed(2)}</eizv:neto>`;\n res += `<eizv:artiklNetoCijena>${this.artiklNetoCijena.toFixed(2)}</eizv:artiklNetoCijena>`;\n if (this.artiklBrutoCijena !== undefined) {\n res += `<eizv:artiklBrutoCijena>${this.artiklBrutoCijena.toFixed(2)}</eizv:artiklBrutoCijena>`;\n }\n if (this.artiklOsnovnaKolicina !== undefined) {\n res += `<eizv:artiklOsnovnaKolicina>${this.artiklOsnovnaKolicina.toFixed(2)}</eizv:artiklOsnovnaKolicina>`;\n }\n if (this.artiklJedinicaMjereZaOsnovnuKolicinu !== undefined) {\n res += `<eizv:artiklJedinicaMjereZaOsnovnuKolicinu>${xmlEscape(this.artiklJedinicaMjereZaOsnovnuKolicinu)}</eizv:artiklJedinicaMjereZaOsnovnuKolicinu>`;\n }\n res += `<eizv:artiklKategorijaPdv>${xmlEscape(this.artiklKategorijaPdv)}</eizv:artiklKategorijaPdv>`;\n if (this.artiklStopaPdv !== undefined) {\n res += `<eizv:artiklStopaPdv>${this.artiklStopaPdv.toFixed(2)}</eizv:artiklStopaPdv>`;\n }\n res += `<eizv:artiklNaziv>${xmlEscape(this.artiklNaziv)}</eizv:artiklNaziv>`;\n if (this.artiklOpis !== undefined) {\n res += `<eizv:artiklOpis>${xmlEscape(this.artiklOpis)}</eizv:artiklOpis>`;\n }\n if (this.artiklHrOznakaKategorijaPdv !== undefined) {\n res += `<eizv:artiklHrOznakaKategorijaPdv>${xmlEscape(this.artiklHrOznakaKategorijaPdv)}</eizv:artiklHrOznakaKategorijaPdv>`;\n }\n if (this.ArtiklIdentifikatorKlasifikacija) {\n this.ArtiklIdentifikatorKlasifikacija.forEach(a => (res += a.toXmlString()));\n }\n res += \"</eizv:StavkaRacuna>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IStavkaRacuna {\n return {\n kolicina: getElementContentNumber(el, \"eizv:kolicina\", FISK_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(el, \"eizv:jedinicaMjere\", FISK_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(el, \"eizv:neto\", FISK_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(el, \"eizv:artiklNetoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(el, \"eizv:artiklBrutoCijena\", FISK_NS, { regexKey: \"decimal\" }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(el, \"eizv:artiklOsnovnaKolicina\", FISK_NS, { regexKey: \"decimal\" }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(el, \"eizv:artiklJedinicaMjereZaOsnovnuKolicinu\", FISK_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(el, \"eizv:artiklKategorijaPdv\", FISK_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getOptionalElementContentNumber(el, \"eizv:artiklStopaPdv\", FISK_NS, { regexKey: \"decimal\" }),\n artiklNaziv: getElementContent(el, \"eizv:artiklNaziv\", FISK_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(el, \"eizv:artiklOpis\", FISK_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(el, \"eizv:artiklHrOznakaKategorijaPdv\", FISK_NS, { regexKey: \"hrKategorijaPdv\" }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(\n el,\n \"eizv:ArtiklIdentifikatorKlasifikacija\",\n FISK_NS,\n ArtiklIdentifikatorKlasifikacija.fromXmlElement\n )\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\") {\n const groups = el.find(getBusinessGroupXpath(\"BG-25\", type), UBL_NS) as XmlElement[];\n if (groups.length === 0) {\n throw new ValidationError(`Nije pronađena ni jedna grupa 'BG-25' u dokumentu '${type}'`, undefined);\n }\n return groups.map(groupEl => {\n return {\n kolicina: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-129\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n jedinicaMjere: getElementContent(groupEl, getBusinessTermXpath(\"BT-130\", type, \"BG-25\"), UBL_NS, { regexKey: \"jedinicaMjere\" }),\n neto: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-131\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal2\" }),\n artiklNetoCijena: getElementContentNumber(groupEl, getBusinessTermXpath(\"BT-146\", type, \"BG-25\"), UBL_NS, { regexKey: \"decimal\" }),\n artiklBrutoCijena: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-148\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklOsnovnaKolicina: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-149\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklJedinicaMjereZaOsnovnuKolicinu: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-150\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"jedinicaMjere\"\n }),\n artiklKategorijaPdv: getElementContent(groupEl, getBusinessTermXpath(\"BT-151\", type, \"BG-25\"), UBL_NS, { regexKey: \"kategorijaPdv\" }),\n artiklStopaPdv: getOptionalElementContentNumber(groupEl, getBusinessTermXpath(\"BT-152\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"decimal\"\n }),\n artiklNaziv: getElementContent(groupEl, getBusinessTermXpath(\"BT-153\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst100\" }),\n artiklOpis: getOptionalElementContent(groupEl, getBusinessTermXpath(\"BT-154\", type, \"BG-25\"), UBL_NS, { regexKey: \"tekst1024\" }),\n artiklHrOznakaKategorijaPdv: getOptionalElementContent(groupEl, getBusinessTermXpath(\"HR-BT-12\", type, \"BG-25\"), UBL_NS, {\n regexKey: \"hrKategorijaPdv\"\n }),\n ArtiklIdentifikatorKlasifikacija: extractOptionalElements(groupEl, getBusinessTermXpath(\"BT-158\", type, \"BG-25\"), UBL_NS, el =>\n ArtiklIdentifikatorKlasifikacija.fromUblElement(el, type)\n )\n };\n });\n }\n}\n\nexport class Racun implements RacunSerializable {\n brojDokumenta: string;\n datumIzdavanja: string;\n vrstaDokumenta: string;\n valutaRacuna: string;\n datumDospijecaPlacanja?: string;\n vrstaPoslovnogProcesa: string;\n referencaNaUgovor?: string;\n datumIsporuke?: string;\n PrethodniRacun?: PrethodniRacun[];\n Izdavatelj: Izdavatelj;\n Primatelj: Primatelj;\n PrijenosSredstava?: PrijenosSredstava[];\n DokumentUkupanIznos: DokumentUkupanIznos;\n RaspodjelaPdv: RaspodjelaPdv[];\n DokumentPopust?: DokumentPopust[];\n DokumentTrosak?: DokumentTrosak[];\n StavkaRacuna: StavkaRacuna[];\n indikatorKopije: boolean;\n\n constructor(props: IRacun) {\n this.brojDokumenta = props.brojDokumenta;\n this.datumIzdavanja = props.datumIzdavanja;\n this.vrstaDokumenta = props.vrstaDokumenta;\n this.valutaRacuna = props.valutaRacuna;\n this.datumDospijecaPlacanja = props.datumDospijecaPlacanja;\n this.vrstaPoslovnogProcesa = props.vrstaPoslovnogProcesa;\n this.referencaNaUgovor = props.referencaNaUgovor;\n this.datumIsporuke = props.datumIsporuke;\n if (props.PrethodniRacun) {\n this.PrethodniRacun = props.PrethodniRacun.map(i => new PrethodniRacun(i));\n }\n this.Izdavatelj = new Izdavatelj(props.Izdavatelj, \"eizv\");\n this.Primatelj = new Primatelj(props.Primatelj, \"eizv\");\n if (props.PrijenosSredstava) {\n this.PrijenosSredstava = props.PrijenosSredstava.map(i => new PrijenosSredstava(i, \"eizv\"));\n }\n this.DokumentUkupanIznos = new DokumentUkupanIznos(props.DokumentUkupanIznos, \"eizv\");\n this.RaspodjelaPdv = props.RaspodjelaPdv.map(i => new RaspodjelaPdv(i, \"eizv\"));\n this.DokumentPopust = props.DokumentPopust?.map(i => new DokumentPopust(i, \"eizv\"));\n this.DokumentTrosak = props.DokumentTrosak?.map(i => new DokumentTrosak(i, \"eizv\"));\n this.StavkaRacuna = props.StavkaRacuna.map(i => new StavkaRacuna(i));\n this.indikatorKopije = props.indikatorKopije;\n }\n\n toXmlString(): string {\n let res = \"\";\n res += \"<eizv:Racun>\";\n res += `<eizv:brojDokumenta>${xmlEscape(this.brojDokumenta)}</eizv:brojDokumenta>`;\n res += `<eizv:datumIzdavanja>${xmlEscape(this.datumIzdavanja)}</eizv:datumIzdavanja>`;\n res += `<eizv:vrstaDokumenta>${xmlEscape(this.vrstaDokumenta)}</eizv:vrstaDokumenta>`;\n res += `<eizv:valutaRacuna>${xmlEscape(this.valutaRacuna)}</eizv:valutaRacuna>`;\n if (this.datumDospijecaPlacanja) {\n res += `<eizv:datumDospijecaPlacanja>${xmlEscape(this.datumDospijecaPlacanja)}</eizv:datumDospijecaPlacanja>`;\n }\n res += `<eizv:vrstaPoslovnogProcesa>${xmlEscape(this.vrstaPoslovnogProcesa)}</eizv:vrstaPoslovnogProcesa>`;\n if (this.referencaNaUgovor) {\n res += `<eizv:referencaNaUgovor>${xmlEscape(this.referencaNaUgovor)}</eizv:referencaNaUgovor>`;\n }\n if (this.datumIsporuke) {\n res += `<eizv:datumIsporuke>${xmlEscape(this.datumIsporuke)}</eizv:datumIsporuke>`;\n }\n if (this.PrethodniRacun) {\n this.PrethodniRacun.forEach(i => {\n res += i.toXmlString();\n });\n }\n res += this.Izdavatelj.toXmlString();\n res += this.Primatelj.toXmlString();\n if (this.PrijenosSredstava) {\n this.PrijenosSredstava.forEach(i => (res += i.toXmlString()));\n }\n res += this.DokumentUkupanIznos.toXmlString();\n this.RaspodjelaPdv.forEach(i => (res += i.toXmlString()));\n if (this.DokumentPopust) {\n this.DokumentPopust.forEach(i => (res += i.toXmlString()));\n }\n if (this.DokumentTrosak) {\n this.DokumentTrosak.forEach(i => (res += i.toXmlString()));\n }\n this.StavkaRacuna.forEach(i => (res += i.toXmlString()));\n res += `<eizv:indikatorKopije>${this.indikatorKopije}</eizv:indikatorKopije>`;\n res += \"</eizv:Racun>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement): IRacun {\n return {\n brojDokumenta: getElementContent(el, \"eizv:brojDokumenta\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, \"eizv:datumIzdavanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, \"eizv:vrstaDokumenta\", FISK_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaRacuna: getElementContent(el, \"eizv:valutaRacuna\", FISK_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, \"eizv:datumDospijecaPlacanja\", FISK_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, \"eizv:vrstaPoslovnogProcesa\", FISK_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, \"eizv:referencaNaUgovor\", FISK_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, \"eizv:datumIsporuke\", FISK_NS, { regexKey: \"datum\" }),\n PrethodniRacun: extractOptionalElements(el, \"eizv:PrethodniRacun\", FISK_NS, PrethodniRacun.fromXmlElement),\n Izdavatelj: extractElement(el, \"eizv:Izdavatelj\", FISK_NS, Izdavatelj.fromXmlElement),\n Primatelj: extractElement(el, \"eizv:Primatelj\", FISK_NS, Primatelj.fromXmlElement),\n PrijenosSredstava: extractOptionalElements(el, \"eizv:PrijenosSredstava\", FISK_NS, PrijenosSredstava.fromXmlElement),\n DokumentUkupanIznos: extractElement(el, \"eizv:DokumentUkupanIznos\", FISK_NS, DokumentUkupanIznos.fromXmlElement),\n RaspodjelaPdv: extractElements(el, \"eizv:RaspodjelaPdv\", FISK_NS, RaspodjelaPdv.fromXmlElement),\n DokumentPopust: extractOptionalElements(el, \"eizv:DokumentPopust\", FISK_NS, DokumentPopust.fromXmlElement),\n DokumentTrosak: extractOptionalElements(el, \"eizv:DokumentTrosak\", FISK_NS, DokumentTrosak.fromXmlElement),\n StavkaRacuna: extractElements(el, \"eizv:StavkaRacuna\", FISK_NS, StavkaRacuna.fromXmlElement),\n indikatorKopije: getElementContent(el, \"eizv:indikatorKopije\", FISK_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n\n static fromUblElement(el: XmlElement, type: \"Invoice\" | \"CreditNote\"): IRacun {\n return {\n brojDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-1\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIzdavanja: getElementContent(el, getBusinessTermXpath(\"BT-2\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaDokumenta: getElementContent(el, getBusinessTermXpath(\"BT-3\", type), UBL_NS, { regexKey: \"vrstaDokumenta\" }),\n valutaRacuna: getElementContent(el, getBusinessTermXpath(\"BT-5\", type), UBL_NS, { regexKey: \"valuta\" }),\n datumDospijecaPlacanja: getOptionalElementContent(el, getBusinessTermXpath(\"BT-9\", type), UBL_NS, { regexKey: \"datum\" }),\n vrstaPoslovnogProcesa: getElementContent(el, getBusinessTermXpath(\"BT-23\", type), UBL_NS, { regexKey: \"tekst100\" }),\n referencaNaUgovor: getOptionalElementContent(el, getBusinessTermXpath(\"BT-12\", type), UBL_NS, { regexKey: \"tekst100\" }),\n datumIsporuke: getOptionalElementContent(el, getBusinessTermXpath(\"BT-72\", type), UBL_NS, { regexKey: \"datum\" }),\n PrethodniRacun: PrethodniRacun.fromUblElement(el, type),\n Izdavatelj: Izdavatelj.fromUblElement(el, type),\n Primatelj: Primatelj.fromUblElement(el, type),\n PrijenosSredstava: PrijenosSredstava.fromUblElement(el, type),\n DokumentUkupanIznos: DokumentUkupanIznos.fromUblElement(el, type),\n RaspodjelaPdv: RaspodjelaPdv.fromUblElement(el, type),\n DokumentPopust: DokumentPopust.fromUblElement(el, type),\n DokumentTrosak: DokumentTrosak.fromUblElement(el, type),\n StavkaRacuna: StavkaRacuna.fromUblElement(el, type),\n indikatorKopije: getOptionalElementContent(el, getBusinessTermXpath(\"HR-BT-1\", type), UBL_NS, { regexKey: \"boolean\" }) === \"true\"\n };\n }\n}\n\nexport class EvidentirajNaplatuOdgovor implements EvidentirajNaplatuOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajNaplatuOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajNaplatuOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajNaplatuOdgovor>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajNaplatuOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n\nexport class EvidentirajOdbijanjeOdgovor implements EvidentirajOdbijanjeOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajOdbijanjeOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajOdbijanjeOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajOdbijanjeOdgovor>\";\n return res;\n }\n\n static fromXmlElement(el: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): IEvidentirajOdbijanjeOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n\nexport class EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor implements EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovorSerializable {\n _id: string;\n datumVrijemeSlanja: string;\n Odgovor: Odgovor;\n\n constructor(props: IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor) {\n this._id = props._id;\n this.datumVrijemeSlanja = props.datumVrijemeSlanja;\n this.Odgovor = new Odgovor(props.Odgovor, \"eizv\");\n }\n\n toXmlString(): string {\n let res = \"\";\n res += `<eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor xmlns:eizv=\"${FISK_NS.eizv}\" eizv:id=\"${xmlEscape(this._id)}\">`;\n res += `<eizv:datumVrijemeSlanja>${xmlEscape(this.datumVrijemeSlanja)}</eizv:datumVrijemeSlanja>`;\n res += this.Odgovor.toXmlString();\n res += \"</eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor>\";\n return res;\n }\n\n static fromXmlElement(\n el: XmlElement,\n options?: { lenient?: boolean; errors?: ValidationError[] }\n ): IEvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor {\n const { lenient = false, errors } = options || {};\n return {\n _id: getAttributeValue(el, \"eizv:id\", FISK_NS),\n datumVrijemeSlanja: getElementContent(el, \"eizv:datumVrijemeSlanja\", FISK_NS, { regexKey: \"datumVrijemeDeci\", lenient, errors }),\n Odgovor: extractElement(el, \"eizv:Odgovor\", FISK_NS, odgovorEl => Odgovor.fromXmlElement(odgovorEl, options))\n };\n }\n}\n","export const FiskalizacijaService = {\n test: \"https://cis.porezna-uprava.hr:8511/FiskalizacijaService\",\n prod: \"https://cis.porezna-uprava.hr:8509/FiskalizacijaService\"\n};\n","import { pemToDer, SignedXml } from \"xml-crypto\";\nimport { Sha256 } from \"xml-crypto/lib/hash-algorithms.js\";\nimport type { SigningOptions } from \"../types\";\nimport { randomUUID } from \"node:crypto\";\nimport { usingXmlDocument } from \"./xml\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { FISK_NS } from \"../models/xml/const\";\nimport { extractPemCertificate, extractPemPrivateKey } from \"./cert\";\n\nexport class XmlSigner {\n private options: SigningOptions;\n\n private defaultOptions = {\n signatureAlgorithm: \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\",\n canonicalizationAlgorithm: \"http://www.w3.org/2001/10/xml-exc-c14n#\",\n digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\"\n };\n\n constructor(options: SigningOptions) {\n this.options = { ...this.defaultOptions, ...options };\n this.options.publicCert = extractPemCertificate(this.options.publicCert);\n this.options.privateKey = extractPemPrivateKey(this.options.privateKey);\n }\n\n static generateId(prefix?: string): string {\n return prefix ? `${prefix}-${randomUUID()}` : randomUUID();\n }\n\n private getXAdESContent(signatureId: string, signedPropertiesId: string, signingTime: string): string {\n let publicCertPem = this.options.publicCert;\n if (Buffer.isBuffer(publicCertPem)) {\n publicCertPem = publicCertPem.toString(\"utf8\");\n }\n const publicCertDer = pemToDer(publicCertPem);\n const publicCertDigest = new Sha256().getHash(publicCertDer);\n let res = \"\";\n res += `<xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#${signatureId}\">`;\n res += `<xades:SignedProperties Id=\"${signedPropertiesId}\">`;\n res += \"<xades:SignedSignatureProperties>\";\n res += `<xades:SigningTime>${signingTime}</xades:SigningTime>`;\n res += \"<xades:SigningCertificateV2><xades:Cert><xades:CertDigest>\";\n res += '<ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/>';\n res += `<ds:DigestValue>${publicCertDigest}</ds:DigestValue>`;\n res += \"</xades:CertDigest></xades:Cert></xades:SigningCertificateV2>\";\n res += \"</xades:SignedSignatureProperties>\";\n res += \"</xades:SignedProperties>\";\n res += \"</xades:QualifyingProperties>\";\n return res;\n }\n\n /**\n * Sign a fiscalization request XML document\n * @param xml - The XML string to sign\n * @param referenceURI - the value of the Id attribute to sign\n * @returns The signed XML string\n */\n signFiscalizationRequest(xml: string, referenceURI: string): string {\n const signatureId = XmlSigner.generateId(\"Sig\");\n const signedPropertiesId = XmlSigner.generateId(\"xades\");\n const signingTime = new Date().toISOString(); // TODO: provjeriti da li treba biti lokalno vrijeme ili može biti UTC\n\n // Create SignedXml instance\n const sig = new SignedXml({\n publicCert: this.options.publicCert,\n privateKey: this.options.privateKey,\n signatureAlgorithm: this.options.signatureAlgorithm,\n canonicalizationAlgorithm: this.options.canonicalizationAlgorithm,\n objects: [{ content: this.getXAdESContent(signatureId, signedPropertiesId, signingTime) }]\n });\n\n // Add reference to the entire document\n sig.addReference({\n xpath: `//*[@*[local-name()='id'] = '${referenceURI}']`,\n digestAlgorithm: this.options.digestAlgorithm,\n transforms: [\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\", \"http://www.w3.org/2001/10/xml-exc-c14n#\"]\n });\n\n // Add reference to the SignedProperties\n sig.addReference({\n xpath: `//*[@Id='${signedPropertiesId}']`,\n type: \"http://uri.etsi.org/01903#SignedProperties\",\n digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n transforms: [\"http://www.w3.org/2001/10/xml-exc-c14n#\"]\n });\n\n // Compute signature and insert it into the document\n sig.computeSignature(xml, {\n prefix: \"ds\",\n location: {\n reference: \"/*\",\n action: \"append\"\n },\n attrs: {\n Id: signatureId\n }\n });\n\n return sig.getSignedXml();\n }\n\n static isValidSignature(signedXml: string | Buffer): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert: string | Buffer): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert: string | Buffer, signature: XmlElement): boolean;\n static isValidSignature(signedXml: string | Buffer, publicCert?: string | Buffer, signature?: XmlElement): boolean {\n if (!signedXml) {\n throw new Error(\"Signed XML is required for signature validation\");\n }\n if (signature === undefined) {\n return usingXmlDocument(signedXml, doc => {\n const signature = doc.get(\"//ds:Signature\", FISK_NS) as XmlElement | null;\n if (!signature) {\n throw new Error(\"No signature found in the signed XML\");\n }\n if (publicCert === undefined) {\n const certElement = signature.get(\"ds:KeyInfo/ds:X509Data/ds:X509Certificate\", FISK_NS);\n if (!certElement) {\n throw new Error(\"No public certificate found in the signature\");\n }\n publicCert = certElement.content.trim();\n const pemCert = `-----BEGIN CERTIFICATE-----\\n${publicCert}\\n-----END CERTIFICATE-----`;\n return this.isValidSignature(signedXml, pemCert, signature);\n }\n return this.isValidSignature(signedXml, publicCert, signature);\n });\n }\n if (Buffer.isBuffer(signedXml)) {\n signedXml = signedXml.toString(\"utf8\");\n }\n const sig = new SignedXml({\n publicCert: extractPemCertificate(publicCert!)\n });\n sig.loadSignature(signature.toString({ format: false, noDeclaration: true }));\n try {\n return sig.checkSignature(signedXml);\n } catch (_error) {\n return false;\n }\n }\n}\n","export function extractPemCertificate(pem: string | Buffer): string {\n if (Buffer.isBuffer(pem)) {\n pem = pem.toString(\"utf8\");\n }\n const match = pem.match(/-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----/s);\n if (match && match[0]) {\n return match[0].trim();\n }\n throw new Error(\"Invalid PEM certificate format\");\n}\n\nexport function extractPemPrivateKey(pem: string | Buffer): string {\n if (Buffer.isBuffer(pem)) {\n pem = pem.toString(\"utf8\");\n }\n const match = pem.match(/-----BEGIN (?:RSA )?PRIVATE KEY-----(.*?)-----END (?:RSA )?PRIVATE KEY-----/s);\n if (match && match[0]) {\n return match[0].trim();\n }\n throw new Error(\"Invalid PEM private key format\");\n}\n","import { XmlSigner } from \"./util/signing\";\nimport { EvidentirajERacunOdgovor, EvidentirajERacunZahtjev } from \"./models/xml/fiskalizacija\";\nimport type {\n FiskalizacijaOptions,\n FiskalizacijaResult,\n IEvidentirajERacunZahtjev,\n IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n IEvidentirajNaplatuZahtjev,\n IEvidentirajOdbijanjeZahtjev,\n IGreska\n} from \"./types\";\nimport type { XmlElement } from \"libxml2-wasm\";\nimport { XmlDocument } from \"libxml2-wasm\";\nimport { FISK_NS } from \"./models/xml/const\";\nimport { usingXmlDocument } from \"./util/xml\";\nimport { postRequest } from \"./util/http\";\nimport { parseError, ValidationError } from \"./util/error\";\nimport {\n EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n EvidentirajNaplatuOdgovor,\n EvidentirajNaplatuZahtjev,\n EvidentirajOdbijanjeOdgovor,\n EvidentirajOdbijanjeZahtjev\n} from \"./models/xml/izvjestavanje\";\n\ninterface SerializableRequest {\n toXmlString(): string;\n _id: string;\n}\n\ninterface ParsedResponse {\n Odgovor: {\n prihvacenZahtjev: boolean;\n greska?: IGreska;\n };\n}\n\ntype RequestClass<TReqData, TReq extends SerializableRequest> = new (arg: TReqData) => TReq;\ntype ResponseClass<TRes extends ParsedResponse> = {\n fromXmlElement(elem: XmlElement, options?: { lenient?: boolean; errors?: ValidationError[] }): TRes;\n};\n\ninterface RequestConfig<TReqData, TReq extends SerializableRequest, TRes extends ParsedResponse> {\n RequestClass: RequestClass<TReqData, TReq>;\n ResponseClass: ResponseClass<TRes>;\n xpath: string;\n}\n\nexport class FiskalizacijaClient {\n private readonly signer: XmlSigner;\n private readonly options: FiskalizacijaOptions;\n\n constructor(options: FiskalizacijaOptions) {\n this.options = {\n timeout: 30000,\n headers: {\n \"Content-Type\": \"application/xml; charset=utf-8\",\n \"SOAPAction\": \"\"\n },\n ...options\n };\n\n this.signer = new XmlSigner(options);\n }\n\n private async execute<TReqData, TReq extends SerializableRequest, TRes extends ParsedResponse>(\n zahtjev: TReq | TReqData,\n config: RequestConfig<TReqData, TReq, TRes>\n ): Promise<FiskalizacijaResult<TReq, TRes>> {\n const result: FiskalizacijaResult<TReq, TRes> = { success: false };\n\n try {\n const requestInstance = zahtjev instanceof config.RequestClass ? zahtjev : new config.RequestClass(zahtjev as TReqData);\n\n result.reqObject = requestInstance;\n\n const signedXml = this.signer.signFiscalizationRequest(requestInstance.toXmlString(), requestInstance._id);\n const soap = this.generateSoapEnvelope(signedXml);\n result.soapReqRaw = soap;\n\n const { statusCode, data } = await postRequest(soap, this.options);\n result.httpStatusCode = statusCode;\n result.soapResRaw = data;\n\n try {\n result.soapResSignatureValid = XmlSigner.isValidSignature(result.soapResRaw);\n } catch (error) {\n result.soapResSignatureValid = false;\n result.error = parseError(error);\n }\n\n usingXmlDocument(XmlDocument.fromString(data), (doc: XmlDocument) => {\n const odgovorElement = doc.get(config.xpath, FISK_NS) as XmlElement;\n if (!odgovorElement) {\n throw new ValidationError(`HTTP ${statusCode} | ${config.xpath}`, data);\n }\n\n const resErrors: ValidationError[] = [];\n result.resObject = config.ResponseClass.fromXmlElement(odgovorElement, { lenient: true, errors: resErrors });\n\n if (resErrors.length > 0) {\n result.resErrors = resErrors.map(err => parseError(err));\n }\n\n result.success = result.resObject.Odgovor.prihvacenZahtjev && !result.resObject.Odgovor.greska;\n });\n } catch (error) {\n result.error = parseError(error);\n }\n\n return result;\n }\n\n async evidentirajERacun(zahtjev: IEvidentirajERacunZahtjev | EvidentirajERacunZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajERacunZahtjev,\n ResponseClass: EvidentirajERacunOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/efis:EvidentirajERacunOdgovor\"\n });\n }\n\n async evidentirajNaplatu(zahtjev: IEvidentirajNaplatuZahtjev | EvidentirajNaplatuZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajNaplatuZahtjev,\n ResponseClass: EvidentirajNaplatuOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajNaplatuOdgovor\"\n });\n }\n\n async evidentirajOdbijanje(zahtjev: IEvidentirajOdbijanjeZahtjev | EvidentirajOdbijanjeZahtjev) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajOdbijanjeZahtjev,\n ResponseClass: EvidentirajOdbijanjeOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajOdbijanjeOdgovor\"\n });\n }\n\n async evidentirajIsporukuZaKojuNijeIzdanERacun(\n zahtjev: IEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev | EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev\n ) {\n return this.execute(zahtjev, {\n RequestClass: EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev,\n ResponseClass: EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor,\n xpath: \"/soapenv:Envelope/soapenv:Body/eizv:EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor\"\n });\n }\n\n private generateSoapEnvelope(body: string, withXmlDec: boolean = true): string {\n let res = \"\";\n if (withXmlDec) {\n res += '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';\n }\n res += '<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">';\n res += \"<soap:Body>\";\n res += body;\n res += \"</soap:Body>\";\n res += \"</soap:Envelope>\";\n return res;\n }\n}\n","import https from \"node:https\";\nimport { URL } from \"node:url\";\nimport type { FiskalizacijaOptions } from \"../types\";\n\nconst defaultOptions: Partial<FiskalizacijaOptions> = {\n timeout: 30000,\n allowSelfSigned: false\n};\n\nexport async function postRequest(data: string, userOptions: FiskalizacijaOptions): Promise<{ statusCode: number; data: string }> {\n const options = { ...defaultOptions, ...userOptions };\n const url = new URL(options.service);\n\n const agentOptions: https.AgentOptions = {\n rejectUnauthorized: !options.allowSelfSigned\n };\n\n if (options.ca) {\n agentOptions.ca = options.ca;\n }\n\n const httpsAgent = new https.Agent(agentOptions);\n\n return new Promise((resolve, reject) => {\n const req = https.request(\n {\n hostname: url.hostname,\n port: url.port || 443,\n path: url.pathname + url.search,\n method: \"POST\",\n headers: {\n ...options.headers,\n \"Content-Length\": Buffer.byteLength(data)\n },\n agent: httpsAgent,\n timeout: options.timeout\n },\n res => {\n let body = \"\";\n res.setEncoding(\"utf8\");\n res.on(\"data\", chunk => (body += chunk));\n res.on(\"end\", () => {\n resolve({\n statusCode: res.statusCode ?? 0,\n data: body\n });\n });\n }\n );\n\n req.on(\"error\", reject);\n req.on(\"timeout\", () => {\n req.destroy(new Error(\"Request timed out\"));\n });\n\n req.write(data);\n req.end();\n });\n}\n"],"mappings":"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,uBACA,qBACA,wBACA,wBACA,aACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,mDACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,wBACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,wBACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,iDACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,4BACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,4BACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,2BACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,UACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,qBACA,wBACA,wBACA,UACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,2BACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,+BACA,wBACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,+BACA,wBACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,uBACN,MAAO,CACH,QAAS,CACL,iBACA,gBACA,uBACA,uBACA,+BACA,+BACJ,EACA,WAAY,CACR,iBACA,gBACA,uBACA,uBACA,+BACA,+BACJ,CACJ,CACJ,EACA,WAAY,CACR,GAAI,WACJ,KAAM,sBACN,MAAO,CACH,QAAS,CAAC,iBAAkB,gBAAiB,uBAAwB,uBAAwB,qBAAsB,eAAe,EAClI,WAAY,CAAC,iBAAkB,gBAAiB,uBAAwB,uBAAwB,qBAAsB,eAAe,CACzI,CACJ,CACJ,ECvoDO,IAAMC,GAAsD,CAC/D,OAAQ,CACJ,GAAI,OACJ,KAAM,yBACN,MAAO,CACH,QAAS,CAAC,EACV,WAAY,CAAC,CACjB,CACJ,EACA,OAAQ,CACJ,GAAI,OACJ,KAAM,oBACN,MAAO,CACH,QAAS,CAAC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","names":["getCurrentDateTimeString","now","pad","number","length","padMilliseconds","ms","year","month","day","hours","minutes","seconds","milliseconds","getEvidentirajERacunZahtjev","vrsta","eracun","getCurrentDateTimeString","getEvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","racun","getEvidentirajNaplatuZahtjev","naplata","getEvidentirajOdbijanjeZahtjev","odbijanje","XmlDocument","XmlDocument","REGEX","BUSINESS_TERMS","BUSINESS_GROUPS","ValidationError","message","value","parseError","error","removePrefix","str","prefix","getBusinessTermXpath","id","type","group","term","BUSINESS_TERMS","getBusinessGroupXpath","BUSINESS_GROUPS","getElementContent","parentEl","tag","ns","options","regexKey","lenient","errors","el","ValidationError","REGEX","err","getOptionalElementContent","getElementContentNumber","content","num","getOptionalElementContentNumber","extractElement","fn","extractOptionalElement","extractElements","elements","extractOptionalElements","getOptionalAttributeValue","name","xpath","attrs","value","getAttributeValue","xmlEscape","val","usingXmlDocument","doc","XmlDocument","FISK_NS","getFiskNsPrefix","namespaceUri","UBL_NS","XmlDocument","Izdavatelj","args","prefix","res","xmlEscape","el","getFiskNsPrefix","getElementContent","FISK_NS","type","groupEl","getBusinessGroupXpath","UBL_NS","ValidationError","getBusinessTermXpath","Primatelj","PrijenosSredstava","getOptionalElementContent","groups","DokumentUkupanIznos","getElementContentNumber","getOptionalElementContentNumber","RaspodjelaPdv","hrfiskGroups","ArtiklIdentifikatorKlasifikacija","_type","getAttributeValue","getOptionalAttributeValue","Odgovor","props","Greska","options","lenient","errors","extractOptionalElement","greskaEl","DokumentPopust","DokumentTrosak","EvidentirajERacunZahtjev","_EvidentirajERacunZahtjev","args","ZaglavljeFiskalizacija","eracun","ERacun","xml","usingXmlDocument","XmlDocument","doc","el","FISK_NS","el2","ValidationError","getAttributeValue","extractElement","extractElements","res","xmlEscape","getElementContent","i","PrethodniERacun","Izdavatelj","Primatelj","PrijenosSredstava","DokumentUkupanIznos","RaspodjelaPdv","DokumentPopust","DokumentTrosak","StavkaERacuna","getOptionalElementContent","extractOptionalElements","type","getBusinessTermXpath","UBL_NS","groups","getBusinessGroupXpath","groupEl","ArtiklIdentifikatorKlasifikacija","getElementContentNumber","getOptionalElementContentNumber","EvidentirajERacunOdgovor","Odgovor","options","lenient","errors","odgovorEl","XmlDocument","EvidentirajNaplatuZahtjev","_EvidentirajNaplatuZahtjev","props","ZaglavljeIzvjestavanje","i","Naplata","res","FISK_NS","xmlEscape","xml","usingXmlDocument","XmlDocument","doc","el","el2","ValidationError","getAttributeValue","extractElement","extractElements","EvidentirajOdbijanjeZahtjev","_EvidentirajOdbijanjeZahtjev","Odbijanje","EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","_EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","ZaglavljeIsporuka","Racun","getElementContent","getElementContentNumber","PrethodniRacun","args","type","groups","getBusinessGroupXpath","UBL_NS","groupEl","getBusinessTermXpath","StavkaRacuna","ArtiklIdentifikatorKlasifikacija","getOptionalElementContentNumber","getOptionalElementContent","extractOptionalElements","Izdavatelj","Primatelj","PrijenosSredstava","DokumentUkupanIznos","RaspodjelaPdv","DokumentPopust","DokumentTrosak","EvidentirajNaplatuOdgovor","Odgovor","options","lenient","errors","odgovorEl","EvidentirajOdbijanjeOdgovor","EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor","FiskalizacijaService","getERacunFromUbl","doc","XmlDocument","usingXmlDocument","xmlDoc","el","type","ValidationError","ERacun","getRacunFromUbl","Racun","pemToDer","SignedXml","Sha256","randomUUID","extractPemCertificate","pem","match","extractPemPrivateKey","XmlSigner","_XmlSigner","options","extractPemCertificate","extractPemPrivateKey","prefix","randomUUID","signatureId","signedPropertiesId","signingTime","publicCertPem","publicCertDer","pemToDer","publicCertDigest","Sha256","res","xml","referenceURI","sig","SignedXml","signedXml","publicCert","signature","usingXmlDocument","doc","FISK_NS","certElement","pemCert","XmlDocument","https","URL","defaultOptions","postRequest","data","userOptions","options","url","agentOptions","httpsAgent","resolve","reject","req","res","body","chunk","FiskalizacijaClient","options","XmlSigner","zahtjev","config","result","requestInstance","signedXml","soap","statusCode","data","postRequest","error","parseError","usingXmlDocument","XmlDocument","doc","odgovorElement","FISK_NS","ValidationError","resErrors","err","EvidentirajERacunZahtjev","EvidentirajERacunOdgovor","EvidentirajNaplatuZahtjev","EvidentirajNaplatuOdgovor","EvidentirajOdbijanjeZahtjev","EvidentirajOdbijanjeOdgovor","EvidentirajIsporukuZaKojuNijeIzdanERacunZahtjev","EvidentirajIsporukuZaKojuNijeIzdanERacunOdgovor","body","withXmlDec","res"]}