Dnevnik promjena

2026-10-07: GET /api/v1/payouts/ready vraća stranice

Promjena strukture postojeće krajnje točke koja nije unatrag kompatibilna.

  • Odgovor je standardna omotnica sa stranicama. GET /api/v1/payouts/ready vraća { items, page, pageSize, total, totalPages } kao i sve ostale krajnje točke s popisima, umjesto golog niza. Retci unutar items su nepromijenjeni.
  • Parametri upita page i pageSize. Zadano je page 1 i pageSize 20, najviše 100. Dohvaćajte stranice dok ne bude page >= totalPages da pročitate sve unose spremne za isplatu.
  • Pročitajte sve stranice prije isplate. Isplaćeni unosi nestaju s popisa, pa se preostali unosi pomiču na ranije stranice. Prvo pročitajte sve stranice, uklonite duplikate prema id, a tek onda izradite isplatu kroz POST /api/v1/payouts. Isplata stranicu po stranicu preskače unose.
  • Redoslijed je nepromijenjen. Posljednji odobreni unosi dolaze prvi.

2026-10-05: vehicleId na troškovima koji nisu kilometraža se zanemaruje

Promjena ponašanja postojećih krajnjih točaka; struktura nepromijenjena.

  • Vozilo zadržavaju samo troškovi kilometraže. POST /api/v1/travel-entries/{id}/expenses, PUT /api/v1/travel-entries/{id}/expenses/{expenseId} i expenses u POST /api/v1/travel-entries spremaju trošak goriva, cestarine, parkiranja, smještaja ili ostali trošak bez vozila, a svako čitanje za njega vraća vehicle: null. vehicleId poslan uz takav trošak dosad se spremao i vraćao u odgovoru.
  • Postojeće vrijednosti se brišu. Pri nadogradnji se uklanja vozilo spremljeno na postojećim troškovima koji nisu kilometraža, pa i oni vraćaju vehicle: null.
  • Vozilo izvan vaše tvrtke odbija se na svakoj vrsti troška. Ako vehicleId označava vozilo izvan vaše tvrtke, API vraća 400 VALIDATION_FAILED, i za troškove koji nisu kilometraža. Za te su troškove krajnje točke za pojedini trošak dosad spremale vehicleId bez provjere. Arhivirano službeno vozilo na trošku koji nije kilometraža POST /api/v1/travel-entries više ne odbija; ondje se zanemaruje kao i svako drugo vozilo.

2026-10-03: izrada vozila odbija nepoznati type

Promjena ponašanja na postojećoj krajnjoj točki; struktura nepromijenjena.

  • POST /api/v1/vehicles s vrijednošću type izvan Company i Personal vraća 400. Brojčana vrijednost poput 2 (uklonjena vrsta za javni prijevoz) dosad se spremala. Sada se odbija odgovorom 400 VALIDATION_FAILED pod errors.Type, kao što to već radi PUT /api/v1/vehicles/{id}.

2026-10-03: nova dozvola ManageVehicles za izmjene vozila

Nova vrijednost enuma i promjene dozvola na postojećim krajnjim točkama za vozila; struktura nepromijenjena.

  • ManageVehicles u CompanyPermissions. Nova atomička zastavica za vođenje službenih vozila: sama vozila, njihovi troškovi, dokumenti, rokovi i podsjetnici e-poštom. Odgovori za zaposlenike i webhook poruke navode je kao svaku drugu zastavicu, a svaki CompanyAdmin sada je ima. ManageCompanyData i dalje pokriva odjele, mjesta troška i tečajeve, ali više ne pokriva vozila.
  • Operacije izmjene vozila zahtijevaju ManageVehicles. POST /api/v1/vehicles, PUT /api/v1/vehicles/{id}, DELETE /api/v1/vehicles/{id}, POST /api/v1/vehicles/{id}/archive i POST /api/v1/vehicles/{id}/unarchive vraćaju 403 pozivatelju bez nje, bez obzira na ostale dozvole. Svaki zaposlenik koji je prije ovog izdanja imao ManageCompanyData dobio je ManageVehicles, pa nijedan postojeći korisnik ne gubi pristup.
  • Čitanje privatnih vozila drugih zaposlenika traži ManageVehicles. GET /api/v1/vehicles i GET /api/v1/vehicles/{id} vraćaju privatna vozila drugih zaposlenika samo pozivatelju s dozvolom ManageVehicles ili EditAllEntries (dosad ManageCompanyData).
  • Vratite cijelu listu. Klijent koji odbacuje nepoznata imena zastavica i zatim zapiše dozvole zaposlenika natrag uklanja tom zaposleniku ManageVehicles. Zadržite nepoznata imena kad dozvole šaljete natrag.
  • Unaprijed definirana uloga Upravitelj vozila (FleetManager) u zahtjevima. Upis dozvola prihvaća FleetManager, koji server sprema kao ReadAllEntries i ManageVehicles. Izlaz ostaje lista atomičkih zastavica.

2026-10-03: snaga motora na vozilima

Dodano polje API-ja; bez promjene strukture.

  • enginePowerKw na vozilima. Zahtjevi za kreiranje i ažuriranje vozila primaju neobaveznu najveću snagu motora kao cijeli broj u kilovatima (polje P.2 prometne dozvole, od 1 do 2000), a vraćaju je i odgovor s detaljima vozila i popis vozila. Kod ažuriranja izostavljanje zadržava pohranjenu vrijednost, a 0 je briše.

2026-10-03: oštećeni bajtovi slike u multipart prilozima vraćaju 400

Promjena ponašanja dviju postojećih krajnjih točaka; struktura nepromijenjena.

  • POST /api/v1/travel-entries multipart prilog s oštećenim bajtovima slike vraća 400. Prilog čiji je prijavljeni tip slika, ali čiji se bajtovi ne mogu dekodirati kao slika, dosad je završavao s 500. Sada se odbija odgovorom 400 VALIDATION_FAILED pod errors.attachments, istom strukturom kao svaki drugi odbijeni tip priloga.
  • POST /api/v1/travel-entries/{id}/attachments s istim oštećenim bajtovima slike također vraća 400. Krajnja točka za prilaganje dosad je u tom slučaju isto završavala s 500. Sada se odbija odgovorom 400 VALIDATION_FAILED pod errors.File, istom strukturom kao svaki drugi odbijeni tip priloga.

2026-10-02: brisanje vozila odbija vozilo u upotrebi, nova krajnja točka za arhiviranje

Promjena ponašanja postojeće krajnje točke i jedna nova krajnja točka; bez promjene strukture.

  • DELETE /api/v1/vehicles/{id} vraća 409 za vozilo u upotrebi. Vozilo koje se nalazi na trošku putnog naloga ili ima uneseni trošak više se ne arhivira umjesto brisanja. Obrisani putni nalozi te uklonjeni troškovi ne računaju se, pa se vozilo može obrisati kad se ukloni s troškova putnih naloga i obrišu njegovi troškovi. Zahtjev se odbija odgovorom 409 CONFLICT i vozilo ostaje nepromijenjeno. Vozilo bez takvih zapisa, arhivirano ili ne, i dalje se briše uz odgovor 204.
  • POST /api/v1/vehicles/{id}/archive. Arhivira vozilo, u upotrebi ili ne, i vraća ga s isArchived: true. Tako se arhivira vozilo koje brisanje odbija. Arhiviranje arhiviranog vozila ništa ne mijenja; POST /api/v1/vehicles/{id}/unarchive ga poništava. Potrebno je isto dopuštenje ManageCompanyData kao za brisanje.

2026-09-28: zastarjelo nadjačavanje izvan noćnog pojasa

Zastarjela polja; bez promjene strukture.

  • nightOffWindowOverride i nightOverrideReason na paušalima putnog naloga. Oba polja ostaju u odgovoru, jedan element po noći, ali svaki je element sada false odnosno null. Nadjačavanje koje su prikazivala je ukinuto: odgovor za noć kraću od šest sati daje se kroz nightAllocation i nikakvo nadjačavanje ne mijenja iznos. Prestanite ih čitati; mogu biti uklonjena u nekoj od sljedećih verzija.

2026-09-28: ulazni podaci za cijenu goriva na troškovima kilometraže

Dodana polja u ugovoru; bez promjene strukture.

  • fuelUnitPriceOverride i mileagePetrolGrade na troškovima. Zahtjevi za kreiranje i ažuriranje troška primaju oba polja, uključujući troškove unutar zahtjeva za kreiranje putnog naloga, a svaki odgovor s troškom ih vraća, i unutar putnog naloga. fuelUnitPriceOverride je cijena goriva po litri (po kWh za električno vozilo) dokazana računom, u osnovnoj valuti tvrtke; na stavci kilometraže u CZ ili SK zamjenjuje propisanu prosječnu cijenu u komponenti goriva. mileagePetrolGrade (Octane95 ili Octane98) odabire propisanu prosječnu cijenu za Natural 95 ili Natural 98 u CZ za vlastito vozilo na benzin bez cijene s računa. Svako se polje sprema samo tamo gdje utječe na obračun stavke, a drugdje je null. Ažuriranje je potpuna zamjena: ako ih izostavite, stavka se ponovno obračunava po propisanoj prosječnoj cijeni, za benzin po cijeni Naturala 95, pa pošaljite vrijednosti koje je trošak vratio da biste zadržali cijenu s računa ili benzin 98.

2026-09-16 — mjesta troška na zaposlenicima

Dodano polje u ugovoru; bez promjene strukture.

  • costCenterIds na zaposlenicima. Odgovori s detaljima i popisom zaposlenika vraćaju mjesta troška koja zaposlenik smije teretiti, a zahtjevi za kreiranje i ažuriranje zaposlenika ih primaju. Prazan popis znači bez ograničenja — dostupna su sva aktivna mjesta troška tvrtke. Kod kreiranja izostavljanje polja jednako je slanju praznog popisa. Kod ažuriranja izostavljanje čuva pohranjeni popis, prazan popis ga briše, a popis s vrijednostima ga zamjenjuje u cijelosti. Svaki id mora pripadati vašoj tvrtki, inače se zahtjev odbija s 400. Dodavanje mjesta troška izvan popisa na putni nalog i dalje se odbija s 400 — upravo zbog tog odbijanja polje i postoji. Ograničenje vrijedi samo za dodavanje: već dodijeljena mjesta troška ne uklanjaju se naknadno kad mjesto troška nestane s popisa. Pri zapisivanju se primjenjuje sigurnosna granica od 100 različitih mjesta troška po zaposleniku — duplikati se broje jednom, a shema granicu objavljuje kao maxItems u oba tijela zahtjeva. Ona kontrolira veličinu zahtjeva i nije poslovno ograničenje: popis može navesti samo mjesta troška koja tvrtka doista ima, pa vas u praksi neće ograničiti.

2026-09-13 — iznosi dnevnica po itineraru prema zakonskom vremenu

Ispravljeni iznosi na postojećim endpointima dnevnica po itineraru; bez promjene strukture.

  • Izračun dnevnica po itineraru i from-itinerary. Vrijednosti time postaja i dalje se čitaju kao UTC, a vraćeni intervali i dalje su u UTC-u. Češkim i slovačkim tvrtkama kalendarski dani sada se dijele u ponoć po praškom odnosno bratislavskom vremenu umjesto u ponoć po UTC-u. Poljske tvrtke noći (21:00–07:00), doby i datume računa broje po varšavskom vremenu. Isti zahtjev za ta tržišta zato može vratiti drukčije sate i iznose nego prije.

2026-09-12 — category je neobavezan kod ažuriranja vozila

Ublaženo polje u postojećem zahtjevu; bez promjene strukture.

  • category kod ažuriranja vozila. Polje je sada neobavezno. Ako ga izostavite, pohranjena kategorija ostaje nepromijenjena; pošaljite ga kad ju želite promijeniti, uključujući 0 za namjerno brisanje. Kod kreiranja je polje i dalje obavezno.

2026-08-23 — obujam motora na vozilima

Dodano polje API-ja; bez promjene strukture.

  • engineCapacityCc na vozilima. Zahtjevi za kreiranje i ažuriranje vozila primaju neobavezni obujam motora kao cijeli broj u kubičnim centimetrima, a vraćaju ga i odgovor s detaljima vozila i popis vozila. Kod ažuriranja izostavljanje zadržava pohranjenu vrijednost, a 0 je briše.

2026-08-17 — locked sada javlja zaključavanje dokumenata

Ispravljena semantika vrijednosti postojećeg polja odgovora; bez promjene strukture.

  • locked u odgovorima za detalje i popis putnih naloga prije je javljalo samo starije zaključavanje iz uvoza prije 2023., a ostajalo je false za dokumente zaključane u aplikaciji, uključujući automatsko zaključavanje primijenjeno pri isplati. Sada nosi isto izvedeno stanje zaključanosti koje webhook entry.updated već javlja u isLocked: true kad god je dokument zatvoren za pisanje. Shvatite to kao “ovaj unos nije moguće mijenjati”, a ne kao oznaku određenog izvora zaključavanja.

2026-07-13 — place id-ovi, ručni tečajevi, nadjačavanja dnevnica, smjer tečaja

Dodatna, unatrag kompatibilna polja ugovora te novi diskriminator tečaja.

  • Place id-ovi na putnim nalozima. Zahtjevi za kreiranje i ažuriranje primaju departureLocationPlaceId i destinationPlaceId (Google Places place_id), a odgovor putnog naloga ih vraća. Vratite pohranjene vrijednosti kod ažuriranja s potpunom zamjenom kako biste sačuvali identitet mjesta pri izmjeni teksta odredišta.
  • Odredišna država na putnim nalozima. Zahtjevi primaju neobavezni destinationCountryCode (ISO 3166-1 alpha-2). Kada se navede, pohranjuje se izravno i preskače se poslužiteljski geocoding rezervni mehanizam.
  • Ručni tečajevi. Zahtjevi za troškove i dnevnice primaju neobavezni manualExchangeRate, a zahtjevi putnog naloga manualAdvanceExchangeRate za predujam. Svaki se uvažava samo kada pružatelj tečaja ne objavi tečaj za referentni datum; slanje dok postoji službeni tečaj odbija se s EXCHANGE_RATE_UNAVAILABLE.
  • Nadjačavanja dnevnica. Zahtjev za dnevnicu prima overrideAmount i overrideReason, a modeli čitanja dnevnice ih vraćaju. Da biste zadržali postojeće nadjačavanje kod ažuriranja s potpunom zamjenom, vratite vrijednosti natrag; njihovo izostavljanje briše nadjačavanje i vraća na zakonsku isplatu.
  • Smjer tečaja. GET /api/v1/reference/exchange-rates sada nosi direction diskriminator: ForeignPerBase (HNB / ECB) znači dijeliti tečaj za pretvorbu u baznu valutu, BasePerForeign (CNB) znači množiti.

2026-07-08 — datum predujma, pružatelj tečaja za CZ/SK

Dvije dodatne, unatrag kompatibilne promjene.

  • Datum predujma na putnim nalozima. Zahtjevi za kreiranje i ažuriranje sada primaju neobavezni advancePaymentDate (yyyy-MM-dd), a odgovor putnog naloga ga vraća. Kada se izostavi pri kreiranju, poslužitelj koristi datum naloga. Određuje datum tečaja za predujam i, za češke tenante, referentni datum tečaja za dnevnice.
  • Pružatelj tečaja za CZ/SK. GET /api/v1/reference/exchange-rates sada dokumentira potpuni skup pružatelja: HNB za HR, ECB za SI i SK, CNB za CZ. Polje source može biti "CNB", a baseCurrency je referentna valuta pružatelja (EUR za HNB/ECB, CZK za CNB). Ponašanje je nepromijenjeno; dokumentacija sada odgovara izvršavanju.

2026-06-11 — brojevi obroka po vrsti, podrijetlo tečaja, kod za nedostupan tečaj

Tri dodatne promjene površine. Sve su unatrag kompatibilne: postojeći zahtjevi i dalje rade nepromijenjeno, a nova polja u odgovorima su dodaci koje možete zanemariti dok vam ne zatrebaju.

  • Brojevi obroka po vrsti na kreiranju/ažuriranju dnevnice. Zahtjevi za dnevnice sada primaju breakfastsProvided, lunchesProvided i dinnersProvided (cjelobrojni brojevi obroka po vrsti) te neobaveznu raspodjelu po danu mealsProvidedAllocation. Oni su kanonski model za upis: poslužitelj iz tih brojeva ponovno izračunava umanjenje. Postojeći v1 zbirni mealsProvided i dalje se prihvaća; kad polja po vrsti nedostaju, poslužitelj mapira zbroj kao i prije, pa stariji klijenti nisu zahvaćeni. Odgovori i dalje vraćaju izvedeni mealsProvided (ručak + večera, oblik HR Pravilnika) uz brojeve po vrsti, pa su putanje čitanja nepromijenjene.
  • Podrijetlo tečaja u odgovorima. Odgovori za troškove i dnevnice dobivaju exchangeRateSource, a odgovor putnog naloga dobiva advancePaymentExchangeRateSource, koji bilježi odakle dolazi primijenjeni tečaj: kod davatelja ("HNB", "ECB") za službeni tečaj, "MANUAL" za ručno uneseni tečaj, ili null za redak u istoj valuti (bez konverzije) ili stariji redak spremljen prije praćenja podrijetla. Samo za čitanje, bez promjene zahtjeva.
  • Novi kod greške EXCHANGE_RATE_UNAVAILABLE (HTTP 400). Javlja se kad davatelj tečaja tenanta ne objavljuje tečaj za valutu na traženi datum i ne postoji povijesni tečaj na koji bi se moglo osloniti. Greška je iz obitelji provjera sa standardnim errors tijelom po poljima, pa možete specifično razlučiti slučaj nedostupnog tečaja i zatražiti ručni tečaj. Dodano u katalog grešaka.

2026-05-23 — vremena dnevnica iz itinerara spremaju se kao pravi UTC (ispravak)

Vremena dnevnica spremljena putem POST /api/v1/travel-entries/{id}/per-diems/from-itinerary sada se spremaju kao pravi UTC trenuci. Ranije se polazak/dolazak svake dionice spremao s vrijednošću zidnog sata označenom kao UTC bez pomaka (lokalna dionica u 08:00 spremala se kao 08:00Z umjesto 07:00Z/06:00Z), pa su retci generirani iz itinerara odstupali od ručno dodanih za 1–2 sata i prikazivali se s kašnjenjem. Sheme zahtjeva i odgovora su nepromijenjene, no vrijednosti departureTime/arrivalTime koje ovaj endpoint vraća (i koje vraćaju kasnija čitanja istih redaka) sada odražavaju ispravljeni UTC trenutak. Kalkulator za pregled i dalje vraća vremena zidnog sata. Iznosi dnevnica nisu zahvaćeni.

2026-05-23 — kalkulator dnevnica + spremanje cijelog puta

Površina za izračun dnevnica je objedinjena i dobiva paritet spremanja cijelog puta s locco web aplikacijom.

  • Novo POST /api/v1/utilities/per-diems/calculate — kalkulator bez stanja. Pošaljite itinerar (jedna dionica = itinerar s dvije postaje) i dobijte natrag izračunate retke, uz primijenjenu preraspodjelu na razini itinerara. Bez konteksta naloga, ništa se ne sprema.
  • Novo POST /api/v1/travel-entries/{id}/per-diems/from-itinerary — ponovno izradite dnevnice putnog naloga iz itinerara u jednom pozivu. Poslužitelj ponovno pokreće vlastiti mehanizam nad postajama (poslanim se iznosima nikad ne vjeruje), primjenjuje obroke po dionici vezane ključem (countryCode, departureTime) (parovi koje vraća kalkulator), zatim atomarno zamjenjuje dnevnice naloga. Time se reproduciraju preraspodjela na razini itinerara i nadogradnje domaćih jedinica koje slanje redaka jedan po jedan ne može.
  • Uklonjeno POST /api/v1/travel-entries/{id}/per-diems/compute i POST /api/v1/per-diems/calculate-simple. Oba su obuhvaćena s utilities/per-diems/calculate — jedna dionica je samo itinerar s dvije postaje. Premjestite integracije na novi kalkulator.

2026-05-22 — Podrška za slovensko tržište

Inicijalna podrška za slovenske tenante. Ažurirajte klijent iz osvježenog OpenAPI snapshota na /hr/api-reference/:

  • Slovenske općine — novi GET /api/v1/reference/slovenian-municipalities vraća SURS popis općina za padajuće izbornike mjesta na slovenskim putnim nalozima. Može se pozvati s bilo kojeg tenanta.
  • Porezna rezidentnost zaposlenika — zapisi o zaposlenicima dobivaju polje residency (Resident / NonResident) za slovenske dnevnice i izvještavanje o porezu na plaće. Zadana vrijednost je Resident.

2026-04-28 — v1.0 izlazi

Prvo stabilno izdanje locco partner API-ja. Sve površine su povezane, tipizirane i pokrivene OpenAPI snapshotom na /api-reference/:

  • Putni unosi — potpuni CRUD i akcije toka odobrenja (predaja, odobrenje, odbijanje, otkazivanje, traženje izmjena), uz atomično kreiranje s ugniježđenim troškovima, dnevnicama, raspodjelama na mjesta troška i privitcima u jednom pozivu.
  • Privitci — direktan prijenos na putni unos kroz POST /api/v1/travel-entries/{id}/attachments. Multipart, do 5 datoteka po zahtjevu.
  • Webhooks — registracija pretplate s jednokratnim prikazom signing-secret-a, povijest isporuka po pretplati i endpoint za ponovni pokušaj neuspjelih ili iscrpljenih isporuka.
  • Isplate — popis unosa spremnih za isplatu, kreiranje serija, povijest, brisanje serije.
  • Zaposlenici, Odjeli, Vozila, Mjesta troška — CRUD i popisi, uz prilagođena polja na zaposlenicima.
  • Reference — hrvatske općine, HNB tečajne liste, tablica dnevnica, popisi dopuštenih država i valuta tvrtke.
  • Tvrtka — čitanje profila.

Vrijednosti enumeracija za Status, TravelType, PayoutMethod i ostale dokumentirane su u OpenAPI shemi kao enum: [...] popisi dopuštenih vrijednosti, pa se generirani klijenti vežu na kanonske nizove ("PendingApproval", "BankTransfer" itd.) umjesto na neprozirne vrijednosti.