Klikabilni prototip — import sati sa uređaja za kontrolu pristupa

Nije produkcijska aplikacija. Podaci su izmišljeni i generišu se u browseru — ništa se nigdje ne šalje niti pamti.

Vodič kroz prototip

Ovo je klikabilni prototip novog ekrana za učitavanje mjesečnog izvještaja sa uređaja za kontrolu pristupa, dopuna redova kojima fali očitanje, i spašavanje u šihtericu. Služi da se tok isproba i odobri prije nego se piše kod.

demo podaci desktop-only bosanski (mockup jezik)

Kako probati — preporučeni redoslijed

  1. Odaberite godinu i mjesec (npr. 2026 / Juli). Norma se ispiše odmah, prije fajla — provjerite da za juli 2026 piše 229:30.
  2. Kliknite Učitaj .xlsx. Fajl se ne bira stvarno — podaci se generišu, ali deterministički: isti mjesec uvijek daje isti rezultat.
  3. Pogledajte crveno upozorenje na vrhu — dva imena nisu uparena. Kliknite Upari zaposlenika i onda + uz odgovarajuće ime.
  4. Otvorite nekog zaposlenika klikom na njegov red. Ana Anić je namjerno „najgori" — ima najviše redova za dopunu.
  5. Upišite vrijeme u prazno polje (npr. 1530 pa Tab). Gledajte kako se u istom trenutku mijenja status reda, sati, zbir grupe i brojači gore.
  6. Uključite Samo nekompletni — ostane samo ono što traži pažnju.
  7. Ako se pojavi crveni filter Samo preklapanja vremena, uključite ga i pogledajte taj dan — tu su i zapis iz baze i zapis iz fajla, sa izračunatim presjekom.
  8. Kliknite + uz neki datum da dodate još jedan zapis za isti dan.
  9. Pređite na tab Kontrola i zbir — isti podaci, sabrani po zaposleniku naspram norme.
  10. Sačuvaj spremne redove. Redovi pređu u zeleno „Sačuvano".

Dugme Počni ispočetka gore desno vraća sve na nulu, uključujući uparivanja.

Koji su primjeri unutra

Generator namjerno proizvodi svaki slučaj koji ekran mora znati riješiti — uključujući one rijetke, jer se baš na njima dizajn lomi. Udjeli su podešeni po izmjerenoj analizi stvarnog fajla naručioca (186 redova uzorka: 63 % kompletnih, 19 % bez ijednog očitanja, 13 % nedjelja, 5 % nepotpunih).

#SlučajKako izgledaZašto je u uzorku
1Kompletan dan bijeli red, plavi rub, status Spremno osnovni tok — 60-90 % redova, zavisno od zaposlenika
2Fali odlazak žuto, polje „Do" crveno isprekidano najčešći propust: čovjek se kucao ujutro, uveče nije
3Fali dolazak žuto, polje „Od" crveno isprekidano rjeđi, ali traži drugačiju poruku od #2
4Bez očitanja (radni dan, oba prazna) žuto, oba polja crvena 19 % redova u stvarnom fajlu — najveća grupa za ručni rad
5Nedjelja bez rada šrafirano sivo, polja neutralno isprekidana, „Nije u normi" nedjelja nije u normi → prazno nije greška; crveno bi dalo ~480 lažnih grešaka mjesečno
6Rad nedjeljom narandžasti rub + badge Nedjelja, status „broji se u ukupno" nedjelja nije u normi, ali rad jeste moguć i sati se broje → ukupno može preći normu
7Cjelodnevno odsustvo u bazi sivi zaključan red (npr. Godišnji odmor) + ispod njega prazan red iz fajla sa statusom Pokriveno zapisom iz baze uređaj tog dana nema očitanje; bez ovog pravila bi svaki godišnji bio prijavljen kao propust
8Nadovezivanje — dan ima i bazu i fajl, vremena se ne sijeku 🟠 narandžasto, npr. baza 08:00–12:00 + fajl 13:05–17:10, uz datum zbir dana legitimno: pola dana ručno, pola uređajem — ne blokira se
9Preklapanje vremena — intervali se stvarno sijeku 🔴 crveno, npr. baza 08:00–12:00 + fajl 10:34–17:05, status ispisuje tačan presjek (npr. 1:26) ti sati bi bili upisani dvaputne spašava se dok se ne riješi
10Neupareni zaposlenici (2 komada) crvena grupa na vrhu, dugme Upari zaposlenika uređaj šalje Nedim Nikolic, a u sistemu je Nedim Nikolićdijakritik je stvarni razlog zašto uparivanje pada
11Kandidati za uparivanje 5 aktivnih zaposlenika bez UredjajId lista mora nuditi samo njih
12Neaktivan zaposlenik (Tea Tomić) ne pojavljuje se u listi za uparivanje negativan primjer — provjera da filter statusa radi
13Dvije smjene jedni rade ~07:00–15:40, drugi ~14:00–22:00 u stvarnom fajlu oba rasporeda nose isto ime „smjena 1" — zato se kolona Shift ignoriše
14Zbir dana preko 12 h cijeli red crven, badge zbira crven drugi sigurnosni prag — hvata višak i kad se intervali ne sijeku
15Ručno dodan zapis vi ga pravite ljubičasto, dugme × za uklanjanje zaposlenik ima 4 h pa se zaboravio odjaviti — operater dopisuje drugi interval
16Preskočen red vi ga pravite sivo, precrtano, „neće se spasiti" izlaz iz preklapanja koje operater ne može riješiti ovdje (red iz baze je read-only)
17Neispravno vrijeme vi ga pravite upišite 25:99 → crveno polje + konkretna poruka validacija imenuje pravilo, ne kaže samo „greška"

Zaposlenici u uzorku

10 imena iz fajla, 8 uparenih. Profili su namjerno različiti da se vidi raspon:

  • Ana Anić — najgori slučaj, ~⅔ dana traži dopunu
  • Damir Dizdar, Faris Fazlić — skoro uredni
  • Vedran Vukić, Goran Gagić, Emina Ećimović — druga smjena (14–22)
  • Nedim Nikolić, Petra Perićneupareni, čekaju vas
  • Tea Tomić — neaktivna, ne smije se ponuditi za uparivanje

Stvarni fajl naručioca ima ~130 zaposlenika × 31 dan ≈ 4000 redova. Prototip radi sa 10 zbog čitljivosti, ali je grid grupisan po zaposleniku upravo zato što ravna lista od 4000 editabilnih redova nije upotrebljiva.

Šta se stvarno računa

Prototip ne glumi brojeve — poslovna pravila su implementirana:

  • Norma iz kalendara: pon–subota × 8.5 h.
    jul 2026 = 229:30 · aug 2026 = 221:00 · feb 2024 = 212:30
  • Trajanje iz od–do, uz podršku za prelazak ponoći
  • Presjek intervala u minutama, po paru zapisa
    08:00–12:00 × 10:30–17:10 → 1:30
    22:00–02:00 × 01:00–05:00 → 1:00
    08:00–12:00 × 12:00–17:00 → 0:00 (dodir nije preklapanje)
  • Zbirovi po danu, po zaposleniku i ukupno — sve iz istog stanja, pa se tab Kontrola mijenja čim nešto upišete u tabu 1
  • Nedjeljni sati se izdvajaju u vlastitu kolonu

Šta UI i UX tretiraju

Ekran je rađen po principima dizajn sistema: korisnici su administrativni radnici koji rade pod rokom i ne smiju pogađati šta nešto znači. Zato je gustina podataka visoka, ali svaka nejasnoća ima objašnjenje na dohvat klika.

Vođenje kroz zadatak

  • Prazno stanje kaže šta uraditi, ne „nema podataka"
  • Tri koraka sa oznakom dokle se stiglo
  • Učitaj je zasivljen dok period nije odabran — preduslov je korak, ne greška poslije klika
  • Norma se ispiše prije fajla, jer ne zavisi od podataka
  • Uz normu stoji i računica (27 dana × 8.5 h) da se broj može provjeriti

Čitljivost gustog grida

  • Grupisanje po zaposleniku — zaglavlje nosi sve za odluku „moram li otvoriti"
  • Legenda je obavezna: red može biti u 6 stanja
  • Boja nikad nije jedini signal — svaki red ima i badge izvora i tekstualni status
  • Jedan dan = više zapisa; datum na prvom, ostali nose ↳ isti dan
  • Uz datum zbir svih zapisa dana — jedini način da se vidi udvostručenje
  • Brojevi u mono fontu sa tabularnim ciframa da se kolone poravnaju

Unos i validacija

  • Prazno obavezno polje = crveno isprekidano; prazno neobavezno (nedjelja, pokriven dan) = neutralno
  • Tolerantan unos: 705, 7.05, 7:0507:05
  • Poruka imenuje pravilo: „format HH:MM", ne „neispravan unos"
  • Sve se preračunava u trenutku kucanja, bez gubitka fokusa
  • Klik iz polja u polje ne gubi unos

Filteri

  • Pretraga po imenu je prvi element, skroz lijevo — app-wide pravilo
  • Poništi filtere je dio filter bara, nikad paginacije — app-wide pravilo
  • Tri „samo…" filtera su nezavisna i kombinuju se kao unija
  • Filteri za preklapanje prikazuju cijeli dan — preklapanje se ne vidi ako se prikaže samo jedna strana
  • Checkbox se pojavljuje samo ako ta vrsta postoji u podacima
  • Svaki filter nosi svoj brojač

Objašnjenja na dohvat

  • Info-dugmad uz naslov, projekat, vrstu sati i preklapanje
  • Popupi koriste numerisane korake za mehaniku
  • Istaknuti okviri za izuzetke: rad nedjeljom, zaključani redovi, preklapanje
  • Upozorenja imenuju tačan sljedeći korak i gdje se polje nalazi (npr. put do custom polja)

Nikad slijepa ulica

  • Neupareno ime blokira samo svoje redove, ne cijeli import
  • Uparivanje se rješava ovdje, bez odlaska u profil
  • Osvježi uparivanja ako je neko uparivao na drugom ekranu — ne briše unesene dopune
  • Preklapanje koje operater ne može popraviti (red iz baze je read-only) ima izlaz: Ne spašavaj ovaj red
  • Ručno dodavanje zapisa za dan koji već postoji
  • Sve se može poništiti prije spašavanja

Povratna informacija

  • Spinner na svakoj radnji koja traje
  • Toast ponavlja brojeve i imenuje projekat — nikad samo „Sačuvano"
  • Toast kaže i šta je ostalo nedovršeno
  • Brojači u sažetku se osvježavaju odmah

Bez tihih gubitaka

  • Ništa se ne upisuje automatski — sve ide kroz pregled
  • Redovi iz baze su read-only i jasno označeni
  • Nekompletan red se ne spašava dok se ne dopuni
  • Preklapanje vremena se ne spašava dok se ne riješi
  • Sakriveni redovi i dalje ulaze u spašavanje — upozorenje to izričito kaže

Šta prototip NIJE

Nije implementirano ovdje

  • Stvarni parser .xlsx fajla — podaci se generišu
  • Backend i baza — spašavanje mijenja samo stanje u browseru
  • Virtualizacija grida — potrebna za ~4000 redova, u prototipu nije nužna
  • Lokalizacija — samo bosanski; aplikacija ide kroz tri resource fajla
  • Telemetrija (Page.Open / Action.Run)
  • Mobilni raspored — ekran je namjerno desktop-only

Otvorena pitanja za dogovor

  • Ponovni import istog mjeseca — preskoči, prepiši ili blokiraj?
  • Zaokruživanje — sekunde se odsijecaju ili se ide na 5/15 min?
  • Praznici — odbija li norma državni praznik?
  • „Popuni po smjeni" — prečica nema izvor planiranog vremena otkad se kolona Timetable ignoriše
  • Flag na Timesheet — namjenska kolona ili generički izvor importa?

Puna specifikacija — statični artboardi, tipografija, ikonografija i sve dizajnerske odluke sa obrazloženjem — vodi se interno, uz kriterije prihvatanja. Ova stranica je samo klikabilni prototip sa izmišljenim podacima.