Dnevnik sprememb

2026-10-07: GET /api/v1/payouts/ready vrača strani

Sprememba strukture obstoječe končne točke, ki ni združljiva za nazaj.

  • Odgovor je standardna ovojnica s stranmi. GET /api/v1/payouts/ready vrne { items, page, pageSize, total, totalPages } kot vse druge končne točke s seznami, namesto golega niza. Vrstice v items so nespremenjene.
  • Parametra poizvedbe page in pageSize. Privzeto je page 1 in pageSize 20, največ 100. Pridobivajte strani, dokler ne velja page >= totalPages, da preberete vse naloge, pripravljene za izplačilo.
  • Pred izplačilom preberite vse strani. Izplačani nalogi izginejo s seznama, zato se preostali nalogi premaknejo na prejšnje strani. Najprej preberite vse strani, odstranite podvojene vrstice po id, šele nato ustvarite izplačilo z POST /api/v1/payouts. Izplačevanje stran za stranjo izpusti naloge.
  • Vrstni red je nespremenjen. Nazadnje odobreni nalogi so prvi.

2026-10-05: vehicleId na stroških, ki niso kilometrina, se prezre

Sprememba vedenja na obstoječih končnih točkah; brez spremembe strukture.

  • Vozilo obdržijo samo stroški kilometrine. POST /api/v1/travel-entries/{id}/expenses, PUT /api/v1/travel-entries/{id}/expenses/{expenseId} in expenses v POST /api/v1/travel-entries shranijo strošek goriva, cestnine, parkiranja, nastanitve ali drug strošek brez vozila, vsako branje pa zanj vrne vehicle: null. vehicleId, poslan s takim stroškom, se je doslej shranil in vrnil v odgovoru.
  • Obstoječe vrednosti se izbrišejo. Ob nadgradnji se odstrani vozilo, shranjeno na obstoječih stroških, ki niso kilometrina, zato tudi ti vrnejo vehicle: null.
  • Vozilo zunaj vašega podjetja se zavrne pri vsaki vrsti stroška. Če vehicleId označuje vozilo zunaj vašega podjetja, API vrne 400 VALIDATION_FAILED, tudi pri stroških, ki niso kilometrina. Pri teh stroških so končne točke za posamezen strošek doslej shranile vehicleId brez preverjanja. Arhiviranega službenega vozila na strošku, ki ni kilometrina, POST /api/v1/travel-entries ne zavrne več; tam se prezre kot vsako drugo vozilo.

2026-10-03: ustvarjanje vozila zavrne neznan type

Sprememba vedenja na obstoječi končni točki; brez spremembe strukture.

  • POST /api/v1/vehicles z vrednostjo type zunaj Company in Personal vrne 400. Številska vrednost, kot je 2 (odstranjena vrsta za javni prevoz), se je doslej shranila. Zdaj jo zavrne odgovor 400 VALIDATION_FAILED pod errors.Type, kot je to PUT /api/v1/vehicles/{id} že počel.

2026-10-03: novo dovoljenje ManageVehicles za spreminjanje vozil

Nova vrednost enuma in spremembe dovoljenj na obstoječih končnih točkah za vozila; brez spremembe strukture.

  • ManageVehicles v CompanyPermissions. Nova atomarna zastavica za vodenje službenih vozil: vozila sama, njihovi stroški, dokumenti, roki in opomniki po e-pošti. Odgovori s podatki o zaposlenih in sporočila webhook jo navajajo kot vsako drugo zastavico, vsak CompanyAdmin pa jo zdaj ima. ManageCompanyData še naprej pokriva oddelke, stroškovna mesta in menjalne tečaje, vozil pa ne več.
  • Operacije spreminjanja vozil zahtevajo ManageVehicles. POST /api/v1/vehicles, PUT /api/v1/vehicles/{id}, DELETE /api/v1/vehicles/{id}, POST /api/v1/vehicles/{id}/archive in POST /api/v1/vehicles/{id}/unarchive vrnejo 403 klicatelju brez njega, ne glede na druga dovoljenja. Vsak zaposleni, ki je pred to izdajo imel ManageCompanyData, je dobil ManageVehicles, zato noben obstoječi uporabnik ne izgubi dostopa.
  • Branje zasebnih vozil drugih zaposlenih zahteva ManageVehicles. GET /api/v1/vehicles in GET /api/v1/vehicles/{id} vrneta zasebna vozila drugih zaposlenih le klicatelju z dovoljenjem ManageVehicles ali EditAllEntries (doslej ManageCompanyData).
  • Vrnite cel seznam. Odjemalec, ki zavrže neznana imena zastavic in nato zapiše dovoljenja zaposlenega nazaj, temu zaposlenemu odstrani ManageVehicles. Ko dovoljenja pošiljate nazaj, ohranite neznana imena.
  • Prednastavljena vloga FleetManager na vhodu. Zapis dovoljenj sprejme FleetManager, ki ga strežnik shrani kot ReadAllEntries in ManageVehicles. Izhod ostaja seznam atomarnih zastavic.

2026-10-03: moč motorja pri vozilih

Dodano polje API-ja; brez spremembe strukture.

  • enginePowerKw pri vozilih. Zahtevka za ustvarjanje in posodobitev vozila sprejemata neobvezno največjo moč motorja kot celo število kilovatov (polje P.2 prometnega dovoljenja, od 1 do 2000), vračata pa jo tako odgovor s podrobnostmi vozila kot seznam vozil. Pri posodobitvi izpustitev ohrani shranjeno vrednost, 0 pa jo izbriše.

2026-10-03: poškodovani bajti slike pri multipart priponkah vrnejo 400

Sprememba vedenja dveh obstoječih končnih točk; brez spremembe strukture.

  • POST /api/v1/travel-entries multipart priponka s poškodovanimi bajti slike vrne 400. Priponka, katere deklarirani tip je slika, bajti pa se ne dajo dekodirati kot slika, je prej vrnila 500. Zdaj je zavrnjena z odgovorom 400 VALIDATION_FAILED pod errors.attachments, v enaki strukturi kot vsaka druga zavrnjena vrsta priponke.
  • POST /api/v1/travel-entries/{id}/attachments z enako poškodovano sliko prav tako vrne 400. Končna točka za priponke je prej v tem primeru enako vrnila 500. Zdaj je zahtevek zavrnjen z odgovorom 400 VALIDATION_FAILED pod errors.File, v enaki strukturi kot vsaka druga zavrnjena vrsta priponke.

2026-10-02: brisanje vozila zavrne vozilo v uporabi, nova končna točka za arhiviranje

Sprememba vedenja obstoječe končne točke in ena nova končna točka; brez spremembe strukture.

  • DELETE /api/v1/vehicles/{id} vrne 409 za vozilo v uporabi. Vozilo, ki je na strošku potnega naloga ali ima vnesen strošek, se namesto izbrisa ne arhivira več. Izbrisani potni nalogi ter odstranjeni stroški se ne štejejo, zato se vozilo lahko izbriše, ko ga odstranite s stroškov potnih nalogov in izbrišete njegove stroške. Zahtevek je zavrnjen z odgovorom 409 CONFLICT in vozilo ostane nespremenjeno. Vozilo brez takih zapisov, arhivirano ali ne, se še vedno izbriše z odgovorom 204.
  • POST /api/v1/vehicles/{id}/archive. Arhivira vozilo, v uporabi ali ne, in ga vrne z isArchived: true. Tako arhivirate vozilo, ki ga brisanje zavrne. Arhiviranje arhiviranega vozila ničesar ne spremeni; POST /api/v1/vehicles/{id}/unarchive ga razveljavi. Potrebno je isto dovoljenje ManageCompanyData kot za brisanje.

2026-09-28: opuščena preglasitev zunaj nočnega pasu

Opuščena polja; brez spremembe strukture.

  • nightOffWindowOverride in nightOverrideReason pri pavšalih potnega naloga. Obe polji ostajata v odgovoru, en element na noč, vendar je vsak element zdaj false oziroma null. Preglasitev, ki sta jo prikazovali, je ukinjena: odgovor za noč, krajšo od šestih ur, se poda prek nightAllocation in nobena preglasitev ne spremeni zneska. Prenehajte ju brati; v eni od prihodnjih različic ju lahko odstranimo.

2026-09-28: vhodni podatki za ceno goriva pri stroških kilometrine

Dodana polja v pogodbi; brez spremembe strukture.

  • fuelUnitPriceOverride in mileagePetrolGrade pri stroških. Zahtevka za ustvarjanje in posodobitev stroška sprejmeta obe polji, tudi pri stroških v zahtevku za ustvarjanje potnega naloga, vsak odgovor s stroškom pa ju vrne, tudi znotraj potnega naloga. fuelUnitPriceOverride je cena goriva na liter (na kWh za električno vozilo), dokazana z računom, v osnovni valuti podjetja; pri postavki kilometrine v CZ ali SK nadomesti predpisano povprečno ceno v komponenti goriva. mileagePetrolGrade (Octane95 ali Octane98) izbere predpisano povprečno ceno za Natural 95 ali Natural 98 v CZ za lastno vozilo na bencin brez cene z računa. Vsako polje se shrani le tam, kjer vpliva na obračun postavke, drugje je null. Posodobitev je popolna zamenjava: če ju izpustite, se postavka znova obračuna po predpisani povprečni ceni, za bencin po ceni za Natural 95, zato pošljite vrednosti, ki jih je vrnil strošek, če želite ohraniti ceno z računa ali bencin 98.

2026-09-16 — stroškovna mesta pri zaposlenih

Dodano polje API-ja; brez spremembe strukture.

  • costCenterIds pri zaposlenih. Odgovora s podrobnostmi in seznamom zaposlenih vrneta stroškovna mesta, ki jih zaposleni sme bremeniti, zahtevka za ustvarjanje in posodobitev zaposlenega pa ju sprejmeta. Prazen seznam pomeni brez omejitev — na voljo so vsa aktivna stroškovna mesta podjetja. Pri ustvarjanju je izpustitev polja enaka pošiljanju praznega seznama. Pri posodobitvi izpustitev ohrani shranjeni seznam, prazen seznam ga izbriše, seznam z vrednostmi pa ga v celoti zamenja. Vsak id mora pripadati vašemu podjetju, sicer je zahtevek zavrnjen s 400. Dodajanje stroškovnega mesta zunaj seznama na potni nalog je še naprej zavrnjeno s 400 — prav zaradi te zavrnitve polje obstaja. Omejitev velja samo za dodajanje: že dodeljena stroškovna mesta se za nazaj ne odstranijo, ko stroškovno mesto izpade s seznama. Pri pisanju velja varnostna meja 100 različnih stroškovnih mest na zaposlenega — podvojena se štejejo enkrat, shema pa mejo objavlja kot maxItems pri obeh telesih zahtevka. Nadzoruje velikost zahtevka in ni poslovna omejitev: seznam lahko navede le stroškovna mesta, ki jih podjetje dejansko ima, zato vas v praksi ne bo omejila.

2026-09-13 — zneski dnevnic po itinerarju po zakonitem času

Popravljeni zneski na obstoječih končnih točkah za dnevnice po itinerarju; brez spremembe strukture.

  • Izračun dnevnic po itinerarju in from-itinerary. Vrednosti time na postajah se še vedno berejo kot UTC, vrnjeni intervali pa so še vedno v UTC. Češkim in slovaškim podjetjem se koledarski dnevi zdaj delijo ob polnoči po praškem oziroma bratislavskem času namesto ob polnoči UTC. Poljska podjetja štejejo noči (21:00–07:00), doby in datume računov po varšavskem času. Enak zahtevek lahko zato za te trge vrne drugačne ure in zneske kot prej.

2026-09-12 — category je pri posodobitvi vozila neobvezen

Omiljeno polje v obstoječem zahtevku; brez spremembe strukture.

  • category pri posodobitvi vozila. Polje je zdaj neobvezno. Če ga izpustite, shranjena kategorija ostane nespremenjena; pošljite ga, kadar jo želite spremeniti, vključno z 0 za namerni izbris. Pri ustvarjanju je polje še naprej obvezno.

2026-08-23 — prostornina motorja pri vozilih

Dodatno polje pogodbe; brez spremembe strukture.

  • engineCapacityCc pri vozilih. Zahtevka za ustvarjanje in posodobitev vozila sprejemata neobvezno prostornino motorja kot celo število kubičnih centimetrov, vračata pa jo tako odgovor s podrobnostmi vozila kot seznam vozil. Pri posodobitvi izpustitev ohrani shranjeno vrednost, 0 pa jo izbriše.

2026-08-17 — locked zdaj sporoča zaklepe dokumentov

Popravljena semantika vrednosti obstoječega polja odgovora; brez spremembe strukture.

  • locked v odgovorih za podrobnosti in seznam potnih nalogov je prej poročal le o starejši zaklenitvi iz uvoza pred letom 2023 in ostal false za dokumente, zaklenjene v aplikaciji, vključno s samodejno zaklenitvijo, uveljavljeno ob izplačilu. Zdaj nosi enako izpeljano stanje zaklenjenosti, ki ga webhook entry.updated že sporoča v isLocked: true, kadar koli je dokument zaprt za pisanje. Razumejte to kot “tega vnosa ni mogoče spremeniti”, ne kot oznako določenega izvora zaklenitve.

2026-07-13 — place id-ji, ročni tečaji, razveljavitve dnevnic, smer tečaja

Dodatna, nazaj združljiva polja pogodbe in nov diskriminator tečaja.

  • Place id-ji na potnih nalogih. Zahteve za ustvarjanje in posodabljanje sprejemajo departureLocationPlaceId in destinationPlaceId (Google Places place_id), odgovor potnega naloga pa ju vrne. Pošljite shranjeni vrednosti nazaj pri posodobitvi s popolno zamenjavo, da ohranite identiteto kraja pri urejanju besedila cilja.
  • Ciljna država na potnih nalogih. Zahteve sprejemajo neobvezni destinationCountryCode (ISO 3166-1 alpha-2). Ko je podana, se shrani neposredno in strežniški rezervni geocoding se preskoči.
  • Ročni tečaji. Zahteve za stroške in dnevnice sprejemajo neobvezni manualExchangeRate, zahteve potnega naloga pa manualAdvanceExchangeRate za predujem. Vsak se upošteva samo, kadar ponudnik tečaja ne objavi tečaja za referenčni datum; pošiljanje, medtem ko obstaja uradni tečaj, se zavrne z EXCHANGE_RATE_UNAVAILABLE.
  • Razveljavitve dnevnic. Zahteva za dnevnico sprejema overrideAmount in overrideReason, bralni modeli dnevnice pa ju vrnejo. Da ohranite obstoječo razveljavitev pri posodobitvi s popolno zamenjavo, pošljite vrednosti nazaj; njuna izpustitev izbriše razveljavitev in se vrne na zakonsko izplačilo.
  • Smer tečaja. GET /api/v1/reference/exchange-rates zdaj nosi diskriminator direction: ForeignPerBase (HNB / ECB) pomeni deliti tečaj za pretvorbo v bazno valuto, BasePerForeign (CNB) pomeni množiti.

2026-07-08 — datum predujma, ponudnik tečaja za CZ/SK

Dve dodatni in nazaj združljivi spremembi.

  • Datum predujma na potnih nalogih. Zahteve za ustvarjanje in posodabljanje zdaj sprejemajo neobvezni advancePaymentDate (yyyy-MM-dd), odgovor potnega naloga pa ga vrne. Če je pri ustvarjanju izpuščen, strežnik uporabi datum naloga. Določa datum tečaja za predujem in, za češke tenante, referenčni datum tečaja za dnevnice.
  • Ponudnik tečaja za CZ/SK. GET /api/v1/reference/exchange-rates zdaj dokumentira celoten nabor ponudnikov: HNB za HR, ECB za SI in SK, CNB za CZ. Polje source je lahko "CNB", baseCurrency pa je domača valuta ponudnika (EUR za HNB/ECB, CZK za CNB). Vedenje je nespremenjeno; dokumentacija zdaj ustreza izvajanju.

2026-06-11 — števila obrokov po vrsti, izvor tečaja, koda za nedosegljiv tečaj

Tri dodatne spremembe površine. Vse so združljive za nazaj: obstoječi zahtevki še naprej delujejo nespremenjeno, nova polja v odgovorih pa so dodatki, ki jih lahko prezrete, dokler jih ne potrebujete.

  • Števila obrokov po vrsti pri ustvarjanju/posodabljanju dnevnice. Zahtevki za dnevnice zdaj sprejemajo breakfastsProvided, lunchesProvided in dinnersProvided (celoštevilska števila obrokov po vrsti) ter neobvezno razporeditev po dnevu mealsProvidedAllocation. So kanonski model za zapis: strežnik iz teh števil znova izračuna zmanjšanje. Obstoječi v1 skupni mealsProvided se še vedno sprejema; kadar polja po vrsti manjkajo, strežnik preslika vsoto kot prej, zato starejši odjemalci niso prizadeti. Odgovori še naprej vračajo izpeljani mealsProvided (kosilo + večerja, oblika HR Pravilnika) skupaj s števili po vrsti, zato so poti branja nespremenjene.
  • Izvor tečaja v odgovorih. Odgovori za stroške in dnevnice pridobijo exchangeRateSource, odgovor potnega naloga pa advancePaymentExchangeRateSource, ki zabeleži, od kod prihaja uporabljeni tečaj: koda ponudnika ("HNB", "ECB") za uradni tečaj, "MANUAL" za ročno vnesen tečaj, ali null za vrstico v isti valuti (brez pretvorbe) ali starejšo vrstico, shranjeno pred sledenjem izvora. Samo za branje, brez spremembe zahtevka.
  • Nova koda napake EXCHANGE_RATE_UNAVAILABLE (HTTP 400). Pojavi se, kadar ponudnik tečaja tenanta ne objavi tečaja za valuto na zahtevani datum in ni zgodovinskega tečaja, na katerega bi se lahko zanesli. Napaka je iz družine preverjanj s standardnim telesom errors po poljih, zato lahko specifično razločite primer nedosegljivega tečaja in zahtevate ročni tečaj. Dodano v katalog napak.

2026-05-23 — časi dnevnic iz itinerarja se shranjujejo kot pravi UTC (popravek)

Časi dnevnic, shranjeni prek POST /api/v1/travel-entries/{id}/per-diems/from-itinerary, se zdaj shranjujejo kot pravi trenutki UTC. Prej se je odhod/prihod vsakega odseka shranil z vrednostjo stenske ure, označeno kot UTC brez zamika (lokalni odsek ob 08:00 se je shranil kot 08:00Z namesto 07:00Z/06:00Z), zato so vrstice, ustvarjene iz itinerarja, od ročno dodanih odstopale za 1–2 uri in se prikazovale z zamudo. Shemi zahteve in odgovora sta nespremenjeni, vendar vrednosti departureTime/arrivalTime, ki jih ta endpoint vrne (in ki jih vrnejo poznejša branja istih vrstic), zdaj odražajo popravljeni trenutek UTC. Kalkulator za predogled še vedno vrača čase stenske ure. Zneski dnevnic niso prizadeti.

2026-05-23 — kalkulator dnevnic + shranjevanje celotne poti

Površina za izračun dnevnic je združena in pridobi enakovrednost shranjevanja celotne poti z locco spletno aplikacijo.

  • Novo POST /api/v1/utilities/per-diems/calculate — kalkulator brez stanja. Pošljite itinerar (en odsek = itinerar z dvema postajama) in prejmite nazaj izračunane vrstice z uporabljeno prerazporeditvijo na ravni itinerarja. Brez konteksta naloga, nič se ne shrani.
  • Novo POST /api/v1/travel-entries/{id}/per-diems/from-itinerary — znova izračunajte dnevnice potnega naloga iz itinerarja v enem klicu. Strežnik znova zažene svoj lasten mehanizem nad postajami (poslanim zneskom se nikoli ne zaupa), uporabi obroke po odseku vezane s ključem (countryCode, departureTime) (pari, ki jih vrne kalkulator), nato atomarno zamenja dnevnice naloga. S tem se reproducirata prerazporeditev na ravni itinerarja in nadgradnje domačih enot, ki jih pošiljanje vrstic ena za drugo ne more.
  • Odstranjeno POST /api/v1/travel-entries/{id}/per-diems/compute in POST /api/v1/per-diems/calculate-simple. Oba sta zajeta v utilities/per-diems/calculate — en odsek je le itinerar z dvema postajama. Premaknite integracije na novi kalkulator.

2026-05-22 — Podpora za slovenski trg

Začetna podpora za slovenske tenante. Posodobite odjemalca z osveženim OpenAPI snapshotom na /sl/api-reference/:

  • Slovenske občine — nov GET /api/v1/reference/slovenian-municipalities vrne SURS-ov seznam občin za izbiro kraja v spustnih seznamih na slovenskih potnih nalogih. Klic je mogoč iz katerega koli tenanta.
  • Davčno rezidentstvo zaposlenih — zapisom zaposlenih je dodano polje residency (Resident / NonResident) za slovensko poročanje o dnevnicah in davkih na plačo. Privzeta vrednost je Resident.

2026-04-28 — v1.0 izdana

Prva stabilna izdaja locco partnerskega API-ja. Vse površine so povezane, tipizirane in pokrite z OpenAPI snapshotom na /api-reference/:

  • Potni nalogi — popoln CRUD in akcije toka odobritev (oddaja, odobritev, zavrnitev, preklic, zahteva po spremembah), z atomarnim ustvarjanjem z vgnezdenimi stroški, dnevnicami, razdelitvami po stroškovnih mestih in prilogami v enem klicu.
  • Priloge — neposreden prenos na potni nalog prek POST /api/v1/travel-entries/{id}/attachments. Multipart, do 5 datotek na zahtevek.
  • Webhooks — registracija naročnine z enkratnim prikazom signing-secret-a, zgodovina dostav po naročnini in endpoint za ponovni poskus neuspelih ali izčrpanih dostav.
  • Izplačila — seznam nalogov, pripravljenih za izplačilo, ustvarjanje serij, zgodovina, brisanje serije.
  • Zaposleni, Oddelki, Vozila, Stroškovna mesta — CRUD in seznami, s prilagojenimi polji na zaposlenih.
  • Reference — hrvaške občine, HNB tečajne liste, tabela dnevnic, seznami dovoljenih držav in valut podjetja.
  • Podjetje — branje profila.

Vrednosti enumeracij za Status, TravelType, PayoutMethod in ostale so dokumentirane v OpenAPI shemi kot enum: [...] seznami dovoljenih vrednosti, zato se generirani odjemalci vežejo na kanonične nize ("PendingApproval", "BankTransfer" itd.) namesto na neprozorne vrednosti.