projekti/Backend · Integracija

Pantheon Middleware

Integracijski servis produkcijske razine koji povezuje webshop s Pantheon ERP-om - uz automatsku hrvatsku fiskalizaciju i dostavu računa e-mailom. Od narudžbe do fiskaliziranog računa, bez ijednog ručnog koraka.

Uloga

Backend arhitektura · izrada integracije · isporuka

Tehnologije

NestJS · BullMQ · PostgreSQL · MS SQL Server

Godina

2026

Status

U produkciji

arhitektura · samo naprijed
IzvorWebshop
kanonski JSON
Proces 01HTTP Receiver
202 · u red
BrokerRedis Queue
posao
Proces 02Worker
stored procs
ERPPantheon
└▶
FINAFiskalizacija · ZKI / JIR
headless Chromium
DokumentPDF računa
SMTP e-mail
PrimateljKupac
0HTTP prihvaćeno - trenutna potvrda, asinkroni rad
0Neovisna procesa, jedna baza koda
0Ručnih koraka: narudžba → fiskalizirani račun u sandučiću kupca
Izazov

Što je trebalo riješiti.

Webshop i Pantheon ERP su u većini instalacija dva odvojena svijeta. Narudžbe se ručno prepisuju, računi izdaju ručno, a hrvatska fiskalizacija - zakonska obveza - ostaje izvan tijeka ili se rješava zasebnim alatom.

Rezultat je poznat: kašnjenje između narudžbe i računa, greške pri prepisivanju, i ovisnost o tome da netko svaki dan odradi isti niz koraka.

Trebao je servis produkcijske razine koji preuzima narudžbu iz webshopa i nosi je sve do fiskaliziranog računa poslanog kupcu e-mailom - pouzdano, ponovljivo i bez ičijeg dodira.

Naš pristup

Kako smo to izgradili.

Izgradili smo integracijski servis koji ide samo naprijed: webshop šalje narudžbe u jednom smjeru, middleware obavlja ostalo. Čist ugovor sprijeda, sigurni zapisi i fiskalizacija straga - jednostavno za razumjeti, teško srušiti.

  • Vlastiti API ugovor. Middleware definira format narudžbe, ne obrnuto. Kanonski JSON objavljen kao OpenAPI/Swagger specifikacija, sa Zod/DTO validacijom na ulazu i primjerima zahtjeva. Webshop se integrira prema stabilnom, dokumentiranom i verzioniranom sučelju - bez adaptera, bez pogađanja, bez naknadnih iznenađenja.
  • Sigurni zapisi u ERP. Svaki zapis ide kroz Pantheon pohranjene procedure - nikad izravni INSERT u tablice ERP-a. Zapisi su umotani u transakcije, numeriranje dokumenata ostaje u vlasništvu ERP-a, a pristup ide preko namjenskog integracijskog korisnika s minimalnim ovlastima. ERP nikad ne završi u nedosljednom stanju zbog integracije.
  • Hrvatska fiskalizacija, vlastita izvedba. Generiranje ZKI-ja, digitalno potpisani XML (XML-DSig), razmjena s FINA-inim servisom, preuzimanje JIR-a i QR kod na računu. Bez posrednika i bez third-party fiskalizacijskog servisa. Prijelaz demo → produkcijski certifikat izveden je kao kontrolirani, dokumentirani postupak.
  • Automatsko fakturiranje. PDF računi renderirani headless Chromiumom iz predložaka, s fiskalnim podacima i QR kodom, dostavljeni kupcu e-mailom putem SMTP-a - uz interne BCC kopije.
  • Otporno i idempotentno. Trajan red poslova s ponovnim pokušajima i eksponencijalnom odgodom. Idempotentnost na razini narudžbe - ista narudžba poslana dvaput ne stvara dva dokumenta. Praćenje stanja sigurno na pad procesa, obrada dead-letter poruka s ponovnim stavljanjem u red, i automatsko ponovno spajanje na ERP nakon prekida veze.
  • Nadzorljivo. Strukturirano JSON bilježenje s korelacijskim ID-jem kroz cijeli životni ciklus zahtjeva - od HTTP zahtjeva do poslanog e-maila. Health i readiness provjere za svaku ovisnost (ERP, baza, red, SMTP) i nadzorna ploča reda poslova.
  • Konfigurabilna poslovna pravila. Popusti, mapiranje skladišta, tretman digitalnih artikala, porezne stope, predlošci računa - sve su to postavke po okruženju, ne izmjene koda. Ista slika radi kod različitih naručitelja s različitim postavkama.
Arhitektura

Dva procesa, jedna baza koda.

Servis radi kao dva neovisna procesa iz jedne baze koda, tako da se svaki može skalirati i pasti zasebno bez rušenja drugoga.

Proces 01

HTTP Receiver

Autentificira i validira dolazne narudžbe, radi provjeru duplikata, stavlja posao u red i odmah vraća 202 Accepted. Webshop nikad ne čeka ERP - nedostupnost ERP-a ne ruši checkout.

Proces 02

Worker

Osigurava kupca, sinkronizira narudžbu u Pantheon, provodi fiskalizaciju, renderira PDF račun i šalje e-mail - uz ponovne pokušaje i odgodu u svakom koraku, te dead-letter zapis kad ni to ne prođe.

Lokalno stanje - ključevi idempotentnosti, korelacija ID-jeva između narudžbe i ERP dokumenta, te revizijski zapis svake sinkronizacije - živi u PostgreSQL-u. Broker poruka je Redis. ERP je izvor istine; middleware ne drži poslovne podatke, samo ono što mu treba da posao ne izgubi i ne ponovi.
Sigurnost i predaja

Najmanje ovlasti, ništa vani.

  • Autentikacija dolaznih zahtjeva tokenom, uz odbacivanje svega što ne prođe shemu.
  • Nikakvi izravni zapisi u ERP tablice; namjenski integracijski korisnik umjesto administratorskog računa.
  • Tajne i certifikati isključivo iz okruženja - nikad u repozitoriju ni u slici.
  • Isporuka bez izvornog koda: aplikacija se u sliku pakira prevedena u V8 bytecode, pa čitljiv izvorni kod nikad ne dolazi na infrastrukturu naručitelja. Isporučuje se samo slika.
Smještaj

Dvije opcije smještaja.

Servis se isporučuje kao Docker slika, pa se jednako vrti bilo gdje - a naručitelj bira gdje.

Opcija 01

Na infrastrukturi naručitelja

Servis radi unutar njihove mreže, uz Pantheon, bez izlaganja ERP-a prema van. Dobivaju sliku, docker-compose postavke i runbookove za deploy, backup i rollback. Podaci nikad ne napuštaju njihovo okruženje, a mi ostajemo dostupni za podršku i nadogradnje.

Opcija 02

Na našoj infrastrukturi, kao upravljana usluga

Mi vrtimo, nadziremo i održavamo servis, s odvojenim produkcijskim i test okruženjem. Naručitelj dobiva URL i token, i ne brine o poslužitelju, ažuriranjima ni certifikatima. Potreban je jedino siguran mrežni put do njihove Pantheon instance.

U oba slučaja isti je kod, API ugovor i dokumentacija - razlika je samo u tome tko drži poslužitelj. Prelazak s jedne opcije na drugu ne zahtijeva izmjene ni na webshopu ni u ERP-u.
Tehnologije

Odabrano zbog pouzdanosti.

Okruženje / jezikNode.js 20+ · TypeScript 5 (strogi način)
FrameworkNestJS 10
Red poslovaBullMQ + Redis
Pohrana stanjaPostgreSQL + Prisma
Pristup ERP-uMS SQL Server - izravni TDS, pohranjene procedure
FiskalizacijaPotpisani XML (XML-DSig) · node-forge · QR kodovi
PDF računaHeadless Chromium (Puppeteer) + Handlebars predlošci
E-mailSMTP (Nodemailer)
Nadzorljivostpino · Swagger / OpenAPI · Bull Board
IsporukaDocker + Docker Compose
Inženjerska kvaliteta

Izgrađeno za predaju.

  • TypeScript strogi način s dodatnim sigurnosnim zastavicama; tipizirane klase pogrešaka s lancima uzroka.
  • Jedinični, integracijski (protiv žive Pantheon instance) i end-to-end testovi.
  • Dva načina isporuke - samostalni handoff paket za vanjske operatere, ili deploy iz repozitorija s alatima za ponovni deploy, backup i rollback.
  • Odvojena test i produkcijska okruženja, s demo fiskalizacijskim certifikatom na testu.
  • Dvojezična (EN / HR) dokumentacija: API specifikacija, tehnička dokumentacija, deploy i go-live runbookovi.
Status

Gdje se nalazi.

Servis je u produkciji. Cijeli tijek radi bez ručnih koraka: zaprimanje narudžbe → osiguranje kupca → ERP narudžba i račun → fiskalizacija → PDF → e-mail kupcu.

Uz produkcijsko okruženje radi i odvojeno test okruženje s demo fiskalizacijom, na kojem se integracije razvijaju i provjeravaju prije nego dođu do stvarnih računa.

u produkciji · živa Pantheon instanca
  • zaprimanje narudžbe
  • osiguranje kupca
  • ERP narudžba i račun
  • fiskalizacija (ZKI / JIR)
  • PDF računa renderiran
  • dostava e-maila
  • kontejnerizirano + nadzorljivo
  • prijelaz na produkcijski certifikat
  • odvojeno test okruženje
Za koga

Middleware, ne jednokratna integracija.

Servis je izgrađen kao proizvod, a ne kao izvedba po mjeri jednog naručitelja. Ugovor prema webshopu, pristup Pantheonu i fiskalizacijski sloj su općeniti; ono što se razlikuje od naručitelja do naručitelja - vjerodajnice, certifikat, skladišta, porezne stope, predlošci računa, poslovna pravila - su postavke okruženja.

Praktično, to znači da se uvođenje kod novog Pantheon korisnika svodi na konfiguraciju i provjeru na testnom okruženju, a ne na novi razvojni ciklus.

Prikladno za trgovce koji koriste Pantheon ERP i žele da webshop narudžbe završe kao fiskalizirani računi bez ručnog rada - bez obzira na to koja platforma pokreće webshop, jer webshop se integrira prema našoj objavljenoj specifikaciji.

Sljedeći projekt

Webshop × Pantheon

OTVORENI ZA NOVE PROJEKTE

Imaš sličan projekt?

Reci nam što gradiš. Javljamo se u roku od jednog radnog dana s jasnim planom, rokovima i pravom osobom za razgovor.