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()