Jak to stavíme
Deset konkrétních rozhodnutí za NemotiQ pro makléře a NemotiQ pro správce. Žádné z nich nevzniklo za odpoledne a u žádného nejsme jediní, kdo ho může ověřit.
1. Co tahle stránka je a co není
Není to seznam funkcí, ten je na stránce produktů. Je to výběr konkrétních inženýrských rozhodnutí za oběma appkami ekosystému, NemotiQ pro makléře a NemotiQ pro správce. Každý bod jde ověřit v kódu, ne jen přečíst tady.
Bezpečnostní a compliance garance jsou na /security (NemotiQ pro makléře) a na rent.nemotiq.cz/security (NemotiQ pro správce). Tahle stránka je doplňuje: ne co garantujeme, ale co jsme museli zjistit, zamítnout nebo přeměřit, abychom se k té garanci vůbec dostali.
2. AML/KYC: prahy shody jsou odvozené měřením, ne odhadem
Prověření klienta proti sankčním a PEP seznamům je u nás zákonná povinnost (zák. č. 253/2008 Sb.), ne prodejní funkce. Práh shody se liší podle seznamu, protože jeden práh pro všechny selhává na obě strany zároveň.
- Sankční seznamy: 0,70, beze změny od zavedení.
- PEP databáze: 0,90, nebo 0,80 při shodě data narození. Při 0,70 vracel PEP tisíce jmenovců na běžné české jméno a modul by nikdy nevystavil čistý výsledek.
- Přesná shoda rodného čísla nebo IČO prahu nepodléhá vůbec.
Rychlejší cestu jsme zamítli vědomě: SQL předfiltr přes pg_trgm byl po měření odmítnutý, protože ztrácel shody (6 z 189 při skóre nad 0,90). V AML je ztracená shoda nejhorší možná chyba, takže jsme zvolili pomalejší a přesnější variantu.
Sankční a PEP shoda navíc vedou k jinému výsledku: potvrzená sankce znamená zákaz obchodu a oznámení FAÚ, potvrzená PEP shoda znamená zesílenou kontrolu podle § 9a, ne totéž. Sloučit je zpátky nejde, protože by to nutilo makléře označit pravdivou PEP shodu za planý poplach, jinak by nešel uzavřít protokol.
3. Hledání v datech, která zůstávají šifrovaná
Telefon, IČO, ulice a e-mail kontaktu jsou šifrované AES-256-GCM, takže se v nich nedá hledat obyčejným SQL dotazem. Řešení není hledání vypnout ani data dešifrovat kvůli vyhledávání: z normalizovaných hodnot vznikají trigramy, ty se hashují HMAC-SHA256 solené identitou konkrétního makléře a ukládají do slepého indexu. Dump databáze tak nejde spárovat napříč makléři, ani kdyby unikl celý.
4. Vlastní záloha, ne záloha zapůjčená od poskytovatele
Zálohy bývají vlastností placeného tarifu databáze. Jenže tarif je obchodní rozhodnutí, které se mění ze dne na den, kdežto zákonná povinnost uchovávat AML záznamy deset let (§ 16 zák. č. 253/2008 Sb.) se s tarifem neřídí. NemotiQ pro makléře proto zálohuje sám, denně, do vlastního úložiště, šifrovaně nad rámec toho, co je šifrované v databázi.
Zálohu jsme nenechali jako teorii: obnovu jsme skutečně zkusili nad prázdnou databází a porovnali výsledek řádek po řádku i na úrovni šifrovaných polí. Zopakovali jsme to i s jinou velikostí dávky čtení a porovnali výstup bajt po bajtu, protože jinak by se chyba ve stránkování nedala poznat.
5. Opravený nález musí dokázat, že bez opravy padá
Bezpečnostní a compliance nálezy vedeme v evidenci, ze které se nic nemaže. Nález nesmí přejít do stavu „opraveno“, dokud se nedoloží, že test na něj padá proti PŮVODNÍMU kódu a projde až po opravě. Bez toho se dá snadno napsat test, který projde s chybou stejně jako bez ní, a nikdo si toho nevšimne, protože „testy jsou zelené“. Tahle podmínka je mechanická a vynucená, ne doporučení.
6. NemotiQ pro správce: tři cesty rozpoznávání dokladů, jedna DPIA
Rozpoznávání textu z dokumentů řešíme třemi nezávislými cestami podle toho, co appka doopravdy potřebuje: textová vrstva PDF u faktur, kde existuje, model pro rozpoznávání obrazu u naskenovaných faktur, a rozpoznávání přímo v prohlížeči nájemníka u fotky odečtu měřidla. Fotka odečtu se v tom třetím případě zpracuje přímo v zařízení nájemníka a appku vůbec neopustí.
Protože jde o zpracování dokladů totožnosti a odečtů, sepsali jsme k tomu posouzení vlivu na ochranu osobních údajů (DPIA), přestože nám ho zákon při této konkrétní kategorii výslovně neukládá. Je to rozhodnutí, ne povinnost, kterou jsme museli splnit.
7. Devět formátů bankovních výpisů, jedno rozhraní
Import bankovního výpisu podporuje formáty devíti bank působících v Česku a na Slovensku a appka banku podle hlavičky souboru pozná sama, takže od uživatele nechce vybírat ji ručně. Position jednotlivé položky proti nájmu se pak potvrzuje přetažením, ne slepým spárováním podle částky.
Prověření nájemníka běží současně proti centrální evidenci exekucí i insolvenčnímu rejstříku, takže na výsledek nečekáte na ten pomalejší z obou zdrojů. Přijatá kauce se navíc nikdy nezapočítává do základu provize, protože to nejsou peníze správce.
8. Vyúčtování, které řekne „nevím“, než aby hádalo
Roční vyúčtování záloh počítá nedoplatek nebo přeplatek ze skutečných stavů měřidel a zaplacených záloh. Když chybí koncový odečet, appka vyúčtování odmítne vygenerovat, místo aby chybějící spotřebu odhadla. Je to pomalejší pro uživatele, který zapomněl odečet zapsat, ale znamená to, že vyúčtování, které appka jednou vydá, sedí na skutečná čísla, ne na dopočet.
9. Dvě appky, jedna identita, žádné sdílené heslo
NemotiQ pro makléře a NemotiQ pro správce jsou dvě samostatná nasazení s vlastní databází, vlastními právními dokumenty a vlastním souhlasem každé zvlášť. Sdílí ale krémovou a měď a stejná písma; mění se jediný barevný token, primární odstín appky. Kdo používá obě, dostává e-maily od jedné firmy, ne od dvou.
Bezpečnostní a právní tvrzení druhé appky se navíc automaticky porovnávají proti první, takže stejná chyba objevená u jedné se hlídá i u druhé. Takhle se u obou appek zároveň opravilo chybně uvedené umístění serverů monitoringu.
10. Co ještě není hotové
Nativní mobilní appky pro NemotiQ pro správce jsou rozestavěné: instalovatelná webová appka a upozornění fungují dnes, appky pro App Store a Google Play jsou v přípravě. Řekneme to tady stejně jako v produktu, protože slib, který nesplníme včas, je horší než přiznaný rozdělaný stav.
Související stránky: Bezpečnost (NemotiQ pro makléře) · Bezpečnost (NemotiQ pro správce) · Změny.