From ab3f103ec576db33dec535c351465341008038e1 Mon Sep 17 00:00:00 2001 From: Vladimir Buzalka Date: Mon, 5 Jan 2026 07:32:27 +0100 Subject: [PATCH] ntbvb --- Davky/30 Avety.py | 65 ++++++++++++++++++++++++++ Davky/40 Vvety.py | 113 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 Davky/30 Avety.py create mode 100644 Davky/40 Vvety.py diff --git a/Davky/30 Avety.py b/Davky/30 Avety.py new file mode 100644 index 0000000..bb85542 --- /dev/null +++ b/Davky/30 Avety.py @@ -0,0 +1,65 @@ +import mysql.connector + + +def parse_a_vety_bulk(): + db_config = { + 'host': '192.168.1.76', + 'port': 3307, + 'user': 'root', + 'password': 'Vlado9674+', + 'database': 'ordinace' + } + + conn = mysql.connector.connect(**db_config) + cursor = conn.cursor(dictionary=True) + + # 1. Načtení všech 'A' vět z archivu + print("Načítám věty typu A z databáze...") + cursor.execute("SELECT id_davky, obsah_radku FROM vety WHERE typ_vety = 'A'") + raw_records = cursor.fetchall() + + if not raw_records: + print("Nenalezeny žádné věty typu A ke zpracování.") + return + + # 2. Příprava seznamu dat pro hromadný insert + data_to_insert = [] + + for row in raw_records: + s = row['obsah_radku'] + + # Extrakce polí podle tvé specifikace (pozice + délka) + # Slicing v Pythonu: s[start : start + delka] + tuple_data = ( + row['id_davky'], # id_davky + s[13:16].strip(), # HCPO (Pojišťovna) + s[17:25].strip(), # HICO (IČP) + s[31:34].strip(), # HODB (Odbornost) + s[1:8].strip(), # HCID (Číslo dokladu) + s[34:44].strip(), # HROD (Číslo pojištěnce / RČ) + s[44:49].strip() # HZDG (Diagnóza) + ) + data_to_insert.append(tuple_data) + + # 3. Hromadné vložení (Insert Many) + sql = """ + INSERT INTO doklady + (id_davky, pojistovna, icp, odbornost, cislo_poradove, rodne_cislo, diagnoza) + VALUES (%s, %s, %s, %s, %s, %s, %s) + """ + + try: + print(f"Vkládám {len(data_to_insert)} záznamů do tabulky doklady...") + cursor.executemany(sql, data_to_insert) + conn.commit() + print("Hromadný import dokladů byl úspěšně dokončen.") + except mysql.connector.Error as err: + print(f"Chyba při hromadném vkládání: {err}") + conn.rollback() + finally: + cursor.close() + conn.close() + + +if __name__ == "__main__": + parse_a_vety_bulk() \ No newline at end of file diff --git a/Davky/40 Vvety.py b/Davky/40 Vvety.py new file mode 100644 index 0000000..1dbfa45 --- /dev/null +++ b/Davky/40 Vvety.py @@ -0,0 +1,113 @@ +import mysql.connector +import sys + +# --- KONFIGURACE --- +db_config = { + 'host': '192.168.1.76', + 'port': 3307, + 'user': 'root', + 'password': 'Vlado9674+', + 'database': 'ordinace' +} + + +def transform_archive_to_results(): + # Vynucený výpis hned na začátku + print(">>> Startuji proces transformace...", flush=True) + + try: + print("Navazuji spojení s MySQL serverem (port 3307)...", flush=True) + conn = mysql.connector.connect(**db_config) + cursor = conn.cursor(dictionary=True) + print("Spojení navázáno.", flush=True) + + # 1. KROK: VYMAZÁNÍ CÍLOVÝCH TABULEK + print("Mažu stará data z tabulek: vykony, leciva, doklady...", flush=True) + # Mažeme v pořadí od dětí k rodičům kvůli integritě + cursor.execute("DELETE FROM vykony") + cursor.execute("DELETE FROM leciva") + cursor.execute("DELETE FROM doklady") + conn.commit() + print("Tabulky jsou prázdné.", flush=True) + + # 2. KROK: PARSOVÁNÍ DOKLADŮ (Věty A) + print("Načítám věty typu A z archivu (vety)...", flush=True) + cursor.execute("SELECT id_vety, id_davky, obsah_radku FROM vety WHERE typ_vety = 'A'") + a_vety_raw = cursor.fetchall() + + mapping_veta_to_doklad = {} + insert_a_sql = """ + INSERT INTO doklady (id_davky, pojistovna, icp, odbornost, cislo_poradove, rodne_cislo, diagnoza) + VALUES (%s, %s, %s, %s, %s, %s, %s) + """ + + for row in a_vety_raw: + s = row['obsah_radku'] + # Extrakce dat dle specifikace + vals = ( + row['id_davky'], + s[13:16].strip(), # HCPO - Pojišťovna + s[17:25].strip(), # HICO - IČP + s[31:34].strip(), # HODB - Odbornost + s[1:8].strip(), # HCID - Číslo dokladu + s[34:44].strip(), # HROD - Číslo pojištěnce (RČ) + s[44:49].strip() # HZDG - Diagnóza + ) + cursor.execute(insert_a_sql, vals) + mapping_veta_to_doklad[row['id_vety']] = cursor.lastrowid + + conn.commit() + print(f"Úspěšně zpracováno {len(a_vety_raw)} dokladů.", flush=True) + + # 3. KROK: PARSOVÁNÍ VÝKONŮ (Věty V) + print("Provazuji a vkládám výkony (V)...", flush=True) + cursor.execute("SELECT id_dokladu_vazba, obsah_radku FROM vety WHERE typ_vety = 'V'") + v_vety_raw = cursor.fetchall() + + v_bulk_data = [] + for row in v_vety_raw: + v = row['obsah_radku'] + vazba_a = row['id_dokladu_vazba'] + + if vazba_a in mapping_veta_to_doklad: + d = v[1:9] # VDAT (Datum DDMMYYYY) + datum_sql = f"{d[4:8]}-{d[2:4]}-{d[0:2]}" + + # Body VBOD (pozice 23, délka 7) + body_val = v[23:30].strip() + body = int(body_val) if body_val.isdigit() else 0 + + v_bulk_data.append(( + mapping_veta_to_doklad[vazba_a], # id_dokladu (nový PK) + datum_sql, # datum_vykonu + v[9:14].strip(), # VKOD - Kód výkonu + int(v[14:15]) if v[14:15].isdigit() else 1, # VPOC - Počet + v[15:18].strip(), # VODB - Odbornost + v[18:23].strip(), # VDIA - Diagnóza + body # body + )) + + if v_bulk_data: + insert_v_sql = """ + INSERT INTO vykony (id_dokladu, datum_vykonu, kod_vykonu, pocet, odbornost, diagnoza, body) + VALUES (%s, %s, %s, %s, %s, %s, %s) + """ + cursor.executemany(insert_v_sql, v_bulk_data) + conn.commit() + print(f"Hromadně vloženo {len(v_bulk_data)} výkonů.", flush=True) + + print("-" * 30, flush=True) + print("Transformace dokončena.", flush=True) + + except mysql.connector.Error as err: + print(f"Chyba databáze: {err}", flush=True) + except Exception as e: + print(f"Neočekávaná chyba: {e}", flush=True) + finally: + if 'conn' in locals() and conn.is_connected(): + cursor.close() + conn.close() + + +if __name__ == "__main__": + transform_archive_to_results() \ No newline at end of file