ntbvb
This commit is contained in:
65
Davky/30 Avety.py
Normal file
65
Davky/30 Avety.py
Normal file
@@ -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()
|
||||||
113
Davky/40 Vvety.py
Normal file
113
Davky/40 Vvety.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user