← Svi projekti

Integracije i državni sistemi

Servis za e-fakture

Servis u Go-u koji programu na kasi otvara vrata ka SEF-u, e-otpremnicama i pošti. Sve što mora da izađe iz objekta ide kroz njega.

Šema toka — fiskalna kasa i program na kasi levo, Go servis u sredini, SEF, CRF, Moj e-Račun, pošta i veb prodavnica desno

Problem

Zakon je uveo e-fakture, e-otpremnice i evidenciju PDV-a — sve kroz državni sistem, preko HTTP poziva sa UBL XML-om, ključevima i TLS-om. Program na kasi je pisan da razgovara sa lokalnom bazom i fiskalnim štampačem, ne sa veb servisima čija se specifikacija menja. Prepisati ga nije bila opcija: radi u objektima, ljudi ga znaju napamet, a svaka izmena znači novu instalaciju kod svakog korisnika.

Rešenje

Sve što izlazi iz objekta izmešteno je u zaseban servis u Go-u — jedan izvršni fajl, bez instalacije i bez zavisnosti. Program pozove lokalnu adresu i dobije odgovor; o XML-u, ključevima i sertifikatima ne zna ništa. Kad država promeni specifikaciju, menja se samo taj fajl — program na kasi ostaje netaknut.

Šta je urađeno

  • Slanje izlaznih faktura na SEF, sa upisom u Centralni registar faktura
  • Slanje i preuzimanje e-otpremnica, ulaznih i izlaznih
  • Preuzimanje dokumenata i kao XML i kao PDF
  • Provera statusa poslate fakture
  • Prihvatanje i odbijanje ulaznih faktura
  • Pojedinačna evidencija PDV-a
  • Validacija XML-a pre slanja, da se greška uhvati pre nego što ode
  • Pregled firmi koje su na sistemu
  • Drugi posrednik kao alternativa državnom, sa istim tokovima
  • Dnevni izveštaj sa fiskalne kase — čitanje i priprema za slanje
  • base64 u oba smera, PDF u tekst i nazad
  • Slanje pošte sa prilogom preko Gmail-a, Outlook-a ili Yahoo-a
  • Slanje fiskalnog računa u veb prodavnicu
  • Slanje dnevnih izveštaja o prometu velikim dobavljačima

Ovo je jedini projekat u listi koji nema nijedan ekran. Servis nema interfejs — poziva ga drugi program, a čovek ga vidi samo kad ne radi.

Zanimljiv je zbog mesta na kom stoji. Program na kasi je nasleđe: radi godinama, ljudi ga znaju u prste i ne sme da se dira bez potrebe. Državni sistem je suprotnost tome — menja se, traži nove formate i ne pita ko je spreman. Između to dvoje treba nešto što apsorbuje promenu.

Zato je granica povučena na jednom mestu: program ne zna ništa o spoljnom svetu. On pozove lokalnu adresu i dobije odgovor. Ne zna šta je UBL, ne drži ključeve, ne bavi se sertifikatima. Kad se specifikacija promeni, korisniku ide jedan fajl — ne nova verzija programa i ne obilazak objekata.

Servis je iz 2023, iz prve godine obaveznih e-faktura, i od tada raste sa propisom — e-otpremnice, evidencija PDV-a i drugi posrednik došli su kasnije, svaki put kao dopuna istog fajla umesto kao novi program.

Danas ima blizu pedeset ruta, a skoro svaka ima i svog demo blizanca koji gađa probno okruženje. To nije udvostručen posao bez razloga: faktura poslata na državni sistem je poslata. Nema „povuci nazad”. Mogućnost da se ceo tok — sastavljanje, validacija, slanje, provera statusa — prođe na probnom okruženju je razlika između uvođenja nove verzije u utorak ujutru i uvođenja u petak uveče sa strepnjom.

Go je izabran zbog jedne osobine: kompajlira se u jedan izvršni fajl bez zavisnosti. Na računaru u objektu nema runtime-a koji treba instalirati, nema verzije koja se ne poklapa. Fajl se prekopira i pokrene.

Rezultat

Program na kasi ispunjava zakonsku obavezu a da nije prepisan. Kad se specifikacija državnog sistema promeni, korisniku se pošalje jedan fajl umesto nove verzije programa. Isti servis usput nosi i poštu, izveštaje dobavljačima i račune ka veb prodavnici.