| Metoda | Endpoint | Opis |
| POST | /invarchive/store | Pohrani račun u arhivu (JSON + base64 XML) Query parametar: ?forceupdate=true za overwrite postojećeg računaIncoming račun (default) - koristi sender:{
"data": {
"id": 5717,
"name": "419/2/1",
"sender": {"name": "DobavljaÄŤ d.o.o.", "oib": "92779136888"},
"issueDate": "2026-01-19",
"dueDate": "2026-02-19",
"payableAmount": 382.00,
"currency": "EUR",
"status": "DELIVERED",
"paymentStatus": null,
"direction": "incoming"
},
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIj8+Li4uIChiYXNlNjQp"
}
Outgoing raÄŤun - koristi receiver:{
"data": {
"id": 999188,
"name": "R-2026-TEST-118",
"receiver": {"name": "Kupac d.o.o.", "oib": "12345678901"},
"issueDate": "2026-01-29",
"dueDate": "2026-02-28",
"payableAmount": 1250.50,
"currency": "EUR",
"status": "SENT",
"paymentStatus": null,
"direction": "outgoing"
},
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIj8+Li4uIChiYXNlNjQp"
}
Napomena: direction field automatski određuje da li se koristi sender (incoming) ili receiver (outgoing). Default je incoming.⚠️ XML mora biti Base64 enkodiran string u "xml" fieldu. |
| GET | /invarchive/search | PretraĹľi raÄŤune po razliÄŤitim kriterijima Parametri: name, sender, senderOib, dateFrom, dateTo, status, direction, limit, offset |
| GET | /invarchive/get/{id} | Dohvati kompletan raÄŤun (metadata + XML sadrĹľaj) |
| GET | /invarchive/getxml/{id} | Dohvati samo XML sadrĹľaj raÄŤuna (Content-Type: application/xml) |
| GET | /invarchive/getids | Dohvati listu ID-ova računa za period Default: prvi dan tekućeg mjeseca → zadnji dan tekućeg mjeseca Parametri: dateFrom, dateTo (YYYY-MM-DD)Response: [435973, 435974, 435975]
|
| GET | /invarchive/getnames | Dohvati listu računa sa osnovnim podacima (id, name, issueDate) Default: prvi dan tekućeg mjeseca → zadnji dan tekućeg mjeseca Parametri: dateFrom, dateTo (YYYY-MM-DD)Response: [{"id": 435973, "name": "R-2026-001", "issueDate": "2026-01-29"}]
|
| DELETE | /invarchive/delete/{id} | Obriši pojedinačni račun (XML fajl + zapis u bazi) Podržava i POST metodu. Fajl se briše prvo, zatim zapis iz baze. |
| POST | /invarchive/delete | Masovno brisanje selektiranih raÄŤuna Koristi se za DataTables multi-select delete Response: status za svaki ID (deleted/notFound/failed) Body primjer: {"ids": [123, 456, 789]}
|
| GET | /invarchive/verify | Provjera integriteta arhive Vraća report o "broken records" (zapisi bez XML fajlova) Response: lista računa koji imaju zapis u bazi ali nemaju XML fajl |
| POST | /invarchive/cleanup | Automatsko brisanje orphan zapisa Briše SVE zapise čiji XML fajlovi ne postoje Koristi se nakon preseljenja fajlova u drugu arhivu |
| POST / PUT | /invarchive/update/{id} | GeneriÄŤki update bilo kojih polja Parcijalno aĹľuriranje zapisa bez potrebe za XML-om Path primjer: /invarchive/update/5717Body primjer: {"paymentStatus": "PLACENO", "lastStatus": "DELIVERED"}
Dozvoljeni fieldi: name, sender, senderOib, issueDate, dueDate, payableAmount, currency, lastStatus, paymentStatus, direction
|
| GET | /invarchive/stats | Statistika baze (ukupno računa, veličina, top 10 pošiljatelja) |
| GET | /invarchive/ping | Health check (provjera konekcije sa bazom) |
| đź’ľ Scenario 1: Pohrana novog raÄŤuna | |
| 1. Kreiraj JSON | Pripremi data objekt + Base64 XML |
| 2. POST /store | Pohrani raÄŤun u arhivu |
| 3. Provjeri response | Dobij xmlPath i potvrdu pohrane |
| 🔎 Scenario 2: Pretraga i brisanje | |
| 1. GET /search | Pronađi račune po kriterijima |
| 2. Selektiraj raÄŤune | Korisnik selektira retke u DataTables |
| 3. POST /delete | Pošalji array ID-ova za brisanje |
| 4. Provjeri response | Vidi koji su obrisani, koji failed |
| đź§ą Scenario 3: Nakon ruÄŤnog preseljenja arhive | |
| 1. GET /verify | Provjeri integritet prije preseljenja |
| 2. Preseli fajlove | Kopiraj XML fajlove u drugu arhivu |
| 3. GET /verify | Provjeri koji zapisi su ostali orphan |
| 4. POST /cleanup | Obriši orphan zapise iz baze |
| 🔄 Scenario 4: Ažuriranje statusa plaćanja | |
| 1. Zaprimi obavijest | Račun je plaćen (webhook, manual check, itd.) |
| 2. POST /update/5717 | AĹľuriraj samo paymentStatus polje:{"paymentStatus": "PLACENO"}
|
| 3. Provjeri response | Potvrda koja polja su aĹľurirana |
XMLSTORAGEPATH=./F2INVOICES
DBPATH=./data/f2archive
DBPASSWORD=
LOGLEVEL=ERROR
ENABLED=true
DEFAULTLIMIT=100
MAXLIMIT=1000
F2INVOICES/
├── 1_2026/ (siječanj 2026)
│ ├── R-2026-001.xml
│ ├── R-2026-002.xml
│ └── ...
├── 2_2026/ (veljača 2026)
│ └── ...
└── 12_2025/ (prosinac 2025)
└── ...
Arhiva se moĹľe bezbolno preseliti bez izmjene baze!
U bazi se pohranjuje samo relativna putanja (npr. 1_2026/R-2026-001.xml),
dok se base folder (XMLSTORAGEPATH) ÄŤita iz konfiguracije svaki put.
xcopy /E /I F2INVOICES Z:\NAS_ARCHIVE\F2INVOICES
f2archive.ini:XMLSTORAGEPATH=Z:\NAS_ARCHIVE\F2INVOICES
GET /invarchive/verify (sve mora biti OK)âś… Baza ostaje ista - ni jedan UPDATE nije potreban!