import mysql.connector import re # --- KONFIGURACE PŘIPOJENÍ --- db_config = { 'host': '127.0.0.1', 'port': 3307, 'user': 'root', 'password': 'Vlado9674+', 'database': 'ordinace' # Název vaší databáze } FILE_PATH = r'm:\Medicus\DavkyExport\09305000\111\2025\11\42\KDAVKA.111' # Název souboru s daty def import_kvd_data(): try: conn = mysql.connector.connect(**db_config) cursor = conn.cursor() print(f"Připojeno k databázi '{db_config['database']}' na portu {db_config['port']}.") current_davka_id = None current_doklad_id = None with open(FILE_PATH, 'r', encoding='utf-8') as f: for line in f: line = line.strip('\n') # Neodstraňujeme mezery na začátku, jsou důležité pro pozice if not line.strip(): continue # --- HLAVIČKA DÁVKY (DP) --- if line.startswith('DP'): identifikator = line[0:20].strip() obdobi = line[20:26].strip() cursor.execute( "INSERT INTO davky (identifikator, obdobi) VALUES (%s, %s)", (identifikator, obdobi) ) current_davka_id = cursor.lastrowid print(f"Importuji dávku: {identifikator} ({obdobi})") # --- ZÁZNAM PACIENTA / DOKLAD (A) --- elif line.startswith('A'): # Příklad: A 206900 1111109305001 0017607272310I800 cislo_dokladu = line[4:10].strip() # Extrakce rodného čísla pomocí regulárního výrazu (hledáme 9-11 číslic v řadě) rc_match = re.search(r'\d{9,11}', line) rodne_cislo = rc_match.group(0) if rc_match else "Nenalezeno" # Diagnóza - obvykle 3-4 znaky za rodným číslem diag_part = line[45:50].strip() cursor.execute( "INSERT INTO doklady (id_davky, cislo_poradove, rodne_cislo, diagnoza) VALUES (%s, %s, %s, %s)", (current_davka_id, cislo_dokladu, rodne_cislo, diag_part) ) current_doklad_id = cursor.lastrowid # --- VÝKON (V) --- elif line.startswith('V'): # Příklad: V14032025010221 Z000 733 datum_raw = line[1:9] # DDMMYYYY datum_db = f"{datum_raw[4:8]}-{datum_raw[2:4]}-{datum_raw[0:2]}" # Kód výkonu (5-7 znaků) kod_vykonu = line[9:16].strip() # Body (bereme poslední souvislé číslo na řádku) body_match = re.findall(r'\d+', line[16:]) body = int(body_match[-1]) if body_match else 0 cursor.execute( "INSERT INTO vykony (id_dokladu, datum_vykonu, kod_vykonu, body) VALUES (%s, %s, %s, %s)", (current_doklad_id, datum_db, kod_vykonu, body) ) # --- LÉČIVA / LÉKY (L) --- elif line.startswith('L'): # Příklad: L270220251 0215956 1.000 902.50 datum_raw = line[1:9] datum_db = f"{datum_raw[4:8]}-{datum_raw[2:4]}-{datum_raw[0:2]}" # Kód léku a cena parts = line[9:].split() kod_leku = parts[0] # Cena je obvykle poslední prvek cena = float(parts[-1].replace(',', '.')) cursor.execute( "INSERT INTO leciva (id_dokladu, datum_vydani, kod_leciva, cena) VALUES (%s, %s, %s, %s)", (current_doklad_id, datum_db, kod_leku, cena) ) conn.commit() print("-" * 30) print("Import úspěšně dokončen.") except mysql.connector.Error as err: print(f"Chyba databáze: {err}") except Exception as e: print(f"Neočekávaná chyba: {e}") finally: if 'conn' in locals() and conn.is_connected(): cursor.close() conn.close() if __name__ == "__main__": import_kvd_data()