Z1: upisan odgovor na P3 (limits/features format) u API ugovor

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Nenad Djukic 2026-07-25 08:41:23 +02:00
parent 56f2dfe17f
commit 47721f400d

View File

@ -68,5 +68,32 @@ HTTP ≠ 200 → firmware čita JSON polje `"error"` i prikazuje ga korisniku uz
|---|---|---| |---|---|---|
| P1 | Tačna formula `machine_fingerprint` u Go kodu (ulazni string, velika/mala slova, dvotačke?) | ⬜ proveriti u kodu servera | | P1 | Tačna formula `machine_fingerprint` u Go kodu (ulazni string, velika/mala slova, dvotačke?) | ⬜ proveriti u kodu servera |
| P2 | Da li `activate` na VEĆ aktiviran ključ + ISTI fingerprint vraća licencu ponovo (re-aktivacija posle brisanja NVS) ili `ALREADY_ACTIVATED`? Za teren nam treba: isti uređaj sme ponovo. | ⬜ proveriti/podesiti | | P2 | Da li `activate` na VEĆ aktiviran ključ + ISTI fingerprint vraća licencu ponovo (re-aktivacija posle brisanja NVS) ili `ALREADY_ACTIVATED`? Za teren nam treba: isti uređaj sme ponovo. | ⬜ proveriti/podesiti |
| P3 | Tačan skup polja `license` objekta za ASP proizvod (limits/features imena) | ⬜ definisati uz Z1 | | P3 | Tačan skup polja `license` objekta za ASP proizvod (limits/features imena) | ✅ odgovoreno uz Z1 (2026-07-25) — vidi ispod |
| P4 | `expires_at` format (ISO8601?) — firmware poredi prvih 10 znakova (`YYYY-MM-DD`) | ⬜ potvrditi | | P4 | `expires_at` format (ISO8601?) — firmware poredi prvih 10 znakova (`YYYY-MM-DD`) | ⬜ potvrditi |
### Odgovor P3 (2026-07-25)
Server čuva `limits`/`features` kao `json.RawMessage` — **ne tumači ih, samo
ih potpisano vraća** (potvrđeno čitanjem `internal/model/license.go`,
`internal/model/request.go`). Firmware (ASP-TERMINIA repo, `licenca.cpp`)
**trenutno uopšte ne čita ova dva polja** — parsira samo `edition`,
`customer`/`customer_name`, `expires_at`, `grace_days`,
`machine_fingerprint`. Enforcement (kad `features`/`limits` postanu bitni) je
odložen na Z4.
Zaključak: format nije bio ni bitan za Z1/Z2 (bez FW koda koji ga čita, ništa
se ne lomi bilo kojim izborom). Proizvod `ASP-TERMINIA` je zaveden
(`migrations/004_seed_asp_terminia.sql`) sa **placeholder** vrednostima:
```json
"limits": {"max_readers": 4, "max_cards": 5000}
"features": ["FEAT_CARDCHECK", "FEAT_ISSUE", "FEAT_PRINT", "FEAT_CATALOG", "FEAT_ANTIPASS", "FEAT_SYNC", "FEAT_OTA"]
```
`features` su imena iz ASP repo `docs/18-licenciranje-po-mac.md` §6.3 (string
nizovi, ne bitmaska — server ionako ne tumači, a string nizovi su čitljiviji
u dashboardu i lakši za FW proveru kad enforcement dođe: `"FEAT_X" in niz`
umesto bitmaske). **Ovo NIJE konačna odluka o paketima** (basic/pro) — vlasnik
to još nije odlučio; svaka izdata licenca nosi svoje `limits`/`features`
nezavisno od default-a proizvoda, pa se default sme promeniti kasnije bez
posledica po već izdate licence.