From 9b6f89f437aa3a93fa2cc5a09e7764e01ddfc734 Mon Sep 17 00:00:00 2001 From: Vladimir Buzalka Date: Tue, 16 Jun 2026 10:21:19 +0200 Subject: [PATCH] notebookvb --- .../FinalReconcilliation/01_zakoupeno.py | 154 ++ .../2025-01-01 seznam_pacientu_jmeno_rc.csv | 1713 +++++++++++++++++ Insurance/FinalReconcilliation/NOTES.md | 136 ++ .../report_registrovani_2025-01-01.xlsx | Bin 0 -> 91244 bytes .../FinalReconcilliation/report_tracking.py | 210 ++ .../FinalReconcilliation/seed_tracking.py | 243 +++ mcp_insurance.py | 161 ++ 7 files changed, 2617 insertions(+) create mode 100644 Insurance/FinalReconcilliation/01_zakoupeno.py create mode 100644 Insurance/FinalReconcilliation/Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv create mode 100644 Insurance/FinalReconcilliation/NOTES.md create mode 100644 Insurance/FinalReconcilliation/report_registrovani_2025-01-01.xlsx create mode 100644 Insurance/FinalReconcilliation/report_tracking.py create mode 100644 Insurance/FinalReconcilliation/seed_tracking.py create mode 100644 mcp_insurance.py diff --git a/Insurance/FinalReconcilliation/01_zakoupeno.py b/Insurance/FinalReconcilliation/01_zakoupeno.py new file mode 100644 index 0000000..d5a73b5 --- /dev/null +++ b/Insurance/FinalReconcilliation/01_zakoupeno.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +01_zakoupeno.py — workflow status 0: Zakoupeno (datum 31.12.2024) +================================================================= +První stav reconciliačního workflow. Všem pacientům ze zakoupeného souboru +(CSV příloha smlouvy, 1712 RČ) nastaví status 0 "Zakoupeno" k 31.12.2024. + +- Pacienti ze smlouvy, kteří už jsou v Mongo (registrovaní k 1.1.2025) → status 0. +- Pacienti ze smlouvy, kteří v Mongo nejsou (odhlášeni u Buzalkové před předáním) + → doplněni z Medicus kar s markerem `mimo_vzp_populaci` + status 0. +- Pacienti v Mongo mimo smlouvu → označeni `ve_smlouve=False` (status 0 nedostanou). + +Workflow stav drží: + status, status_popis, status_datum (aktuální stav) + status_historie[] (postup stavů — pro další kroky) + +Idempotentní — opakované spuštění status 0 nezduplikuje. +""" + +import csv +import re +import sys +from pathlib import Path +from datetime import datetime, timezone + +PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(PROJECT_ROOT)) + +import pymongo +from Knihovny.medicus_db import get_medicus_connection + +# ── Konfigurace ──────────────────────────────────────────────────────────────── +MONGO_URI = "mongodb://192.168.1.76:27017" +MONGO_DB = "ordinace" +MONGO_COLL = "registrovani_tracking" +CSV_PATH = Path(__file__).resolve().parent / "Inputs" / "2025-01-01 seznam_pacientu_jmeno_rc.csv" + +STATUS = 0 +STATUS_POPIS = "Zakoupeno" +STATUS_DATUM = "2024-12-31" + +POJ_ZKR = {"111": "VZP", "201": "VoZP", "205": "ČPZP", "207": "OZP", + "209": "ZPŠ", "211": "ZPMV ČR", "213": "RBP"} +norm = lambda s: re.sub(r"\D", "", s or "") + + +def status_entry(now): + return {"status": STATUS, "status_popis": STATUS_POPIS, + "status_datum": STATUS_DATUM, "zapsano": now} + + +def main(): + # ── CSV (zakoupený soubor) ────────────────────────────────────────────────── + csv_rc = {} + with CSV_PATH.open(encoding="utf-8-sig") as f: + for row in csv.DictReader(f, delimiter=";"): + csv_rc[norm(row["Rodné číslo"])] = row["Příjmení a jméno"] + contract = set(csv_rc) + print(f"Zakoupený soubor (CSV): {len(contract)} RČ") + + cli = pymongo.MongoClient(MONGO_URI, serverSelectionTimeoutMS=3000) + coll = cli[MONGO_DB][MONGO_COLL] + coll.create_index("status") + coll.create_index("ve_smlouve") + + pop = {norm(d["_id"]): d["_id"] for d in coll.find({}, {"_id": 1})} + popset = set(pop) + + present = contract & popset + absent = contract - popset + extra = popset - contract + now = datetime.now(timezone.utc) + + # ── 1) Pacienti ze smlouvy už v Mongo → status 0 (idempotentně) ───────────── + n_pres = 0 + for rc in present: + _id = pop[rc] + d = coll.find_one({"_id": _id}, {"status_historie": 1}) + sh = d.get("status_historie", []) + if not any(e.get("status") == STATUS for e in sh): + sh = sh + [status_entry(now)] + coll.update_one({"_id": _id}, {"$set": { + "status": STATUS, "status_popis": STATUS_POPIS, "status_datum": STATUS_DATUM, + "ve_smlouve": True, "status_historie": sh, "updated_at": now}}) + n_pres += 1 + + # ── 2) Pacienti v Mongo mimo smlouvu → ve_smlouve = False ─────────────────── + coll.update_many({"_id": {"$in": [pop[rc] for rc in extra]}}, + {"$set": {"ve_smlouve": False, "updated_at": now}}) + + # ── 3) Pacienti ze smlouvy chybějící v Mongo → doplnit z kar + status 0 ───── + conn = get_medicus_connection() + cur = conn.cursor() + kar = {} + abslist = list(absent) + for i in range(0, len(abslist), 500): + b = abslist[i:i + 500] + ph = ",".join("?" for _ in b) + cur.execute(f""" + SELECT TRIM(k.rodcis), TRIM(k.prijmeni), TRIM(k.jmeno), TRIM(k.poj), + (SELECT MAX(r.datum_zruseni) FROM registr r JOIN icp i ON r.idicp=i.idicp + WHERE r.idpac=k.idpac AND i.icp='09305001' AND i.odb='001') + FROM kar k WHERE k.rodcis IN ({ph})""", b) + for rc, p, j, poj, zrus in cur.fetchall(): + kar[(rc or "").strip()] = {"prijmeni": p, "jmeno": j, + "poj": (poj or "").strip(), "zruseni": zrus} + conn.close() + + n_ins = 0 + for rc in absent: + if coll.find_one({"_id": rc}): + continue + k = kar.get(rc, {}) + poj = k.get("poj", "") + zrus = k.get("zruseni") + zrus_s = zrus.strftime("%Y-%m-%d") if zrus else None + snap = { + "k_datu": "2025-01-01", "kategorie": "ODHLASEN_PRED_PREDANIM", + "kategorie_popis": "Registrace u Buzalkové zrušena před předáním (1.1.2025)", + "v_zakoupenem_souboru": False, + "flag": "NEBYL V ZAKOUPENÉM SOUBORU PACIENTŮ", + "flag_duvod": f"registrace u Buzalkové zrušena {zrus_s} (před předáním)", + "praktik_nazev": None, "praktik_icz": None, "praktik_icp": None, + "praktik_od": None, "datum_zahajeni": None, "datum_ukonceni": None, + "medicus_zruseni": zrus_s, + } + coll.insert_one({ + "_id": rc, "rc": rc, + "prijmeni": k.get("prijmeni"), "jmeno": k.get("jmeno"), + "pojistovna": {"kod": poj, "zkratka": POJ_ZKR.get(poj, poj)}, + "medicus_poj": poj, + "status": STATUS, "status_popis": STATUS_POPIS, "status_datum": STATUS_DATUM, + "ve_smlouve": True, "mimo_vzp_populaci": True, + "vychozi_datum": "2025-01-01", "aktualni": snap, + "historie": [{**snap, "zmena": "doplněn ze smlouvy (mimo VZP populaci)"}], + "status_historie": [status_entry(now)], + "created_at": now, "updated_at": now, + }) + n_ins += 1 + + # ── Souhrn ────────────────────────────────────────────────────────────────── + print(f"present (status 0 nastaveno) : {n_pres}") + print(f"absent doplněno ze smlouvy (insert) : {n_ins}") + print(f"extra mimo smlouvu (ve_smlouve=False): {len(extra)}") + print() + print(f"status 0 (Zakoupeno) celkem : {coll.count_documents({'status': 0})}") + print(f"ve_smlouve = True : {coll.count_documents({'ve_smlouve': True})}") + print(f"kolekce celkem : {coll.count_documents({})}") + cli.close() + + +if __name__ == "__main__": + main() diff --git a/Insurance/FinalReconcilliation/Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv b/Insurance/FinalReconcilliation/Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv new file mode 100644 index 0000000..08ac23a --- /dev/null +++ b/Insurance/FinalReconcilliation/Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv @@ -0,0 +1,1713 @@ +Příjmení a jméno;Rodné číslo;Strana;Řádek na straně +Abohamda Horia;486122443;1;1 +Adamcová Jaroslava;465318019;1;2 +Adamec Petr;8101190999;1;3 +Adlerová Irena;375705068;1;4 +Alakbarov Farid;6601021977;1;5 +Aleid Manal;6457077407;1;6 +Alexovič Vladimír;7706058657;1;7 +Alexovičová Julie;7860279933;1;8 +Anderle Petr;7502072655;1;9 +Anderle Václav;430127082;1;10 +Andreattová Nataša;535520125;1;11 +Antošová Kateřina;9254250445;1;12 +Arnošt Petr;410405048;1;13 +Aubrechtová Iva;385312025;1;14 +Aubrechtová Jitka Mgr.;6851100421;1;15 +Babáček Marek;7909054780;1;16 +Babelová Marie;415803072;1;17 +Babická Lenka;8760073949;1;18 +Babjáková Jana;8755075153;1;19 +Baladrán Antonín;460610084;1;20 +Balousová Lenka Mgr.;7253282355;1;21 +Bambula Jan;360408076;1;22 +Bambula Jiří;6404191310;1;23 +Banáš Martin;9002025956;1;24 +Barabolya Lyudmila;6657271918;1;25 +Bareš Chovancová Věra;8459105710;1;26 +Barrell Peter;7803744597;1;27 +Barrellová Catharine;8051279951;1;28 +Barták Jiří;6608270702;1;29 +Bartáková Hilde;285703963;1;30 +Bartáková Jana;8352210438;1;31 +Bartáková Marie;525406150;1;32 +Bartejsová - Plačková Petra;8651020169;1;33 +Bartošová Jana;515125059;1;34 +Bašeová Alexandra;5760140067;1;35 +Baštová Tereza;9760050399;1;36 +Bauer Petr;7007120450;1;37 +Bauerová Irena;485221756;1;38 +Bazjuková Hana;8860050045;1;39 +Bečica Josef;6504141149;1;40 +Bečica Marek;9010262448;1;41 +Bečicová Markéta;6758120446;1;42 +Bečicová Tereza;9355042466;1;43 +Bednářová Dana;5851190257;1;44 +Behan Dominik;8308250423;1;45 +Bělaška Dušan Ing.;7302020220;1;46 +Benediktová Hana;7457200828;1;47 +Benešová Hana;465505094;1;48 +Beránková Jana;425610010;2;1 +Berki Miroslav;530204152;2;2 +Berounská Eliška;0554174346;2;3 +Berounský Pavel;6302061942;2;4 +Bezděková Anna;485113443;2;5 +Beznoska Miloslav;500206172;2;6 +Beznosková Milena;505218025;2;7 +Bilčík Štěpán;491030140;2;8 +Bilčíková Jana;516110008;2;9 +Bílek Václav;6705171693;2;10 +Bílková Vilemína;336031025;2;11 +Billouz David Maurice Jean Ing.;7312544195;2;12 +Billouz Koffí Hana;7356020441;2;13 +Biskup Petr;7903030454;2;14 +Biskupová Daniela;7658270433;2;15 +Biskupová Drahomíra;526116301;2;16 +Bláha Vladimír;441213125;2;17 +Blažek Josef;6909030568;2;18 +Blažek Josef;7503170444;2;19 +Blažek Josef Ing.;9404060435;2;20 +Blažková Irena;7754299993;2;21 +Blažková Radmila Mgr.;6459121482;2;22 +Boháčová Barbora;9253220262;2;23 +Boháčová Tereza;9253220251;2;24 +Bohmová Ivana;8359012442;2;25 +Bornová Milena;5556240030;2;26 +Bosnovičová Lenka;8951302635;2;27 +Boštičková Hana;406224051;2;28 +Bouberlová Dana;6654141538;2;29 +Bouček Jan;6501010813;2;30 +Bouček Jan;9312170450;2;31 +Boučková Hana;395326011;2;32 +Boučková Jitka;6351040696;2;33 +Bouchal Miroslav;440419015;2;34 +Bouzková Sabina;0452205853;2;35 +Brabcová Miluše;265407061;2;36 +Braunspergerová Emílie;525818212;2;37 +Braunspergerová Eva;7862150351;2;38 +Breitenfeld Lothar;5026644018;2;39 +Brejchová Jitka;7956010436;2;40 +Brendl David;7603311892;2;41 +Broulímová Mariya;6358097207;2;42 +Brožek Roman;6507241620;2;43 +Brožová Milada;7153120172;2;44 +Brychcín Pavel;7205250261;2;45 +Bryndačová Nikola;9162110430;2;46 +Břeňová Marie;485815407;2;47 +Březina František;7907091742;2;48 +Březina Vladislav;6508171956;3;1 +Březinová Jaroslava;395730043;3;2 +Budač Aleš;8103092492;3;3 +Bui Linda;0151121861;3;4 +Bui Quang Dai;6009122185;3;5 +Bukvář Martin;7409240399;3;6 +Bukvář Milan Ing.;440420046;3;7 +Bukvářová Blanka;486213096;3;8 +Buňka Antonín;441205047;3;9 +Buňková Zuzana;476027162;3;10 +Bunyat-Zada Rafiga;485605473;3;11 +Bureš Jiří;7708160427;3;12 +Burešová Anna;455529042;3;13 +Burešová Irena;375616066;3;14 +Buršík Milan;6112250155;3;15 +Buršík Milan;9303090434;3;16 +Bydžovská Miroslava;435107002;3;17 +Bydžovský Jan;8102200051;3;18 +Bydžovský Jaroslav Ing.;430220050;3;19 +Caha Jaroslav Ing.;480101462;3;20 +Cahová Daniela;515705039;3;21 +Cerman Jakub Ing.;7208153436;3;22 +Cerman Jan;7702170421;3;23 +Cerman Miloslav Ing.;430217072;3;24 +Cermanová Jindřiška;375608071;3;25 +Cermanová Zuzana;7659192596;3;26 +Cibulka Petr;0403033884;3;27 +Cicková Eliška;8552212405;3;28 +Cimická Rozália;425301743;3;29 +Cimplová Dagmar;5559070209;3;30 +Cipro Petr;470627009;3;31 +Cipro Šimon;8601122761;3;32 +Ciprová Vladimíra;5455040954;3;33 +Ciryn Tomáš;7903050991;3;34 +Císař Petr;401120069;3;35 +Císař Petr Ing.;6908140426;3;36 +Císařová Irena;465704175;3;37 +Císařovská Eva;7551132776;3;38 +Coubalová Lada RNDr.;6252090867;3;39 +Crnčevič Boris;6702212451;3;40 +Csépeová Viktória;7860308115;3;41 +Cvrčková Eva;8456113248;3;42 +Czak Miroslav;8403150437;3;43 +Čajka Jakub;0501104439;3;44 +Čajková Miroslava;7857050432;3;45 +Čapek Martin;8407267682;3;46 +Čapková Tereza;8262050423;3;47 +Čech Aleš;0406014675;3;48 +Čechová Gabriela;7451270431;4;1 +čechová Romana;8860195707;4;2 +Čejka Jiří;480227054;4;3 +Čejka Michal;0503075078;4;4 +Čejka Petr;7507250443;4;5 +Čejková Vendulka;7758120964;4;6 +Čelikovská Hana;7154280397;4;7 +Čelikovská Kristýna;9059050737;4;8 +Čenanovič Arman;0109020285;4;9 +čenanovičová krkičov Sanja;7160239911;4;10 +Čepelka Daniel;9804240193;4;11 +Čepelková Ivana;8354129905;4;12 +Čermáková Lenka;7954040468;4;13 +Čermáková Monika;9453114187;4;14 +Černá Drahomíra;405422703;4;15 +černá Věra;395825027;4;16 +Černík Pavel;7204090454;4;17 +Černý Pavel;431120026;4;18 +Červená Jana;375704015;4;19 +červenka Bohuslav;401229024;4;20 +Červinka Karel;8303300016;4;21 +Čičo Vladimír;5605100919;4;22 +Číp Vladislav Ing.;7305310232;4;23 +Čípová Hana;7853190422;4;24 +Čížkovská Jaroslava;366103079;4;25 +Čuda Petr Mgr.;8004110081;4;26 +Čudová ajmová Tereza Ing.ar;8151182765;4;27 +Čulík Karel Ing.;5712310626;4;28 +Čulíková Alžběta;9054220010;4;29 +Čulíková Hana;5955100272;4;30 +Čulíková Martina;8754211466;4;31 +Dalecká Jaromíra Ing.;6461041345;4;32 +Dalecká Kristýna;9352210417;4;33 +Dalecký Milan;5811180100;4;34 +Dangová Thanh Huyen;9455264269;4;35 +Danielová Veronika;486224234;4;36 +Danihelka Yirka;0261070194;4;37 +Daová Kristýna;9252265704;4;38 +De lucht Soňa;535921179;4;39 +Dědková Jana;425315100;4;40 +Degen Daniel;9404080444;4;41 +Degenová Libuše;405807108;4;42 +Degenová Marta;6357211454;4;43 +Deiak Vasyl;6412057377;4;44 +Derechová Marie;366010037;4;45 +Deyak Mykhaylo;7109203893;4;46 +Deyak Mykhaylo;9804091539;4;47 +Deyak Nataliya;7862221895;4;48 +Dientsbierová Marie;426004011;5;1 +Diepold Tomáš;0309010405;5;2 +Diepoldová Kateřina;6860090446;5;3 +Dittmayer Jan;9312240410;5;4 +Dittmayer Milan;6002221775;5;5 +Dittmayerová Jindřiška;6955150004;5;6 +Dlouhá Jana;6356100454;5;7 +Dobrohrušková Lucie;9355071297;5;8 +Dohnal Josef Ing.;430402055;5;9 +Dohnalová Daniela Ing.Arch.;505513208;5;10 +Dohnalová Jiřina;515109053;5;11 +Dokládalová Jana Mgr.;5958011752;5;12 +Dolenská Anna;8954043703;5;13 +Doležal Václav;5607310797;5;14 +Dorňák Kamil;7605254195;5;15 +Drábová Radka;8055070441;5;16 +Dragoun otokar;370315041;5;17 +Dragounová Naděžda;365728064;5;18 +Drahuská Jitka;6555271910;5;19 +Drahuský Pavel;451031036;5;20 +Draksel Pavel;491005324;5;21 +Drakselová Daniela;515820013;5;22 +Dražilová Lucie;9057293201;5;23 +Drážný Mikuláš;300920095;5;24 +Drbal Jaromír Ing.;5706130056;5;25 +Drozd František;500504119;5;26 +Dubová Zita Mgr.;7857103232;5;27 +Dufková Marie;436108103;5;28 +Duchoňová Nikola;9762110831;5;29 +Dundr Pavel;9010120438;5;30 +Dundrová Markéta;6857112064;5;31 +Dunzendorferová Olga;405525430;5;32 +Dusilová Jana;495524246;5;33 +Dušek František;470402049;5;34 +Dušková Ludmila;496025025;5;35 +Dvorská Věra;455429053;5;36 +Dvořáčková Božena;435908014;5;37 +Dvořák Josef;470916013;5;38 +Dvořák Michal;7606240455;5;39 +Dvořák Pavel;7803080439;5;40 +Dvořák Petr;6709291039;5;41 +Dvořáková Eva;6960182746;5;42 +Dvořáková Jana;7654201071;5;43 +Dvořáková Jiřína;485704042;5;44 +Dvořáková Michaela;0253150425;5;45 +Dvořáková Petra;7362222351;5;46 +Dvořáková Zdenka;7261252537;5;47 +Dvořáková Zd eňka;465418044;5;48 +Dyntera Petr;6406150256;6;1 +Dynterová Iveta;6352081956;6;2 +Dynterová Karolína;0054240428;6;3 +Ekhard Petra;8362022900;6;4 +Elouchefoun Aziz;6102694070;6;5 +Elouchefounová Petra;7652110422;6;6 +Elouchefounová Sára;0153180137;6;7 +Elznic Matěj;8808060041;6;8 +Elznic Vladimír;460820024;6;9 +Elznicová Tereza;9459060028;6;10 +Emingerová Barbora;8959180010;6;11 +Emingerová Libuše;6862181139;6;12 +Endyšová Soňa;9051050415;6;13 +Faják Pavel;7001192385;6;14 +Fajáková Alia;7360309924;6;15 +Faměra Jiří;400424003;6;16 +Faměrová Marie;395815085;6;17 +Fečo Pavol;6806137063;6;18 +Fencl Karel;380813023;6;19 +Fenclová Jaroslava;5658260333;6;20 +Fenclová Stanislava Mgr.;445110009;6;21 +Feoktistová Irina MUDr.;8454664262;6;22 +Feoktistová Natalia Ing.;446228471;6;23 +Ferko Miroslav;6508040022;6;24 +Ferková Denisa;9051131133;6;25 +Ferková Eva;7252010898;6;26 +Ferková Kateřina;9351150402;6;27 +Fiala Ondřej;8506027497;6;28 +Fialová Marta;5853126928;6;29 +Fialová Růžena;455925093;6;30 +Fiedlerová Jana;6758170848;6;31 +Filip Bohuslav;430707111;6;32 +Fišerová Jitka;7553120432;6;33 +Fišerová Petra;8356020112;6;34 +Flek Radek;8501030065;6;35 +Flek Zbyněk;8206290070;6;36 +Flekal Josef;9209220207;6;37 +Flekal Zdeněk;7401150581;6;38 +Flekal Zdeněk;9612200048;6;39 +Flekalová Martina;7352150971;6;40 +Fleková Lenka;7655011815;6;41 +Fleková Milada;5958311128;6;42 +Fojtová Zuzana;7853240109;6;43 +Formánková Ilona;6852282261;6;44 +Foučková Jana;395313082;6;45 +Fraňková Ludmila;6262060332;6;46 +Frantl Jan Ing.;9302080436;6;47 +Frantl Jiří Ing.;5609190048;6;48 +Frantlová Jana Ing.;6058191227;7;1 +Frantlová Lucie MUDr.;9060270505;7;2 +Frantlová Zuzana;9351293369;7;3 +Franzlová Hana;516010064;7;4 +Fremut Zdeněk;530327041;7;5 +Fried Vortelová Lenka;8456200071;7;6 +Frýdl Luděk;5603232118;7;7 +Frýdlová Jana;6055052157;7;8 +Fuchsová Jana;6955160905;7;9 +Fuchsová Pavlína Ing.;8160100003;7;10 +Galus Karel;460614110;7;11 +Gembecová Hana;8652053190;7;12 +Georg Eduard Leonidovyč;6705277216;7;13 +Georgiev Diyan;7902093947;7;14 +Georgiev Jiří;7904020465;7;15 +Georgiev Pavel;8110150059;7;16 +Georgieva Monika;7853021902;7;17 +Georgievová Libuše;425503037;7;18 +Georgová Jindra JUDr.;536124262;7;19 +Gerhard Vladislav Ing.;500602256;7;20 +Gerhardová Renáta;6255141002;7;21 +Giertli Petr;7212077521;7;22 +Glynska Majja;7355189941;7;23 +Gnulíková Tatjana;535122359;7;24 +Gratzelová Pavla Ing.;445807023;7;25 +Gréeová Marie Ing.;406109083;7;26 +Grygarová Jana;8554125360;7;27 +Haasová Kateřina;9661200043;7;28 +Haasová Ludmila;6058100620;7;29 +Hackerová Alžběta;9660070112;7;30 +Hájek David;7310080206;7;31 +Hájek Jan;8311290427;7;32 +Hájek Jaroslav;7508191042;7;33 +Hájek Jindřich;440608035;7;34 +Hájek Miloslav;7410241014;7;35 +Hájek Vladimír Ing.;350416952;7;36 +Hájková Drahomíra;405330033;7;37 +Hájková Jaromíra;7559120448;7;38 +Hájková Marta;7552260430;7;39 +Hájková Michaela;7754160524;7;40 +Hájková Monika;7951744185;7;41 +Hájková Petra;9654200402;7;42 +Hajšmanová Marcela;495227264;7;43 +Halušková Radka;7753250010;7;44 +Hamerník Josef;420622031;7;45 +Hamerníková Emilie;445306004;7;46 +Hampl Ivo;8902070408;7;47 +Hamplová Alena Mgr.;5755181674;7;48 +Hamřík Josef;9501272968;8;1 +Hamříková Hana;6757180232;8;2 +Hanitz Petr Ing.;6610170589;8;3 +Hanusová Blanka;5660020938;8;4 +Hanzl František;8005291404;8;5 +Hanzlová Kateřina;8152150435;8;6 +Hanžl Tomáš;0012140403;8;7 +Hanžlová Ivana;7753120463;8;8 +Harsa Radovan;6504140489;8;9 +Hasmanová Tereza;8358293317;8;10 +Hašek Milan;7108290002;8;11 +Hašková Jana;505731289;8;12 +Havelka Miroslav;440802018;8;13 +Havlíčková Andrea;8051035223;8;14 +Havlín Josef;8405150446;8;15 +Havlínová Jiřina;455514106;8;16 +Havlínová Věra;405720062;8;17 +Havlínová Zuzana;8557044188;8;18 +Heger Pavel;5509060018;8;19 +Hegerová Hana;6357021759;8;20 +Hegerová Simona;8361192664;8;21 +Hegerová Veronika;8352250434;8;22 +Hejkal Václav;7503310430;8;23 +Hejkrlík Jan Ing.;510417052;8;24 +Hejkrlíková Martina Mgr.;506103092;8;25 +Hejná Dana;7160212763;8;26 +Hejný Josef;9207180411;8;27 +Hellerová Eva;6554230056;8;28 +Hellerová Monika;9651180418;8;29 +Hemer Lukáš;6604220128;8;30 +Hemerová Kamila;7054042061;8;31 +Hemerová Lucie;9753100016;8;32 +Hercíková Irena;426203053;8;33 +Hercíková Michaela;7462260278;8;34 +Hermanová Dagmar;375402075;8;35 +Herzová Marie;395907022;8;36 +Heřmánková Jana;7254050287;8;37 +Heřmanská Andrea Ing.;9361260590;8;38 +Heřmanská Hana;525205299;8;39 +Heřmanský Milan;8602120428;8;40 +Heuschneider Arnošt;400406144;8;41 +Hlaváček Pavel;6904120487;8;42 +Hlaváčková Jana;7557200486;8;43 +Hlaváčová Olga;535926054;8;44 +Hlavatá Jaroslava;505626209;8;45 +Hlavatý Jaroslav;500225272;8;46 +Hlavsová Hana;415906003;8;47 +Hloužek Jiří;0203050166;8;48 +Hloužková Tereza;7361170058;9;1 +Hnízdová Eva;5751211807;9;2 +Hobzová Petra;7258021254;9;3 +Hobzová Sára;0354281290;9;4 +Hocke David;7402210101;9;5 +Hocke Olga;7562222987;9;6 +Hod Václav;9108300168;9;7 +Hofmannová Oldřiška;6258130637;9;8 +Holbová Jarmila;445730017;9;9 +Holcová Adriana Ing.;8259080423;9;10 +Holeček Jiří;5904180117;9;11 +Holečková Hana;5954110184;9;12 +Holečková Jarmila;405101482;9;13 +Holík Milan;6312280623;9;14 +Holíková Soukupová Renáta;6555041240;9;15 +Holk Dan;7105140449;9;16 +Holk Roman;6804050649;9;17 +Holková Helena;465223092;9;18 +Holubcová Svatava;506109148;9;19 +Holubec Stanislav PhDr.PhD.;7807143036;9;20 +Holubová Daniela;5855280013;9;21 +Homola Karel;470319165;9;22 +Homolková Hanna;7951089982;9;23 +Homolová Zdeňka;535510119;9;24 +Honsová Vladimíra Mgr.;6756022086;9;25 +Honzátko Josef;490126287;9;26 +Horáček Martin;7003010553;9;27 +Horáčková Lenka;8355190558;9;28 +Ho ráčková Veronika;9554240597;9;29 +Horáčková Vlasta;465416100;9;30 +Horáková Lucie;8558150227;9;31 +Horká Kateřina;9355070417;9;32 +Horká Marie;505602255;9;33 +Horní Jana;6758281805;9;34 +Horní Jaroslav;6602171774;9;35 +Hornof Marek;7004070095;9;36 +Hornofová Adéla;0460195098;9;37 +Hornofová Barbora;0161110400;9;38 +Hornofová Helena;425412434;9;39 +Hornofová Květa;7452110468;9;40 +Hornofová Michaela;6556290961;9;41 +Horváth Eduard;5804046380;9;42 +Horzenbergerová Jana;7956180452;9;43 +Hotovcová Denisa;9658300663;9;44 +Houdek Jiří;391018059;9;45 +Hovorková Eva;435624102;9;46 +Hradecká Eva;9762120401;9;47 +Hrdinková Věra;445808119;9;48 +Hrdlička Jakub;7305150171;10;1 +Hrochová Ilona;8361133594;10;2 +Hromasová Jarmila;506211101;10;3 +Hron Michal;7711164780;10;4 +Hrouda Pavel;6307180297;10;5 +Hrouda Petr;7306110790;10;6 +Hrubeš Stanislav;7107200771;10;7 +Hrudková Eva;385508035;10;8 +Hruška František Ing.;521113128;10;9 +Hruška Jiří;8612180060;10;10 +Hrůzek Vilém;8905216144;10;11 +Hrůzková Koktová Marcela;9262070455;10;12 +Hrytsyk Kristýna;0258215430;10;13 +Hubnerová Eva;445423047;10;14 +Husák Daniel;9511300172;10;15 +Husák Jiří;9202200403;10;16 +Husáková Lucie;7062060038;10;17 +Hybelbauer Emil Mgr.;7604212990;10;18 +Hynková Martina;8153050422;10;19 +Chabová Lenka;7359140558;10;20 +Chadová Jitka Ing.;7554071635;10;21 +Chalupová Blanka;5853131559;10;22 +Chalupová Zuzana;8351230503;10;23 +Charouz Jakub;7404280202;10;24 +Chárová Jana Ing.;5756110085;10;25 +Chayka Serhij;7204259953;10;26 +Chmelařová Pavlína;8351065800;10;27 +Chmelíková Ivana;455428029;10;28 +Chodil Leo;6502192125;10;29 +Chocholoušek Jan;6203061832;10;30 +Chocholoušková Věra;6857200889;10;31 +Chomát Jiří Ing.;380314026;10;32 +Chomátová Jindřiška;525713283;10;33 +Chorvát Rastislav;7711804100;10;34 +Chramosta Cyril;5901140212;10;35 +Chramosta Jan;0308270083;10;36 +Chramostová Alena;6655220935;10;37 +Chrastinová Romana;7958275116;10;38 +Chriti Vinš Jeanette;9062110431;10;39 +Ilem Václav;480928060;10;40 +Ilem Václav;7304300047;10;41 +Ilemová Eliška;505115342;10;42 +Ilnytskyy Serhiy;7607164092;10;43 +Irimičuk Jiří;7801265780;10;44 +Irimičuková Jana;7954200892;10;45 +Jacáková Věra;7554082250;10;46 +Jacko Ladislav;6707121542;10;47 +Jacková Anna;376126027;10;48 +Jakl Jaromír;5407120521;11;1 +Jakl Jaroslav;6608230024;11;2 +Jaklová Jana;6962244542;11;3 +Jakoubková Lenka;7857050267;11;4 +Jakschová Michaela;0256190407;11;5 +Jakušová Ludmila;415817101;11;6 +Jamriková Vladislava;7360063667;11;7 +Janata Jiří Ing.;6603191529;11;8 +Janata Marek;9703180157;11;9 +Janatová Beata;0462184646;11;10 +Janatová Katarína;6756026970;11;11 +Janda David;9302200061;11;12 +Janda František Ing.;371016049;11;13 +Janda Martín;7308100426;11;14 +Janda Štěpán;9102070318;11;15 +Jandejsek Jindřich;371125052;11;16 +Jandová Libuše;415511007;11;17 +Jandová Veronika;9856220418;11;18 +Jankovská Jitka;496220054;11;19 +Janoušková Lucie Mudr.;7062214302;11;20 +Janoušková Martína;7861100456;11;21 +Jánská Martina;7758050190;11;22 +Jánská Věra;5962070587;11;23 +Janurová Barbora;8960190173;11;24 +Janyška Zbyněk Ing.;7908315239;11;25 +Janyšková Lucie;7758065513;11;26 +Jarešová Petra;8956262535;11;27 +Jaroš Jakub;8711020197;11;28 +Jaroš Jiří;8912270158;11;29 +Jarošová Jitka;6755220439;11;30 +Jarošová Lenka;8755140438;11;31 +Jarošová Zuzana;8157544241;11;32 +Jedličková Alena;365427012;11;33 +Jedličková Miluše;465917025;11;34 +Jechová Alena;346002092;11;35 +Jelen Jan;8811240207;11;36 +Jelen Oldř ich;6102251474;11;37 +Jelen Václav Ing.;5411181380;11;38 +Jelen Václav;8108030205;11;39 +Jelenová Františka;9956020426;11;40 +Jelenová Jana;5761121905;11;41 +Jelenová Martina;8352090197;11;42 +Jelenová Tereza MUDr.;8253190572;11;43 +Jelenová Vendula;0460165079;11;44 +Jelenová Veronika;7262293247;11;45 +Jelínek Tomáš;490315232;11;46 +Jelínková Eliška;386118069;11;47 +Jelínková Eva;5962050149;11;48 +Jemelková Jana;486227423;12;1 +Jenčeková Jiřina;515421036;12;2 +Jeníčková Marie;335329050;12;3 +Jeníkovská Veronika;8056210173;12;4 +Jeništa Jaroslav;7107100055;12;5 +Jeništová Magdalena;7554270427;12;6 +Jerling Jaroslav;6309151772;12;7 +Jerling Michal;9207280423;12;8 +Jerlingová Olga;6053081727;12;9 +Jeřábková Jana;8858090494;12;10 +Jetmar Patrik;7712180377;12;11 +Jetmarová Květoslava;456011109;12;12 +Jíchová Ivana Bc.;8959263698;12;13 +Jindová Eva;8461270422;12;14 +Jindra Jiří;511220290;12;15 +Jindrová Helena;8754280403;12;16 +Jindrová Jiskra;496219079;12;17 +Jindrová Johana;9362290487;12;18 +Jindrová Kateřina;7857260422;12;19 +Jindrová Kateřina;9057280408;12;20 +Jirák Martin;6908070400;12;21 +Jiráková Božena;536117166;12;22 +Jiranová Marcela;7661020037;12;23 +Jirásek Jaroslav;430616107;12;24 +Jirásková Jana;465404046;12;25 +Jirchovská Ludmila;6860180756;12;26 +Jiroutová Denisa;6360090341;12;27 +Jiroutová Petra;9951040682;12;28 +Jirsa Jan;7611120308;12;29 +Jirsová Jana;495728118;12;30 +Jiřikovský Břetislav;7204145542;12;31 +Jíša Petr Ing.;7308243668;12;32 +Jonášová Veronika Ing.;9154111010;12;33 +Jourová Eva;485507406;12;34 +Jourová Ivana Ing.;7552265325;12;35 +Jouza Pavel Ing.;8302112027;12;36 +Juricová Květoslava;445623046;12;37 +Juristová Eva;5855162500;12;38 +Jursík Jan;500114021;12;39 +Jursíková Jiřina;465620178;12;40 +Kábelová Lucie Ing.;8152223310;12;41 +Kačín Ladislav;5511131538;12;42 +Kačínová Jaroslava;5556241185;12;43 +Kadečka Jan Ing.;420426098;12;44 +Kafka František;6311191931;12;45 +Kafková Dana;6054012316;12;46 +Kafková Kristýna;8762110401;12;47 +Kafková Marie;435625017;12;48 +Kajerová Jana;7857071684;13;1 +Kakešová Renáta;6562111259;13;2 +Kalous Petr;8001030422;13;3 +Kalousek Josef;490402012;13;4 +Kalousová Andrea;0459024654;13;5 +Kalousová Eva;7952090443;13;6 +Kameník Jaroslav;400510088;13;7 +Kameníková Marie;495912016;13;8 +Kandová Marta;375718063;13;9 +Kapias Roman;7507265568;13;10 +Kapiasová Marta;476002495;13;11 +Kapoun Stanislav;8404111804;13;12 +Kapounová Radka Ing.;8252141810;13;13 +Kaptanoglu Denis;8703260016;13;14 +Karásková Petra;8857271896;13;15 +Karbanová Michaela;7951140461;13;16 +Karešová Barbora;8256060021;13;17 +Karták Milan;510730180;13;18 +Karvai Linda;0357130147;13;19 +Kasederová korbelová Jana;425813033;13;20 +Kasinová Marcela;7359030382;13;21 +Kasková Hana;405502054;13;22 +Kašíková Petra;7356055707;13;23 +Kašová Barbora;9257100743;13;24 +Kašová Zdeňka;9153210748;13;25 +Kašpárek Lubomír Ing.;480213043;13;26 +Kašparová Veronika;8962090049;13;27 +Kaufmanová Pavla;7752232895;13;28 +Kautman Rudolf;7706220500;13;29 +Kavanová Hana;475806052;13;30 +Kavková Blažena Ing.;435708086;13;31 +Kazakevích Yan;7210159990;13;32 +Kazakevich Yelísey;0210031877;13;33 +Kazdová Daniela;495831175;13;34 +Kekrtová Jarmila;415716459;13;35 +Kemr Karel;490507110;13;36 +Khasová Alena;7058050428;13;37 +Khermayer Valentýn;7104754019;13;38 +Kieslíngerová Nina RNDr.;375614067;13;39 +Kimatraiová Jiřína;496114199;13;40 +Kittler Antonín;360808036;13;41 +Kittler Radek;6904150495;13;42 +Kladenský Lukáš;7204224742;13;43 +Klatovský David;7612310112;13;44 +Klemeš Jiří;470412084;13;45 +Klemešová Iva;496016090;13;46 +Klikorka Václav;480529193;13;47 +Klíma Jaroslav;6504161928;13;48 +Klíma Petr;9010310298;14;1 +Klimek Štěpán;400912170;14;2 +Klimeš Petr;6204141449;14;3 +Klimeš Petr;9603290015;14;4 +Klimeš Radko Ing.;511212227;14;5 +Klimešová Jana Mgr.;445613081;14;6 +Klimešová Jaromíra;5562260528;14;7 +Klimešová Marie;376111030;14;8 +Klímová Hana;6656260864;14;9 +Klímová Petra;8053240448;14;10 +Klimpt Pavel;470506061;14;11 +Klimptová Jana;5453030605;14;12 +Kloc Oldřich;460702466;14;13 +Klocová Marie;436031052;14;14 +Klosová Alena;405601040;14;15 +Klouček Ondřej;8210271894;14;16 +Kloučková Karolína;8157240146;14;17 +Kloučková Vlasta;445624103;14;18 +Knejslík Jaroslav Ing.;531003338;14;19 +Knejslíková Alena;5558270113;14;20 +Knejslíková Marta;8862200413;14;21 +Kněžek Marian;8111274787;14;22 +Knoblochová Libuše;6556141603;14;23 +Kobrlová Iva;415226013;14;24 +Kocmanová Hana;6161210209;14;25 +Kočvara Martin;7006250427;14;26 +Kočvarová Jana;455403061;14;27 +Koffi Sebastien;0504224457;14;28 +Kohák Petr;460606144;14;29 +Kohlová Jana;515405020;14;30 +Kohout Kryštof;0310160290;14;31 +Kohoutová Březinová Romana B;7754301489;14;32 +Kohoutová Denisa;8957261764;14;33 +Kochová Jana Ing.;496105088;14;34 +Kokta Jan;470612076;14;35 +Koktová Helena;495726149;14;36 +Koláček Karel;7704110458;14;37 +Koláčná Jitka Mgr.;436106002;14;38 +Koláčný Jiří Ing.;391221087;14;39 +Kolarevič Voíin;520329428;14;40 +Kolb Martin;7308130423;14;41 +Kolb Viktor;500614033;14;42 +Komňacká Lilia;495520374;14;43 +Konvička Josef Ing.;8904150002;14;44 +Kopecká Eva;6555172195;14;45 +Kopecká Kateřina;9161200400;14;46 +Kopecký Jakub;9004280197;14;47 +Kopecký Lubomír;490415331;14;48 +Kopová Daniela;8257261672;15;1 +Kopová Jana;8652034380;15;2 +Kopová Zdenka;505731106;15;3 +Kopřivíková Jarmila;346204097;15;4 +Kopřivová Erika;5862236435;15;5 +Koptová Anna;326025121;15;6 +Korbel Jiří;410625082;15;7 +Korbel Ladislav;341213704;15;8 +Korbel Radek;7312150131;15;9 +Kořínek Pavel;8208115421;15;10 +Kořínková Marie;425926081;15;11 +Kosilová Jana;425929061;15;12 +Kosová Michaela Ing.;8453150255;15;13 +Kostková Jana;435918178;15;14 +Kostyo Patrik;8606744443;15;15 +Koška Jan;7404010053;15;16 +Košťáková Marie;396015429;15;17 +Kotková Barbora;8558030679;15;18 +Kotovic Jakub;9008155244;15;19 +Kotýnek Stanislav;440201053;15;20 +Kotýnková Vlasta;505408284;15;21 +Kotyza Milan;7607272310;15;22 +Kotyzová Kateři na;7753294549;15;23 +Koubek Jiří;5503040026;15;24 +Koubková Dana;6053081441;15;25 +Kouda Jan;310905080;15;26 +Kouda Miroslav;6309272332;15;27 +Kovárníková Jana;8854265233;15;28 +Kovář Martin;8408040421;15;29 +Kovářová Alena;6158251506;15;30 +Kovářová Jana Mgr.;6562080250;15;31 +Kovářová Stanislava;5757091395;15;32 +Kozáková Radka;7760170825;15;33 +Kozlová Jiřina;455130103;15;34 +Kožmínová Hana;445522017;15;35 +Krajbichová Naděžda;305829444;15;36 +Král Vítězslav;0412084354;15;37 +Král Vítězslav;500509208;15;38 +Král Vítězslav;7711150491;15;39 +Králíková Barbora;8254180165;15;40 +Králíková císařová Hana;7460150478;15;41 +Králová Alena;355603014;15;42 +Králová Dana;6555031021;15;43 +Králová Jana;7755043516;15;44 +Králová Jaroslava;496114120;15;45 +Kramosil Jaroslav Ing.;6411020363;15;46 +Kramosilová Barbora;9259200412;15;47 +Kramosilová Jitka Ing.;6453221588;15;48 +Kramule Petr;6604011073;16;1 +Kramulová Helena;455610044;16;2 +Kratochvílová Kateřina;7558052227;16;3 +Krčál Jan;9411200403;16;4 +Kreibich Jiří;5804240398;16;5 +Kreibich Jiří;8602200442;16;6 +Kreibichová Jiřina;0057130183;16;7 +Kreibichová Magdalena;5655300222;16;8 +Kreibichová Michaela;6454272539;16;9 +Kreisinger Radek;7110142446;16;10 +Kreisinger Roman;6909262459;16;11 +Krejbichová Jarmila;436225107;16;12 +Krejčík Petr;7407110172;16;13 +Krejčíková Alena;465512017;16;14 +Krkič Suada;515407407;16;15 +Kroftová Jiřina;465908097;16;16 +Kropáčová Iveta;7155183497;16;17 +Kropáčová Růžena;475526126;16;18 +Kroupa Vratislav;370306012;16;19 +Kroupová Eva;456217059;16;20 +Kroupová Naděžda;5758260442;16;21 +Krpeš Tomáš;9411243116;16;22 +Krupková Marta;465629092;16;23 +Křečková Marcela;515201131;16;24 +Křenková Věra;405625056;16;25 +Kříž Jiří;7306280190;16;26 +Kříž Michal;8301070558;16;27 +Křížová Anna;475228054;16;28 +Křížová Lucie;7555270085;16;29 +Křížová Ludmila;415301075;16;30 +Kšánová Jitka;496122023;16;31 +Kubcová Anna;456016085;16;32 +Kubelka David;6905110080;16;33 +Kubelková Blanka;7162210044;16;34 +Kubíček Tomáš;9207110429;16;35 +Kubíčková Lucie;7354300437;16;36 +Kučera Anton;350218775;16;37 +Kučera Jan Ing.;6608110773;16;38 +Kučerová Tereza;9554230169;16;39 +Kučerová Věra;365918034;16;40 +Kudlička Lukáš;7509110224;16;41 +Kuchařová Jana Mgr.;485717017;16;42 +Kuchinka Jiří;6606170395;16;43 +Kuchinková Lenka;6651170823;16;44 +Kukla Marek;0207090015;16;45 +Kukla Roman;6911050289;16;46 +Kuklíková Iva;6356060535;16;47 +Kukuljac Elvira;7854521103;16;48 +Kukuljac Esad;6608212204;17;1 +Kulhánek Josef;481014021;17;2 +Kulhánková Eliška;7856230448;17;3 +Kurajda Martin;8206694232;17;4 +Kurka Jan;8808313569;17;5 +Kurková Daniela;6562010290;17;6 +Kurucz Samuel;9907220136;17;7 +Kuruczová Iva;7761052332;17;8 +Kusák Roman;7204213148;17;9 +Kusáková Jaroslava;445318078;17;10 +Kut Citores Markéta;9651301253;17;11 +Kutil Jaroslav;6105081136;17;12 +Kutílek Jiří;0301120413;17;13 +Kutílková Marcela;8353120050;17;14 +Kutilová Zdenka;5953070574;17;15 +Kysela Aleš;8104150428;17;16 +Kysela Josef;460920126;17;17 +Kysilková Ludmila;375913958;17;18 +Kysilková Světlana;5862240923;17;19 +Lacina Petr;471129130;17;20 +Lacman Jiří;480502020;17;21 +Lakatošová Jana;505207243;17;22 +Lakatošová Olga;7153192739;17;23 +Landa Jan;8704170420;17;24 +Landa Jiří;6804040606;17;25 +Landa Svatopluk;491226120;17;26 +Landgrafová Kristýna;8056273170;17;27 +Landová Jiřina;505114243;17;28 +Langerová Miluška;275713036;17;29 +Lapačová Jiřina;496004064;17;30 +Lapka Petr;7705319908;17;31 +Lapková Olga;7956010458;17;32 +Lasák Marek;8704046043;17;33 +Latka Vít;7610040559;17;34 +Latková Petra;7659010590;17;35 +Lebeda František;470725136;17;36 +Lebedová Zdenka;425915482;17;37 +Lecová Marta;5953120041;17;38 +Ledererová Jaroslava;525113120;17;39 +Leksová Iva;6459021558;17;40 +Lelovská Martina;7057300635;17;41 +Leppová Libuše MUDr.;8454265545;17;42 +Ležáková Jana;365429074;17;43 +Ležáková Martina;7852070017;17;44 +Líbalová Marie;7855220450;17;45 +Lieberzeit Roman;6211141552;17;46 +Líkař Jan;7211131719;17;47 +Líkařová Petra Ing.;7553221918;17;48 +Linhartová Adéla;9261184394;18;1 +Linhartová Lucie;0152170007;18;2 +Linzmayer Václav;9905032522;18;3 +Liška Petr;430224004;18;4 +Lišková Eva;7760080273;18;5 +Lišková Jaroslava;435720013;18;6 +Liu Qian;8661155745;18;7 +Leiblová Dana Ing.;525220151;18;8 +Lukasová Jelena Ing.;5456221485;18;9 +Lukášová Hana;426206044;18;10 +Luptáková Antonia;8151267498;18;11 +Macoun Jan;8108130140;18;12 +Macounová Ivana;6056031883;18;13 +Mačáková Martina;6453210544;18;14 +Mach Marek;7303040041;18;15 +Macháč Patrik;9909260405;18;16 +Macháč Richard;7402141054;18;17 +Macháč Richard;9212110402;18;18 +Macháčová Gabriela;7359070224;18;19 +Machová Kateřina;7554140275;18;20 +Majstrová Lucie;8561210493;18;21 +Majtáň Petr;7506045866;18;22 +Majtáň Radim;9604256244;18;23 +Majtáňová Radka;7657115928;18;24 +Makovcová Věra;5459300396;18;25 +Malá Jana;436105081;18;26 +Malá Jitka;5558200241;18;27 +Malá Marcela;6560250939;18;28 +Malina Jaroslav Ing.;440104031;18;29 +Malína Libor;7009048442;18;30 +Malína Miroslav;7412080214;18;31 +Mallý Walter Ing.;380831015;18;32 +Malý Filip;0106170042;18;33 +Malý Josef;5704040001;18;34 +Maňas Stanislav Ing.;401126020;18;35 +Mandík Jaroslav;7112160176;18;36 +Mandíková Žaneta;8952200070;18;37 +Manič Martin;8810253199;18;38 +Mareček Antonín;370701406;18;39 +Marek Jiří;7808260460;18;40 +Mareš Jaroslav;440721052;18;41 +Marešová Jindřiška;455211005;18;42 +Marešová Libuše;495212242;18;43 +Marethová Lucie;8057025416;18;44 +Marhoulová Jitka;506022198;18;45 +Marisko Aleš;7208020171;18;46 +Marková Dita;7956021689;18;47 +Marounková Šárka;6955045559;18;48 +Maršál Jan;7611120462;19;1 +Maršálek Zdeněk;470422021;19;2 +Maršálková Ladislava;476222005;19;3 +Maršíková Simona;8156013041;19;4 +Martínek František;0007300403;19;5 +Martínek Jiří;5904180150;19;6 +Martínek Libor Ing.;7509050450;19;7 +Martínková Alena Ing. a;505111153;19;8 +Martínková Edita;7655050458;19;9 +Martínková Hana;6053100801;19;10 +Martínková Ludmila;395215015;19;11 +Martínková Tereza;9154040434;19;12 +Martínů Nikola;7105220430;19;13 +Mařík Pavel;7911250017;19;14 +Maří ková Alena;5452250727;19;15 +Masopustová Ivana;5958260660;19;16 +Máša Jiří;8712140404;19;17 +Mašata Emil;6702250346;19;18 +Mašata Martin;7709140483;19;19 +Mašatová Iveta;7160281634;19;20 +Matějčková Olga;496020148;19;21 +Matějíček Václav;470801001;19;22 +Matějková Jana;7651090106;19;23 +Matějů Petr;520422227;19;24 +Materna Stanislav;340415112;19;25 +Maternová Milena;385419076;19;26 +Matucha Jaroslav;7710100519;19;27 +Matuchová Lenka;505220183;19;28 +Maturová Jaroslava;325309100;19;29 +Matušková Marta;465222740;19;30 +Maurerová Jitka;495718188;19;31 +Maxa Jiří;440519016;19;32 +Maxová Marie;435814047;19;33 +Mazánek Ilja Ing.;6101260297;19;34 +Mazánek Ilja;8707070020;19;35 +Mazánková Ofelia Mgr.;6253042015;19;36 +Mazurková Jitka Ing.arch.;9261265002;19;37 +Medková Hedvika;5852041844;19;38 +Mejstříková Marcela;356031017;19;39 +Melichar Alois;420212005;19;40 +Melichar Daniel;9501290403;19;41 +Melichar Pavel;7305021119;19;42 +Melichar Tomáš;7012041135;19;43 +Melicharová Dana;6357012002;19;44 +Melicharová Gabriela;7362250203;19;45 +Melicharová Jarmila;465804078;19;46 +Melicharová Petra;9559010417;19;47 +Mencl Miroslav;6406181859;19;48 +Menclová Kristýna;9761250147;20;1 +Menclová Sylva;6662101545;20;2 +Menclová Štěpánka;0151200214;20;3 +Měřička Otakar;6204100518;20;4 +Měřička Pavel;8603150050;20;5 +Měřička Petr;8603150039;20;6 +Mezera Julie Kelsey Mgr.;475826955;20;7 +Miclíková Marta;515724104;20;8 +Mičulka Jan;8412175123;20;9 +Michková Miroslava;505516240;20;10 +Michková Veronika;8154151060;20;11 +Michlíková Anna;7056764319;20;12 +Mikešová Dana;465609069;20;13 +Mikhaylov Nikita;9810264288;20;14 +Mikisch Richard;9912156210;20;15 +Mikolášová Hana;8656081731;20;16 +Mikulášová Vě ra;7455310423;20;17 +Milatová Martina;6853222079;20;18 +Millerová Hana;425704070;20;19 +Mimrová Ružena;325505726;20;20 +Mišejková Veronika;7162220219;20;21 +Mizerová Jana;7654160426;20;22 +Mladenov Škorvaga Štěpánka;6662280515;20;23 +Modlík Ladislav;410616012;20;24 +Modritzerová Jaroslava;445728139;20;25 +Moldřík Ivan;460504121;20;26 +Morávek Vít Ing.;8409015758;20;27 +Motyka Karel;420905080;20;28 +Moučka Miloslav;7709080423;20;29 +Moučka Zdeněk;8910280423;20;30 +Moučková Eva;7755230450;20;31 +Moudrý Jiří;6808292018;20;32 +Moudrý Michal;7701120955;20;33 +Moudry Molloy Joanne;7157734210;20;34 +Muller Jaroslav;500326400;20;35 +Mullerová Miluše;475424136;20;36 +Murys Radislav;6101301272;20;37 +Murysová Lucie;6553050911;20;38 +Muzikářová Jaroslava;475123056;20;39 +Navrátil Dalibor;7202044960;20;40 +Navrátil Jindřich Ing.;5803132159;20;41 +Navrátil Matěj;9706230127;20;42 +Navrátilová Dana Ing.;6055130774;20;43 +Navrátilová Denisa;7362195038;20;44 +Nebřenská Zdeňka;415129003;20;45 +Nečas Václav;7408211844;20;46 +Nečasová Zdeňka RNDr.;345513089;20;47 +Nedúchal Vladimír;480603717;20;48 +Nedúchalová Bohumila;465303012;21;1 +Nechodomová Marie;435520110;21;2 +Nechutná Petra;8554240057;21;3 +Němcová Jaroslava;455303100;21;4 +Němcová Zuzana;6955205543;21;5 +Němec Roman;7601090497;21;6 +Němeček Marek;7007100375;21;7 +Němeček Václav;460516082;21;8 +Němečková Kamila;465125030;21;9 +Němečková Marie;466001129;21;10 +Němečková Michaela;7358150382;21;11 +Neprašová Věra;505725050;21;12 +Netřebská Blanka;496203179;21;13 +Neumann Jakub;8509170802;21;14 +Neumann Marek Ing.;9102272993;21;15 +Neumannová Michaela Ing.;9059080173;21;16 +Neumannová Viktoriya;9352243296;21;17 +Neuwirth Richard;6104260668;21;18 +Neuwirthová Svatava Mgr.;5656091980;21;19 +Nguyen Thi Thu Hang;6556262570;21;20 +Nikitin Petro Ing.;6008091738;21;21 +Nikitina Svitlana;6559102187;21;22 +Nikolos Dennis;9401230179;21;23 +Nikolos Petra;9358225371;21;24 +Nikolos Vasilis;6403664003;21;25 +Nikolos Víšková Hana;7156150210;21;26 +Nimeřická Irena JUDr.;536117083;21;27 +Nimeřická Michaela Mgr.;7957312099;21;28 +Nimeřický Petr;8012124461;21;29 +Nodlová Dobromila;5760090611;21;30 +Noháčová Anna;0654284466;21;31 +Noháčová Eliška;0354270026;21;32 +Noháčová Kateřina Mgr.;7459303599;21;33 +Nouzáková Anna;8954140195;21;34 +Nová Marta;465602078;21;35 +Nováček Daniel;9610121543;21;36 +Novák Jaroslav;440810008;21;37 +Novák Jiří;0312140180;21;38 +Novák Jiří Ing.;6312121090;21;39 +Novák Pavel;7307030236;21;40 +Novák Petr;6909154934;21;41 +Nováková Alena;475505074;21;42 +Nováková Bára;0456284499;21;43 +Nováková Dana RNDr.;6354131003;21;44 +Nováková Květa;475504114;21;45 +Nováková Leona;535418228;21;46 +Nováková Lucie;7060310213;21;47 +Nováková Lucie;9159040429;21;48 +Nováková Martina;6552180525;22;1 +Nováková Miluše;526220015;22;2 +Nováková Petra Ing.;7352240434;22;3 +Novotná Bohumila;5451011610;22;4 +Novotná Eva;8055210394;22;5 +Novotná Kateřina;7953280808;22;6 +Novotná Marcela;6953020327;22;7 +Novotná Miluše;455112014;22;8 +Novotná Miluška;515920007;22;9 +Novotný Jan;7312270548;22;10 +Novotný Martin;6611091388;22;11 +Novotný Martin;6903020080;22;12 +Novotný Martin;9411250442;22;13 +Novotný Milan Ing.;331210082;22;14 +Novotný Miroslav Ing.;460509135;22;15 +Novotný Pavel;491211149;22;16 +Novotný Pavel;7606050518;22;17 +Novotný Petr Ing.;8002100436;22;18 +Novotný Vladimír;6212231861;22;19 +Nový Jiří;7303060391;22;20 +Nowicki Petr;7103030319;22;21 +Nytra Vlastimil;480529219;22;22 +Oberlander Jan;8207180432;22;23 +Odlasová Denisa;7762310281;22;24 +Odlasová Krístýna;0253133122;22;25 +Opršalová Libuše;365123089;22;26 +Otčenášek Vojtěch;8203120299;22;27 +Ouředník František;471130030;22;28 +Ouředníková Alena;515603023;22;29 +Ovanesiani Jelena;8951074308;22;30 +Packan Olesja;9955550704;22;31 +Palinkaš Naděžda;8558173371;22;32 +Panýrková Hana;395514034;22;33 +Panýrková Helena Ing.;6751122037;22;34 +Panýrková Lenka;9956270423;22;35 +Papp Igor;6310764053;22;36 +Paroubek Aleš;7205190487;22;37 +Paroubek Pavel;7310040507;22;38 +Paroubek Petr;7310040496;22;39 +Paroubková Jiřina;465625148;22;40 +Pařízková Magdalena;6860030914;22;41 +Pasková Kristýna;0260250155;22;42 +Patskan Vasyl;9403231343;22;43 +Paulíček Jiří;5611300068;22;44 +Pavlasová Hana;8362021811;22;45 +Pavlíčková Libuše;465318114;22;46 +Pavlíková Jana;465212030;22;47 +Pavlů Jana;9057091769;22;48 +Pawlíková Kateřina;8454092680;23;1 +Pažitná Miluše;6262101241;23;2 +Pažitný Josef;6110241324;23;3 +Pechová Sandra;9054200408;23;4 +Pechrová Miluška;456111032;23;5 +Pekárek Pavel;390322084;23;6 +Pekárek Pavel;5708031824;23;7 +Pekárková Vlasta;415414073;23;8 +Pelcová Ludmila;486111054;23;9 +Pencová Daniela;8062080015;23;10 +Peričevič Václav;0005090151;23;11 +Peričevič Václav;7206083236;23;12 +Peričevičová Karolína;0162280008;23;13 +Peričevičová Lucie;7753300148;23;14 +Peričevičová Marie;475106038;23;15 +Pernicová Miroslava;486023438;23;16 +Perutková Jarmila;395803008;23;17 +Pešková Jarmila Mgr.;5657310010;23;18 +Petkov Damian;0204190206;23;19 +Petlachová Michaela;7357010221;23;20 +Petrák Jakub;8810140438;23;21 +Petrovská Eliška;436114002;23;22 +Pexová Věra;466104151;23;23 +Pham Van Duy;8910584023;23;24 +Pikulíková Libuše;375705434;23;25 +Piljarová Zdena;7051027489;23;26 +Pilná Marta;405712023;23;27 +Pintérová Dagmar;6253071396;23;28 +Pintíř Milan;6807300379;23;29 +Písaříková Helena;6761150341;23;30 +Pitra Elina;9859224276;23;31 +Pitra Olesya;7557143935;23;32 +Pitra Stepan;9403013290;23;33 +Pižlová Marie;496123337;23;34 +Plaček Richard;6003310720;23;35 +Plachý Matěj;8912140039;23;36 +Planetová Anna;9153290069;23;37 +Plocková Jadwiga;405619022;23;38 +Plocková Simona;7160063669;23;39 +Plzáková Ivana;436005111;23;40 +Podzimková Michaela;6361221526;23;41 +Pohan Josef;481021102;23;42 +Pohanová Jaroslava;435610089;23;43 +Pokorná Katka;9062300423;23;44 +Pokorný Bohumil;6804160990;23;45 +Pokorný Milan;6610042208;23;46 +Poláková Jaroslava;415604027;23;47 +Poláková Lucie;8560100494;23;48 +Polcarová Štěpánka MUDr.;5860136425;24;1 +Polishchuk Mariia;8759231426;24;2 +Pop Alia;8962083350;24;3 +Pop Ivan;8606084366;24;4 +Popovych Vasyl;7906303911;24;5 +Pospíchalová Hana;9260030439;24;6 +Pospíchalová Jaroslava;435113438;24;7 +Pospíšil Jiří;6708101114;24;8 +Pospíšilová Božena;7759110359;24;9 +Pouček Karel;8701100397;24;10 +Poučková Dana;6553110388;24;11 +Poustková Jiřína;485627038;24;12 +Pragerová Borovková Zdeňka;7857200912;24;13 +Prodělal Jiří;5504180770;24;14 +Procházka David;7209160057;24;15 +Procházka František;470818116;24;16 +Procházka Josef;390523036;24;17 +Procházka Marek;0401036196;24;18 +Procházka Martín;8007300444;24;19 +Procházka Ondřej;9207270413;24;20 +Procházka Stanislav;6511171469;24;21 +Procházka Vladimír;471126130;24;22 +Procházka Vladimír Ing.;7202160438;24;23 +Procházka Vojtěch;9012070419;24;24 +Procházková Dana;536008170;24;25 +Procházková Hana;475929194;24;26 +Procházková Jaroslava;476210075;24;27 +Procházková Jiřína;515425100;24;28 +Procházková Marie;6053170189;24;29 +Procházková Věra MUDr.;6453111885;24;30 +Procházková Veronika;8153010426;24;31 +Procházková Zdeňka;455906043;24;32 +Prokeš Míchal;8205130461;24;33 +Prokešová Alexandra PHDr.;525115063;24;34 +Prokop Pavel Ing.;6804101920;24;35 +Prokopová Hana;7861073671;24;36 +Prokopová Michaela;9653300074;24;37 +Prosíková Jacqueline;9355120170;24;38 +Protiva Jiří Doc. RNDr.;470923158;24;39 +Protivová Lidmila RNDr.;475915002;24;40 +Protivová Pavla;7753060194;24;41 +Příbová Darina;6054574130;24;42 +Psohlavcová Lenka;8160130176;24;43 +Psohlavec Miroslav JUDr.;5601090550;24;44 +Ptáčková Jana;475917011;24;45 +Puchernová Jana;456221075;24;46 +Pusbachová Blanka;495402267;24;47 +Pustina Jakub;8902070397;24;48 +Pustina Ota;8403310421;25;1 +Pustina Tomáš Mgr.;8005050218;25;2 +Putík František;6102061207;25;3 +Putíková Marie;355105004;25;4 +Pýchová Alena;7355260418;25;5 +Pýchová Jitka;9358282725;25;6 +Radenovič Jozef;7503774102;25;7 +Radová Eliška;9556190402;25;8 +Radová Eliška;9762170022;25;9 +Radová Marie;436120039;25;10 +Rachová Milada;335204060;25;11 +Raiman Pavel;290422087;25;12 +Raimanová Dagmar;325527099;25;13 +Rambousek Josef;7705020796;25;14 +Rambousek Petr;7412150779;25;15 +Rampas Jakub;9411230037;25;16 +Rampasová Barbora;9856160083;25;17 +Ratkiewicz Karel;6804201371;25;18 +Ratkiewiczová Romana;7055180418;25;19 +Ratkiewiczová Romana;9054151128;25;20 +Raušová Drahoslava;506207245;25;21 +Rejfířová Marcela MUDr.;535510353;25;22 +Rejfířová Sylvie Ing.;8056010149;25;23 +Rejšková Jaroslava;526120225;25;24 +Reslerová Miroslava;8961162551;25;25 +Richter Ivan;450726721;25;26 +Richterová Marcela;465127107;25;27 +Ritterová Anna;8259161900;25;28 +Roháček Ondřej;9710030176;25;29 +Roháčková Markéta;7158262793;25;30 +Rohlíková Marie;415513130;25;31 +Rottenberg Antonín;420410014;25;32 +Rottenbergová Hana;465710094;25;33 +Routner Jakub;8605040312;25;34 +Rozenbaumová Martina;7552260452;25;35 +Rozkoš Antonín;521027142;25;36 +Rozsypal František Ing.;511023118;25;37 +Rubášová Michaela;8760111591;25;38 +Rubín Michal;8206230428;25;39 +Rubín Tomáš;7706040430;25;40 +Rubínová Ivana;5653010638;25;41 +Rubínová Karolína;8552041146;25;42 +Rusnák Stanislav;6108107412;25;43 +Rusnáková Věra;495508224;25;44 +Rutrle Petr Ing.;6709150613;25;45 +Růžička Václav;6302171491;25;46 +Rybová Danuše;425526057;25;47 +Rygerová Lenka;515803110;25;48 +Rygleviczová Marta;436024003;26;1 +Ryšavá Ivana;7552010455;26;2 +Ryšavá Nikol MUDr.;9953170403;26;3 +Ryšavá Renata;6455142353;26;4 +Ryšavý Jan;7210040299;26;5 +Ryšavý Michael;0306100399;26;6 +Řeháková Irena;7455300853;26;7 +Řehoř Karel;7604180419;26;8 +Řehořová Barbara;8353303189;26;9 +Říhová Jindřiška;406201025;26;10 +Říhová Markéta;8462150147;26;11 +Sainer Vlastimil;461003154;26;12 +Sainerová Alena;495912069;26;13 +Samková Eva;495220197;26;14 +Saponar Tomáš;8008040326;26;15 +Saponarová Veronika;8154200428;26;16 +Sedláček Jaroslav;491118063;26;17 +Sedláčková Vlasta;505805215;26;18 +Sedmihradská Jarmila;385113048;26;19 +Seifertová Tereza Bc.;7753113236;26;20 +Sejk Luboš;7205270292;26;21 +Sejková Marta;455405031;26;22 +Sekrt Ondřej;8709100455;26;23 +Sekrt Zdeněk;8812310408;26;24 +Sekulová Hana;7161060302;26;25 +Setnička Miroslav;520223026;26;26 +Setnička Tomáš;8605110426;26;27 +Setničková Jitka;5455142143;26;28 +Shpontak Nataliya;8052119933;26;29 +Schod Pavel;7101062386;26;30 +Schořálek Jaroslav;330613108;26;31 +Schořálek Michal;7401270052;26;32 +Schumpeter Jan;490515340;26;33 +Schumpeterová Daniela;525731144;26;34 +Schwarz Antonín;6406120567;26;35 +Schwarzová Renáta;6555151262;26;36 +Sidej Natan;9811040305;26;37 +Sidejová Etela;0257190296;26;38 +Sidejová Hana;9861040310;26;39 +Sidejová Ludmila;7452020279;26;40 +Simion Vladimír;510802325;26;41 +Simionová Eliška;8059260429;26;42 +Simionová Lýdia;5556046672;26;43 +Simon Patrik;6905170195;26;44 +Sitta Daniel;7906010376;26;45 +Sixtová Blanka;466103013;26;46 +Skácel Ondřej;7912154459;26;47 +Skála Jiří;400314096;26;48 +Skalická Jiřina;315729066;27;1 +Skalický David;9510091888;27;2 +Skalický Evžen Ing.;280616091;27;3 +Skálová Alena;435522111;27;4 +Skálová Alena;5956182045;27;5 +Skálová Jaroslava;435127010;27;6 +Sklenář Vladimír;5409194296;27;7 +Sklenářová Olga;5854050510;27;8 +Skřivánková Zdeňka Ing.;375730043;27;9 +Skůčková Marta;386210016;27;10 +Slabá Gabriela;8552170517;27;11 +Slabá Jana;525506072;27;12 +Slabá Jiřina;5556210198;27;13 +Slabá Kateřina;8353100019;27;14 +Slabá Radka;6757100592;27;15 +Slabý David;9702070125;27;16 +Slabý Martin;9505160170;27;17 +Slabý Michal;7201170086;27;18 +Sládek Miloš Ing.;350206722;27;19 +Sládková Aneta;9959130423;27;20 +Sládková Dagmar;7457300422;27;21 +Slamková Květoslava;425314047;27;22 +Slámová Eliška;395425044;27;23 +Slanina Petr;8001132392;27;24 +Slaninová Nicol;7862202920;27;25 +Slavík Jiří;8904250124;27;26 +Slavíková Kateřina Ing.;8253215223;27;27 +Slavíková Zuzana;8956039037;27;28 +Slezáček Ladislav;490204154;27;29 +Slezáček Lukáš;8710030120;27;30 +Slyvka Ivan;8508690718;27;31 +Smejkal Bohuslav;500825029;27;32 +Smejkal Jiří;7805223547;27;33 +Smejkal Petr Ing.;7810211211;27;34 +Smejkalová Jitka;8262150435;27;35 +Smetana Karel;7302230441;27;36 +Smetana Libor;7908030427;27;37 +Smetanová Marie;456114025;27;38 +Smetanová Olena;7551299943;27;39 +Smrčina Jindřich;7610110376;27;40 +Smrčinová Stanislava;505313184;27;41 +Sobotka Petr;7406030060;27;42 +Sofíllkanych Robert;9705624511;27;43 +Sochorová Michaela;8161210420;27;44 +Soldánová Eva;9455190415;27;45 +Soldánová Vratislava;6953270016;27;46 +Sommerová Mária;5455030603;27;47 +Součková Eva;6257100256;27;48 +Soucha Michal;9112060518;28;1 +Souchová Barbora;8962210092;28;2 +Soukup Michal;8208310418;28;3 +Soukup Roman;6807131760;28;4 +Soukupová Daniela;8659133549;28;5 +Soukupová Jana Ing.;7451150278;28;6 +Soukupová Klára;0359060185;28;7 +Spěváček Roman;8104220025;28;8 +Spěváčková Věra;8054132900;28;9 +Srb Vladimír;490821215;28;10 +Srbová Zdeňka;536024188;28;11 +Stanko Nikola;9455120488;28;12 +Staňková Denisa;9552172839;28;13 +Stehlíková Veronika;8860020191;28;14 +Stehno Oldřich;410413024;28;15 +Stejskal Marek;9704280421;28;16 +Stejskal Radomír;6203301929;28;17 +Stejskal Vladimír;430328033;28;18 +Stejskalová Blanka;6354280878;28;19 +Stejskalová Eliška Ing.;6355202128;28;20 +Stillerová Eva;9058043478;28;21 +Stocklová Dagmar;7062140734;28;22 +Stocklová Svetlana e;7458299981;28;23 +Stoklasa Jan;480123061;28;24 +Stoklasová Daniela;5453052869;28;25 +Stoyka Kvita;7261049994;28;26 +Straková Barbara;7755260271;28;27 +Stránská Zdeňka;355522014;28;28 +Stránský Jiří;391005026;28;29 +Strnad David;7207180024;28;30 +Strnad Jakub;9803090440;28;31 +Strnad Jaroslav;6305011944;28;32 +Strnad Jiří;7404175999;28;33 +Strnad Matěj;8907130177;28;34 +Strnadová Dagmar;446116017;28;35 +Strnadová Dana;6258211058;28;36 +Strnadová Jana;7560031501;28;37 +Strnadová Jitka;7658212606;28;38 +Strnadová Natálie;0460142969;28;39 +Strnadová Vítězslava;435614435;28;40 +Stupková Lucie;8058200029;28;41 +Stupková Magda;8451270058;28;42 +Stupková Věnceslava;365120063;28;43 +Stýblová Jana;476203028;28;44 +Suchá Veronika;8861090348;28;45 +Suchardová Jitka;446014055;28;46 +Suchý Milan;6012096904;28;47 +Suchý Milan;8601110320;28;48 +Suchý Vladimír;7602044780;29;1 +Svačina Jiří;5909081420;29;2 +Svačina Petr;8603210044;29;3 +Svačinová Lucie;8158040418;29;4 +Svačinová Markéta;8953300532;29;5 +Svačinová Zuzana;6354202151;29;6 +Svalyavchyk Yuriy;7901183928;29;7 +Svášková Soňa Mgr.;475624086;29;8 +Svetík Pavel;8604050488;29;9 +Svoboda Lukáš;8511220443;29;10 +Svoboda Vladimír;6008061488;29;11 +Svozil David;9506230404;29;12 +Svozil Petr;7007270402;29;13 +Svozilová Hana;7051070433;29;14 +Svozilová Ivana;6654251978;29;15 +Sylla Almany Alfred;9610270120;29;16 +Szénasiová Anna;8861240168;29;17 +Szénásiová Jana Ing.;6353160583;29;18 +Szénasiová Marie;9360100167;29;19 +Šabršula Karel;6003210774;29;20 +Šabršulová Alena;6461231095;29;21 +Šabršulová Anna;9061100081;29;22 +Šáfrová Hania;9758280400;29;23 +Šámal Roman;7411070458;29;24 +Šámalová Anežka;476114424;29;25 +Šamša Jan;0404294704;29;26 +Šamšová Irena;7153180551;29;27 +Šaňková Helena;496217292;29;28 +Šebek Josef;400828108;29;29 +Šebek Roman JUDr.;7207010195;29;30 +Šebesta Jaroslav Ing.;470629074;29;31 +Šebestová Zdenka;505809020;29;32 +Šeďa Matěj;9507050047;29;33 +Šeďa Vojtěch;9803090506;29;34 +Šeďová Jaroslava;6856111328;29;35 +Šefcová Lenka;7957310427;29;36 +Šefcová Marta;505813378;29;37 +Šestáková Miroslava;465810001;29;38 +Ševčík Ladislav;491110004;29;39 +Ševč íková Anna;505726083;29;40 +Ševčíková Magdalena;7659080451;29;41 +Šikola Milan;5510310146;29;42 +Šikolová Jaroslava;5756170112;29;43 +Šilhavá Simona;7361130040;29;44 +Šíma Luděk;0111250183;29;45 +Šíma Luděk;6505271696;29;46 +Šíma Miroslav;8101250432;29;47 +Šimáková Hana;7260110990;29;48 +Šímová Helena;6860241553;30;1 +Šímová Květa;5457071367;30;2 +Šímová Květa;7659230447;30;3 +Šimr Roman;7310280516;30;4 +Šindelář Jan;8706100425;30;5 +Šindelář Tomáš;8503120417;30;6 +Šindelářová Eunika;8558514052;30;7 +Šindelářová Věra;7261142658;30;8 +Šindelářová Zuzana Ing.;6154040585;30;9 +Šíp Pavel;7406261720;30;10 +Šípkovský Martin;7408220424;30;11 +Škobisová Milena;505125107;30;12 +Škoch Petr Ing.;8502203853;30;13 +Škopek Daniel;0111270016;30;14 +Škopek Martin;9611260175;30;15 +Škopková Denisa;0161270054;30;16 +Škopková Romana;6659150344;30;17 +Škorpilová Martina;7053270774;30;18 +Škorvagová Ivana;8762140464;30;19 +Škvor Ivan;400626034;30;20 +Škvorová Eva;455122035;30;21 +Šlik Petr;530414098;30;22 +Šliková Součková Taťana;505426209;30;23 +Šlouf Daniel;7801230074;30;24 +Šlouf Richard;441214097;30;25 +Šlouf Richard;7108010239;30;26 +Šloufová Dana;485710188;30;27 +Šmíd Alexander Ing.;431213426;30;28 +Šmídová Blanka;535512111;30;29 +Šmídová Sabina;0261160405;30;30 +Šmídová Zdeňka Ing.;476014105;30;31 +Šob Michael;6010070913;30;32 +Šobová Jaroslava Ing.;6360140380;30;33 +Šolc Michal;7401102830;30;34 +Šolc Václav;0209130405;30;35 +Šolc Václav;6107011856;30;36 +Šolcová Aneta;9561220416;30;37 +Šolcová Hana;6862201445;30;38 +Šolcová Michaela;0056150402;30;39 +Šolcová Natálie;7054010348;30;40 +Šolcová Pavla;6858290043;30;41 +Šotola Radomír Ing.;510214143;30;42 +šourek Radek;7510280470;30;43 +Špalíček Jan;9511010399;30;44 +Špalíček Petr;9910140141;30;45 +Špalíčková Romana;7252130446;30;46 +Špatná Markéta;8953010330;30;47 +Špetlák Petr;471106126;30;48 +Špetláková Ivana;535316079;31;1 +Šprunková Dana;6762100950;31;2 +Šraml Jan;7209230325;31;3 +Šramlová Michaela MUDr.;6960185133;31;4 +Štampfer Jan;8010310429;31;5 +Šťastná Eva;526104279;31;6 +Šťastný Libor Ing.;461001479;31;7 +Štekerová Olga;7262030072;31;8 +Štekerová Veronika;9453160442;31;9 +Štěpán Jan Ing.;430730066;31;10 +Štěpánková Miloslava;485919129;31;11 +Štěpánová Lenka;7556220452;31;12 +Štěpánová Stanislava;455311007;31;13 +Štrup Petr;480416072;31;14 +Štrupová Eva;485702422;31;15 +Šubrtová Silvie;7756170158;31;16 +Šuhaj Petr;6510130792;31;17 +Šulc Jakub;9108190003;31;18 +Šulc Jiří;6008040247;31;19 +Šulc Václav;9701230011;31;20 +Šulc Vorlová Zuzana;8257180041;31;21 +Šulcová Pavlína;7256240167;31;22 +Švecová Jaroslava;475105142;31;23 +Švecová Jitka;7355180789;31;24 +Švéda Jan;6405250808;31;25 +Táborský Lukáš;8402240517;31;26 +Taláb Jan;7810073579;31;27 +Talábová Renáta;8361190420;31;28 +Tamáš Martin Ing.;8002068624;31;29 +Tamášová Jana Ing.;8162212520;31;30 +Tarnovská Gabriela;0459084923;31;31 +Tasheva Katya;9853295694;31;32 +Tater Michal;7303040404;31;33 +Taterová Ellen;0359290987;31;34 +Taterová Irena;7460250072;31;35 +Tedla Filip;9412050494;31;36 +Techl Dominik;0409055086;31;37 +Techlová Markéta;7058241718;31;38 +Teršová Eva;466225409;31;39 +Tesař Jakub;9504210408;31;40 +Tesařík Miroslav Ing.;341105056;31;41 +Tesaříková Květ uše MUDr.;315620122;31;42 +Tesařová Andrea;9154060399;31;43 +Tesařová Hana;6855160521;31;44 +Thielová Nelly;0557174453;31;45 +Tichá Hana;465227131;31;46 +Tichá Věra;435225133;31;47 +Tichý František;7302112741;31;48 +Tippl Pavel;5403032580;32;1 +Tipplová Eliška;9757150502;32;2 +Tipplová Michaela;6561150607;32;3 +Tířová Eliška;8354080427;32;4 +Titlbach Josef;491019200;32;5 +Titlbachová Božena;505228025;32;6 +Tólgová Jaroslava;7160242067;32;7 +Toman Jiří;8708310204;32;8 +Toman Pavel;9002130159;32;9 +Tomanová Šárka;6454131695;32;10 +Tomyshynets Halyna;7961794126;32;11 +Tomyshynets Pavlo;7609103986;32;12 +Torres bianco Jose maria;7410540709;32;13 +Tóthová Eva;7459250469;32;14 +Tranová Iveta;7558222606;32;15 +Trappl Jiří;7111544407;32;16 +Trappl Juraj;9804574186;32;17 +Trapplová Diana Ing.;7857644344;32;18 +Trendová Zuzana;8351220427;32;19 +Trnková Eliška;0356200724;32;20 +Trojková Jana;465917444;32;21 +Třísková Alice Mgr.;6860080238;32;22 +Tsikhun Yuliia;0154061336;32;23 +Tsohla Teodor;411119959;32;24 +Tsohla Tetyana;5758312065;32;25 +Tu ček Jiří;6210010136;32;26 +Tuček Jiří;9309180408;32;27 +Tučková Marie;6657160554;32;28 +Tuková Jana;446209018;32;29 +Tůma Patrik;8908180402;32;30 +Tůma Pavel;8001120435;32;31 +Tůmová Lenka;6852020769;32;32 +Tůmová Renáta;7059087629;32;33 +Turková Helena;8051160469;32;34 +Turok Mykhaylo;5701018543;32;35 +Turok Mykhaylo;8210241897;32;36 +Turok Vasyl;9508600706;32;37 +Turza David;8308152677;32;38 +Turzová Jana;7854252659;32;39 +Tvrz Lukáš;9403100223;32;40 +Tvrz Martín;6902050441;32;41 +Tvrz Matěj;9901040160;32;42 +Tvrzová Emilie;475706173;32;43 +Tvrzová Ivana;7152180420;32;44 +Uher Tomáš;7306230206;32;45 +Uhlíř Miloš;461119488;32;46 +Uhlířová Helena;445603459;32;47 +Uhlířová Jana;5452020420;32;48 +Uhlířová Václava;6254192043;33;1 +Uhrová Hana;7259190499;33;2 +Ulrich Jan;7311153003;33;3 +Ulrichová Marcela PhDr.;495926168;33;4 +Ulrichová Vlasta;476208033;33;5 +Unger Eduard;6806070612;33;6 +Unger Michal;7406120458;33;7 +UntermOller Karel;7210101052;33;8 +Urbánek Jan JUDr.;461226145;33;9 +Urbanová Anna;0561164648;33;10 +Urbanová Dana;7251200440;33;11 +Urbanová Jarmila;445604038;33;12 +Vacková Dáša;475612007;33;13 +Vacková Klára;7953280478;33;14 +Vágner Zdeněk;6507031806;33;15 +Vágnerová Veronika;9961250409;33;16 +Vajcová Antonie;395223741;33;17 +Vališová Gabriela;7352200328;33;18 +Vandírkova Tetjana;6162102023;33;19 +Vaněček Petr;6610161624;33;20 +Vaněčková Lenka;435317067;33;21 +Vaněk Lukáš;7912300583;33;22 +Vaněk Petr;8406080485;33;23 +Vaník Ladislav;490427096;33;24 +Vaníková Helena;535319343;33;25 +Vaníková Jana;8659050433;33;26 +Vaňková Ljuba PhDr.;516015053;33;27 +Vaňková Zdeňka;456009040;33;28 +Vaňous Jakub;9301280417;33;29 +Vaňousková Adéla;0051020288;33;30 +Váňová Marta;5660141069;33;31 +Varga Jan;7604281058;33;32 +Varga Štěpán;0412095079;33;33 +Vařečková Markéta;9860200086;33;34 +Váša Jiří;7606151036;33;35 +Vašíček Libor;7303250306;33;36 +Vašíčková Andrea;7254270386;33;37 +Vašíčková Vlasta;475102108;33;38 +Vašinová Jiřina;5951231044;33;39 +Vaško Ladislav;6906045718;33;40 +Vašková Jitka;7461220305;33;41 +Vašut Martin Ing.;7912045548;33;42 +Vašutová Tereza;7961215185;33;43 +Vavák Marcel;8702155165;33;44 +Vaváková Dagmar;6454232378;33;45 +Vavrous František;510807259;33;46 +Vavrous Lukáš;9111160421;33;47 +Vavrousová Václava;525528336;33;48 +Vávrová Kateřina;7654284891;34;1 +Vejlupek Tomáš;9912060488;34;2 +Vejlupková Miluše;505521223;34;3 +Vejlupková Pavla;7357290512;34;4 +Veltruská Miloslava;425520037;34;5 +Veltruský Jaroslav Ing.;391111080;34;6 +Venkrbcová Vladislava;8755120429;34;7 +Venkrbec Martin;7901230073;34;8 +Verner Dalibor;7503262701;34;9 +Veselá Eva;466224078;34;10 +Veselá Michaela;9162030185;34;11 +Veselá Veronika;7158201050;34;12 +Veselý Milan;6406091615;34;13 +Vetešníková René;8151303314;34;14 +Větrovcová Vlasta Ing.;435930018;34;15 +Vinduška Milan Ing.;7404134804;34;16 +Vinecká Eva;465318105;34;17 +Vinecký Josef;450224057;34;18 +Vinická Kateřina;8062020318;34;19 +Vinkler Pavel;8804185302;34;20 +Vinšová Dominika;9854110024;34;21 +Vláčihová Miroslava;435120062;34;22 +Vlasák Jiří;320105035;34;23 +Vlčková Radka Ing.;7354250431;34;24 +Vocásek Jindřich;6602112066;34;25 +Vodička Jiří;8409010434;34;26 +Vodička Karel;460113137;34;27 +Vodička Václav;490317189;34;28 +Vodičková Eva;535512242;34;29 +Vodičková Jana;5556262239;34;30 +Vojáček Aleš;7309300449;34;31 +Vojáčková Zdeňka;495326254;34;32 +Vojta Jiří;440215068;34;33 +Vojtíšková Libuše;425209076;34;34 +Vojtová Zdeňka;505416331;34;35 +Vokurka Matyas;0503314350;34;36 +Vokurková Bára;0151252673;34;37 +Voldánová Marta Ing.;466123077;34;38 +Voldřich František;7103310390;34;39 +Voldřichová Jana;425427099;34;40 +Voldřichová Michaela;7758170431;34;41 +Vomastková Eva;485803210;34;42 +Vonášek Karel;6603080968;34;43 +Vondra Jindřich Ing.;6707010662;34;44 +Vondrášková Lucie;9562250016;34;45 +Vondřičková Zuzana Ing.;7855080420;34;46 +Vopička Otta;400803088;34;47 +Vorlová Eva;456124092;34;48 +Vortel Michal Ing.;5403312255;35;1 +Vortelová Eva;5459051862;35;2 +Voříšek Štěpán;7712050489;35;3 +Voříšková Eva;445607021;35;4 +Voříšková Helena;465201175;35;5 +Voříšková Jana;8257300425;35;6 +Voříšková Valéria;465603196;35;7 +Vosecký Petr;7311160395;35;8 +Vostrá Dagmar;356018016;35;9 +Vostrý Josef;350315051;35;10 +Vošická Dagmar;6759131170;35;11 +Vošická Dagmar;8660210427;35;12 +Vošický Jaroslav;6109170661;35;13 +Votípka Lukáš;0205070019;35;14 +Votípková Yvona;6661051496;35;15 +Vozár Jan;530515177;35;16 +Vozár Pavel;8109160147;35;17 +Vrňák Radomil;5603270057;35;18 +Vrňáková Jaroslava;5761140275;35;19 +Vrňáková Lucie Ing.;8157220159;35;20 +Vyhnanovský Jaromír;5806116613;35;21 +Vyhnanovský Lukáš;9101130181;35;22 +Vymětal Tomáš;9301010433;35;23 +Vymětalová Kristýna MUDr.;9054260083;35;24 +Vymětalová Petra Ing.;6654011012;35;25 +Výprachtická Milada;425518035;35;26 +Výprachtický Ondřej;6907220320;35;27 +Vyrobíková Michaela;7859242237;35;28 +Vyskočil Radek;7610260185;35;29 +Wágner Milan;370818406;35;30 +Walterová Klaudia;7860186114;35;31 +Wehle Jiří;470430060;35;32 +Wertheimová Hedvika;7755070895;35;33 +Wesley Nathaniel;7903280539;35;34 +Wesley Robert;4806514053;35;35 +Wesleyová Mariana;8358053187;35;36 +Wesleyová Renata;536007037;35;37 +Widtmann Karel;401021024;35;38 +Wiesnetová Jitka;7157290063;35;39 +Winzig Antonín;7009121119;35;40 +Wolf Jiří;6711081157;35;41 +Wright Michaela;7561300043;35;42 +Wunschová Eliška;8051180456;35;43 +Yang Manli;7662293914;35;44 +Yates Hana;7755035376;35;45 +Záhorovský Pavel;460429114;35;46 +Zaiats Halyna;9758065691;35;47 +Zána Jan;5606051143;35;48 +Zánová Ladislava;5954120557;36;1 +Záruba Milan;431103077;36;2 +Zárubová Květuše;445924141;36;3 +Zástěra Ctibor Ing.;410830102;36;4 +Zástěrová Jaroslava;446119031;36;5 +Záškodová Eva;415228022;36;6 +Zavaďáková Martina;7862050306;36;7 +Zbranek Adam;8806100413;36;8 +Zedník Jan;5510041944;36;9 +Zedníková Jana;5851301731;36;10 +Zelenková Petra;8351112693;36;11 +Zemánek Jan;9501062483;36;12 +Zemanová Eva;395912079;36;13 +Zerza Jana;8851110059;36;14 +Zhernova Nadiya;7352013933;36;15 +Zifčaková Blažena PhDr.;405610040;36;16 +Zich Jiří Ing.;5404211967;36;17 +Zichová Daniela;5456232012;36;18 +Zíka Martin;7207240667;36;19 +Zíková Jana;7454230454;36;20 +Zívr Jan;9109091123;36;21 +Zívrová Helena;5458071212;36;22 +Zobač Martin;9204113798;36;23 +Zobáčová Barbora;9254300440;36;24 +Zounková Květuše;455425004;36;25 +Zuzák Viktor;500208129;36;26 +Zvárová Marie;5862051382;36;27 +Žaba Jaroslav;430127023;36;28 +Žabová Věra;475915054;36;29 +Žák Darek;0002210186;36;30 +Žáková Netopilová Adriana;0060210414;36;31 +Žižková Eva;435903010;36;32 diff --git a/Insurance/FinalReconcilliation/NOTES.md b/Insurance/FinalReconcilliation/NOTES.md new file mode 100644 index 0000000..6f88dd5 --- /dev/null +++ b/Insurance/FinalReconcilliation/NOTES.md @@ -0,0 +1,136 @@ +# FinalReconcilliation — sledování stavu registrovaných pacientů + +## Cíl + +Jednoznačně roztřídit pacienty **registrované v Medicusu** podle **skutečnosti ověřené u pojišťovny**: +kdo je k danému dni jejich registrující **praktik (odbornost 001)** dle VZP B2B. + +- praktik = **Buzalková (IČP 09305001)** → pacient **je** v zakoupeném souboru pacientů (OK) +- praktik = kdokoli jiný / žádný → **„NEBYL V ZAKOUPENÉM SOUBORU PACIENTŮ"** + +„Registrovaný v Medicusu" je jen stav v software; tohle ověřuje realitu u pojišťovny. + +## Úložiště — MongoDB + +| | | +|---|---| +| Server | `mongodb://192.168.1.76:27017` (stejný stroj jako MySQL `medevio`) | +| Databáze | `ordinace` | +| Kolekce | `registrovani_tracking` | +| Klíč | `_id` = rodné číslo (1 dokument na pacienta) | + +### Schéma dokumentu + +```json +{ + "_id": "8202...", "rc": "8202...", "prijmeni": "...", "jmeno": "...", + "pojistovna": {"kod": "111", "zkratka": "VZP"}, + "vychozi_datum": "2025-01-01", + "aktualni": { ...snímek... }, + "historie": [ { ...snímek..., "zmena": "výchozí snímek" } ], + "created_at": ISODate, "updated_at": ISODate +} +``` + +Snímek (`aktualni` i položky `historie[]`): +`k_datu, kategorie, kategorie_popis, v_zakoupenem_souboru (bool), flag, flag_duvod, +praktik_nazev, praktik_icz, praktik_icp, praktik_od, datum_zahajeni, datum_ukonceni` + +- **`praktik_nazev` / `praktik_icz` / `praktik_icp`** = KDO je registrující praktik dle VZP + (u `OK_BUZALKOVA` Buzalková, u `JINY_PRAKTIK` cizí ZZZ). +- **`praktik_od`** (= `datum_zahajeni`) = OD KDY je u tohoto praktika registrován. +- **`flag_duvod`** = čitelný důvod mimo soubor, např. `"jiný praktik: MOJE AMBULANCE A.S. + (IČZ 91777000) od 2014-01-01"`. + +### Kategorie (plné podkategorie) + +| kategorie | význam | v souboru | +|---|---|---| +| `OK_BUZALKOVA` | praktik 001 = Buzalková (IČP 09305001) | ✅ ano | +| `JINY_PRAKTIK` | praktik 001 je jiné ZZZ | 🚩 ne | +| `BEZ_PRAKTIKA_VZP` | u VZP záznam (jiná odb.), ale praktik 001 ne | 🚩 ne | +| `BEZ_ZAZNAMU_VZP` | VZP nevrátila žádný záznam (jiná pojišťovna / neplatné RČ / zaniklé pojištění) | 🚩 ne | + +## Stav k výchozímu snímku 1.1.2025 + +Populace = 1688 pacientů registrovaných v Medicusu k 1.1.2025 (= RČ v `vzp_registrace_raw` pro to datum). + +| kategorie | počet | +|---|---:| +| OK_BUZALKOVA | 1537 | +| JINY_PRAKTIK | 53 | +| BEZ_ZAZNAMU_VZP | 50 | +| BEZ_PRAKTIKA_VZP | 48 | +| **v souboru / mimo** | **1537 / 151** | + +## Skript `seed_tracking.py` + +Zdroj klasifikace = MySQL `medevio` tabulky `vzp_registrace_raw` + `vzp_registrace_lekari` +(plní je skripty z `Insurance/KdoJeLekar/`). + +``` +python seed_tracking.py # výchozí snímek k 2025-01-01 +python seed_tracking.py 2026-05-02 # aplikuje další snímek (appendne změny do historie) +``` + +Funkce `apply_snapshot(coll, mysql, k_datu)`: +- nový pacient → vloží dokument s historií `["výchozí snímek"]` +- existující pacient → při změně `kategorie` nebo `praktik_icp` appendne položku do `historie[]` + a aktualizuje `aktualni`; jinak jen `updated_at` + +→ tím se **postupně trackují změny stavu** mezi jednotlivými běhy. + +### Doplnění jmen (BEZ_ZAZNAMU_VZP) + +50 pacientů bez žádného VZP záznamu nemá jméno v MySQL `vzp_registrace_lekari`. +Jména + pojišťovnu jim doplňujeme z Medicus Firebird (tabulka `kar`) — uloženo i pole +`medicus_poj`. Pozn.: kdo má `medicus_poj=111` (VZP), ale je `BEZ_ZAZNAMU_VZP`, je reálně +podezřelý (zaniklé pojištění/úmrtí); 201/205/207/211 jsou prostě jiné pojišťovny. + +## Reconciliation workflow — statusy + +Zakoupený soubor (příloha smlouvy) = `Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv` +(OCR ze skenu; `;`-CSV, UTF-8 BOM; sloupce *Příjmení a jméno; Rodné číslo; Strana; Řádek*). +**1712 RČ.** (Opraven 1 OCR překlep RČ: Slavíková Zuzana `8956534235`→`8956039037`.) + +Každý dokument nese workflow stav: + +| pole | význam | +|---|---| +| `status` (int) | aktuální stav workflow | +| `status_popis` | název stavu | +| `status_datum` | datum platnosti stavu | +| `status_historie[]` | postup stavů (`status, status_popis, status_datum, zapsano`) | +| `ve_smlouve` (bool) | je pacient v zakoupeném souboru 1712? | +| `mimo_vzp_populaci` | true = doplněn ze smlouvy, nebyl ve VZP populaci k 1.1.2025 | + +### Stavy + +| status | popis | datum | skript | +|---|---|---|---| +| **0** | **Zakoupeno** | 31.12.2024 | `01_zakoupeno.py` | + +`01_zakoupeno.py` (idempotentní): nastaví status 0 všem 1712 ze smlouvy. +- 1678 už v Mongo → status 0 +- 34 chybělo (odhlášeni u Buzalkové před předáním) → doplněno z `kar`, `mimo_vzp_populaci=true`, + `aktualni.kategorie="ODHLASEN_PRED_PREDANIM"` + `medicus_zruseni` +- 10 v Mongo mimo smlouvu → `ve_smlouve=false` (status 0 nedostali) + +Kolekce po kroku 0: **1722 dokumentů** (1712 ve smlouvě + 10 mimo). + +### Reconciliation 1712 (k 1.1.2025) + +``` +1712 zakoupeno (status 0) + −34 registrace zrušena před 1.1.2025 (mimo_vzp_populaci) +───── +1678 registrovaní v Medicusu k 1.1.2025 + ├ 1531 OK Buzalková · 50 jiný praktik · 49 bez záznamu · 48 bez praktika +``` + +## Další kroky (workflow) + +- Definovat status 1, 2, … (např. 1 = ověřeno u VZP / registrovaný u Buzalkové). +- Aplikovat snímky z dalších běhů (29.4. a 2.5.2026 v MySQL) → naplní `historie[]`. +- Doplnit ověření **stavu pojištění** (`vzp_stav_pojisteni`). +- Finální reconciliation Excel + MCP nástroj nad kolekcí. diff --git a/Insurance/FinalReconcilliation/report_registrovani_2025-01-01.xlsx b/Insurance/FinalReconcilliation/report_registrovani_2025-01-01.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..177cc93f0dbc7316e0d19eff13d55961646d8ec7 GIT binary patch literal 91244 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

=B||@a9d5Q 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.xlsx v tomto adresáři. +""" + +import sys +from pathlib import Path +from datetime import date +from collections import defaultdict + +PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(PROJECT_ROOT)) + +import pymongo +from Knihovny.medicus_db import get_medicus_connection +from openpyxl import Workbook +from openpyxl.styles import Font, PatternFill, Alignment, Border, Side +from openpyxl.utils import get_column_letter + +# ── Konfigurace ──────────────────────────────────────────────────────────────── +MONGO_URI = "mongodb://192.168.1.76:27017" +MONGO_DB = "ordinace" +MONGO_COLL = "registrovani_tracking" + +POJ_NAZVY = { + "111": "VZP", "201": "VoZP", "205": "ČPZP", "207": "OZP", + "209": "ZPŠ", "211": "ZPMV ČR", "213": "RBP", +} + +# Barvy podle kategorie +BLUE_HEADER = "1F497D" +WHITE = "FFFFFF" +BARVA_KAT = { + "OK_BUZALKOVA": "EBF1DE", # zelená + "JINY_PRAKTIK": "FCE4D6", # červená + "BEZ_PRAKTIKA_VZP": "FFF2CC", # žlutá + "BEZ_ZAZNAMU_VZP": "DCE6F1", # modrá +} +STAV_TEXT = { + "OK_BUZALKOVA": "V souboru", + "JINY_PRAKTIK": "NEBYL v souboru", + "BEZ_PRAKTIKA_VZP": "NEBYL v souboru", + "BEZ_ZAZNAMU_VZP": "NEBYL v souboru", +} + + +def chunked(seq, n): + for i in range(0, len(seq), n): + yield seq[i:i + n] + + +def nacti_kar(conn, rcs): + """Vrátí {rc: {prijmeni, jmeno, datnar, poj}} z Medicus kar.""" + out = {} + cur = conn.cursor() + for batch in chunked(rcs, 500): # Firebird IN má limit 1500 prvků + ph = ",".join("?" for _ in batch) + cur.execute( + f"SELECT TRIM(rodcis), TRIM(prijmeni), TRIM(jmeno), datnar, TRIM(poj) " + f"FROM kar WHERE rodcis IN ({ph})", batch) + for rc, prij, jm, datnar, poj in cur.fetchall(): + out[(rc or "").strip()] = { + "prijmeni": prij, "jmeno": jm, + "datnar": datnar, "poj": (poj or "").strip(), + } + return out + + +def main(): + client = pymongo.MongoClient(MONGO_URI, serverSelectionTimeoutMS=3000) + coll = client[MONGO_DB][MONGO_COLL] + + docs = list(coll.find({})) + vychozi = docs[0].get("vychozi_datum", "snimek") if docs else "snimek" + rcs = [d["_id"] for d in docs] + + print(f"Pacientů v trackingu: {len(rcs)}") + print("Načítám kar z Medicusu ...") + conn = get_medicus_connection() + kar = nacti_kar(conn, rcs) + conn.close() + print(f"Dohledáno v kar: {len(kar)}") + + # ── Sestavení řádků ──────────────────────────────────────────────────────── + rows = [] + for d in docs: + rc = d["_id"] + a = d.get("aktualni", {}) + k = kar.get(rc, {}) + + prijmeni = k.get("prijmeni") or d.get("prijmeni") or "" + jmeno = k.get("jmeno") or d.get("jmeno") or "" + datnar = k.get("datnar") + poj_kod = k.get("poj") or (d.get("pojistovna") or {}).get("kod") or "" + kat = a.get("kategorie", "") + + rows.append({ + "prijmeni": prijmeni, + "jmeno": jmeno, + "datnar": datnar.strftime("%d.%m.%Y") if datnar else "", + "rc": rc, + "poj": f"{poj_kod} {POJ_NAZVY.get(poj_kod, '')}".strip(), + "stav": STAV_TEXT.get(kat, kat), + "kategorie": a.get("kategorie_popis", ""), + "duvod": a.get("flag_duvod", ""), + "kat_kod": kat, + }) + + # Řazení: nejdřív flagnutí (mimo soubor), pak podle příjmení + rows.sort(key=lambda r: (r["kat_kod"] == "OK_BUZALKOVA", r["prijmeni"], r["jmeno"])) + + # ── Excel ────────────────────────────────────────────────────────────────── + wb = Workbook() + + # List 1: Přehled + ws_p = wb.active + ws_p.title = "Přehled" + ws_p.column_dimensions["A"].width = 34 + ws_p.column_dimensions["B"].width = 14 + ws_p.merge_cells("A1:B1") + t = ws_p["A1"] + t.value = f"Registrovaní pacienti k {vychozi} — ověření praktika u VZP" + t.font = Font(name="Arial", bold=True, size=13, color=WHITE) + t.fill = PatternFill("solid", fgColor=BLUE_HEADER) + t.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) + ws_p.row_dimensions[1].height = 34 + ws_p["A2"] = f"Vygenerováno: {date.today().strftime('%d.%m.%Y')}" + ws_p["A2"].font = Font(name="Arial", italic=True, size=9, color="595959") + + counts = defaultdict(int) + for r in rows: + counts[r["kat_kod"]] += 1 + + ws_p.cell(row=4, column=1, value="Kategorie / stav").font = Font(bold=True) + ws_p.cell(row=4, column=2, value="Počet").font = Font(bold=True) + poradi = ["OK_BUZALKOVA", "JINY_PRAKTIK", "BEZ_PRAKTIKA_VZP", "BEZ_ZAZNAMU_VZP"] + KAT_POPIS = { + "OK_BUZALKOVA": "V souboru (praktik Buzalková)", + "JINY_PRAKTIK": "Mimo soubor — jiný praktik", + "BEZ_PRAKTIKA_VZP": "Mimo soubor — bez praktika u VZP", + "BEZ_ZAZNAMU_VZP": "Mimo soubor — bez záznamu u VZP", + } + for i, kat in enumerate(poradi): + r = 5 + i + c1 = ws_p.cell(row=r, column=1, value=KAT_POPIS[kat]) + c2 = ws_p.cell(row=r, column=2, value=counts[kat]) + fill = PatternFill("solid", fgColor=BARVA_KAT[kat]) + c1.fill = fill; c2.fill = fill + c1.font = Font(name="Arial", size=10) + ws_p.cell(row=9, column=1, value="CELKEM").font = Font(bold=True) + ws_p.cell(row=9, column=2, value=len(rows)).font = Font(bold=True) + mimo = len(rows) - counts["OK_BUZALKOVA"] + ws_p.cell(row=10, column=1, value="z toho NEBYL v zakoupeném souboru").font = Font(bold=True, color="C00000") + ws_p.cell(row=10, column=2, value=mimo).font = Font(bold=True, color="C00000") + + # List 2: Pacienti + ws = wb.create_sheet("Pacienti") + COLS = [ + ("Příjmení", 20), ("Jméno", 14), ("Datum narození", 14), + ("Rodné číslo", 14), ("Pojišťovna", 14), ("Stav", 16), + ("Kategorie", 30), ("Důvod (kdo / od kdy)", 52), + ] + for ci, (h, w) in enumerate(COLS, 1): + c = ws.cell(row=1, column=ci, value=h) + c.font = Font(name="Arial", bold=True, color=WHITE, size=10) + c.fill = PatternFill("solid", fgColor=BLUE_HEADER) + c.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) + ws.column_dimensions[get_column_letter(ci)].width = w + ws.row_dimensions[1].height = 30 + ws.freeze_panes = "A2" + + thin = Side(style="thin", color="D9D9D9") + border = Border(left=thin, right=thin, top=thin, bottom=thin) + + for ri, r in enumerate(rows, 2): + bg = BARVA_KAT.get(r["kat_kod"], "FFFFFF") + data = [r["prijmeni"], r["jmeno"], r["datnar"], r["rc"], r["poj"], + r["stav"], r["kategorie"], r["duvod"]] + for ci, val in enumerate(data, 1): + c = ws.cell(row=ri, column=ci, value=val) + c.font = Font(name="Arial", size=9) + c.fill = PatternFill("solid", fgColor=bg) + c.border = border + c.alignment = Alignment(vertical="center", wrap_text=(ci == 8)) + if ci == 6 and r["kat_kod"] != "OK_BUZALKOVA": + c.font = Font(name="Arial", size=9, bold=True, color="C00000") + + ws.auto_filter.ref = f"A1:{get_column_letter(len(COLS))}{len(rows) + 1}" + + out = Path(__file__).resolve().parent / f"report_registrovani_{vychozi}.xlsx" + wb.save(out) + print(f"\nUloženo: {out}") + print(f"Řádků: {len(rows)} | v souboru: {counts['OK_BUZALKOVA']} | mimo: {mimo}") + client.close() + + +if __name__ == "__main__": + main() diff --git a/Insurance/FinalReconcilliation/seed_tracking.py b/Insurance/FinalReconcilliation/seed_tracking.py new file mode 100644 index 0000000..87a67c6 --- /dev/null +++ b/Insurance/FinalReconcilliation/seed_tracking.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +seed_tracking.py +================ +Naplní MongoDB databázi `ordinace`, kolekci `registrovani_tracking`, výchozím +snímkem registrovaných pacientů a jejich OVĚŘENÝM stavem u VZP. + +Logika "v zakoupeném souboru pacientů": + - "Registrovaný v Medicusu" je jen stav v software. + - Skutečnost ověřujeme u pojišťovny: kdo je k danému dni registrující praktik + (odbornost 001) daného pacienta. + * praktik = Buzalková (IČP 09305001) -> v pořádku, v zakoupeném souboru + * praktik = někdo jiný / žádný -> NEBYL V ZAKOUPENÉM SOUBORU PACIENTŮ + +Kategorie (plné podkategorie): + OK_BUZALKOVA praktik 001 je Buzalková (IČP 09305001) + JINY_PRAKTIK praktik 001 je jiné ZZZ + BEZ_PRAKTIKA_VZP pacient má u VZP záznam (jiná odbornost), ale praktika 001 ne + BEZ_ZAZNAMU_VZP VZP nevrátila žádný záznam (typicky jiná pojišťovna / neplatné RČ) + +Schéma dokumentu (1 dokument na pacienta, _id = rodné číslo): + { + "_id": "8202...", "rc": "...", "prijmeni": "...", "jmeno": "...", + "pojistovna": {"kod": "111", "zkratka": "VZP"}, + "vychozi_datum": "2025-01-01", + "aktualni": { ...snímek... }, + "historie": [ { ...snímek..., "zmena": "výchozí snímek" }, ... ], + "created_at": ..., "updated_at": ... + } + +Snímek (aktualni i položka historie): + { "k_datu", "kategorie", "kategorie_popis", "v_zakoupenem_souboru" (bool), + "flag", "praktik_nazev", "praktik_icz", "praktik_icp", + "datum_zahajeni", "datum_ukonceni" } + +Spuštění: + python seed_tracking.py # seed k 2025-01-01 + python seed_tracking.py 2026-05-02 # aplikuje další snímek (appendne změny do historie) +""" + +import sys +from pathlib import Path +from datetime import datetime, date, timezone + +PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(PROJECT_ROOT)) + +import pymongo +from Knihovny.mysql_db import connect_mysql + +# ── KONFIGURACE ─────────────────────────────────────────────────────────────── +MONGO_URI = "mongodb://192.168.1.76:27017" +MONGO_DB = "ordinace" +MONGO_COLL = "registrovani_tracking" +ICP_BUZALKOVA = "09305001" + +KATEGORIE_POPIS = { + "OK_BUZALKOVA": "OK – praktik je Buzalková (IČP 09305001)", + "JINY_PRAKTIK": "Registrován u jiného praktika", + "BEZ_PRAKTIKA_VZP": "U VZP bez praktika (odb. 001)", + "BEZ_ZAZNAMU_VZP": "VZP nevrátila žádný záznam (jiná pojišťovna / neplatné RČ)", +} +FLAG_MIMO_SOUBOR = "NEBYL V ZAKOUPENÉM SOUBORU PACIENTŮ" + + +def klasifikuj(praktik_001: dict | None, ma_nejaky_zaznam: bool) -> dict: + """Vrátí snímek stavu (bez k_datu) na základě 001 záznamu z VZP.""" + if praktik_001 and praktik_001.get("ICP") == ICP_BUZALKOVA: + kat = "OK_BUZALKOVA" + elif praktik_001: + kat = "JINY_PRAKTIK" + elif ma_nejaky_zaznam: + kat = "BEZ_PRAKTIKA_VZP" + else: + kat = "BEZ_ZAZNAMU_VZP" + + v_souboru = (kat == "OK_BUZALKOVA") + nazev = (praktik_001 or {}).get("nazev_zzz") + icz = (praktik_001 or {}).get("ICZ") + od = (praktik_001 or {}).get("datum_zahajeni") + + # Čitelný důvod, proč pacient NENÍ v zakoupeném souboru (kdo + od kdy) + if kat == "JINY_PRAKTIK": + flag_duvod = f"jiný praktik: {nazev} (IČZ {icz}) od {od}" + elif kat == "BEZ_PRAKTIKA_VZP": + flag_duvod = "u VZP bez registrujícího praktika (odb. 001)" + elif kat == "BEZ_ZAZNAMU_VZP": + flag_duvod = "VZP nevrátila žádný záznam (jiná pojišťovna / neplatné RČ / zaniklé pojištění)" + else: + flag_duvod = "" + + return { + "kategorie": kat, + "kategorie_popis": KATEGORIE_POPIS[kat], + "v_zakoupenem_souboru": v_souboru, + "flag": "" if v_souboru else FLAG_MIMO_SOUBOR, + "flag_duvod": flag_duvod, + # "kdo" a "od kdy" registrujícího praktika dle VZP + "praktik_nazev": nazev, + "praktik_icz": icz, + "praktik_icp": (praktik_001 or {}).get("ICP"), + "praktik_od": od, + "datum_zahajeni": od, + "datum_ukonceni": (praktik_001 or {}).get("datum_ukonceni"), + } + + +def nacti_snimek_z_mysql(mysql, k_datu: str) -> dict: + """ + Vrátí {rc: {prijmeni, jmeno, pojistovna{}, praktik_001 | None, ma_zaznam}} + pro populaci registrovaných dotázaných k danému datu. + """ + cur = mysql.cursor() + + # Populace = všechna dotázaná RČ (raw) k tomuto datu + cur.execute("SELECT rc FROM vzp_registrace_raw WHERE k_datu = %s", (k_datu,)) + populace = [r[0] for r in cur.fetchall()] + + # Parsované záznamy lékařů k tomuto datu + cur.execute(""" + SELECT rc, prijmeni, jmeno, kod_odbornosti, ICP, ICZ, nazev_zzz, + poj_kod, poj_zkratka, datum_zahajeni, datum_ukonceni + FROM vzp_registrace_lekari + WHERE k_datu = %s + """, (k_datu,)) + + data: dict[str, dict] = {rc: {"prijmeni": None, "jmeno": None, + "pojistovna": {"kod": None, "zkratka": None}, + "praktik_001": None, "ma_zaznam": False} + for rc in populace} + + for (rc, prijmeni, jmeno, odb, icp, icz, nazev_zzz, + poj_kod, poj_zkr, dat_zah, dat_uk) in cur.fetchall(): + d = data.setdefault(rc, {"prijmeni": None, "jmeno": None, + "pojistovna": {"kod": None, "zkratka": None}, + "praktik_001": None, "ma_zaznam": False}) + d["ma_zaznam"] = True + if prijmeni and not d["prijmeni"]: + d["prijmeni"] = prijmeni + if jmeno and not d["jmeno"]: + d["jmeno"] = jmeno + # Pojišťovnu vezmi z jakéhokoli záznamu (preferuj 001 níže) + if poj_kod and not d["pojistovna"]["kod"]: + d["pojistovna"] = {"kod": poj_kod, "zkratka": poj_zkr} + if odb == "001": + d["praktik_001"] = { + "ICP": icp, "ICZ": icz, "nazev_zzz": nazev_zzz, + "poj_kod": poj_kod, "poj_zkratka": poj_zkr, + "datum_zahajeni": str(dat_zah) if dat_zah else None, + "datum_ukonceni": str(dat_uk) if dat_uk else None, + } + # Pojišťovna z 001 má přednost + if poj_kod: + d["pojistovna"] = {"kod": poj_kod, "zkratka": poj_zkr} + + return data + + +def apply_snapshot(coll, mysql, k_datu: str) -> dict: + """ + Klasifikuje populaci k danému datu a upsertne do Mongo. + Při změně kategorie/praktika oproti `aktualni` appendne do `historie`. + Vrátí statistiku. + """ + data = nacti_snimek_z_mysql(mysql, k_datu) + now = datetime.now(timezone.utc) + stats = {"novych": 0, "zmen": 0, "beze_zmeny": 0, "kategorie": {}} + + for rc, d in data.items(): + snimek = klasifikuj(d["praktik_001"], d["ma_zaznam"]) + snimek_s_datem = {"k_datu": k_datu, **snimek} + stats["kategorie"][snimek["kategorie"]] = stats["kategorie"].get(snimek["kategorie"], 0) + 1 + + existing = coll.find_one({"_id": rc}) + if existing is None: + doc = { + "_id": rc, "rc": rc, + "prijmeni": d["prijmeni"], "jmeno": d["jmeno"], + "pojistovna": d["pojistovna"], + "vychozi_datum": k_datu, + "aktualni": snimek_s_datem, + "historie": [{**snimek_s_datem, "zmena": "výchozí snímek"}], + "created_at": now, "updated_at": now, + } + coll.insert_one(doc) + stats["novych"] += 1 + else: + akt = existing.get("aktualni", {}) + zmena = (akt.get("kategorie") != snimek["kategorie"] + or akt.get("praktik_icp") != snimek["praktik_icp"]) + update = {"aktualni": snimek_s_datem, "updated_at": now} + if d["prijmeni"]: + update["prijmeni"] = d["prijmeni"] + if d["jmeno"]: + update["jmeno"] = d["jmeno"] + ops = {"$set": update} + if zmena: + popis = (f"{akt.get('kategorie')} → {snimek['kategorie']}") + ops["$push"] = {"historie": {**snimek_s_datem, "zmena": popis}} + stats["zmen"] += 1 + else: + stats["beze_zmeny"] += 1 + coll.update_one({"_id": rc}, ops) + + return stats + + +def main(): + k_datu = sys.argv[1] if len(sys.argv) > 1 else "2025-01-01" + + mysql = connect_mysql() + client = pymongo.MongoClient(MONGO_URI, serverSelectionTimeoutMS=3000) + client.admin.command("ping") + coll = client[MONGO_DB][MONGO_COLL] + + # Indexy pro běžné dotazy + coll.create_index("aktualni.kategorie") + coll.create_index("aktualni.v_zakoupenem_souboru") + coll.create_index("prijmeni") + + print(f"Aplikuji snímek k {k_datu} do {MONGO_DB}.{MONGO_COLL} ...") + stats = apply_snapshot(coll, mysql, k_datu) + + print(f"\nNových pacientů : {stats['novych']}") + print(f"Změn stavu : {stats['zmen']}") + print(f"Beze změny : {stats['beze_zmeny']}") + print("\nRozpad podle kategorií:") + for kat, n in sorted(stats["kategorie"].items(), key=lambda x: -x[1]): + print(f" {kat:18s} {n:5d} {KATEGORIE_POPIS[kat]}") + + celkem = sum(stats["kategorie"].values()) + mimo = celkem - stats["kategorie"].get("OK_BUZALKOVA", 0) + print(f"\nCelkem v populaci: {celkem}") + print(f" v zakoupeném souboru (Buzalková): {stats['kategorie'].get('OK_BUZALKOVA', 0)}") + print(f" NEBYL v zakoupeném souboru : {mimo}") + + mysql.close() + client.close() + + +if __name__ == "__main__": + main() diff --git a/mcp_insurance.py b/mcp_insurance.py new file mode 100644 index 0000000..95b1428 --- /dev/null +++ b/mcp_insurance.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +MCP server pro pojišťovny (insurance) — používá oficiální MCP SDK (FastMCP) +Spustit: python mcp_insurance.py + +Dotazy na VZP B2B portál pomocí klientského certifikátu (mTLS). +Vychází z knihovny Knihovny/vzpb2b_client.py a skriptů v Insurance/. + +Nástroje: + - registrovani_lekari(rodne_cislo, k_datu) — kdo jsou registrující lékaři + pacienta (praktik 001, gynekolog 002, stomatolog 014, ...) ke dni k_datu. + - stav_pojisteni(rodne_cislo, k_datu, prijmeni) — jestli je pacient ke dni + k_datu platně pojištěný a u které pojišťovny. +""" + +import re +import sys +import traceback +from pathlib import Path +from datetime import date +from typing import Optional + +from mcp.server.fastmcp import FastMCP + +PROJECT_ROOT = Path(__file__).resolve().parent +sys.path.insert(0, str(PROJECT_ROOT)) + +from Knihovny.vzpb2b_client import VZPB2BClient + + +# Všechny logy MUSÍ jít na stderr — stdout je rezervován pro JSON-RPC +def log(msg: str): + print(msg, file=sys.stderr, flush=True) + + +# ── Certifikát ────────────────────────────────────────────────────────────── +PFX_PATH = PROJECT_ROOT / "Insurance" / "Certificates" / "picka.pfx" +PFX_PASS = "Vlado7309208104+" + +if not PFX_PATH.exists(): + log(f"Chyba: certifikát nenalezen: {PFX_PATH}") + sys.exit(1) + +try: + vzp = VZPB2BClient("prod", str(PFX_PATH), PFX_PASS) + log("VZP B2B klient inicializován (prod)") +except Exception as e: + log(f"Chyba inicializace VZP B2B klienta: {e}") + sys.exit(1) + + +def _norm_rc(rodne_cislo: str) -> str: + """Rodné číslo bez lomítka a nečíselných znaků.""" + return re.sub(r"\D", "", rodne_cislo or "") + + +# MCP server +mcp = FastMCP("insurance") + + +@mcp.tool() +def registrovani_lekari(rodne_cislo: str, k_datu: Optional[str] = None) -> dict: + """Zjisti registrující lékaře pacienta u VZP ke dni k_datu. + + Dotáže se VZP B2B služby RegistracePojistencePZSB2B a vrátí, kdo je + registrující praktický lékař (odbornost 001), gynekolog (002), + stomatolog (014) a případně další, pokud je VZP eviduje. + + Args: + rodne_cislo: Rodné číslo pacienta (lomítko nevadí). + k_datu: Datum ve formátu YYYY-MM-DD. Pokud chybí, použije se dnešek. + + Returns: + dict s rodným číslem, datem dotazu, počtem nalezených registrací + a seznamem lékařů (každý: kód a název odbornosti, IČZ, IČP, jméno + lékaře, název ZZZ, pojišťovna, data registrace/zahájení/ukončení). + """ + try: + rc = _norm_rc(rodne_cislo) + if not rc: + return {"error": "Neplatné rodné číslo."} + + if k_datu: + k_datu = k_datu.strip() + else: + k_datu = date.today().isoformat() + + xml = vzp.registrace_lekare(rc=rc, k_datu=k_datu, odbornosti=None) + zaznamy = vzp.parse_registrace_lekare(xml) + + return { + "rodne_cislo": rc, + "k_datu": k_datu, + "pocet": len(zaznamy), + "lekari": zaznamy, + } + except Exception: + log(f"registrovani_lekari chyba: {traceback.format_exc()}") + raise + + +# Význam pole "stav" v odpovědi stavPojisteniB2B +_STAV_POPIS = { + "1": "pojištěn u uvedené pojišťovny", + "4": "cizinec (smluvní/EU pojištění) — považováno za pojištěného", +} +_STAV_POJISTEN = ("1", "4") # tyto kódy znamenají platné pojištění + + +@mcp.tool() +def stav_pojisteni(rodne_cislo: str, k_datu: Optional[str] = None, + prijmeni: Optional[str] = None) -> dict: + """Zjisti, jestli je pacient ke dni k_datu platně pojištěný a u které pojišťovny. + + Dotáže se VZP B2B služby stavPojisteniB2B. VZP centrálně eviduje pojištěnce + všech pojišťoven, takže odpověď vrátí i pojišťovnu jinou než VZP. + + Args: + rodne_cislo: Rodné číslo pacienta (lomítko nevadí). + k_datu: Datum ve formátu YYYY-MM-DD. Pokud chybí, použije se dnešek. + prijmeni: Příjmení (volitelné) — VZP umožňuje křížovou kontrolu se jménem. + + Returns: + dict s rodným číslem, datem dotazu, příznakem pojisteny (True/False), + kódem a popisem stavu, kódem zpracování požadavku a údaji o pojišťovně + (kód, název, kód pojistného vztahu). + """ + try: + rc = _norm_rc(rodne_cislo) + if not rc: + return {"error": "Neplatné rodné číslo."} + + k_datu = k_datu.strip() if k_datu else date.today().isoformat() + prijmeni = prijmeni.strip() if prijmeni else None + + xml = vzp.stav_pojisteni(rc=rc, k_datu=k_datu, prijmeni=prijmeni) + parsed = vzp.parse_stav_pojisteni(xml) + + stav = parsed.get("stav") + pojisteny = stav in _STAV_POJISTEN + + return { + "rodne_cislo": rc, + "k_datu": k_datu, + "pojisteny": pojisteny, + "stav": stav, + "stav_popis": _STAV_POPIS.get(stav, "nepojištěn u této pojišťovny / nenalezen"), + "stav_vyrizeni": parsed.get("stavVyrizeni"), + "kod_pojistovny": parsed.get("kodPojistovny"), + "nazev_pojistovny": parsed.get("nazevPojistovny"), + "pojisteni_kod": parsed.get("pojisteniKod"), + } + except Exception: + log(f"stav_pojisteni chyba: {traceback.format_exc()}") + raise + + +if __name__ == "__main__": + log("MCP Insurance server spuštěn (FastMCP)") + mcp.run()