---
title: "Evidencia času pre audítorskú firmu: 4 tiché chyby"
description: "Pri stavbe evidencie času pre audítorskú firmu som našiel štyri chyby bez signálu: nižšie súčty, falošné uloženia, únik dôverného klienta, skryté zamietnutia."
url: "https://madsalt.tech/sk/blog/time-tracking-for-audit-firms/"
author: "Denys Zaichenko"
language: "sk"
published: 2026-10-19
---

# Evidencia času pre audítorskú firmu: 4 tiché chyby

TL;DR

Evidencia času v audítorskej firme nie je o časovači. Je o dvoch veciach: kto smie vidieť hodiny ktorého klienta a či sú súčty vo výkazoch pravdivé. Pri stavbe nástroja pre jednu audítorskú firmu som našiel štyri chyby, ktoré žiadna obrazovka neukázala: súčty vo výkazoch, ktoré by ticho vychádzali príliš nízke, asi 30 akcií, ktoré hlásili „uložené“, hoci sa nič neuložilo, dôverného klienta, ktorého existencia presakovala cez výkazy a počty štítkov, a zamietnutý záznam, ktorý mohlo skryť neskoršie schválenie. Každú z nich možno v ktoromkoľvek nástroji, kúpenom aj vlastnom, otestovať za pár minút.

Som Denys, full-stack a AI inžinier. Od mája do októbra 2026 prešla jedna audítorská firma z nástroja, v ktorom mohol každý otvoriť každého klienta, na evidenciu času, ktorú som pre ňu postavil, v 388 commitoch. Firmu tu nemenujem. Tento text je pre ľudí, ktorí firmu vedú a vyberajú jej nástroje: čo audítorská firma od evidencie času potrebuje, štyri chyby, ktoré som našiel, a ako v ktoromkoľvek nástroji overiť, či ich nemá.

## Čo audítorská firma od evidencie času potrebuje?

Audítorská firma predáva hodiny, takže evidencia času je záznam, na ktorom stojí celé podnikanie. Firma, pre ktorú som staval, potrebovala:

- **Hodiny na klienta, projekt a úlohu.** Každý záznam patrí k jednej zákazke, takže hodiny možno čítať podľa klienta, projektu aj osoby.
- **Týždenné výkazy práce so schvaľovaním.** Zamestnanci odovzdajú týždeň, projektový admin každý záznam schváli alebo zamietne a rátajú sa len schválené hodiny.
- **Upomienky.** Kto má pred termínom výkaz stále prázdny, dostane e-mail. Od septembra 2026 upomína iba chýbajúce hodiny a preskakuje ľudí s nulovou kapacitou.
- **Plánovanie kapacít.** Kto bude v nasledujúcich týždňoch pracovať na ktorej zákazke, vzhľadom na kapacitu každého človeka.
- **Dôverní klienti.** Vlastník môže klienta, jeho projekty, úlohy aj čas obmedziť na vybraných členov.
- **Archivovať, nikdy nemazať.** Člen, ktorý odíde, sa deaktivuje a anonymizuje, dokončený projekt sa archivuje, takže história výkazov zostane celá.

Faktúry nevystavuje. Typ fakturácie a hodinové rozpočty projektov sú za samostatným oprávnením a fakturácia zostáva v účtovnom systéme firmy.

![Týždeň hodín od záznamu po výkaz. Hodiny sa dostanú do výkazov, až keď ich schváli projektový admin. Schválený týždeň: Člen tímu → Odovzdaný týždeň → Projektový admin → Schválený → Výkazy; Zamietnutý záznam: Člen tímu → Odovzdaný týždeň → Projektový admin → Vrátený s dôvodom.](https://madsalt.tech/charts/sk/time-tracking-for-audit-firms-week.svg)

*Obrázok 1. Týždenný tok výkazu práce v nástroji audítorskej firmy. Zamietnutý záznam sa vracia tomu, kto ho zadal.*

## Kto má v audítorskej firme vidieť čie hodiny?

Pred týmto projektom mohol každý vo firme otvoriť každého klienta a hodiny všetkých ostatných. Pre audítorskú firmu je to najprv problém dôvernosti a až potom softvérový problém: nie každý člen musí vidieť každého klienta a nikto nepotrebuje vidieť týždeň kolegu, ak ho neschvaľuje.

Model prístupu, ktorý firma potvrdila, vyzerá takto:

| Rola             | Vidí                                          | Môže schvaľovať                         |
| ---------------- | --------------------------------------------- | --------------------------------------- |
| Člen tímu        | Len vlastné hodiny                            | Nič                                     |
| Projektový admin | Hodiny tímu na vlastných projektoch           | Týždne svojho tímu na týchto projektoch |
| Vlastník         | Každého klienta, projekt aj osobu             | Všetko                                  |
| Dôverný klient   | Viditeľný len členom, ktorých vybral vlastník | —                                       |

![Kto vidí čie hodiny. Model prístupu, ktorý firma potvrdila. Vynucuje ho databáza, nie obrazovka. Člen tímu: Člen tímu → Len vlastné hodiny; Projektový admin: Projektový admin → Tím na vlastných projektoch → Schvaľuje ich týždne; Vlastník: Vlastník → Každý klient aj osoba; Dôverný klient: Obmedzený klient → Len vybraní členovia.](https://madsalt.tech/charts/sk/time-tracking-for-audit-firms-roles.svg)

*Obrázok 2. Predvolené roly v nástroji audítorskej firmy. Vlastník môže každú rolu zmeniť v matici oprávnení.*

Vlastník upravuje každú rolu v matici políčok, oblasť proti akcii, a každé pravidlo žije v databáze, nie na obrazovkách, takže stránka nemôže ukázať, čo databáza odmieta. Každé políčko sa pred vydaním testovalo na kópii produkcie; ako a čo ten test našiel, je v článku [ako testovať Supabase RLS](https://madsalt.tech/sk/blog/how-to-test-supabase-rls/).

Jednu otázku, na ktorú matica nevedela odpovedať, priniesla sama firma. V júni 2026 videl člen s najobmedzenejšou rolou na obrazovke plánovania kapacít ďalších členov a ich projekty, hoci čakal, že uvidí len seba a jedného kolegu. Má obmedzený člen vidieť ľudí na svojich projektoch? Pravidlo, na ktorom sme sa zhodli: áno, len na zdieľaných projektoch, s kapacitou a voľnom ostatných skrytými.

Ako sa dopracovať k modelu prístupu, s ktorým firma naozaj súhlasí? Nepožiadal som klienta, aby ho opísal z pamäti. Poslal som dotazník s 72 otázkami v 9 sekciách, s mriežkami oprávnení už vyplnenými tak, ako živý systém fungoval 7. augusta 2026. Klient opravil, čo bolo zle, a každá zmenená bunka bola označená. Ľudia vedia lepšie opravovať skutočnosť než ju opisovať.

## Chyba 1: súčty vo výkazoch by vychádzali príliš nízke

Stránka Výkazy práce má pre celú firmu pohľady „Tento štvrťrok“ a „Od začiatku roka“. Načítavali všetky časové záznamy v rozsahu jednou požiadavkou. API databázy za aplikáciou vracia najviac 1 000 riadkov na požiadavku a keď sa na 1 000 zastaví, nevyhodí chybu. Jednoducho vráti prvých 1 000.

Supabase túto predvolenú hodnotu dokumentuje: [projekty vracajú najviac 1 000 riadkov](https://supabase.com/docs/reference/javascript/select), kým sa limit nezmení v nastaveniach API.

Hneď ako by firma v rozsahu prekročila 1 000 záznamov, členovia a týždne by z pohľadu vypadávali a súčty by vychádzali príliš nízke, bez toho, aby na obrazovke čokoľvek upozornilo. Pri asi 70 záznamoch týždenne mal pohľad od začiatku roka prekročiť 1 000 záznamov približne v polovici novembra 2026. Audit kódu 24. septembra 2026 to našiel skôr, než k tomu došlo. Oprava číta každý rozsah po stránkach a každý export výkazov sa stránkuje rovnako.

**Ako overiť svoj nástroj:** vyberte dlhé obdobie, exportujte surové záznamy, sčítajte ich sami a porovnajte so súčtom vo výkaze. Ak sa líšia, výkaz orezáva riadky.

## Chyba 2: „Uložené“, hoci sa nič neuložilo

Keď databáza zmenu odmietne kvôli oprávneniu alebo preto, že pravidlo vyžaduje dvojfázové prihlásenie, môže odpovedať „zmenených 0 riadkov“ bez akejkoľvek chyby. Asi 30 miest v aplikácii, ktoré záznamy upravujú alebo mažú, túto odpoveď čítalo ako úspech a zobrazilo „uložené“. Človek ide ďalej. Zmena sa nikdy nestala.

Oprava je zlyhať bezpečne: zápis, ktorý nezasiahne žiadny riadok, je chyba a ako chyba sa zobrazí, a test teraz overuje, že s ním tak zaobchádza každá cesta zápisu.

**Ako overiť svoj nástroj:** prihláste sa ako člen bez práva niečo upraviť, skúste to upraviť a potom stránku obnovte. Ak ste videli „uložené“ a vrátila sa stará hodnota, nástroj o ukladaní klame.

## Chyba 3: dôverný klient unikal cez výkazy

Niektoré zákazky poznajú len ľudia, ktorí na nich pracujú. Od 24. augusta 2026 môže vlastník obmedziť klienta na menovaných členov. Všetci ostatní o tomto klientovi, jeho projektoch, úlohách ani čase nedostanú nič. Vlastník má prístup vždy a ten sa počíta z toho, kto dnes rolu vlastníka drží, neukladá sa, takže sa presunie s rolou.

Skryť klienta v zozname klientov bolo jednoduché. Úniky boli v bočných dverách. Kontrola 8. septembra 2026 zistila, že:

- **tri funkcie pre výkazy obmedzenie ignorovali**, pretože bežia s právami, ktoré obchádzajú bežné pravidlá prístupu, takže sa hodiny dôverného klienta mohli objaviť vo výkazoch;
- **počty použitia štítkov** v administrácii štítkov počítali projekty a úlohy dôverného klienta, čím prezradili, že zákazka existuje, a približne aká je veľká;
- **chybové hlášky rozlišovali**: pokus zmeniť skutočný, ale skrytý záznam vrátil „forbidden“, pokus o vymyslený vrátil „not found“, takže ktokoľvek mohol skúšať, či dôverný klient existuje.

Všetky tri teraz používajú rovnakú kontrolu ako hlavné tabuľky a skrytý záznam vyzerá presne ako neexistujúci. Presun projektu alebo záznamu preč od dôverného klienta tiež vyžaduje vlastníka alebo samostatné oprávnenie a každý takýto presun sa zapisuje do protokolu.

**Ako overiť svoj nástroj:** obmedzte jedného klienta na jedinú osobu. Potom ako niekto iný spustite každý výkaz, prejdite každý počet a filter, vyhľadajte meno klienta a otvorte priamy odkaz na jeden z jeho projektov. Nenájdete po ňom žiadnu stopu, ani v chybovej hláške.

## Chyba 4: zamietnutie mohlo skryť neskoršie schválenie

Týždeň môže mať záznamy na viacerých projektoch, takže ho schvaľuje viac ľudí. Ak jeden projektový admin zamietol záznam a iný neskôr schválil svoju časť, neskoršie schválenie mohlo uzavrieť celý týždeň a zamietnutie zakryť. Rovnako ho mohlo skryť presúvanie záznamov medzi úlohami alebo opätovné otvorenie týždňa.

24. septembra 2026 sa logika schvaľovania zmenila tak, že týždeň zostáva zamietnutý, kým existuje akýkoľvek živý zamietnutý záznam, a projektový admin smie zamietnutý záznam archivovať len vtedy, ak ho zamietol sám. Databázová sonda teraz spúšťa každý z týchto prípadov a každý musí vyjsť PASS.

**Ako overiť svoj nástroj:** použite dvoch schvaľovateľov jedného týždňa. Ako prvý zamietnite jeden záznam, ako druhý schváľte všetko ostatné a pozrite sa, v akom stave týždeň skončí.

## Kúpiť, alebo postaviť evidenciu času pre audítorskú firmu?

Najprv kupte. Toggl, BigTime, ZenWorkflow a podobné nástroje už pokrývajú časovače, týždenné schvaľovanie aj fakturáciu klientom a začať s nimi môžete ešte tento týždeň. Vlastný nástroj dáva zmysel, keď firma má pravidlá, ktoré produkty nevedia vyjadriť, napríklad dôverných klientov viditeľných len menovaným členom, schvaľovanie týždňa viacerými projektovými adminmi alebo roly, ktoré si vlastník chce tvarovať políčko po políčku.

Nech pôjdete akoukoľvek cestou, štyri kontroly vyššie zaberú popoludnie a povedia vám viac než zoznam funkcií. Každá stránka produktu sľubuje „granulárne oprávnenia“. Máloktorá ukáže, čo sa stane, keď políčko odškrtnete.

## Hranice tejto správy

- **Jedna firma.** Model prístupu, objem asi 70 záznamov týždenne a dotazník pochádzajú z jedinej firmy.
- **Chyba 1 bola zachytená skôr, než nastala.** Dátum polovice novembra je projekcia z tempa záznamov firmy, nie nameraný incident.
- **Žiadna fakturácia.** Nástroj drží hodiny, typ fakturácie a hodinové rozpočty, ale klientov nefakturuje, takže sa nemôžem vyjadrovať k procesom od času po faktúru.

Pravidlá prístupu sú tu Postgres row-level security. Dve diery, ktoré matica rolí nezachytí, sú opísané osobitne: [používateľ, ktorý patrí do dvoch organizácií](https://madsalt.tech/sk/notes/supabase-rls-user-in-two-organizations/) a [IF, ktorý pri NULL zlyhá otvorene](https://madsalt.tech/sk/notes/plpgsql-if-not-null-fails-open/). Samotná stavba je v [prípadovej štúdii evidencie času pre audítorskú firmu](https://madsalt.tech/sk/work/audit-firm-time-tracking/) a tento druh práce spadá pod [interné nástroje a dashboardy](https://madsalt.tech/sk/services/internal-tools-dashboards/).

Vyberáte alebo staviate evidenciu času pre svoju firmu?

Rád si vymením skúsenosti s pravidlami prístupu a schvaľovaním. Bez ponuky.

[Ozvite sa](https://madsalt.tech/sk/#contact)
