Domov/ delo/Sistem za izdajo računov za slovenska mala podjetja
Avtor · 2024 — 2026 · V produkciji

Sistem za izdajo računov za slovenska mala podjetja

Samogostovano PHP orodje za izdajo računov, zgrajeno za slovenska mala podjetja — UPN QR kode, skladnost z DDV/VAT, dva PDF generatorja in dostava po e-pošti. Preizkušeno v realnih poslovnih knjigah in pri strankah.

Vloga Avtor / Samostojni razvijalec
Trajanje 2024 → 2026
Tehnologije PHP 8 · TCPDF · mPDF · PHPMailer
Hramba JSON flat-file · podatki izven web roota
Skladnost 94. člen ZDDV-1 · UPN QR · sklic SI00
Postavitev cPanel VPS · GitHub CI/CD
PDF generatorji
2
TCPDF + mPDF s samodejnim fallbackom
Davčna režima
2
domača oprostitev DDV + EU obrnjena davčna obveznost
Načini pošiljanja
3
php_mail · sendmail · SMTP
Standard UPN QR
19-field
ISO-8859-2, sklic SI00

Pregled

Ta sistem za izdajo računov sem zgradil za slovenska mala podjetja — tista, ki izdajo nekaj deset računov na leto, morajo ostati skladna s slovenskimi pravili DDV/VAT in želijo samogostovano orodje, ki ne pošilja podatkov domov in jih ne zaklene v SaaS naročnino.

V produkciji teče od leta 2024 in pokriva realne cikle izdajanja računov. Obseg je namerno ozek: ustvari račun, generiraj skladen PDF z UPN QR kodo, ki jo strankina banka lahko skenira, in ga pošlji po e-pošti. Vse je nastavljivo prek spletnega vmesnika brez ogrodja — čisti PHP 8, JSON flat-file hramba in REST API, ki mi omogoča izdajanje računov tudi iz CLI ali drugih orodij.

Najtežji del ni bil vmesnik — bila je natančna izvedba UPN QR kode. Standard predpisuje točno določen 19-poljni payload v kodiranju ISO-8859-2, namensko kodo GDSV, plačilni sklic SI00, izpeljan iz številke računa, in 3-mestno kontrolno številko, ki šteje dolžine vseh polj plus znake nove vrstice med njimi. Vsaka slovenska bančna aplikacija to strogo preverja. Implementiral sem tudi sosednjo UPN-QR mikrostoritev kot samostojni Node.js/Express generator QR, ki sledi istemu standardu — uporabno za druge integracije.

Arhitektura

~/invoices/architecture/system-map.svg
01 — VSTOPNE TOČKESpletni vmesnikbrskalnik · ustvari/poglej/pošljiREST APIX-API-Key · CLI / integracijeInvoiceGenerator.phpPHP 8 · podatkovni model računa · izris predlogedvojni PDF engine (TCPDF / mPDF) · UPN QR payloadopomba oprostitve DDV · sklic SI00 · ISO-8859-202 — IZHODTCPDFprimarni PDF enginemPDFHTML-v-PDF fallbackUPN QR19-field · GDSV · SI00PHPMailer 6SMTP · sendmail · mail()03 — HRAMBAJSON flat-filesstranke · računi · storitvecPanel VPS · GitHub CI/CD prek SSH deploy ključa · podatkovni imenik izven web roota · asinhrono varnostno kopiranje v privatni repo04 — INFRA

Branje diagrama: Računi vstopajo prek brskalniškega vmesnika ali REST API (avtenticiranega z API ključem). Razred InvoiceGenerator ureja celoten podatkovni model — datume, opombe o oprostitvi DDV, popuste po postavkah in generiranje UPN QR payloada. PDF-je izrisuje TCPDF (primarni) s samodejnim fallbackom na mPDF; QR koda je vdelana neposredno. Dokončani računi se hranijo kot JSON flat-file datoteke v imeniku izven web roota, dostava e-pošte pa gre prek PHPMailer 6, ki podpira tri načine pošiljanja. Vse se postavi v produkcijo prek GitHub → cPanel SSH.

Predogled računa

~/invoices/output/101-2025-ClientName.pdf
NRAČUNPodjetje d.o.o.Glavna ulica 11000 LjubljanaKraj izdaje:Blejska DobravaDatum izdaje:15.01.2025Datum zapadlosti:23.01.2025YOUR COMPANY D.O.O.Blejska Dobrava 61, 4273Davčna št.: 82426627DDV zavezanec: NERačun št.:101-2025ŠT.STORITEVKOL.CENAPOPUSTVREDNOST1Letno gostovanje - primer.si - 1 leto - 1.1.2025 - 31.12.2025175,00 EUR75,00 EUR2Podaljšanje domene .si - primer.si - 1 leto - 7.2.2025 - 6.2.2026122,00 EUR22,00 EUROpomba: DDV ni obračunan na podlagi 1. odstavka 94. člena ZDDV-1SKUPNA VREDNOST:97,00 EURSKUPAJ POPUST:- €SKUPAJ ZA PLAČILO EUR:97,00 EURUPN QR kodaNačin plačila:TRRIBAN:SI56 1010 0005 2158 156Sklic:SI00 1012025INFO@YOURBIZ.SI · WWW.YOURBIZ.SI · +386 XX XXX XXXVEM št. 0414-81-20130702-000531 · Matična št.: 6405380000

Stilizirani predogled generiranega PDF-ja — trikolonska glava, tabela postavk s popusti po postavkah, opomba o oprostitvi DDV, UPN QR koda (skenira jo katera koli slovenska bančna aplikacija) in plačilni sklic SI00, izpeljan iz številke računa.

Majhno ne pomeni enostavno za pravilno izvedbo. Slovensko izdajanje računov ima resnične zakonske zahteve in vsak PDF, ki gre ven, je pravni dokument.
Davor Majc, Avtor
03 Kar sem dostavil · rešeni izzivi

Šest stvari dostavljenih,
tri težke rešene.

Ključni prispevki

  • Zasnoval in implementiral celoten sistem za izdajo računov od začetka — spletni vmesnik, REST API, PDF pipeline, dostava po e-pošti in podatkovni sloj.
  • Implementiral slovenski standard UPN QR: 19 polj v ISO-8859-2, plačilni sklic SI00, namenska koda GDSV in 3-mestna kontrolna številka.
  • Zgradil PDF pipeline z dvema generatorjema (TCPDF + mPDF) s samodejnim fallbackom in ločeno flex-free mPDF predlogo za združljivost.
  • Povezal skladnost z DDV/VAT za dva režima: domača oprostitev za mala podjetja (94. člen ZDDV-1) in EU obrnjena davčna obveznost (44. člen Direktive 2006/112/ES).
  • Spravil v produkcijo nastavljivo pošiljanje e-pošte — php_mail, sendmail in polni SMTP prek PHPMailer 6 — z Markdown predlogami sporočil in PDF priponko.
  • Postavil CI/CD iz GitHub na cPanel VPS prek SSH deploy ključev; podatkovne datoteke živijo izven web roota in se asinhrono varnostno kopirajo v sosednji privatni repozitorij.

Rešeni izzivi

  • Slovenski standard UPN QR je strog: 19 polj ločenih z novo vrstico, zneski v centih, zapolnjeni z ničlami do 11 mest, vsebina v ISO-8859-2 in 3-mestna kontrolna številka, ki šteje vse znake za novo vrstico. En bajt narobe in vsaka bančna aplikacija ga zavrne.
  • TCPDF in mPDF se različno obnašata s flexbox HTML — mPDF ga preprosto ignorira. Vzdrževanje dveh variant predloge brez podvajanja poslovne logike je zahtevalo čisto ločitev med izrisom podatkov in postavitvijo.
  • cPanel deljeno gostovanje postavlja tesne omejitve: ni ozadnih workerjev, ni Redisa, privzeto ni pisljivega sistemskega tempa. Asinhrono varnostno kopiranje uporablja proc_open z bypass_shell tako na Windows (dev) kot Linux (prod) poteh.
04 Tehnološki sklad

Kaj poganja stvari.

PHPTCPDFmPDFPHPMailerUPN QRDDV/VATJSONcPanel VPSGitHub Actions
Pogovorimo se

Pripravljeni popraviti, zgraditi
ali skalirati?

30 minut, z mano osebno. Preberem vaš sistem kot dnevniško datoteko in povem, kaj bi naredil najprej. Brez prezentacij, brez prodajnega lijaka.

Davor Majc, ustanovitelj, Numen

Kaj dobite na klicu
→ enostranska diagnostika
→ 2–3 obliki rešitve, razvrščeni po učinku
→ okvirni strošek + časovnica za vsako
→ da/ne — ali sem prava izbira
+386 40 828 474 · Blejska Dobrava, SI