Projekat 11 · Identitet i dokumenti
Fakture zamrznute pri izdavanju i kuponi bez dvostruke isplate
Tri proizvoda morala su odvojeno bilježiti kad je zapis nastao i kad je postao važeći. U carinskom sistemu nijedna od 50.000 faktura nije se promijenila nakon izdavanja.
Carinsko fakturisanje: provjereno na 50.000 faktura
od kojih se nijedna nije promijenila nakon izdavanja
Priča u 5 koraka
Stack
- Node.js
- PostgreSQL
- Kotlin
- Fabric.js
01 · Kontekst
Carinskom organu trebale su fakture koje se nakon izdavanja nikad ne mogu promijeniti.
Carinskom organu trebale su fakture koje se nakon izdavanja nikad ne mogu promijeniti. Terminali za novčane doznake morali su štampati kupone i kad nema mreže, bez rizika da se isti kupon isplati dvaput, a platformi za sastanke trebala je bijela tabla s kojom se može raditi i nakon što sastanak završi.
Ta tri proizvoda nisu bila povezana i nastala su u različitim godinama, ali je svakom trebalo isto rješenje: sačuvani podaci morali su razlikovati zapis koji samo postoji od zapisa koji obavezuje.
02 · Nije se smjelo mijenjati
Svaki sistem koji izdaje dokumente prije ili kasnije mora odlučiti šta stari dokument prikazuje nakon što mu se promijeni šablon, a većina to odluči prekasno.
Svaki sistem koji izdaje dokumente prije ili kasnije mora odlučiti šta stari dokument prikazuje nakon što mu se promijeni šablon, a većina to odluči prekasno.
Šabloni se mijenjaju: ispravi se raspored, osvježi pravna napomena ili zamijeni logo. Onda neko otvori dokument izdat prije dvije godine i vidi ovogodišnji šablon, s ovogodišnjim pravnim tekstom, na zapisu koji je potpisan pod drugim uslovima.
Kad izmjena šablona promijeni stari dokument, nikakva greška se ne javi, a arhiva od tog trenutka više ne pokazuje ono što je stvarno izdato.
Nastanak i važenje mogu se razići i u drugim sistemima, na primjer kod kupona odštampanog bez mreže ili kod table koja postoji samo kao snimak ekrana.
03 · Šta sam uradio
Carinsko fakturisanje (2020). Carinski organ je tražio da se izdata faktura nikad ne promijeni.
Carinsko fakturisanje (2020). Carinski organ je tražio da se izdata faktura nikad ne promijeni. Zato se dokument u trenutku izdavanja renderovao i čuvao kao nepromjenjiv HTML, pa kasnije izmjene šablona nisu dirale ništa što je već izdato.
Sistem je definiciju dokumenta držao odvojeno od izdatog dokumenta, pa se šablon mogao dalje mijenjati, a historija je ostajala netaknuta. Zamrznuti dokument više nije zavisio ni od toga hoće li kod za renderovanje biti ispravan i u budućnosti. Da su se dokumenti renderovali na zahtjev, svaka izmjena tog koda retroaktivno bi promijenila svaki stari dokument.
Terminali za novčane doznake (2022). Primalac je podizao gotovinu na benzinskoj pumpi pomoću koda s kupona. Terminal je morao raditi i kad mreža ne radi, ali kupon isplaćen dvaput bio je jedina greška od koje se gubi stvarni novac.
Terminal je svaki kupon štampao kao još nevažeći, jer je kupon koji se neko vrijeme ne može iskoristiti bio prihvatljiva cijena za sigurnost da se nijedan neće isplatiti dvaput. Kupon je postajao važeći kad to sistem potvrdi: automatski kad se veza vrati ili ručno preko operatera, kojem je sistem javljao da postoji neaktiviran kupon. Sistem je znao koji su kuponi odštampani, a još nisu važeći, pa se nijedan nije mogao izgubiti, a da to niko ne primijeti.
Platforma za sastanke (2023). Bijela tabla čuvala se kao skup strukturiranih objekata umjesto kao obična slika, pa su svaka linija, oblik i komad teksta zadržavali svoja svojstva. Nakon sastanka tablu je bilo moguće ponovo učitati i nastaviti uređivati.
04 · Rezultat
U sva tri proizvoda zapis je ostao čitav i nakon događaja koji ga obično uništi: izmjene šablona, prekida veze ili kraja sesije.
U sva tri proizvoda zapis je ostao čitav i nakon događaja koji ga obično uništi: izmjene šablona, prekida veze ili kraja sesije.
- Carinsko fakturisanje: provjereno na 50.000 faktura, od kojih se nijedna nije promijenila nakon izdavanja
05 · Šta bih uradio drugačije
Na carinskom sistemu zamrzavanje izdatog dokumenta bilo je ispravno, ali nepotpuno, jer se sam šablon nikad nije verzionisao.
Na carinskom sistemu zamrzavanje izdatog dokumenta bilo je ispravno, ali nepotpuno, jer se sam šablon nikad nije verzionisao. Nijedna izdata faktura nije se mogla promijeniti, ali nije postojao zapis o tome koja verzija šablona ju je napravila, ni ko je i kada mijenjao šablon. Zamrznuti dokument riješio je hitno pitanje, a pitanje revizije ostavio otvorenim. Šablone bih verzionisao od samog početka i svaki izdati dokument povezao s verzijom šablona iz koje je nastao.
Povezane usluge
Usluge koje se oslanjaju na ovaj projekat.
- Mobilne aplikacijeHardver u React NativeuKupon odštampan na termalnom štampaču POS terminala na benzinskoj pumpi. Ne može se unovčiti dok ga sistem ne prepozna.
- Regulisani i osjetljivi sistemiFintech razvojCarinsko fakturisanje, terminali za novčane doznake i platforma za sastanke: svaki od tih sistema razdvaja trenutak kad je dokument kreiran od trenutka kad počinje važiti.
- Mobilne aplikacijeOffline-first aplikacijeTerminali za novčane doznake koji i bez mreže štampaju kupone. Kupon postaje važeći tek kad ga sistem potvrdi, automatski čim se veza vrati ili preko operatera.
- Backend, podaci i integracijePlatne integracijeTerminal štampa kupon za podizanje novčane doznake i kad nema mreže. Kupon postaje važeći tek kad ga sistem potvrdi, pa nijedan ne može biti isplaćen dvaput.
- Regulisani i osjetljivi sistemiDržavni dokumenti i revizijski tragoviCarinske fakture sačuvane kao nepromjenjivi HTML u trenutku izdavanja. Kasnija izmjena šablona ne može promijeniti fakturu koja je već izdata.
- Regulisani i osjetljivi sistemiSistemi za fakturisanje i carinuCarinsko fakturisanje u kojem se svaka faktura renderuje jednom, u trenutku izdavanja, i čuva kao nepromjenjivi HTML. Provjerili smo ga na 50.000 faktura i nijedna se nakon izdavanja nije promijenila.
Povezani tekstovi
Tekstovi nastali iz ovog projekta.
Projekat 11
Radite na sličnom problemu? Odgovaramo u roku od jednog radnog dana.
Prvi poziv traje 30 minuta i ni na šta vas ne obavezuje.