Files
projects/Davky/10 Import textovy davek.py
michaela.buzalkova d98c85ec01 sestra
2026-01-04 18:44:26 +01:00

111 lines
4.3 KiB
Python

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