Metodická dokumentace projektu: architektura systému I-COP – integrace datových zdrojů – implementace datových skladů
3. I-COP Agent
I-COP Agent je komponenta, která je provozována na serveru uvnitř spolupracující nemocnice a je zodpovědná za zpracování primárních dat nemocnice, které mohou obsahovat osobní údaje. I-COP Agent je používán k nevratné de-identifikaci záznamů.
3.1. Architektura I-COP Agent
I-COP Agent se skládá z několika základních částí. Jádrem celého systému je databáze, která provádí většinu procesu zpracování primárních nemocničních dat a jejich de-identifikaci. Doplněna je sadou obslužných knihoven v PHP, Linux/Windows shell skriptů, archivačním programem pro zabezpečené ukládání citlivých dat atd.
3.1.1. Databáze
Použita je databáze MySQL licencovaná jako open-source a free, která je standardem při používání v nekomerčních projektech.
3.1.1.1. Schémata
Pro funkcionalitu I-COP Agenta jsou potřeba v databázi 3 databázová schémata:
3.1.1.1.1. icop_dw1_koc_import
Slouží pro zpracování primární dat nemocnice, která obsahují osobní údaje pacientů. Má do ní přístup pouze uživatel pověřeného pracovníka nemocnice (obvykle “root”) za účelem zpracování nových dat. Všechna data obsahující osobní údaje se po skončení importu nových dat (jednou ročně) mažou.
3.1.1.1.2. icop_dw1_koc_import_anonym
Slouží pro uložení výsledku iniciálního zpracování nemocničních dat, která již neobsahují žádné osobní údaje pacientů. Jsou přístupná I-COP týmu.
3.1.1.1.3. icop_access
Schéma sloužící k uchování parametrů procesu importu nových dat, archivaci logů z průběhu jejich zpracování apod. Neobsahuje ani žádná primární data nemocnice, ani žádné osobní nebo jiné citlivé údaje. Je přístupná pověřenému pracovníkovi nemocnice i I-COP týmu.
3.1.1.2. ERD schématu icop_dw1_koc_import
ER diagram zachycující základní komponenty I-COP Agenta s daty obsahujícími osobní údaje
3.1.1.3. Popis datového modelu
3.1.1.3.1. pacient_hash
Slouží jako převodník mezi číslem pojištěnce a jeho šifrou. Ke každému číslu pojištěnce je přiřazena odpovídající šifra. Po každém použití je vždy archivován v zašifrovaném archivu na disku nemocnice (pod kontrolou pracovníka nemocnice) a z databáze je nevratně smazán. Analytický tým I-COP nemá žádnou možnost identifikovat osobu pacienta.
Název |
Datový typ |
Integritní omezení |
Popis |
rodne_cislo |
varchar(10) |
NN, PK |
Číslo pojištěnce |
rodne_cislo_hash |
varchar(64) |
NN, U |
Šifra pacienta vzniklá jednosměrnou šifrovací funkcí |
3.1.1.3.2. psw
Ukládá otisk hesla (soli), které se používá pro šifrování čísel pojištěnců při procesu de-identifikace. Slouží jako kontrola hesla, aby nedošlo k šifrování různými hesly, které by znemožnily jednoznačné přiřazení pacientů mezi různými importy dat. Plně pod kontrolou pracovníků nemocnice.
Název |
Datový typ |
Integritní omezení |
Popis |
id |
int |
NN, PK, AI |
Surrogate key |
psw |
varchar(32) |
NN, U |
Otisk hesla (soli) používaný při šifrování čísel pojištěnců |
3.1.1.3.3. pacient_pzp, pacient_presk, pacient_psc, pacient_nor, pacient_zemreli
Tyto tabulky mají stejnou strukturu. Uchovávají v primárních datech nemocnice základní údaje o pacientech, kteří byli dohledáni v primárních datech nemocnice. Tyto údaje jsou odvozeny z čísla pojištěnce. Z něj jsou odvozeny údaje o datu narození, pohlaví a státní příslušnosti. V opačném případě jsou tyto údaje neznámé.
Název |
Datový typ |
Integritní omezení |
Popis |
id |
Int |
NN, PK, AI |
Surrogate key |
rodne_cislo |
varchar(10) |
NN, U |
Číslo pojištěnce dohledané v primárních datech |
rodne_cislo_hash |
varchar(64) |
|
Šifra čísla pojištěnce po procesu de-identifikace |
pohlavi |
char(1) |
|
0 = muž, 1 = žena, 2 = neznámo |
datum_narozeni |
varchar(10) |
|
Datum narození ve formátu YYYYMMDD |
je_cizinec |
char(1) |
|
0 = ne, 1 = ano, 2 = neznámo |
3.1.1.3.4. pzp_dictionary
Slovník pro identifikaci známých typů vět v datech pojišťoven. Obsahuje informaci pro rozpoznání typu věty podle počátečního písmene a délky řádku. Dále obsahuje údaj o případném obsahu osobních údajů v daném typu věty – jaké údaje se zde nacházejí a na jaké pozici v řádku. Tyto údaje pak slouží v procesu de-identifikace pod kontrolou pracovníků nemocnice.
Název |
Datový typ |
Integritní omezení |
Popis |
id_sys |
int |
NN, PK, AI |
Surrogate key |
firstchar |
varchar(1) |
NN |
První znak na řádku věty |
sentencelength |
smallint |
NN |
Délka věty v počtu znaků |
begin |
smallint |
|
Počáteční pozice případného osobního údaje v tomto typu věty |
length |
smallint |
|
Koncová pozice případného osobního údaje v tomto typu věty |
flag |
varchar(1) |
|
Typ případného osobního údaje (N=nic, R=číslo pojištěnce, D=jiný osobní údaj) |
notice |
varchar(255) |
|
Poznámka |
3.1.1.3.5. pzp, pzp_anonym
Obsahuje záznam pro každý načtený řádek primárních dat vykázaných zdravotní pojišťovně. Kromě vlastního znění řádku obsahuje již odvozené údaje pro identifikaci typu věty, nadřazených záznamů (dávka, doklad) a identifikace konkrétního spuštění procesu importu primárních dat.
Název |
Datový typ |
Integritní omezení |
Popis |
id_sys |
int |
NN, PK, AI |
Surrogate key |
radka |
varchar(400) |
NN |
Celý obsah řádku věty PZP v původním znění; v případě tabulky pzp_anonym jsou všechna osobní data v atributu radka vymazána |
kod_vety |
char(1) |
|
Úvodní znak řádku určující typ věty |
delka_vety |
tinyint |
|
Délka řádku věty určující typ věty |
kod_dokladu |
char(2) |
|
Výsledná klasifikace typu věty dle typu a délky |
davka |
varchar(50) |
|
Identifikátor dávky, ve které byl řádek vykázán |
doklad |
varchar(30) |
|
Identifikátor dokladu, ve kterém byl řádek vykázán |
doklad_subs |
varchar(30) |
|
Část identifikátoru dokladu |
nadrazeny_doklad |
varchar(30) |
|
Pro podřízené doklady (03 – zvlášť účtovaná léčiva a materiál) odkazuje na nadřízený doklad (01, 02, 06) |
id_pacient |
int |
FK -> pacient_pzp (id_pacient) |
Identifikátor pacienta, ke kterému byl doklad vykázán |
zz_importu |
char(10) |
NN |
Identifikátor zařízení, ze kterého pocházejí primární data |
datum_importu |
datetime |
NN |
Čas zahájení importu primárních dat |
flag |
tinyint |
|
Příznak dohledání typu věty ve slovníku známých typů vět (pzp_dictionary) |
rok_uzavreni |
smallint |
|
Rok uzavření dokladu |
mesic_uzavreni |
tinyint |
|
Měsíc uzavření dokladu |
3.1.1.3.6. tmp_pzp_bid
Slouží k vytvoření asociace mezi řádkem záznamu v tabulce pzp a identifikátorem pacienta. Obsahuje záznam pro každý řádek tabulky PZP, kde se číslo pojištěnce vyskytuje a je používána ke snadnému dohledání a nahrazení těchto identifikátorů při procesu de-identifikace.
Název |
Datový typ |
Integritní omezení |
Popis |
id_sys |
Int |
NN, PK, FK -> pzp (id_sys) |
Odkaz na řádek v tabulce PZP |
bid |
varchar(64) |
NN, PK, FK -> pacient_pzp (rodne_cislo) |
Odkaz na řádek v tabulce Pacient_PZP; po provedení anonymizace je číslo pojištěnce nahrazeno šifrou |
3.1.1.3.7. presk, presk_anonym
Obsahuje jeden záznam pro každé předepsané léčivo nebo materiál, evidované v NIS. Vztahuje se ke konkrétnímu pacientovi pro daný typ léčiva v daném dni na daném oddělení. V tabulce presk_anonym je sloupec rc nahrazen sloupcem rc_hash, který obsahuje šifru čísla pojištěnce.
Název |
Datový typ |
Integritní omezení |
Popis |
inscomp |
varchar(3) |
|
Číslo pojišťovny pacienta |
datrece |
varchar(10) |
|
Datum předepsání léčiva |
rc |
varchar(10) |
|
Číslo pojištěnce |
drug |
varchar(7) |
|
Kód léčiva |
quantity |
varchar(10) |
|
Množství předepsaného léčiva |
czicz |
varchar(8) |
|
IČP předepisujícího oddělení |
sk |
varchar(1) |
|
Skupina léčiv/materiálu (1=HVLP, 2=IVLP, 3=PZT, 4=STOMAG) |
kc |
varchar(15) |
|
Vykazovaná cena předepsaného léčiva |
atc |
varchar(7) |
|
ATC kód předepsaného léčiva |
nazevatc |
varchar(100) |
|
Název ATC skupiny předepsaného léčiva |
nazev |
varchar(100) |
|
Název léčiva |
dg |
varchar(5) |
|
Diagnóza, pro kterou bylo léčivo předepsáno |
jine |
varchar(100) |
|
Další údaje, vztahující se k preskripci |
zz_importu |
varchar(10) |
NN |
Identifikátor zařízení, ze kterého pocházejí primární data |
datum_importu |
datetime |
NN |
Čas zahájení importu primárních dat |
id_pacient |
Int |
NN, FK -> pacient_presk (id_pacient) |
Identifikátor pacienta |
3.1.1.3.8. psc, psc_anonym
Obsahuje údaje o bydlišti pacienta z interního NIS nemocnice, případně další údaje. V tabulce psc_anonym je sloupec rc nahrazen sloupcem rc_hash, který obsahuje šifru čísla pojištěnce. Sloupce ulicecislo, ulice, cp, co, jmeno, krestni a prijmeni jsou smazány.
Název |
Datový typ |
Integritní omezení |
Popis |
rc |
varchar(10) |
NN |
Číslo pojištěnce |
psc |
varchar(6) |
|
PSČ kód bydliště |
poj |
varchar(3) |
|
Číslo pojišťovny pacienta |
ulicecislo |
varchar(100) |
|
Ulice a číslo domu |
ulice |
varchar(100) |
|
Ulice |
cp |
varchar(10) |
|
Číslo popisné |
co |
varchar(10) |
|
Číslo orientační |
obec |
varchar(8) |
|
Obec bydliště pacienta (statistický kód obce) |
jmeno |
varchar(100) |
|
Jméno a příjmení pacienta |
krestni |
varchar(50) |
|
Křestní jméno pacienta |
prijmeni |
varchar(50) |
|
Příjmení pacienta |
inicialy |
varchar(2) |
|
Iniciály (první písmeno křestního jména a příjmení) |
jine |
varchar(200) |
|
Jakékoliv jiné údaje o pacientovi |
zz_importu |
varchar(10) |
NN |
Identifikátor zařízení, ze kterého pocházejí primární data |
datum_importu |
datetime |
NN |
Čas zahájení importu primárních dat |
id_pacient |
int |
NN, FK -> pacient_psc (id_pacient) |
Identifikátor pacienta |
3.1.1.3.9. nor, nor_anonym
Obsahuje záznam pro každý načtený řádek primárních dat Národního onkologického registru (NOR). Obsahuje všechny záznamy pacientů dané nemocnice nahlášené do NOR. V tabulce nor_anonym je sloupec rodcis nahrazen sloupcem rodcis_hash, který obsahuje šifru čísla pojištěnce.
Název |
Datový typ |
Integritní omezení |
Popis |
id_sys |
int |
NN, PK, AI |
Surrogate key |
id_pacient |
int |
NN, FK -> pacient_nor (id_pacient) |
Identifikátor pacienta |
evcislo |
varchar(14) |
|
Evidenční číslo novotvaru |
pocno |
varchar(2) |
|
Pořadové číslo novotvaru u stejného pacienta |
stol |
varchar(2) |
|
První 2 cifry z roku narození pacienta |
datnar |
varchar(8) |
|
Datum narození pacienta |
rodcis_r |
varchar(11) |
|
Číslo pojištěnce |
pohlav |
varchar(1) |
|
Pohlaví pacienta (1=muž, 2=žena, 9=neznámo) |
psc |
varchar(5) |
|
PSČ bydliště pacienta |
obce |
varchar(6) |
|
Statistický kód obce trvalého bydliště pacienta |
obecpuv |
varchar(6) |
|
Statistický kód obce bydliště v době hlášení |
... |
... |
|
Řada dalších parametrů |
zz_importu |
char(10) |
NN |
Identifikátor zařízení, ze kterého pocházejí primární data |
datum_importu |
datetime |
NN |
Čas zahájení importu primárních dat |
3.1.1.3.10. zemreli, zemreli_anonym
Obsahuje záznamy ze seznamu pacientů nemocnice doplněné o případná data úmrtí a úmrtní diagnózy. V tabulce zemreli_anonym je sloupec rc nahrazen sloupcem rc_hash, který obsahuje šifru čísla pojištěnce.
Název |
Datový typ |
Integritní omezení |
Popis |
rc |
varchar(10) |
NN, PK, AI |
Číslo pojištěnce |
den_umrti |
varchar(10) |
|
Datum úmrtí pacienta |
dg_umrti |
varchar(5) |
|
Hlavní příčina úmrtí pacienta |
zz_importu |
char(10) |
NN |
Identifikátor zařízení, ze kterého pocházejí primární data |
datum_importu |
datetime |
NN |
Čas zahájení importu primárních dat |
id_pacient |
int |
NN, FK -> pacient_nor (id_pacient) |
Identifikátor pacienta |
3.1.2. Další komponenty I-COP Agent
Pro správnou funkcionalitu I-COP Agent jsou zapotřebí ještě následující komponenty:
- Skripty pro spouštění importu nových dat (shell a PHP skripty pro snadné spouštění importu)
- Převodník čísel pojištěnců (shell a 7zip pro bezpečnou archivaci převodníků čísel pojištěnců na šifry)
- I-COP Sync (PHP skripty a HTTPS rozhraní pro přesun de-identifikovaných dat do anonymizované databáze
3.2. Parametry vstupních dat
I-COP agent a jeho komponenty využívají parametry pro zpracování rozdílných vstupních dat. Proto se spouští v konzoli (ve verzi pro operační systém Windows také s administrátorským oprávněním). Parametry rozdělujeme na interní, která jsou uložena v konfiguračním souboru a externí, která jsou požadována při spouštění v konzoli.
Interní
Parametry jsou uložena v konfiguračních souborech agent.bat a agent.ini . Konfigurační soubor typu bat sdružuje primárně systémová nastavení jako cesty k adresářové struktuře agenta, databáze, komprimačního nástroje a jiné. Konfigurační soubor typu .ini se zaměřuje na popis datového rozhraní primárních dat pro zpracování. Jedná se nejen o nastavení cest k datovým zdrojům, ale hlavně pro popis struktury vstupních dat. Pro soubory typu CSV například oddělovač, formát data, seznam předávaných atributů a další.
Tyto konfigurační soubory jsou uložena v adresáři etc a všechny komponenty agenta se odvolávají na data obsažena v nich.
Externí
Jedná se o parametry nutné ke spuštění komponent I-COP Agent, například o typ primárního zdroje dat (k-dávky, preskripce, nor…).
3.2.1. Doklady datového rozhraní VZP („k-dávky“)
Doklady odpovídají datovému rozhraní VZP pro individuální doklady, platné ke dni pořizování těchto dat – viz https://www.vzp.cz/poskytovatele/vyuctovani-zdravotni-pece/metodika-vyuctovani-aktualni-stav. Jejich struktura a obsah je tam přesně popsán.
3.2.2. Záznamy nemocniční preskripce
V souborech, které popisují předepsaná léčiva nebo materiál pro pacienty nemocnice, mohou obsahovat následující parametry:
Název |
Popis |
Datum |
datum předepsání léčiva |
Poj |
pojišťovna pacienta |
Icp |
IČP předepisujícího lékaře |
sk1, sk2 |
skupina prvního / druhého předepsaného léčivého přípravku |
kod1, kod2 |
kód prvního / druhého předepsaného léčivého přípravku |
mnoz1, mnoz2 |
množství prvního / druhého předepsaného léčivého přípravku |
cena1, cena2 |
úhrada za první / druhý předepsaný léčivý přípravek |
atc1, atc2 |
ATC skupina prvního / druhého předepsaného léčivého přípravku |
nazev1, nazev2 |
název prvního / druhého předepsaného léčivého přípravku |
latka1, latka2 |
účinná látka prvního / druhého předepsaného léčivého přípravku |
dg1, dg2 |
diagnóza prvního / druhého předepsaného léčivého přípravku |
j1_*, j2_* |
místo * může být libovolný řetězec alfanumerických znaků nebo _) – jakýkoliv další parametr, vztahující se k prvnímu / druhému předepsanému léčivému přípravku, nesmí obsahovat osobní údaje pacientů |
cokoliv jiného |
jakýkoliv další parametr, vztahující se k preskripci jako celku, nepřenáší se do DB, může obsahovat osobní údaje |
3.2.3. Záznamy z Národního onkologického registru (NOR)
Data odpovídají datovému rozhraní NOR dle metodiky, platné ke dni exportu z registru. Rozhraní je součástí předaných dat a obsahuje pro všechny záznamy exportu stejnou datovou strukturu.
3.3. Funkce I-COP Agenta
3.3.1. Import dat ze zdravotnického zařízení
3.3.1.1. Stručný souhrn procesu
Provádí |
Pověřený pracovník nemocnice s oprávněním zpracování dat obsahující osobní údaje |
Frekvence |
Při zpracování nových dat, obvykle jednou ročně |
Popis |
Funkce zpracovává a načítá primární data nemocnice z textových souborů do databáze a spouští proces jejich dalšího zpracování |
Vstup |
Vstupem jsou připravená nemocniční data v požadovaném formátu, jejichž popis je správně nastaven v konfiguračních parametrech nástroje. |
Výstup |
Výsledkem procesu jsou zpracovaná nemocniční data v DB, která obsahují pouze de-identifikovaná data bez osobních údajů. Všechna ostatní dočasná data, která mohou obsahovat osobní údaje (mimo vlastních vstupních souborů), jsou bezpečně a nevratně smazána. |
3.3.1.2. Podrobný popis procesu
Uvedený postup je popsán na příkladu zpracování administrativních dat nemocnice určených pro pojištovny (k-dávky, PZP). V ostatních případech je postup velmi podobný, často však výrazně jednodušší.
- I-COP agent se zeptá na uživatelské heslo do DB (MySQL)
- I-COP agent se zeptá na heslo k převodníku rodných čísel, které uloží do paměti.
- I-COP agent se zeptá, který z primárných datových zdrojů se bude zpracovávat:
- K-dávky a preskripce vykázané nemocnicí (PZP, PRESK)
- Data z NIS nemocnice s lokalitou bydliště (PSČ)
- Hlášení do Národního onkologického registru pacientů nemocnice (NOR)
- 7zip rozbalí z archivu pacient-hash.zip soubor pacient-hash.sql pomocí hesla z bodu II.
- Načte se pacient-hash.sql do tabulky icop_dw1_koc_import.pacient_hash
- SDELETE bezpečně smaže pacient-hash.sql
- Pomocí PHP skriptu se vybere jeden z primárních datových zdrojů, které uživatel označil v bodu III
- PHP skript projde primární zdrojová data a přetransformuje je do CSV souboru
- CSV soubor se nahraje do DB tabulky icop_dw1_koc_import.pzp_bulk
- Pustí se DB procedura pumpa_pzp (resp. PRESK, PSC, NOR, ZEM v případě jiného typu primárního datového zdroje). Víc sekce 3.3.2. Zpracování primárních dat obsahující osobní údaje v DB
- CSV soubor se smaže
- Pokud je další nezpracovaný primární zdroj, vrátí se I-COP agent na bod VII, jinak pokračuje na bod XIII
- Exportuje tabulku icop_dw1_koc_import.pacient_hash do souboru pacient_hash.sql
- Pokud neexistuje soubor pacient-hash.zip (jedná se o prvotní import), přejde I-COP agent na bod XVI
- Pokud soubor pacient-hash.zip existuje, zálohuje se do adresáře Archive (…)
- 7zip zabalí soubor pacient-hash.sql do pacient-hash.zip
- SDELETE bezpečně smaže soubor pacient-hash.sql
- V DB je smazán (truncate) obsah tabulky icop_dw1_koc_import.pacient_hash
- Zastaví se DB
- SDELETE bezpečně smaže žurnál DB
- Spustí se DB
- I-COP agent smaže všechny dočasné soubory a vypíše do konzoly závěrečné informace
3.3.2. Zpracování primárních dat obsahující osobní údaje v DB
3.3.2.1.Stručný souhrn procesu
Provádí |
Pověřený pracovník nemocnice s oprávněním zpracování dat obsahující osobní údaje |
Frekvence |
Při zpracování nových dat, obvykle jednou ročně; spouští se automaticky v rámci procesu „Import dat ze zdravotnického zařízení“ |
Popis |
Funkce zpracovává primární data nemocnice v rámci databáze, validuje jejich obsah, odvozuje další parametry a spouští proces jejich de-identifikace |
Vstup |
Vstupem jsou nemocniční data nahraná v základním tvaru do databáze |
Výstup |
Výsledkem procesu jsou zpracovaná nemocniční data v DB, která obsahují pouze de-identifikovaná data bez osobních údajů. Mezivýsledky v DB, které obsahují osobní údaje, jsou smazány. Jsou provedeny validační kontroly vstupních dat. |
3.3.2.2. Podrobný popis procesu
Uvedený postup je popsán na příkladu zpracování administrativních dat nemocnice určených pro pojištovny (k-dávky, PZP). V ostatních případech je postup velmi podobný, často však výrazně jednodušší.
- Smaže se (truncate) obsah tabulek v DB icop_dw1_koc_import primárních datových zdrojů
- Obsah tabulky icop_dw1_koc_import.pzp_bulk se po měsíčních obdobích překopíruje do tabulky icop_dw1_koc_import.pzp
- Podle slovníku typů dokladů a vět jsou označeny záznamy se známou strukturou – procedura check_unknown_pzp_rows()
- Do převodní tabulky icop_dw1_koc_import.tmp_pzp_bid vloží ke každému nalezenému číslu pojištěnce (bid) odkaz na řádek v tabulce icop_dw1_koc_import.pzp, ve které se toto číslo nachází
- Pomocí procedury create_pacient_pzp() se do tabulky icop_dw1_koc_import.pacient_pzp doplní ze všech nalezených čísel pojištěnců tato data:
- Číslo pojištěnce
- Pohlaví
- Je_cizinec (příznak zda je pacient cizinec – podle RČ)
- Id_pacienta (automaticky doplněno)
- Doplnění tabulky icop_dw1_koc_import.pzp o id_pacienta z tabulky icop_dw1_koc_import.pacient_pzp
- Ověření hash hesla k převodníku rodných čísel (zadaného na začátku procesu 3.2.2.1. bod II
- Heslo zadané na začátku procesu se zahashuje pomocí funkce md5() a následně se porovná s obsahem tabulky icop_dw1_koc_import.psw
- Pokud je tabulka icop_dw1_koc_import.psw prázdná, vloží do ní záznam s hashem hesla (první spuštění agenta)
- Pokud je tabulka icop_dw1_koc_import.psw naplněná:
- Pokud se hashe neshodují, ukončí program s chybovou hláškou o nesprávném heslu k převodníku rodných čísel
- Pokud se hashe shodují, pokračuje dál
- Vytvoří tabulku icop_dw1_koc_import.pzp_anonym jako kopii tabulky PZP ale jenom těch řádků dokladů, které mají příznak známého typu věty (známé typy vět ověřené procedurou check_unknown_pzp_rows() – viz bod III)
- Provede se de-identifikace všech osobních údajů v primárních datech - procedury hash_patients_pzp() a anonymize_patients_pzp(). Procedury jsou popsány v části 4.2.3. De-identifikace osobních údajů
- Do převodní tabulky icop_dw1_koc_import.pacient_hash se přidají nově nalezené čísla pojištěnců a jejich hashe
- Do anonymizovaného schématu (icop_dw1_koc_import_anonym) se naplní obsah tabulek pzp, pacient_pzp a tmp_pzp_bid z původního schématu (icop_dw1_koc_import), již bez čísel pojištěnců. Primárním identifikátorem pacienta se stane rodne_cislo_hash
- Provedou se testy zpracování vstupních dat
- Smaže se obsah tabulek obsahující osobní údaje ve schématu icop_dw1_koc_import
3.3.3. De-identifikace osobních údajů
3.3.3.1. Stručný souhrn procesu
Provádí |
Pověřený pracovník nemocnice s oprávněním zpracování dat obsahující osobní údaje |
Frekvence |
Při zpracování nově příchozích dat, obvykle jednou ročně; spouští se automaticky v rámci procesu „Zpracování primárních dat obsahující osobní údaje v DB“ |
Popis |
Funkce provádí náhradu atributů, obsahujících osobní údaje, za jejich de-identifikované alternativy. Čísla pojištěnců jsou nahrazena bezvýznamovými identifikátory (jednosměrná šifra), další osobní údaje jsou smazány |
Vstup |
Vstupem jsou nemocniční data obsahující osobní údaje v DB, které jsou v nich dohledány a označeny. |
Výstup |
Výsledkem procesu jsou data, kde jsou osobní údaje pacientů de-identifikovány – čísla pojištěnců jsou nahrazeny bezvýznamovými identifikátory, ostatní osobní údaje jsou nevratně odstraněny. |
3.3.3.2. Podrobný popis procesu
Uvedené příklady opět demonstrují funkčnost při zpracování administrativních dat nemocnice (k-dávky, PZP). Ostatní datové zdroje jsou zpracovávány analogicky.
De-identifikace čísel pojištěnců v seznamu pacientů probíhá pomocí DB procedury hash_patients_pzp(). Následující tabulka zobrazuje způsob, jakým se data s osobními údaji pacientů mapují na de-identifikované záznamy:
Mapování provádějící de-identifikaci čísel pojištěnců v seznamu pacientů na dokladech PZP
Procedura anonymize_patients_pzp() provádí náhradu čísel pojištěnců ve vlastních řádcích tabulky icop_dw1_koc_import.pzp_anonym – v tomto případě je nahradí za řetězec deseti znaků „#“. Mapování původních datových atributů tabulky icop_dw1_koc_import.pzp na atributy v tabulce icop_dw1_koc_import.pzp_anonym jsou popsány v následující tabulce.
Mapování atributů dokladů PZP na de-identifikované záznamy
Vlastní asociace řádků dokladů na pacienty v tabulce icop_dw1_koc_import.tmp_pzp_bid jsou nahrazeny hashem čísla pojištěnce, získaného procedurou hash_patients_pzp().
Mapování atributů asociační tabulky s čísly pojištěnců a řádky dokladů do de-identifikované podoby
V dalších tabulkách jsou uvedeny mapování dalších typů primárních datových zdrojů. Je v nich patrný způsob nakládání s čísly pojištěnců, resp. s dalšími osobními údaji, které se zde mohou vyskytovat.
Mapování atributů nemocničních preskripcí na de-identifikované záznamy
Mapování atributů záznamů o pacientech nemocnice na de-identifikované záznamy
3.4. Správa systému a přístupů
Za správu systému, správu přístupů, zajištění bezpečnosti a zálohování zodpovídá vždy pověřený pracovník nemocnice, na jejichž prostředcích je I-COP Agent provozován. Pracovníci dodavatele s přístupy do nemocnic jsou povinni dodržovat veškeré zásady, požadované zodpovědnými provozovateli IT v nemocnici.
3.5. Zajištění bezpečnosti osobních dat v nemocnicích
Pro zajištění bezpečnosti a ochrany osobních a jiných citlivých dat je aplikována celá řada opatření – od smluvních opatření, přes technická až po organizační pravidla. Dohromady vytvářejí velmi robustní systém ochrany nemocničních dat, který zcela vylučuje možnost jejich zneužití nebo úniku (viz kapitola 1).
3.5.1.Technická opatřeni
3.5.1.1.Přístupy ke všem datům chráněny heslem
DB MySQL rozdělena na neanonymní a anonymmní část, pro které existují dva rozdílné uživatelské účty. Zpracování vstupních dat s osobními údaji se standardně spouští pod uživatelem root (pracovníci nemocnice), který má přístup ke všem datům. Při vytváření výstupních dat a přenosu na I-COP Central se používa účet icop_admin, který má přístup jenom do anonymizované části.
Archivována data jsou zašifrovaná s heslem. Přihlášení k serveru a přístup k adresářům je řízen správou uživatelských účtů operačního systému dle politiky dané nemocnice.
3.5.1.2. Nahrazení čísel pojištěnců bezpečnou šifrou
Šifrování čísel pojištěnců je prováděno následujícím postupem.
Čísla pojištěnců, ve spojení s heslem (sůl), jsou šifrována pomocí jednosměrné šifrovací funkce SHA-1 (160-bit) na bezvýznamový identifikátor. Pro možnost zpětného dohledání čísel pojištěnců pro interní potřeby nemocnice je uchováván převodník mezi číslem pojištěnce a jeho šifrou. Způsob práce s tímto převodníkem je popsán v části 3.4.2.4.
3.5.1.3. Šifrování přenosu dat mezi I-COP Agent a I-COP Central
Při přenosu de-identifikovaných dat z nemocnice anonymizovanou databázi pro analýzy se používá zabezpečené spojení pomocí protokolu HTTPS s certifikátem, spravovaným dodavatelem. Pro komunikaci jsou povoleny pouze spojení z předem povolených IP adres jednotlivých serverů ve spolupracujících nemocnicích.
3.5.2. Organizační opatření
3.5.2.1.Smluvní ochrana osobních dat s nemocnicí
Mezi každou nemocnicí a MU je uzavřena smlouva, jejíž nedílnou součástí je dohoda o ochraně citlivých údajů nemocnice pracovníky zpracovatele a povinnost jejich mlčenlivosti.
3.5.2.2.Dohoda o mlčenlivosti zaměstnanců
Každý zaměstnanec LF MU má podepsanou dohodu o mlčenlivosti a ochraně osobních a jiných citlivých údajů, se kterými přichází při práci do kontaktu.
3.5.2.3. Bezpečná evidence přístupů do nemocnic
Evidence přístupů do nemocnic je popsána v části 2.2.
3.5.2.4. Oddělení přístupů, řízení rolí
Zpracování dat, obsahujících osobní údaje pacientů, probíhá v databázi, která je přístupná pouze pod uživatelským účtem administrátora DB (obvykle root). Zodpovědností pověřeného pracovníka nemocnice je zpřístupnění vstupních dat a jejich zpracování do podoby de-identifikovaných záznamů, které jsou již v oddělené části databáze, přístupné členům I-COP týmu. S uživatelským účtem icop_admin, který mají členové I-COP týmu k dispozici, není možné se k žádným datům s osobními údaji dostat.
3.5.2.5. Mazání a šifrování osobních dat v době, kdy nejsou třeba
Všechna data obsahující citlivé informace jsou uložena v databázi pouze po dobu nezbytně nutnou pro provedení požadovaných funkcí.
Na začátku procesu zpracování primárních dat (K-dávky, preskripce, seznam pacientů s lokalitou bydliště, atd.) se rozbalí archív převodníku čísel pojištěnců a načte do DB. Rozbalený soubor se okamžitě smaže bezpečným způsobem pomocí programu SDelete. Při procesu importu nových nemocničních dat jsou do převodníku v DB přidáni noví pacienti. Po skončení importu se soubor archívu převodníku zálohuje (přejmenuje podle aktuálního data a přesune do archívu). Následně se z DB exportuje aktualizovaný převodník do souboru, který je následně zabalen jako nový šifrovaný archív převodníku. Vstupní soubor převodníku i tabulka z databáze jsou následně bezpečně smazány.
3.5.2.6. Minimalizace práce s osobními údaji
S daty, která obsahují osobní údaje pacientů (zejména číslo pojištěnce) se manipuluje co nejméně je to možné. Primární data jsou pouze základně zpracována (načtena jejich struktura a obsah) a uložena do DB. Ihned poté jsou čísla pojištěnců zašifrována na bezvýznamový identifikátor a tímto novým identifikátorem jsou původní čísla pojištěnců nahrazena. Již jen nové identifikátory jsou pak spolu s vlastními daty nahrány do oddělené části DB, kde probíhá další zpracování. Veškerá další práce již probíhá nad de-identifikovanými daty, bez osobních údajů – tyto jsou nevratně smazány.
3.5.2.7. Vyřazení dat, která mohou obsahovat osobni údaje, z dalšího zpracování
Záznamy, které mohou obsahovat osobní údaje (jiné než číslo pojištěnce, které se bezpečně šifruje), se z dalšího zpracování vyřazují. Jedná se primárně o zpracování seznamu pacientů s lokalitou bydliště, kde je možné očekávat výskyt osobních údajů (jméno a příjmení, přesná adresa apod.). Do de-identifikované části DB se tyto údaje nepřenáší.
Při zpracování administrativních dat nemocnice (PZP) se každý doklad ověřuje přes slovník (seznam známých typů dokladů). Pokud je daný doklad ve slovníku nalezen, je označen pro další zpracování. V další části se pak zpracovávají jen doklady s tímto příznakem (jenom rozpoznané typy dokladů). Ostatní doklady jsou smazány. Tímto se zabezpečí ochrana neznámých dokladů, které by mohly obsahovat osobní údaje.
3.5.2.8. Výhradní použití de-identifikovaných dat pro analýzy
I-COP agent pro přesun dat mezi nemocnicí a databází pro analýzy využívá DB účet icop_admin. Tento účet je omezen přístupem jenom do anonymizované DB. Z tohoto důvodu nehrozí únik citlivých osobních údajů mimo nemocnici, natož pak jejich použití při analýzách.