Servis: storno naloga (kao Prodaja/Nabavka) — KIR/KPO storno stavke, fiskalni refund

Do sada je jedini način da se poništi naplaćen/preuzet servisni nalog bio
fizičko brisanje (ObrisiNalog), koje ostavlja KIR/KPO/fiskalne zapise sa mrtvim
izvor_id — prihod ostaje prijavljen za nalog koji više ne postoji.

Migracija 100: servisni_nalozi dobija stornirano/razlog_storniranja (kao
prodajni_nalozi/nabavke). ServisRepo.Storno vraća ugrađene delove na stanje
ali NE briše nalog. Novi handler StornoNaloga (dozvola servis.storno):
- KIR/KPO original ostaje, dograđuje se storno stavka (model.KirStorno/KpoStorno)
- fiskalni refund (best-effort) preko refundujServis — Refund zahtev sa
  ReferentDocumentNumber ka originalnom PFR broju, isti obrazac kao stornirajProdaju
- ObrisiNalog sad odbija brisanje ako nalog već ima fiskalni/KIR/KPO zapis i
  upućuje na Storno

stornoBezRefunda (dashboard upozorenje) prošireno da prati i servisne stornose
bez uspešnog fiskalnog refunda, ne samo prodaju.
This commit is contained in:
2026-07-02 11:30:55 +02:00
parent 3c61063bbb
commit f74cb04024
9 changed files with 392 additions and 41 deletions
+3
View File
@@ -217,6 +217,9 @@ type ServisRepository interface {
SacuvajOdlukuKlijenta(ctx context.Context, id int64, odluka string, odgovor string) error
ObrisiOdlukuKlijenta(ctx context.Context, id int64) error
Obrisi(ctx context.Context, id int64, korisnikID *int64) error
// Storno stornira nalog (vraća ugrađene delove na stanje, markira stornirano=1)
// bez brisanja — koristi se kad nalog već ima finansijske zapise (KIR/KPO/fiskalni)
Storno(ctx context.Context, id int64, razlog string, korisnikID *int64) error
SledeciBroj(ctx context.Context) (string, error)
SacuvajNaplatu(ctx context.Context, id int64, nacinPlacanja string, naplaceno float64) error
}