Prípadová štúdia · Interný nástroj

Analytika predajne: dashboard nad dátami z Pohody

Webová aplikácia, ktorá importuje XML exporty Zásob a Pohybov z účtovného systému Pohoda, ukladá ich do Supabase/PostgreSQL a poskytuje prehľad tržieb, zisku, sortimentu a kvality dát na jednom mieste.

Rola: návrh a vývoj (solo)Stack: React, TypeScript, SupabasePohoda XMLPostgreSQL RPCMulti-tenant RLSStav: live
Kontext

Pre koho a prečo

Analytika predajne je interný nástroj pre maloobchodné predajne, ktoré majú dáta v Pohode, ale chýba im prehľadná analytika nad tržbami, ziskom, sortimentom a kvalitou importovaných dát. Namiesto ručného prechádzania tabuliek v účtovníctve ponúka jeden centralizovaný panel s filtrami, KPI, grafmi a kontrolnými kontrolami.

Problém

Čo bolo treba vyriešiť

  • Pohoda má dáta, ale nie prehľadnú predajnú analytiku ani kontrolu kvality importov.
  • Ručné počítanie tržieb, marže a segmentácie sortimentu je pomalé a náchylné na chyby.
  • Výdajky a vlastná produkcia skresľujú zisk, ak sa nedajú klasifikovať a upraviť jednotným pravidlom.
Riešenie

Čo som postavil

Single-page aplikácia s backendom v PostgreSQL cez Supabase. Ťažké výpočty (agregácie dashboardu, kontroly, sumáre) bežia v SQL RPC funkciách, nie v Reacte. Frontend slúži na filtrovanie, vizualizáciu a správu metadát: typy produktov, vlastná produkcia, klasifikácia výdajok.

Kľúčové funkcie

Ako aplikácia funguje v praxi

Dashboard analytiky predaja

KPI karty (tržby, zisk, marža, nákupy, výdajky, počet riadkov), prepínač medzi ziskom podľa Pohody a upraveným ziskom, denný graf, segmentácia podľa typu produktu, top kategórie a produkty, rozpad výdajok podľa dôvodu.

Importy z Pohody

Nahratie XML exportov so automatickou detekciou typu (Zásoby / Pohyby), parsovanie vo Web Workeri na pozadí, zápis cez Supabase RPC s idempotentnými dávkami a históriou importov vrátane varovaní pri prekrývajúcich sa obdobiach.

Správa sortimentu

Prehľad a filtrovanie produktov, vlastné typy, označenie vlastnej produkcie a jednotkového nákladu, hromadné akcie, detail s grafom predajnosti a návrhmi vlastnej produkcie.

Pohyby

Read-only výpis skladových pohybov z importu s filtrami podľa dátumu, agendy a produktu. Súhrnný riadok tržieb, zisku a nákupov podľa aktívneho filtra.

Kontrola kvality dát

Osem automatických kontrol v databáze (nulový náklad, predaje do mínusu, záporné stavy, neúplné karty, nezaradené výdajky, duplicitné EANy, čerstvosť dát, chybné dávky) a klasifikácia výdajkových dokladov s hromadným priradením dôvodu.

Tok dát

Ako funguje import z Pohody

01

XML súbor z Pohody

Export Zásob alebo Pohybov z účtovného systému.

02

Detekcia a parsovanie

Web Worker rozpozná typ exportu a parsuje XML cez fast-xml-parser so Zod validáciou.

03

Zápis do databázy

Chunkovaný insert cez Supabase RPC: upsert produktov, deduplikácia pohybov, report dávky.

04

Invalidácia cache

TanStack Query obnoví dashboard a tabuľky po dokončení importu.

Technika

Technické riešenie

Výpočty v SQL, nie v prehliadači

Agregácie dashboardu, kontrolné kontroly a sumáre bežia ako PostgreSQL RPC funkcie. Frontend len filtruje a zobrazuje, čo škáluje aj pri desaťtisícoch pohybov.

Multi-tenant s Row Level Security

Každý používateľ patrí k tenantovi cez profiles. RLS izoluje dáta podľa tenant_id. Prihlásenie cez Supabase Auth, frontend volá len RPC a tabuľky s kontrolou tenanta.

Vlastná doménová logika zisku

Zisk podľa Pohody z importovaných polí. Upravený zisk pre vlastnú produkciu s custom_unit_cost. Výdajky sa dajú vylúčiť podľa dôvodu (napr. neskoršia fakturácia sa nepočíta do KPI).

Nasadenie

Frontend na Vercel (SPA rewrites), backend na Supabase s migráciami v supabase/migrations/. Parsovanie XML v pozadí cez Web Workers bez zamrznutia UI.

Technika

Kľúčové technické vlastnosti

  • Import reálnych XML exportov z komerčného ERP Pohoda, nie mock CSV.
  • Idempotentné importy: opakovaná dávka nespôsobí duplicity.
  • Web Workers pre parsing veľkých XML mimo main threadu.
  • TanStack Table a Query pre veľké datasety s pagináciou a cache.
  • Recharts pre denný vývoj na dashboarde a predajnosť v detaile produktu.
  • Vitest a Testing Library pre parsery a React logiku.
Stav

Stav a určenie

Interný nástroj v prevádzke pre maloobchodnú predajňu. UI v slovenčine, cielený na majiteľa predajne, prevádzkara alebo interného analytika s prístupom k Pohode.

Kontakt

Máte podobný projekt? Napíšte mi.

Osobné stretnutie nie je problém. Ozvem sa do 24 hodín.

Späť na projekty