Skip to content

Předvolby a kontrola konfigurace

Nová instalace by se neměla nastavovat kopírováním JSON konfigurací z jiného prostředí. Dveřník proto u konfigurovatelných částí nabízí předvolby (hotové, ověřené šablony) a kontrolu konfigurace (pravidla, která backend vynucuje při ukládání).

Předvolby zařízení

V Administrace → Zařízení → Přidat zařízení zvolte typ a adaptér; nad polem adapter_config se objeví Začít z předvolby. Seznam je filtrovaný podle zvoleného typu a adaptéru. Po stisku Použít se předvolba pouze vyplní do formuláře — zkontrolujete ji, upravíte a uložíte sami.

Předvolba Typ Popis
Zámek – standardní lock jedno relé, on = otevřeno, krátké otevření 5 s
Zámek – invertovaný lock jedno relé, on = zavřeno, krátké otevření 10 s
Skříňka – standardní locker stejné jako zámek
Světlo – jednoduché light jedno relé, bez blikání
Světlo – s blikáním light dvě relé, blikání = vypnutí na 500 ms
Světlo – sekvenční spínání light tři relé spínaná postupně s prodlevou 500 ms
Zásuvka – zap/vyp outlet jedno relé
Demo – … všechny simulované zařízení bez hardware

Předvolby REST API adaptéru obsahují zástupné hodnoty http://192.168.1.50:9999 a Bearer CHANGE_ME — nahraďte je adresou a tokenem svého řadiče a čísla pinů upravte podle zapojení.

Předvolby jsou součástí aplikace (nelze je v databázi upravovat) a automatické testy zaručují, že každá z nich prochází stejnou kontrolou jako uložení zařízení.

Předvolby produktů

V Administrace → Produkty → Přidat definici je nad formulářem Začít z předvolby. Předvolba vyplní název (v jazyce rozhraní), cenu, typ a parametry; formulář parametrů se přitom řídí schématem daného typu (viz Produkty). Ceny jsou příkladové (Kč) — upravte je.

Předvolba Typ Parametry
Měsíční permanentka (30 dní) daily_pass duration_days: 30
Roční permanentka (365 dní) daily_pass duration_days: 365
Denní vstupenka (1 den) daily_pass duration_days: 1
Permanentka na 10 vstupů entry_bundle entries: 10
Permanentka na 50 vstupů entry_bundle entries: 50
Vstupy – týdenní limit entry_quota weekly_entries: 3, duration_days: 30
Minuty – měsíční limit minute_quota monthly_minutes: 600, duration_days: 365
Sleva 20 % na rok percentage_discount discount_percent: 20, duration_days: 365
Věrnostní program 600/120 (rok) playtime_loyalty threshold_minutes: 600, reward_minutes: 120, duration_days: 365
Přístup údržby maintenance_access duration_days: 365
Sleva na vybraná zařízení device_discount device_ids (zástupná hodnota), discount_percent: 50, duration_days: 365

U slevy na zařízení obsahuje předvolba jen zástupné ID zařízení. Formulář ho po použití předvolby zahodí a nabídne seznam skutečných zařízení — vyberte alespoň jedno. Kontrola záměrně neověřuje, že zařízení existuje (jen strukturu); zástupná hodnota vyvolá pouze upozornění.

Každá předvolba prochází stejnou kontrolou jako uložení produktu (TestAllPresetsValid) a každý registrovaný typ produktu musí mít kontrakt a alespoň jednu předvolbu (TestRegistryCompleteness).

Předvolby regionu

V Administrace → Konfigurace je Předvolba regionu (kind: "region"): Česko, Slovensko, Polsko, Ukrajina. Každá nastavuje právě čtyři klíče COUNTRY_CODE, CURRENCY_CODE, FACILITY_TIMEZONE a PRICE_DECIMAL_PLACES (hodnoty a upozornění k platebnímu QR kódu viz Konfigurace). Předvolba nikdy nemění bankovní ani platební klíče a hodnoty se jen předvyplní ke kontrole — ukládá je až Uložit změny. Test TestAllPresetsValid ověřuje, že hodnoty projdou kontrolou registru klíčů, a TestRegionPresets pevně zná očekávané hodnoty.

Předvolby bankovních e-mailových parserů (bank_email_parser) se záměrně nenabízejí: vestavěné parsery bank jsou nativní Go kód aktivní vždy a jediná regex definice v repozitáři je dokumentační příklad ČSOB CEB, který ten samý nativní parser duplikuje. Regexy se nevymýšlejí.

Tarifní šablony (ceníky)

Šablony druhů zone_pricing (cíl: session_mode zóny time_based / entry_based) a device_pricing jsou sady pravidel (values.rules), ne jedna hodnota: nonstop sazba za minutu, denní/večerní sazba, všední dny/víkend, prvních 10 minut zdarma, otevírací doba Po-Pá 6-22 a So-Ne 8-20, vstupné (jednotná cena) a pro zařízení cena za použití, za minutu a zdarma. Názvy pravidel jsou ve 4 jazycích (webový formulář vezme jazyk rozhraní). V Administrace → Zóny a zařízení tlačítko Použít tarifní šablonu zobrazí sadu jako upravitelnou tabulku a po potvrzení ji vytvoří v jedné transakci (přidat, nebo nahradit = stávající aktivní pravidla se jen deaktivují). Podrobně v Ceníky.

TestAllPresetsValid kontroluje každé pravidlo každé sady stejným kontraktem jako ukládání pravidla (ve všech 4 jazycích názvu) a navíc sémantiku sady: žádná dvě pravidla stejného typu, která se mohou překrývat (čas i dny), nesmí mít stejnou prioritu (nejednoznačné - vybere se libovolné), typ pravidla musí dávat smysl pro režim zóny a sada musí něco cenit (per_minute u time_based, flat_fee u entry_based). Při použití šablony v UI jde o varování (nad rámec šablony už mohou existovat jiná pravidla), ve vestavěných šablonách je to chyba sestavení.

Kontrakt pravidla (GET /api/v1/admin/contracts → pricing_rules.zone_pricing_rule / device_pricing_rule, dry-run kind stejného jména): typ pravidla z výčtu, amount ≥ 0, time_from/time_to prázdné nebo HH:MM (jedna sdílená kontrola s ukládáním), days_of_week null/prázdné/unikátní čísla 1-7, priority celé číslo ≥ 0. Při ukládání pravidla se kontrola spouští při vytvoření a při změně kontrolovaného pole, takže starší pravidla zůstávají upravitelná; zdraví konfigurace je vypisuje (kind: "zone_pricing_rule" / "device_pricing_rule").

Živá kontrola ve formuláři

Při psaní konfigurace formulář průběžně (po krátké pauze) dotazuje backend a pod polem zobrazuje nalezené problémy s cestou, např. pin_mapping.open.pins[0].state — value must be one of on, off. Chyby (červeně) uložení zablokují, upozornění (žlutě) ne. Totéž platí pro každý řádek tabulky tarifní šablony. Pravidla nejsou duplikována ve webu — jediným zdrojem pravdy je backend.

Kontrola stavu konfigurace

Administrátor může zobrazit všechny již uložené záznamy (zařízení včetně neaktivních, definice produktů a cenová pravidla zón i zařízení), které dnešním pravidlům neodpovídají. Položka má kind device nebo product; produkt s typem bez registrované strategie se hlásí také:

GET /api/v1/admin/config/health

{
  "ok": false,
  "checked": {"devices": 5, "product_definitions": 12},
  "problems": [
    {"kind": "device", "id": "…", "name": "Vstup", "is_active": false,
     "issues": [{"path": "pin_mapping", "message": "is required", "severity": "error"}]}
  ],
  "warnings": []
}

Konfigurační klíče (app_config) se hlásí jako kind: "app_config" (name je klíč, issues[].path je value). Výpis je jen ke čtení. problems obsahuje záznamy s chybou, warnings záznamy jen s upozorněním.

Stejnou kontrolu stavu, seznam předvoleb a zkušební kontrolu nabízí i MCP (administrátorské nástroje get_config_health, list_presets, validate_config, viz MCP API). Export a import instalace přes MCP dostupné nejsou.

Další koncové body (pouze administrátor)

Endpoint Popis
GET /api/v1/admin/contracts Registr klíčů app_config (typ, výchozí hodnota, tajnost, skupina, popis; nikdy ne hodnoty) a JSON Schema konfigurace: device_adapters (každý dostupný adaptér) a product_types (parametry každého typu produktu; z toho webový formulář sestavuje pole i seznam typů)
GET /api/v1/admin/presets?kind=device&device_type=lock&communication_adapter=rest_api (nebo ?kind=product&product_type=daily_pass) Předvolby, filtrované podle kind a cílových polí; názvy a popisy ve 4 jazycích
POST /api/v1/admin/zones/{id}/pricing-presets/apply, POST /api/v1/admin/devices/{id}/pricing-presets/apply Vytvoří sadu pravidel v jedné transakci ({"rules": [...], "replace_existing": false}); viz Ceníky
POST /api/v1/admin/contracts/validate Zkušební kontrola bez uložení (kind zone_pricing_rule / device_pricing_rule = jedno pravidlo): {"kind": "device", "target": {"communication_adapter": "rest_api", "device_type": "lock"}, "value": {…adapter_config…}} nebo {"kind": "product", "target": {"product_type": "entry_bundle"}, "value": {…parameters…}} → {"valid": true, "issues": []}

Bez přihlášení vrací endpointy 401, pro uživatele bez role admin 403.

Balíček instalace

Celé nastavení provozu lze exportovat do JSON a naimportovat do nové instalace (GET /api/v1/admin/installation/export, POST /api/v1/admin/installation/import se zkušebním importem dry_run). Import používá stejné kontrakty jako ruční uložení, takže balíček vytvořený z předvoleb i z ruční konfigurace projde stejnou kontrolou. Podrobně: Nová instalace.

Pro vývojáře: jak přidat předvolbu nebo bezpečně změnit kontrakt popisuje Kontrakty a předvolby.