Zadnja izmjena: 31.01.2026 12:35:43

📄 TXT2INV Plugin - Vodič za programere

O TXT2INV pluginu:
TXT2INV je plugin za konverziju jednostavnog INI property-based formata u standard UBL 2.1 Invoice XML dokument. Plugin omogućava jednostavno kreiranje UBL računa bez poznavanja složene XML strukture.

🎯 Ključne prednosti:

📋 Sadržaj

🚀 Osnove rada s pluginom

graph TD A[1. Kreiranje INI datoteke
sa podacima računa] --> B[2. Slanje INI podataka
TXT2INV pluginu] B --> C{Odabir načina
obrade} C -->|Parse| D[3a. Konverzija u JSON] C -->|XML| E[3b. Generiranje UBL XML] D --> F[4. Pregled/Validacija JSON] E --> G[4. Pregled/Validacija XML] F --> H[5. Slanje provajderu
DOKU/ePoslovanje] G --> H style A fill:#e1f5ff style B fill:#e1f5ff style C fill:#fff4e1 style D fill:#e1ffe1 style E fill:#e1ffe1 style F fill:#ffe1f5 style G fill:#ffe1f5 style H fill:#ffe8e1
✅ Prednosti TXT2INV plugina:

📝 INI format strukture

📄Root level fields ⚠️ BITNE PROMJENE
Polje Opis Status Default
INIVERSION Verzija INI formata.Ne koristi se u pretvorbi OPCIONALNO 1
ProfileID BT-23: Business process type (P1-P12, P99) - OBAVEZNO za HR-BR-34 OBAVEZNO P1
ID BT-1: Invoice number - Broj računa OBAVEZNO -
CopyIndicator HR-BT-1: Copy indicator - Indikator kopije računa

Vrijednosti:
true = Kopija već poslanog računa (šalje se pod istim brojem)
false = Izvornik (prvi put poslan)

⚠️ VAŽNO:
• Element se NE dodaje u XML ako nije eksplicitno naveden
• Koristi se kada se ispravlja podatak koji ne utječe na obračun poreza
• Račun se šalje pod istim brojem (ID) s vrijednošću CopyIndicator=true

Primjer uporabe (slanje kopije):
ID=120-221-1
CopyIndicator=true
IssueDate=2026-01-22
OPCIONALNO -
IssueDate BT-2: Invoice issue date - Datum izdavanja (YYYY-MM-DD) OBAVEZNO -
IssueTime Vrijeme izdavanja (HH:MM:SS) OBAVEZNO -
TaxPointDate BT-7: Tax point date - Datum nastanka porezne obveze (YYYY-MM-DD)

Kada koristiti:
• Kada je datum nastanka PDV obveze različit od datuma izdavanja računa (IssueDate)
POŽELJNO ako je naveden PDVpoNaplati - označava datum stvarne naplate
• Ako nije naveden, smatra se da je jednak IssueDate-u

Primjeri uporabe:
• Račun izdan 15.01.2026, naplata 20.01.2026 → TaxPointDate=2026-01-20
• Predujam naplačen 10.12.2025, račun izdan 05.01.2026 → TaxPointDate=2025-12-10
• Isporuka izvršena 25.01.2026, račun izdan 30.01.2026 → TaxPointDate=2026-01-25
OPCIONALNO -
TypeCode BT-3: Invoice type code

Standardni tipovi za Invoice:
380 = Commercial invoice (standardni račun)
384 = Corrected invoice (ispravak računa)
389 = Self-billed invoice (samofaktura)

Tipovi za CreditNote (Odobrenje):
381 = Credit note (odobrenje)
83, 261, 262, 296, 308, 386, 396, 420, 458, 532 (ostale vrste kreditnih dokumenata)

⚠️ VAŽNO:
Korištenjem TypeCode-a iz CreditNote liste automatski se kreira <CreditNote> dokument umjesto <Invoice> dokumenta.

NAPOMENA za CreditNote:
• Stavke trebaju biti pozitivne vrijednosti (dokument sam označava kredit)
Exempt od KPD koda (HR-BR-25 pravilo)
• BillingReference.InvoiceID opcionalan (može biti blanket referenca)
OPCIONALNO 380
CurrencyCode BT-5: Invoice currency code (EUR) OPCIONALNO EUR
OrderReference.ID BT-13: Purchase order reference - Broj narudžbenice OPCIONALNO -
OrderReference.SalesOrderID BT-14: Sales order reference - Broj prodajnog naloga OPCIONALNO -
ContractDocumentReference.ID BT-12: Contract reference - Referenca na ugovor na koji se račun odnosi (npr. 'Ugovor br.012-2025') OPCIONALNO -
BillingReference.InvoiceID BT-25: Preceding Invoice reference - Referenca na dokument (broj računa, ugovora, bonus ID, itd.). OBAVEZNO za TypeCode=384 (Corrected Invoice), opcionalno za TypeCode=381 (CreditNote). Primjeri: '2025-1-55', 'GODISNJI-BONUS-2025', 'UG-2024-123' OPCIONALNO -
BillingReference.IssueDate BT-26: Preceding Invoice issue date - Datum izdavanja referentnog dokumenta (YYYY-MM-DD). Opcionalno polje. OPCIONALNO -
PrepaidAmount BT-113: Paid amount - Plaćeni iznos u naprijed (avans/kapara/akontacija). PayableAmount = TaxInclusiveAmount - PrepaidAmount OPCIONALNO -
Notes BT-22: Invoice notes - napomena na razini računa. Podržava više napomena odvojenih sa ; ili \n

Primjer sa semicolon separatorom:
Notes=Na dan 09.02.2025 Vaš dospjeli dug iznosi 79.78 €.;Vrijeme izdavanja: 14:50:07;Oznaka operatera: admin admin

Primjer sa newline separatorom:
Notes=Na dan 09.02.2025 Vaš dospjeli dug iznosi 79.78 €.
Vrijeme izdavanja: 14:50:07
Oznaka operatera: admin admin


Svaka napomena će biti zasebni <cbc:Note> element u XML-u.
OPCIONALNO -
PDVpoNaplati HR-BT-15: Obračun PDV-a po naplaćenoj naknadi
Napomena: Prihvaća i stari naziv 'HRObracunPDVPoNaplati' zbog kompatibilnosti.
NOVA LOGIKA:
Bilo koja vrijednost - generira službeni tekst: "Obračun PDVa prema naplačenoj naknadi"
Vlastiti tekst (>5 znakova) - koristi navedeni tekst u XML-u
Odsutno ili prazan - element se NE dodaje u XML (Obračun pdv-a NIJE po naplati)

⚠️ UKRATKO: Čim polje postoji i nije prazno, smatra se da je račun po naplati, bez obzira što piše!

💡 PREPORUKA: Ako koristite PDVpoNaplati, obavezno navedite TaxPointDate (BT-7) koji označava datum stvarne naplate - to je datum kada nastaje porezna obveza, a ne datum izdavanja računa.
OPCIONALNO -
🏪Supplier fields
Polje Opis Status Default
Name BT-27: Seller name - Naziv prodavatelja OBAVEZNO -
RegistrationName Registrirano ime (ako različito od Name) OPCIONALNO -
CompanyID BT-30: Seller legal registration - OIB
NAPOMENA: Ovo polje automatski popunjava:
• Endpoint.ID (9934:OIB)
• PartyIdentification.ID
• VAT.ID (HR + OIB)
Ne trebaš navoditi ta polja eksplicitno!

BR-O-02: Ako BILO KOJA stavka ima VAT kategoriju 'O' (Not subject to VAT), OIB se NEĆE generirati u PartyTaxScheme (BT-31) jer to zahtijeva EN16931 standard.
OBAVEZNO -
CompanyLegalForm Pravni oblik tvrtke (npr. 'Osnovano na trgovačkom sudu, temeljni kapital 20.000 EUR') OPCIONALNO -
VAT.Scheme Porezni status prodavatelja (VAT ili FRE).

Vrijednosti:
VAT = U sustavu PDV-a (default)
FRE = Nije u sustavu PDV-a (free of VAT)

Napomena: Ako nije naveden, automatski se koristi 'VAT'.
OPCIONALNO VAT
Address.Street BT-35: Seller address line 1 - Ulica i broj OBAVEZNO -
Address.City BT-37: Seller city - Grad OBAVEZNO -
Address.ZIP BT-38: Seller post code - Poštanski broj OBAVEZNO -
Address.Country BT-40: Seller country code (HR) OPCIONALNO HR
Contact.Name BT-41: Seller contact point - Kontakt osoba OPCIONALNO -
Contact.Email BT-43: Seller contact email OPCIONALNO -
Operator.Code Oznaka operatera - Preporučeno za HR-BR-37, ima fallback mehanizam OBAVEZNO -
Operator.OIB OIB operatera - Preporučeno za HR-BR-09, kondicionalno dodaje SellerContact OBAVEZNO -
💡 Napomena: CompanyID je obavezan i koristi se kao fallback za Endpoint.ID i PartyIdentification.ID ako nisu eksplicitno navedeni.
👤Customer fields
Polje Opis Status Default
Name BT-44: Buyer name - Naziv kupca OBAVEZNO -
RegistrationName Registrirano ime (ako različito od Name) OPCIONALNO -
CompanyID BT-47: Buyer legal registration - OIB
NAPOMENA: Ovo polje automatski popunjava:
• Endpoint.ID (9934:OIB)
• PartyIdentification.ID
• VAT.ID (HR + OIB)
Ne trebaš navoditi ta polja eksplicitno!

BR-O-02: Ako BILO KOJA stavka ima VAT kategoriju 'O' (Not subject to VAT), OIB se NEĆE generirati u PartyTaxScheme (BT-48) jer to zahtijeva EN16931 standard.
OBAVEZNO -
CompanyLegalForm Pravni oblik tvrtke (npr. 'Osnovano na trgovačkom sudu, temeljni kapital 20.000 EUR') OPCIONALNO -
VAT.Scheme Porezni status kupca (VAT ili FRE).

Vrijednosti:
VAT = U sustavu PDV-a (ZADANO)
FRE = Nije u sustavu PDV-a

⚠️ VAŽNO:
• Zadana vrijednost je VAT jer je većina kupaca u sustavu PDV-a
• Eksplicitno navedi FRE samo za fizičke osobe ili paušalce koji nisu u sustavu PDV-a
OPCIONALNO VAT
Address.Street BT-50: Buyer address line 1 - Ulica i broj OBAVEZNO -
Address.City BT-52: Buyer city - Grad OBAVEZNO -
Address.ZIP BT-53: Buyer post code - Poštanski broj OBAVEZNO -
Address.Country BT-55: Buyer country code (HR) OBAVEZNO HR
Contact.Name BT-56: Buyer contact point OPCIONALNO -
Contact.Email BT-58: Buyer contact email OPCIONALNO -
💳Payment fields - Podaci o plaćanju
Polje Opis Status Default
DueDate BT-9: Payment due date - Datum dospijeća (YYYY-MM-DD)

⚠️ HR-BR-4 pravilo:
OBAVEZNO za Invoice (TypeCode 380, 384, 389...) ako je PayableAmount > 0
NIJE obavezno za CreditNote (TypeCode 381, 83, 261...) jer je PayableAmount negativan
• Alternativno može postojati PaymentTerms/Note (BT-20) umjesto DueDate-a

Napomena: Za račune koji NE zahtijevaju plaćanje (PayableAmount ≤ 0), DueDate nije potreban.
OPCIONALNO -
MeansCode BT-81: Payment means type code - MANDATORY po UBL 2.1 specifikaciji ako postoji PaymentMeans element.

DEFAULT: 30 (automatski se postavlja ako je naveden Account)

Standardni kodovi (UNTDID 4461):
30 = Credit Transfer (virman/prenos na račun)
10 = Cash (gotovina)
48 = Card Payment (kartica)
49 = Direct Debit (direktno terećenje)
42 = Payment to bank account (plaćanje na bankovni račun)

Napomena: Ako navedete samo Account (IBAN), MeansCode se automatski postavlja na 30 (virman).
OPCIONALNO 30
MeansText BT-82: Payment means text - Tekstualni opis načina plaćanja (npr. 'Virman', 'Gotovina', 'Kartica') OPCIONALNO -
InstructionNote BT-82: Payment instruction note - Napomena o plaćanju (npr. 'Opis plaćanja', 'Platiti u roku 15 dana') OPCIONALNO -
Account BT-84: Payment account identifier - IBAN račun primatelja plaćanja (koristi se i za generiranje barcode-a)

⚠️ VAŽNO: Navođenjem ovog polja automatski se kreira PaymentMeans element s MeansCode=30 (Credit Transfer) ako MeansCode nije eksplicitno naveden.
OPCIONALNO -
Model Model plaćanja za barcode i PaymentID - hrvatski modeli (HR00, HR01, HR02, HR03...)

Kombinira se s Reference poljem u format 'HR00 1234567-1-5555' za PaymentID element.
OPCIONALNO -
Reference Poziv na broj (referenca) za barcode i PaymentID

Primjeri: '1234567-1-5555', '00-12345-67890'
OPCIONALNO -
IncludeBarcode Generira barcode za plaćanje - podržani formati:
QRCODE = QR kod (moderni format)
PDF417 = PDF417 barcode (stariji format)

Napomena: Za generiranje barcode-a obavezna su polja: Account, Model, Reference
OPCIONALNO -
_note ⚠️ VAŽNA PRAVILA ZA PAYMENT SEKCIJU:

HR-BR-4 pravilo o DueDate-u:
• Za Invoice (TypeCode 380, 384, 389...): Ako je PayableAmount > 0 → DueDate je OBAVEZAN
• Za CreditNote (TypeCode 381, 83, 261...): DueDate NIJE obavezan (PayableAmount je negativan)

PaymentMeans logika:
• Prema UBL 2.1 XSD shemi: PaymentMeans element je OPCIONALAN (minOccurs=0)
• PaymentMeansCode je MANDATORY samo AKO postoji PaymentMeans element
• Ako navedete Payment.Account → automatski se kreira PaymentMeans s MeansCode=30
• Ako ne navedete NIŠTA iz Payment grupe → PaymentMeans se NEĆE generirati (validan XML)
OPCIONALNO -
🚚Delivery fields (Opcionalno) - Podaci o isporuci robe/usluga
Polje Opis Status Default
ActualDeliveryDate Datum stvarne isporuke (YYYY-MM-DD) OPCIONALNO -
Location.Street Ulica adrese mjesta isporuke OPCIONALNO -
Location.City Grad mjesta isporuke OPCIONALNO -
Location.ZIP Poštanski broj mjesta isporuke OPCIONALNO -
Location.Country Država mjesta isporuke (ISO kod, npr. HR) OPCIONALNO HR
DeliveryParty.Name Naziv stranke koja prima isporuku (ako nije kupac) OPCIONALNO -
📦Invoice line fields
Polje Opis Status Default
Quantity BT-129: Invoiced quantity - Količina OBAVEZNO -
QuantityUnit BT-130: Unit of measure (H87=Piece, KGM=Kilogram, MTR=Meter) OPCIONALNO H87
ExtensionAmount BT-131: Invoice line net amount - Neto iznos stavke (VP vrijednost robe sa oduzetim rabatom) OBAVEZNO -
Price BT-146: Item net price - VP cijena po jedinici (VP cijena prije rabata) OBAVEZNO -
BaseQuantity BT-149: Item price base quantity - navedi samo ako cijena nije za 1 jedinicu (npr. 100 EUR za 10 kom) OPCIONALNO -
Name BT-153: Item name - Naziv proizvoda/usluge OBAVEZNO -
Description BT-154: Item description - Opis proizvoda/usluge OPCIONALNO -
SellersItemID Šifra artikla dobavljača OPCIONALNO -
BuyersItemID Šifra artikla kupca OPCIONALNO -
Classification BT-158: Item classification identifier - KPD kod OBAVEZNO -
ClassificationListID BT-158-1: Scheme identifier (listID) - Automatski default 'CG' ako je naveden Classification OPCIONALNO CG
Tax.Category BT-151: Tax category code (S, Z, E, O) OBAVEZNO -
Tax.CategoryName Naziv kategorije (HR:PDV25, HR:S13, HR:S5, HR:POVNAK) OBAVEZNO -
Tax.Percent BT-152: Tax rate percentage - Porezna stopa (25.00, 13.00, 5.00, 0.00) OBAVEZNO -
Tax.ExemptionReason BT-121: Tax exemption reason - Razlog oslobođenja

⚠️ VAŽNO (HR-BR-36 i BR-O-10):
OBAVEZNO za kategoriju O (Not subject to VAT)
OBAVEZNO za kategoriju E (Exempt from VAT)

✅ AUTO-GENERACIJA (txt2inv.java):
Ako nije naveden, plugin automatski generiše službeni tekst za:
  - HR:POVNAK: 'Povratna naknada za jednokratnu ambalažu (trošak POVNAK je prolazna stavka koja ne ulazi u poreznu osnovicu - čl. 33. st. 3)'
  - HR:PP: 'Posebni porez na potrošnju u ugostiteljstvu (trošak PPUG je prolazna stavka čl. 33. st. 3)'
  - HR:PPMV: 'Posebni porez na motorna vozila'
  - HR:E: 'Oslobođeno od PDV-a'

📝 Napomena: Ako želite vlastiti tekst, unesite ga ovdje i on će se koristiti umjesto auto-generiranog.

Primjeri vlastitog teksta:
• POVNAK - prolazna stavka
• PP 3% - ugostiteljstvo
• PPMV - luksuzna vozila
• Oslobođeno čl. 39 st. 1
OPCIONALNO -
Tax.ExemptionReasonCode BT-121-1: Exemption reason code OPCIONALNO -
Tax.Scheme Tax scheme (VAT) OPCIONALNO VAT
AdditionalItemProperty.Name Naziv dodatnog atributa (ponovljivo bez broja u [Line]: ključ možeš navesti više puta; svaki sljedeći Name/Value par postaje novi AdditionalItemProperty) OPCIONALNO -
AdditionalItemProperty.Value Vrijednost dodatnog atributa (ponovljivo bez broja u [Line]: navodi se uz pripadni Name; ponovi Name+Value za svaki novi par.) OPCIONALNO -
AllowanceCharge.ChargeIndicator true=Dodatna naplata, false=Popust OPCIONALNO false
AllowanceCharge.Amount METODA 1 - Direktni unos: Iznos popusta/naplate (uvjek pozitivan iznos)

Primjer: AllowanceCharge.Amount=53.60 (popust od 53.60 EUR)

⚠️ NAPOMENA: Koristi METODU 1 (Amount) ILI METODU 2 (BaseAmount + MultiplierFactorNumeric), ne oboje!
OPCIONALNO -
AllowanceCharge.BaseAmount METODA 2 (dio 1/2) - Osnovna vrijednost: VP vrijednost prije rabata

⚠️ Koristi se ZAJEDNO sa MultiplierFactorNumeric!

Formula auto-kalkulacije:
Amount = BaseAmount × (MultiplierFactorNumeric ÷ 100)

Primjer kompletnog unosa (oba polja):
AllowanceCharge.BaseAmount=1053.60
AllowanceCharge.MultiplierFactorNumeric=5.09

→ Plugin automatski računa: Amount = 1053.60 × 0.0509 = 53.60 EUR

💡 KADA KORISTITI METODU 2: Kad imaš VP cijenu i postotak rabata (npr. '5.09% popusta na 1053.60 EUR')
OPCIONALNO -
AllowanceCharge.MultiplierFactorNumeric METODA 2 (dio 2/2) - Postotak: Postotak popusta/naplate

⚠️ Koristi se ZAJEDNO sa BaseAmount!

Unosi se kao decimalni broj (NE kao razlomak):
• 5.09 = 5.09% popusta
• 10 = 10% popusta
• 2.5 = 2.5% popusta

Primjer kompletnog unosa (oba polja):
AllowanceCharge.ChargeIndicator=false
AllowanceCharge.BaseAmount=1053.60
AllowanceCharge.MultiplierFactorNumeric=5.09
AllowanceCharge.AllowanceChargeReason=Količinski rabat

→ Rezultat: 53.60 EUR popusta (5.09% od 1053.60 EUR)

⚠️ BEZ BaseAmount polja ovo se ignorira!
OPCIONALNO -
AllowanceCharge.AllowanceChargeReason Razlog popusta/naplate (npr. Količinski rabat, Sezonski popust) OPCIONALNO -
AllowanceCharge.AllowanceChargeReasonCode BT-140: Kod razloga (95=Discount, 100=Special agreement) OPCIONALNO -
⚠️ Važno:
  • Classification mora biti validan KPD kod (listID=CG)
  • Tax.CategoryName mora biti iz HR-TB-2 liste (HR:PDV25, HR:S13, HR:S5, HR:POVNAK)
  • Za oslobođene stavke (HR:E) potreban je Tax.ExemptionReason ili Tax.ExemptionReasonCode
💰Document-level trošak ili popust (Opcionalno). Može ih biti više po jednom računu. Za POVNAK/PPMV koristi ChargeIndicator=true sa Tax.* poljima.
Polje Opis Status Default
ChargeIndicator true=Naplata (npr. POVNAK, PPMV), false=Popust (određuje predznak u sažetku) OPCIONALNO false
Amount METODA 1 - Direktni unos: Iznos popusta/naplate - OBAVEZAN ako koristiš AllowanceCharge sekciju (prikazuje se u sažetku). Za POVNAK: osnovica poreza.

Primjer: Amount=100.00 (popust od 100 EUR)

⚠️ NAPOMENA: Koristi METODU 1 (Amount) ILI METODU 2 (BaseAmount + MultiplierFactorNumeric), ne oboje!
OBAVEZNO -
BaseAmount METODA 2 (dio 1/2) - Osnovna vrijednost: Ukupna VP vrijednost svih stavki prije rabata

⚠️ Koristi se ZAJEDNO sa MultiplierFactorNumeric!

Formula auto-kalkulacije:
Amount = BaseAmount × (MultiplierFactorNumeric ÷ 100)

Primjer kompletnog unosa (oba polja):
[AllowanceCharge]
ChargeIndicator=false
BaseAmount=5268.00
MultiplierFactorNumeric=2
AllowanceChargeReason=Akcijski popust

→ Plugin automatski računa: Amount = 5268.00 × 0.02 = 105.36 EUR

💡 KADA KORISTITI METODU 2: Za popust na cijeli račun kad znaš ukupnu vrijednost i postotak (npr. '2% popusta na račun od 5268 EUR')
OPCIONALNO -
MultiplierFactorNumeric METODA 2 (dio 2/2) - Postotak: Postotak popusta/naplate na razini cijelog računa

⚠️ Koristi se ZAJEDNO sa BaseAmount!

Unosi se kao decimalni broj:
• 2 = 2% popusta
• 5.5 = 5.5% popusta
• 10 = 10% popusta

Primjer kompletnog unosa (oba polja):
[AllowanceCharge]
ChargeIndicator=false
BaseAmount=5268.00
MultiplierFactorNumeric=2
AllowanceChargeReason=Popust na ukupan iznos
Tax.Category=S
Tax.CategoryName=HR:PDV25
Tax.Percent=25.00

→ Rezultat: 105.36 EUR popusta (2% od 5268 EUR) s PDV-om od 25%

⚠️ BEZ BaseAmount polja ovo se ignorira!
OPCIONALNO -
AllowanceChargeReason Opis koji se koristi kao naziv stavke u sažetku. Za HR specifične poreze koristi #HR:POVNAK# ili #HR:PPMV# prefix (npr. '#HR:POVNAK#Povratna naknada') OPCIONALNO -
Tax.Category VAT kategorija (S, E, Z, O) - obavezno za document-level AllowanceCharge. Za POVNAK koristi E. OPCIONALNO -
Tax.CategoryName Naziv kategorije (HR:PDV25, HR:POVNAK) - automatski se dodaje HR: prefix OPCIONALNO -
Tax.Percent Porezna stopa (25.00, 0.00). Za POVNAK koristi 0.00. OPCIONALNO -
Tax.ExemptionReason Razlog oslobođenja - OBAVEZAN za E kategoriju (npr. '#HR:POVNAK#Povratna naknada', 'Posebni porez na motorna vozila') OPCIONALNO -
Tax.ExemptionReasonCode Kod razloga oslobođenja OPCIONALNO -
Tax.Scheme Tax scheme (VAT, CAR za PPMV) OPCIONALNO VAT
📎Document reference fields (Opcionalno) - koristi se za referenciranje drugih dokumenata vezanih uz ovaj račun
Polje Opis Status Default
ID ID reference dokumenta (automatski DocumentTypeCode=130) OPCIONALNO -
SchemeID Scheme ID (CT=Contract) OPCIONALNO -
📁Attached document fields (Opcionalno) - koristi se za fizičko dodavanje dokumenata vezanih uz ovaj račun
Polje Opis Status Default
ID ID priloženog dokumenta OPCIONALNO -
DocumentDescription Opis priloženog dokumenta OPCIONALNO -
File Putanja do file-a za prilog - plugin automatski učitava file, enkodira u Base64 i detektira MIME tip iz ekstenzije (.pdf, .xml, .png, .jpg, .txt...) OPCIONALNO -
Base64 Gotov Base64 string za direktno umetanje - fiksno se postavlja mimeCode='application/pdf' i filename='ID.pdf'. Koristi se KAO ALTERNATIVA File polju. OPCIONALNO -
_note PRIMJERI KORIŠTENJA:

Primjer 1 - Učitavanje iz file-a (File=):
[AttachedDocument]
ID=PRILOG-001
DocumentDescription=Tehnička specifikacija proizvoda
File=a.pdf


Primjer 2 - Direktno Base64 umetanje (Base64=):
[AttachedDocument]
ID=PRILOG-002
DocumentDescription=Potpisani ugovor
Base64=JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGU...


Napomena: File= automatski detektira MIME tip, Base64= fiksno koristi application/pdf.
OPCIONALNO -
🔗External document fields (Opcionalno) - koristi se za referenciranje vanjskih dokumenata vezanih uz ovaj račun
Polje Opis Status Default
ID ID vanjskog dokumenta OPCIONALNO -
DocumentDescription Opis vanjskog dokumenta OPCIONALNO -
URI URI vanjskog dokumenta OPCIONALNO -

🔌 API pozivi

Endpoint Metoda Opis
/txt2inv/ping GET Provjera da li plugin radi
/txt2inv/verzija GET Verzija plugina
/txt2inv/parse POST Konverzija INI → JSON
/txt2inv/xml POST Konverzija INI → UBL XML
Query parametri:
?cleannamespaces=true - uklanja nekorištene xmlns deklaracije
&preserve=xsi,ds - zadržava navedene prefikse (kombinacija sa cleannamespaces)
&comments - zadržava komentare u XML-u (default: uklanja ih)
/txt2inv/validate POST Validacija INI datoteke
/txt2inv/checkMinimal POST Provjera minimalnih polja
/txt2inv/sendTo/{provider} POST Direktno slanje provajderu
(doku/eposlovanje)
/txt2inv/preview POST Konverzija INI → HTML pregled računa
/txt2inv/getinvoicepdf POST Konverzija INI → PDF račun
/txt2inv/xml2ini POST Reversna konverzija UBL XML → INI format
Parsira UBL Invoice XML i generira kompatibilan INI format.
Uključuje automatsko dekodiranje BASE64 priloženih dokumenata i spremanje u xmlprivici folder.
Ekstrahira sve standardne i HR-specifične elemente (TaxSubtotal, HRTaxSubtotal).
/txt2inv/xmltoflat POST Konverzija UBL XML → Flat format (key.subkey=value)
Parsira XML u jednostavan flat format sa jednim key-om po liniji.
Korisno za debug i analizu XML strukture.
Prikazuje sve elemente sa njihovim putanjama i vrijednostima.
📡Primjeri HTTP poziva (Body Content)

1. Ping test

GET /txt2inv/ping

JavaScript fetch:

fetch('/txt2inv/ping')
  .then(response => response.text())
  .then(data => console.log(data));

2. Konverzija INI → JSON

POST /txt2inv/parse
Content-Type: text/plain; charset=UTF-8

INIVERSION=1
ID=25-5555-S1-1
IssueDate=2025-12-15

[Supplier]
Name=Cvjećarna Silvia
CompanyID=81016300664

[Line]
Quantity=2.000
Name=Coca Cola
Price=7.92

JavaScript fetch:

const iniContent = `INIVERSION=1
ID=25-5555-S1-1
IssueDate=2025-12-15

[Supplier]
Name=Cvjećarna Silvia
CompanyID=81016300664

[Line]
Quantity=2.000
Name=Coca Cola
Price=7.92`;

fetch('/txt2inv/parse', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.json())
.then(json => console.log(JSON.stringify(json, null, 2)));

3. Konverzija INI → UBL XML

JavaScript fetch (osnovno):

fetch('/txt2inv/xml', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.text())
.then(xml => console.log(xml));

JavaScript fetch sa namespace cleanup:

// Generira XML i uklanja nekorištene namespace deklaracije
fetch('/txt2inv/xml?cleannamespaces=true', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.text())
.then(xml => console.log('Čisti XML:', xml));

// Sa preserve listom (npr. za potpis kasnije)
fetch('/txt2inv/xml?cleannamespaces=true&preserve=xsi,ds,xades', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.text())
.then(xml => console.log('XML za potpis:', xml));
🧹 Namespace cleanup opcije:
cleannamespaces=true - uklanja nekorištene xmlns:* deklaracije iz XML-a
preserve=xsi,ds - lista prefiksa koji će biti zadržani čak i ako nisu korišteni
• Korisno za smanjenje veličine XML-a i pripremu za digitalno potpisivanje
• Automatski detektuje korištene prefixe u elementima i atributima

4. cURL primjer - Parse

curl -X POST http://localhost:8084/txt2inv/parse \
  -H "Content-Type: text/plain; charset=UTF-8" \
  --data-binary @racun.txt

5. cURL primjer - XML

# Osnovna konverzija
curl -X POST http://localhost:8084/txt2inv/xml \
  -H "Content-Type: text/plain; charset=UTF-8" \
  --data-binary @racun.txt \
  -o invoice.xml

# Sa namespace cleanup
curl -X POST "http://localhost:8084/txt2inv/xml?cleannamespaces=true" \
  -H "Content-Type: text/plain; charset=UTF-8" \
  --data-binary @racun.txt \
  -o invoice-clean.xml

# Sa preserve listom za potpis
curl -X POST "http://localhost:8084/txt2inv/xml?cleannamespaces=true&preserve=xsi,ds" \
  -H "Content-Type: text/plain; charset=UTF-8" \
  --data-binary @racun.txt \
  -o invoice-for-signing.xml

6. Provjera minimalnih polja

fetch('/txt2inv/checkMinimal', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.json())
.then(json => {
  console.log('Valid:', json.valid);
  console.log('Missing:', json.missing);
});

7. Reversna konverzija XML → INI

🔄 Nova funkcionalnost: Konvertira UBL Invoice XML natrag u INI format.
Automatski dekodira BASE64 priloge i sprema ih u datoteke s originalnim imenima iz filename atributa.
// Učitaj XML sadržaj
const xmlContent = `<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
  <cbc:ID>25-5555-S1-1</cbc:ID>
  <cbc:IssueDate>2025-12-15</cbc:IssueDate>
  ...
</Invoice>`;

fetch('/txt2inv/xml2ini', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/xml; charset=UTF-8'
  },
  body: xmlContent
})
.then(response => response.text())
.then(iniContent => {
  console.log('Konvertirani INI format:');
  console.log(iniContent);
});

cURL primjer - XML → INI:

curl -X POST http://localhost:8449/txt2inv/xml2ini \
  -H "Content-Type: application/xml; charset=UTF-8" \
  --data-binary @invoice.xml \
  -o racun.txt
💡 Napomena o prilozima:
• Svi <cbc:EmbeddedDocumentBinaryObject> se automatski dekodiraju iz BASE64
• Datoteke se spremaju u subfolder xmlprivici unutar trenutnog radnog direktorija s imenom iz filename atributa
• Primjer: <cbc:EmbeddedDocumentBinaryObject filename="a.pdf">JVBERi0xLjQK...</...>
→ sprema se kao a.pdf u folder xmlprivici.
⚠️ Ako već postoji datoteka s tim imenom, biti će prepisana
📁Primjeri razmjene datoteka

1. Konverzija INI → JSON (POST file)

http:NOENCODEPOST
/txt2inv/parse
file=racun.txt 
text/html

2. Konverzija INI → UBL XML (POST file)

# Osnovna konverzija
http:NOENCODEPOST
/txt2inv/xml
file=racun.txt 
text/html
# Sa namespace cleanup
http:NOENCODEPOST
/txt2inv/xml?cleannamespaces=true
file=racun.txt 
text/html
# Sa preserve listom (za potpis)
http:NOENCODEPOST
/txt2inv/xml?cleannamespaces=true&preserve=xsi,ds,xades
file=racun.txt 
text/html
✨ Optimizacija XML-a:
Parametar cleannamespaces=true omogućava automatsko uklanjanje nekorištenih namespace deklaracija, što:
• Smanjuje veličinu XML dokumenta (tipično 5-15%)
• Čini XML čitljivijim (manje xmlns:* deklaracija)
• Priprema dokument za digitalno potpisivanje (zadržava samo potrebne namespace-e)
• Preserve lista osigurava da određeni prefiksi ostanu (npr. za potpis: xsi, ds, xades)

3. Provjera ispravnosti INI datoteke

http:NOENCODEPOST
/txt2inv/validate
file=racun.txt 
text/html

4. Provjera minimalnih polja (POST file)

http:NOENCODEPOST
/txt2inv/checkMinimal
file=racun.txt 
text/html

5. Slanje ini fajla direktno provajderu

http:NOENCODEPOST
/txt2inv/sendTo/doku
file=racun.txt 
text/html

6. Pregled računa u HTML formatu (POST file)

http:NOENCODEPOST
/txt2inv/preview
file=racun.txt
text/html

7. Generiranje PDF računa (POST file)

http:NOENCODEPOST
/txt2inv/getinvoicepdf
file=racun.txt
text/html

8. Generiranje INI datoteke od Invoice XMLa (POST file)

http:NOENCODEPOST
/txt2inv/xml2ini
file=Invoice.xml
text/html
💡 Napomena o privitcima:
  • Sve datoteke koje su fizički u privitku će biti spremljene na disk.
  • Ime datoteke je definirano u <cbc:EmbeddedDocumentBinaryObject filename="a.pdf">
  • Spremaju se u subfolder xmlprivici unutar radnog direktorija
  • ⚠️ Ako već postoji datoteka s tim imenom, biti će prepisana

9. Generiranje jednostavne TXT datoteke parsiranjem Invoice XMLa po dubini (POST file)

http:NOENCODEPOST
/txt2inv/xmltoflat
file=Invoice.xml
text/html
🚀Direktno slanje provajderima

Podržani provajderi:

  • DOKU - doku.hr (bivši iEračuni)
  • ePoslovanje - eposlovanje.hr

Endpoint:

POST /txt2inv/sendTo/{provider}
Content-Type: text/plain; charset=UTF-8

[INI sadržaj računa]

JavaScript primjer:

// Slanje prema DOKU
fetch('/txt2inv/sendTo/doku', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.json())
.then(json => console.log('DOKU response:', json));

// Slanje prema ePoslovanje
fetch('/txt2inv/sendTo/eposlovanje?sendAsEmail=false', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain; charset=UTF-8'
  },
  body: iniContent
})
.then(response => response.json())
.then(json => console.log('ePoslovanje response:', json));

Primjer slanja razmjenom datoteka

⚠️ Važno AKO KORISTIMP PROVAJDERA DOKU !
Parametar auto=true omogućava automatsko slanje na FISKALIZACIJU I KUPCU.
Parametar auto=false vrši samo UPLOAD računa koji kasnije treba fiskalizirati i poslati kupcu. (DEFAULT)
🔗 Kod provajdera ePoslovanje taj parametar treba izostaviti
http:NOENCODEPOST
/txt2inv/sendTo/doku?auto=true
file=Invoice.txt
text/html
⚠️ Važno:
Prije korištenja direktnog slanja, potrebno je konfigurirati odgovarajuće plugine (DOKU, ePoslovanje, FINA) u Postavkama HrFiskalizatora.

📚 Dodatni resursi


© 2025 HrFiskalizator - TXT2INV Plugin v1.0