diff --git a/Davky/10 Import textovy davek.py b/Davky/10 Import textovy davek.py new file mode 100644 index 0000000..ca46e73 --- /dev/null +++ b/Davky/10 Import textovy davek.py @@ -0,0 +1,111 @@ +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() \ No newline at end of file