# Zadaci (redom; svaki ima kriterijum prihvatanja) > Redosled je namerno ovakav: prvo ono što odblokira kraj-do-kraja test sa pravim > uređajem, pa infrastruktura (domen), pa odluke, pa katalog firmvera. > **Pre svakog write-a na produkciju: backup + izričita dozvola vlasnika** > (vidi 04-pravila-rada.md). ## Z1 — Proizvod „ASP-Terminia" na serveru **Šta:** kroz migraciju (SQL u `migrations/`, po uzoru na `002_seed_products.sql`) ili admin API/dashboard napraviti proizvod: - `code`/`name`: **ASP-Terminia** (linija: ASP — Autonomni Sistem Prolaza) - `key_prefix`: **`ASP-`** - limiti (predlog, potvrditi sa vlasnikom): `max_citaca` (npr. basic 2 / pro 8), `max_kartica` (basic 2000 / pro 30000) - features (predlog bitova, uskladiti sa ASP repo docs/18 §6.3): provera karte, izdavanje, štampa, katalog-sa-servera, anti-passback, sync, OTA **Kako:** pogledati kako su postojeći proizvodi definisani (tabela `products` + seed migracija) i uraditi ISTIM šablonom. Ne menjati postojeće redove. **Prihvatanje:** proizvod vidljiv u dashboardu; postojeći proizvodi netaknuti (COUNT pre = posle za njihove licence/aktivacije); backup fajl postoji. ## Z2 — Test ključ + kraj-do-kraja aktivacija sa uređajem **Šta:** izdati 1 test licencu ASP-Terminia (trajnu ili 90 dana) i proći ceo tok sa PRAVIM uređajem (MAC `1C:DB:D4:A6:A4:60`, dostupan vlasniku): 1. Odgovoriti na P1–P4 iz 02-api-ugovor-firmware.md (čitanjem Go koda). 2. Ako se fingerprint formula razlikuje od FW pretpostavke → zapisati TAČNU formulu u 02 i javiti (menja se FW, jedna linija). 3. Vlasnik unese ključ u SPA (Podešavanja → Uređaj → Licenca) → Aktiviraj. 4. Proveriti: status „važi" na uređaju; restart uređaja → i dalje „važi" (offline); `Proveri na serveru` → potvrda. 5. Negativni testovi: pogrešan ključ (INVALID_KEY prikazan), opozvan ključ (revoked prikazan), ključ aktiviran na drugom fingerprint-u (PRODUCT/ALREADY ponašanje po P2). **Prihvatanje:** svih 5 koraka dokumentovano (šta je poslato/vraćeno, bez tajni). ## Z3 — Domen `licenca.terminia.net` + Let's Encrypt **Preduslov:** vlasnik kupi/podesi `terminia.net` (A rekord → 157.180.119.151). Dok toga nema, zadatak stoji — NE blokira Z1/Z2 (ide se preko IP-a). **Šta:** - nginx: novi `server_name licenca.terminia.net` blok koji proksira ISTI backend (port 8090) — **ne dirati postojeći `arv` sajt** (postojeći klijenti ostaju na IP). - certbot (Let's Encrypt) za taj domen; auto-obnova. - Provera da `https://licenca.terminia.net/api/v1/validate` radi sa validnim lancem. - U firmware repou: `cfg.licUrl` podrazumevana vrednost se menja na domen, a `setInsecure()` se zamenjuje validacijom lanca (ugraditi ISRG root CA) — to je FW izmena: pripremiti tačan diff/uputstvo, primenu radi firmware strana. **Prihvatanje:** domen služi API sa validnim certom; stari IP pristup i dalje radi. ## Z4 — Odluke o enforcement-u (PRIPREMA, vlasnik odlučuje) **Šta:** pripremiti kratak dokument sa predlogom (na bazi ASP repo docs/18 §5) i KONKRETNIM pitanjima za vlasnika: 1. Bez licence: potpuno odbijanje ILI ograničen rad (predlog: web/konfiguracija/ručno upravljanje rade; izdavanje+štampa+provera karata ne rade uz jasnu poruku)? 2. Grejs: 14 dana posle isteka (podesivo)? 3. Nepouzdan sat = grejs (nikad pad) — potvrda? 4. Koje funkcije vezati za `features` bite, koje za `limits`? **Prihvatanje:** dokument `05-enforcement-odluke.md` u ovom folderu sa odgovorima vlasnika upisanim (ne pretpostavkama). Implementacija enforcement-a u FW ide TEK posle toga (firmware strana). ## Z5 — Obnova/opoziv tok (sloj B) **Šta:** definisati i (posle Z4) implementirati periodičnu proveru na uređaju: `validate` na N sati (podesivo), `revoked` → od kad važi ograničenje (posle grejsa), server može vratiti NOVU licencu (produženje) — proveriti da li postojeći server to podržava kroz `activate` re-poziv ili treba dorada (`check` endpoint po ASP repo docs/18 §4). **Prihvatanje:** opisan tačan tok + potvrđeno na test ključu (produženje + opoziv). ## Z6 — Potpisivanje firmvera + veza sa katalogom **Šta:** `.bin` slike se potpisuju RSA lancem (ODVOJEN ključ od licenci — preporuka ASP repo docs/18 §7.1; ako vlasnik odluči isti, dokumentovati). Server strana: skripta za potpis + čuvanje potpisa uz artefakt. Katalog (nginx `fw.terminia.net`) i kratkotrajni download URL su u paketu `ASP repo: serviseri/03` — ovde samo potpisni deo. **Prihvatanje:** komanda za potpis + format potpisa dokumentovan + probni potpisan `.bin` verifikovan javnim ključem. --- ## Redosled i zavisnosti (sažetak) ``` Z1 (proizvod) ──► Z2 (kraj-do-kraja) ──► Z4 (odluke) ──► [FW enforcement — firmware strana] └──► Z5 (obnova/opoziv) Z3 (domen) — čim vlasnik obezbedi DNS (nezavisno) Z6 (potpis .bin) — pre auto-OTA kataloga (koordinacija sa ASP repo: serviseri/) ```