Fakturr
Fakturace, která se vejde do kapsy — od zadání položky po hotové PDF s QR platbou.
- Klient
- Vlastní produkt
- Rok
- 2026
- Platforma
- Android + Windows
- Technologie
- Flutter 3.47 · Dart · Node.js 22 · TypeScript · Express 5 · PostgreSQL · Riverpod · Drift
Zadání
Živnostník fakturuje odkudkoliv, jen ne od stolu. Zakázka skončí v pondělí odpoledne u klienta, ale faktura se vystaví až ve čtvrtek večer doma, protože k tomu je potřeba počítač a webová aplikace, která se na telefonu ovládá mizerně.
Čím delší prodleva, tím pozdější platba. A při ručním přepisování údajů klienta se dřív nebo později ujede číslo účtu nebo variabilní symbol — a faktura se vrací.
Druhá polovina problému je opačná: měsíční uzávěrku, hromadné doklady a ladění vzhledu faktury nikdo dělat na telefonu nechce. Nástroj musí zvládnout obojí, a hlavně v obojím ukazovat stejná čísla.
Řešení
Fakturace navržená rovnou pro telefon, ne zmenšený desktop.
Klienti a položky se zadávají jednou. Katalog drží ceny, sazby DPH i jednotky (za hodinu, za kus, za měsíc, za den), takže vystavení faktury je výběr ze seznamu, ne psaní. Karta klienta si vedle IČO a DIČ pamatuje i to, kolik už mu bylo vyfakturováno a co zůstává nezaplacené, s historií všech dokladů.
Rekapitulace DPH se počítá sama, po sazbách, včetně základu a daně. Výstupem je PDF v podobě, kterou účetní očekává — a s QR kódem pro platbu, takže odběratel nemusí nic opisovat.
Doklad vypadá jako firma, ne jako šablona. Na výběr je šest návrhů od klasického po dlaždicový, k tomu vlastní barva, logo, patička, zaoblení rohů i texty na faktuře. Náhled se překresluje průběžně, takže výsledek je vidět hned.
Přehled ukazuje to podstatné — kolik faktur čeká na úhradu, kolik je po splatnosti a co už je letos zaplaceno, plus měsíční graf a žebříček nejlepších klientů. Jedním klepnutím na ikonu oka se všechny částky schovají, takže appku jde otevřít i v tramvaji nebo ukázat na schůzce, aniž by kdokoliv viděl obraty.
Jak je to postavené
Jedna codebase, dvě platformy. Aplikace je ve Flutteru — z téhož kódu vzniká Android build i desktopová verze pro Windows. V terénu telefon, v kanceláři okno na druhém monitoru, stejná data a stejné chování.
Stav si drží Riverpod, lokální data Drift nad SQLite, takže se doklad rozepíše i bez signálu a odešle, jakmile je připojení. Nad tím sedí REST API v Node.js s Expressem a TypeScriptem a PostgreSQL; část výpočtů a kontrol žije přímo v databázi jako uložené procedury, aby nešly obejít jiným klientem.
Jedna věc stála za rozmyšlení nejvíc: výpočet DPH se dělá na dvou místech — v Dartu kvůli okamžitému náhledu v aplikaci a v TypeScriptu na serveru, kde vzniká závazná podoba dokladu. Dvě implementace zaokrouhlování jsou spolehlivý způsob, jak si vyrobit haléřové rozdíly mezi tím, co vidí uživatel, a tím, co je na faktuře. Řeší to sdílená sada testovacích fixtures ve složce docs/: stejné vstupy a očekávané výstupy pouští testy na obou stranách. Když se jedna implementace odchýlí, spadne build, ne účetnictví.
Co jsem dělal já
Návrh, aplikace ve Flutteru, REST API, generování dokumentů.
Výsledek
Faktura odchází z místa zakázky, ne z domova o tři dny později. Katalog položek a karty klientů odstranily ruční přepisování, se kterým mizí i chyby v číslech účtů a variabilních symbolech.
- 2
- platformy z jedné codebase — Android a Windows
- 6
- šablon dokladu s vlastními barvami
- 1 sada
- fixtures hlídá, že appka i server počítají stejně