From 10eba225e78ebe8cdb655417f9443f30aeef97cf Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Tue, 5 May 2026 12:19:51 +0200 Subject: [PATCH] z230 --- .../Working/create_accountability_report.py | 456 +++++++++--------- IWRS/Drugs/Working/create_shipment_report.py | 264 +++++----- IWRS/Drugs/Working/create_studie_report.py | 393 +++++++++++++++ .../2026-05-05 42847922MDD3003 report.xlsx | Bin 0 -> 115985 bytes .../2026-05-05 77242113UCO3001 report.xlsx | Bin 0 -> 26920 bytes 5 files changed, 772 insertions(+), 341 deletions(-) create mode 100644 IWRS/Drugs/Working/create_studie_report.py create mode 100644 IWRS/Drugs/Working/output/2026-05-05 42847922MDD3003 report.xlsx create mode 100644 IWRS/Drugs/Working/output/2026-05-05 77242113UCO3001 report.xlsx diff --git a/IWRS/Drugs/Working/create_accountability_report.py b/IWRS/Drugs/Working/create_accountability_report.py index 6727f2c..5bb5196 100644 --- a/IWRS/Drugs/Working/create_accountability_report.py +++ b/IWRS/Drugs/Working/create_accountability_report.py @@ -1,3 +1,6 @@ +import sys +import os +import mysql.connector import pandas as pd from datetime import date from pathlib import Path @@ -5,51 +8,15 @@ from openpyxl import load_workbook from openpyxl.styles import Font, PatternFill, Alignment, Border, Side from openpyxl.utils import get_column_letter -STUDY = "42847922MDD3003" -#STUDY = "77242113UCO3001" +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) +import db_config -INVENTORY_DIR = Path(f"xls_reports_{STUDY}") -DESTRUCTION_DIR = Path(f"xls_ip_destruction_{STUDY}") -SHIPMENTS_FILE = Path(f"xls_shipments_{STUDY}/shipments_report_{STUDY}.xlsx") -DETAILS_DIR = Path(f"xls_shipment_details_{STUDY}") -OUTPUT_DIR = Path("output") -OUTPUT_FILE = OUTPUT_DIR / f"{date.today().strftime('%Y-%m-%d')} {STUDY} CZ IWRS overview.xlsx" +STUDY = "42847922MDD3003" +# STUDY = "77242113UCO3001" -SHIPMENT_DROP_COLS = { - "Location", "Shipped Date", "Delivered Date [UTC]", - "Delivery Recipient", "Delivery Details", "Cancelled Date", - "Tracking #", "Total Medication IDs", - "Shipping Category", "Study", "Destination Location", "Destination Site", - "Medication type", "Container ID", "Quantity of Medication IDs", - "Packaged Lot description", -} - -# ── Shared constants ────────────────────────────────────────────────────────── - -COLUMN_RENAMES = { - "Site": "Site", - "Medication ID": "Med ID", - "Packaged Lot number": "Lot No.", - "Original Expiration Date when Packaged Lot was Added": "Orig Exp Date", - "Expiration date": "Exp Date", - "Received Date": "Rcv Date", - "Shipment Receipt User": "Rcpt User", - "Subject Identifier": "Subject ID", - "Quantity Assigned": "Qty Asgn", - "IRT Transaction": "IRT Tx", - "Date Assigned": "Date Asgn", - "Assignment User": "Asgn User", - "Dispensation Status": "Disp Status", - "Dispensing Date": "Disp Date", - "Dispensing date": "Disp Date", - "Quantity Dispensed": "Qty Disp", - "Dispensing User": "Disp User", - "Quantity Returned": "Qty Ret", - "Date Returned": "Date Ret", - "Return User": "Ret User", - "DestroyedOn": "Destroyed", - "Basket number": "Basket No.", -} +BASE_DIR = Path(os.path.dirname(os.path.abspath(__file__))) +OUTPUT_DIR = BASE_DIR / "output" +OUTPUT_FILE = OUTPUT_DIR / f"{date.today().strftime('%Y-%m-%d')} {STUDY} CZ IWRS overview.xlsx" DATE_COLUMNS = { "Orig Exp Date", "Exp Date", "Rcv Date", @@ -81,44 +48,197 @@ COLUMN_WIDTHS = { "Max Visit Date": 16, } -# ── Helpers ─────────────────────────────────────────────────────────────────── - -def read_inventory(path): - df = pd.read_excel(path, header=None) - # Support both "Medication ID" (MDD3003) and "Medication" (UCO3001) - mask = df[0].isin(["Medication ID", "Medication"]) - meta = {} - for i in range(len(df)): - val = str(df.iloc[i, 0]) if pd.notna(df.iloc[i, 0]) else "" - if val.startswith("Site:"): - meta["site"] = val.replace("Site:", "").strip() - if not mask.any(): - print(f" {path.name}: no data (skipping)") - return None, meta - header_row = df[mask].index[0] - data = pd.read_excel(path, header=header_row) - data = data.rename(columns={"Medication": "Medication ID"}) - return data, meta +# shipments sheet: kolík kde začínají detail sloupce (1-based, pro format_shipment_sheet) +N_SHIP_COLS = 9 -def read_destruction_lookup(): - lookup = {} - for path in DESTRUCTION_DIR.glob("*.xlsx"): - df = pd.read_excel(path, header=None) - basket_id = None - destroyed_on = None - for i in range(15): - val = str(df.iloc[i, 0]) if pd.notna(df.iloc[i, 0]) else "" - if val.startswith("Basket ID:"): - basket_id = val.replace("Basket ID:", "").strip() - if val.startswith("Drug Destruction Created Date:"): - destroyed_on = val.replace("Drug Destruction Created Date:", "").strip() - header_row = df[df[0] == "Medication ID Description"].index[0] - data = pd.read_excel(path, header=header_row) - for med_id in data["Medication ID"].dropna(): - lookup[int(med_id)] = (basket_id, destroyed_on) - return lookup +# ── DB ──────────────────────────────────────────────────────────────────────── +def get_conn(): + return mysql.connector.connect( + host=db_config.DB_HOST, port=db_config.DB_PORT, + user=db_config.DB_USER, password=db_config.DB_PASSWORD, + database=db_config.DB_NAME, + ) + + +def get_latest_import_id(cursor, study): + cursor.execute( + "SELECT MAX(import_id) AS mid FROM iwrs_import WHERE study=%s AND report_type='drugs'", + (study,), + ) + row = cursor.fetchone() + mid = row["mid"] + if mid is None: + raise RuntimeError(f"Žádná data v MySQL pro studii {study}") + return mid + + +# ── Načítání dat z MySQL ────────────────────────────────────────────────────── + +def load_inventory(cursor, study, import_id): + """ + Vrátí DataFrame s inventory + destruction join. + Sloupce jsou rovnou přejmenované pro downstream funkce. + """ + sql = """ + SELECT + i.site AS Site, + i.medication_id AS `Med ID`, + i.packaged_lot_no AS `Lot No.`, + i.original_expiration_date AS `Orig Exp Date`, + i.expiration_date AS `Exp Date`, + i.received_date AS `Rcv Date`, + i.receipt_user AS `Rcpt User`, + i.subject_identifier AS `Subject ID`, + i.quantity_assigned AS `Qty Asgn`, + i.irt_transaction AS `IRT Tx`, + i.date_assigned AS `Date Asgn`, + i.assignment_user AS `Asgn User`, + i.dispensation_status AS `Disp Status`, + i.dispensing_date AS `Disp Date`, + i.quantity_dispensed AS `Qty Disp`, + i.dispensing_user AS `Disp User`, + i.quantity_returned AS `Qty Ret`, + i.date_returned AS `Date Ret`, + i.return_user AS `Ret User`, + d.destruction_date AS Destroyed, + d.basket_id AS `Basket No.` + FROM iwrs_inventory i + LEFT JOIN ( + SELECT medication_id, + ANY_VALUE(basket_id) AS basket_id, + ANY_VALUE(destruction_date) AS destruction_date + FROM iwrs_destruction + WHERE study = %s + GROUP BY medication_id + ) d ON d.medication_id = i.medication_id + WHERE i.import_id = %s + AND i.study = %s + ORDER BY i.site, i.received_date, i.medication_id + """ + cursor.execute(sql, (study, import_id, study)) + rows = cursor.fetchall() + df = pd.DataFrame(rows) + for col in DATE_COLUMNS: + if col in df.columns: + df[col] = pd.to_datetime(df[col], errors="coerce") + print(f" Inventory: {len(df)} kitu") + return df + + +def load_shipments(cursor, study, import_id): + """ + Vrátí DataFrame se spojenými shipments + items. + """ + sql = """ + SELECT + s.shipment_id AS `Shipment ID`, + s.status AS `IRT Shipment Status`, + s.type AS Type, + s.ship_from AS `Shipment From`, + s.ship_to_site AS `Ship To:`, + s.request_date AS `Request Date`, + s.received_date AS `Received Date`, + s.received_by AS `Received by`, + s.expected_arrival AS `Expected Arrival`, + i.investigator AS Investigator, + i.medication_description AS `Medication Description`, + i.medication_id AS `Medication ID`, + i.packaged_lot_no AS `Packaged Lot number`, + i.expiration_date AS `Expiration Date`, + i.item_status AS Status + FROM iwrs_shipments s + JOIN iwrs_shipment_items i + ON i.study = s.study + AND i.shipment_id = s.shipment_id + AND i.import_id = %s + WHERE s.import_id = %s + AND s.study = %s + ORDER BY s.ship_to_site, s.shipment_id, i.medication_id + """ + cursor.execute(sql, (import_id, import_id, study)) + rows = cursor.fetchall() + df = pd.DataFrame(rows) + for col in ("Request Date", "Received Date", "Expiration Date", "Expected Arrival"): + if col in df.columns: + df[col] = pd.to_datetime(df[col], errors="coerce") + print(f" Shipments: {df['Shipment ID'].nunique() if len(df) else 0} zásilek, {len(df)} kitu") + return df + + +# ── Odvozené sheety ─────────────────────────────────────────────────────────── + +def build_site_summary(shipments_df): + STATUS_COLS = ["Available", "Assigned", "Dispensed", "Returned by Subject"] + pivot = shipments_df.groupby("Ship To:")["Status"].value_counts().unstack(fill_value=0) + for s in STATUS_COLS: + if s not in pivot.columns: + pivot[s] = 0 + pivot = ( + pivot[STATUS_COLS] + .reset_index() + .rename(columns={"Ship To:": "Site", "Returned by Subject": "Returned"}) + .sort_values("Site") + .reset_index(drop=True) + ) + pivot["Total"] = pivot[["Available", "Assigned", "Dispensed", "Returned"]].sum(axis=1) + print(f" Site Summary: {len(pivot)} center") + return pivot + + +def build_expired(df): + today = date.today() + mask = ( + df["Basket No."].isna() & + df["Subject ID"].isna() & + (df["Exp Date"] < pd.Timestamp(today)) + ) + filtered = df[mask].copy().reset_index(drop=True) + sheet_name = f"Expired as of {today.strftime('%d-%b-%Y')}" + print(f" Expired: {len(filtered)}") + return filtered, sheet_name + + +def build_assigned_not_dispensed(df): + mask = df["Subject ID"].notna() & df["Disp Date"].isna() + filtered = df[mask].copy().reset_index(drop=True) + print(f" Assigned not dispensed: {len(filtered)}") + return filtered + + +def build_not_returned(df): + no_ret = df[ + df["Date Ret"].isna() & + df["Subject ID"].notna() & + (df["Disp Status"].fillna("").str.upper() != "NOT DISPENSED") + ].copy() + max_asgn = df.groupby("Subject ID")["Date Asgn"].max().rename("Max Visit Date") + no_ret = no_ret.join(max_asgn, on="Subject ID") + filtered = no_ret[no_ret["Date Asgn"] < no_ret["Max Visit Date"]].copy() + filtered = filtered.drop(columns=["Qty Ret", "Date Ret", "Ret User", "Destroyed", "Basket No."]) + filtered = filtered.reset_index(drop=True) + print(f" Not returned: {len(filtered)}") + return filtered + + +def build_kits_for_destruction(df): + mask = ( + df["Basket No."].isna() & + (df["Date Ret"].notna() | (df["Disp Status"].fillna("").str.upper() == "NOT DISPENSED")) + ) + filtered = ( + df[mask] + .copy() + .sort_values(["Site", "Date Ret"], ascending=[True, True]) + .drop(columns=["Destroyed", "Basket No."]) + .reset_index(drop=True) + ) + print(f" Kits for destruction: {len(filtered)}") + return filtered + + +# ── Formátování ─────────────────────────────────────────────────────────────── def format_sheet(ws, header_color, highlight_col=None, highlight_color=None): thin = Side(style="thin", color="000000") @@ -155,62 +275,11 @@ def format_sheet(ws, header_color, highlight_col=None, highlight_color=None): ws.freeze_panes = "A2" -# ── Shipment helpers ───────────────────────────────────────────────────────── - -def build_shipments(): - sh = pd.read_excel(SHIPMENTS_FILE, sheet_name=0, header=5) - sh.columns = sh.columns.str.strip() - sh = sh.dropna(how="all") - sh["Shipment ID"] = sh["Shipment ID"].astype(str).str.strip() - sh = sh.drop(columns=[c for c in SHIPMENT_DROP_COLS if c in sh.columns]) - shipment_cols = list(sh.columns) - - all_rows = [] - for _, s_row in sh.iterrows(): - sid = s_row["Shipment ID"] - path = DETAILS_DIR / f"shipment_details_{sid}.xlsx" - if not path.exists(): - continue - det = pd.read_excel(path, sheet_name=0, header=5) - det.columns = det.columns.str.strip() - det = det.dropna(how="all") - det["Shipment"] = det["Shipment"].astype(str).str.strip() - extra_cols = [c for c in det.columns if c not in shipment_cols and c != "Shipment" and c not in SHIPMENT_DROP_COLS] - for _, d_row in det.iterrows(): - all_rows.append({**s_row.to_dict(), **{c: d_row[c] for c in extra_cols}}) - - result = pd.DataFrame(all_rows) - all_cols = shipment_cols + [c for c in extra_cols if c in result.columns] - result = result[all_cols] - - for col in ["Request Date", "Received Date", "Expiration Date"]: - if col in result.columns: - result[col] = pd.to_datetime(result[col], errors="coerce") - - print(f" Shipments: {result['Shipment ID'].nunique()} shipments, {len(result)} kitu") - return result - - -def build_site_summary(result): - STATUS_COLS = ["Available", "Assigned", "Dispensed", "Returned by Subject"] - pivot = result.groupby("Ship To:")["Status"].value_counts().unstack(fill_value=0) - for s in STATUS_COLS: - if s not in pivot.columns: - pivot[s] = 0 - pivot = pivot[STATUS_COLS].reset_index().rename(columns={ - "Ship To:": "Site", "Returned by Subject": "Returned" - }) - pivot = pivot.sort_values("Site").reset_index(drop=True) - pivot["Total"] = pivot[["Available", "Assigned", "Dispensed", "Returned"]].sum(axis=1) - print(f" Site Summary: {len(pivot)} center") - return pivot - - def format_shipment_sheet(ws, header_color_ship, header_color_detail, n_ship_cols): - thin = Side(style="thin", color="000000") - border = Border(left=thin, right=thin, top=thin, bottom=thin) - hfont = Font(bold=True, color="FFFFFF", name="Arial", size=10) - dfont = Font(name="Arial", size=10) + thin = Side(style="thin", color="000000") + border = Border(left=thin, right=thin, top=thin, bottom=thin) + hfont = Font(bold=True, color="FFFFFF", name="Arial", size=10) + dfont = Font(name="Arial", size=10) fill_ship = PatternFill("solid", start_color=header_color_ship) fill_detail = PatternFill("solid", start_color=header_color_detail) @@ -219,7 +288,9 @@ def format_shipment_sheet(ws, header_color_ship, header_color_detail, n_ship_col cell.font = hfont cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) cell.border = border - ws.column_dimensions[get_column_letter(cell.column)].width = min(len(str(cell.value or "")) + 4, 35) + ws.column_dimensions[get_column_letter(cell.column)].width = min( + len(str(cell.value or "")) + 4, 35 + ) ws.row_dimensions[1].height = 30 for row in ws.iter_rows(min_row=2, max_row=ws.max_row): @@ -234,101 +305,29 @@ def format_shipment_sheet(ws, header_color_ship, header_color_detail, n_ship_col ws.freeze_panes = "A2" -# ── Build DataFrames ────────────────────────────────────────────────────────── - -def build_main(lookup): - all_rows = [] - for path in sorted(INVENTORY_DIR.glob("onsite_inventory_detail_*.xlsx")): - df, meta = read_inventory(path) - if df is None: - continue - df["DestroyedOn"] = df["Medication ID"].apply( - lambda x: lookup.get(int(x), (None, None))[1] if pd.notna(x) else None) - df["Basket number"] = df["Medication ID"].apply( - lambda x: lookup.get(int(x), (None, None))[0] if pd.notna(x) else None) - df.insert(0, "Site", meta.get("site", path.stem)) - all_rows.append(df) - print(f" {path.name}: {len(df)} kits") - - combined = pd.concat(all_rows, ignore_index=True) - combined.rename(columns=COLUMN_RENAMES, inplace=True) - for col in DATE_COLUMNS: - if col in combined.columns: - combined[col] = pd.to_datetime(combined[col], dayfirst=True, errors="coerce") - combined.sort_values(["Site", "Rcv Date", "Med ID"], inplace=True, ignore_index=True) - return combined - - -def build_expired(df): - today = date.today() - mask = ( - df["Basket No."].isna() & - df["Subject ID"].isna() & - (df["Exp Date"] < pd.Timestamp(today)) - ) - filtered = df[mask].copy().reset_index(drop=True) - sheet_name = f"Expired as of {today.strftime('%d-%b-%Y')}" - print(f" Expired: {len(filtered)}") - return filtered, sheet_name - - -def build_assigned_not_dispensed(df): - mask = df["Subject ID"].notna() & df["Disp Date"].isna() - filtered = df[mask].copy().reset_index(drop=True) - print(f" Assigned not dispensed: {len(filtered)}") - return filtered - - -def build_not_returned(df): - no_ret = df[ - df["Date Ret"].isna() & - df["Subject ID"].notna() & - (df["Disp Status"].str.upper() != "NOT DISPENSED") - ].copy() - max_asgn = df.groupby("Subject ID")["Date Asgn"].max().rename("Max Visit Date") - no_ret = no_ret.join(max_asgn, on="Subject ID") - filtered = no_ret[no_ret["Date Asgn"] < no_ret["Max Visit Date"]].copy() - filtered = filtered.drop(columns=["Qty Ret", "Date Ret", "Ret User", "Destroyed", "Basket No."]) - filtered = filtered.reset_index(drop=True) - print(f" Not returned: {len(filtered)}") - return filtered - - -def build_kits_for_destruction(df): - mask = ( - df["Basket No."].isna() & - (df["Date Ret"].notna() | (df["Disp Status"].str.upper() == "NOT DISPENSED")) - ) - filtered = df[mask].copy().sort_values(["Site", "Date Ret"], ascending=[True, True]) - filtered = filtered.drop(columns=["Destroyed", "Basket No."]).reset_index(drop=True) - print(f" Kits for destruction: {len(filtered)}") - return filtered - - # ── Main ────────────────────────────────────────────────────────────────────── def main(): - # Prepare output dir, remove any previous overview file OUTPUT_DIR.mkdir(exist_ok=True) - for old in OUTPUT_DIR.glob(f"*{STUDY} CZ IWRS overview.xlsx"): - old.unlink() - print(f"Removed old file: {old.name}") - lookup = read_destruction_lookup() - print(f"Loaded {len(lookup)} kits from destruction reports") + print(f"\nNačítám data z MySQL pro {STUDY}...") + conn = get_conn() + cursor = conn.cursor(dictionary=True) + import_id = get_latest_import_id(cursor, STUDY) + print(f" import_id = {import_id}") - df = build_main(lookup) + df = load_inventory(cursor, STUDY, import_id) + shipments_df = load_shipments(cursor, STUDY, import_id) + + cursor.close() + conn.close() expired_df, expired_sheet = build_expired(df) assigned_df = build_assigned_not_dispensed(df) not_returned_df = build_not_returned(df) destruction_df = build_kits_for_destruction(df) + site_summary_df = build_site_summary(shipments_df) - shipments_df = build_shipments() - site_summary_df = build_site_summary(shipments_df) - n_ship_cols = shipments_df.columns.tolist().index("Investigator") # first detail col index (0-based) - - # Write all sheets with pd.ExcelWriter(OUTPUT_FILE, engine="openpyxl") as writer: df.to_excel( writer, index=False, sheet_name="CountryMedicationOverview") expired_df.to_excel( writer, index=False, sheet_name=expired_sheet) @@ -338,30 +337,27 @@ def main(): shipments_df.to_excel( writer, index=False, sheet_name="Shipments") site_summary_df.to_excel( writer, index=False, sheet_name="Site Summary") - # Format all sheets wb = load_workbook(OUTPUT_FILE) - # Main sheet — dark blue, green highlight for Destroyed/Basket No. - ws_main = wb["CountryMedicationOverview"] + ws_main = wb["CountryMedicationOverview"] format_sheet(ws_main, header_color="1F4E79") - # Extra: green fill for Destroyed and Basket No. columns - new_col_fill = PatternFill("solid", start_color="E2EFDA") - headers_main = [c.value for c in ws_main[1]] + new_col_fill = PatternFill("solid", start_color="E2EFDA") + headers_main = [c.value for c in ws_main[1]] for row in ws_main.iter_rows(min_row=2, max_row=ws_main.max_row): for cell in row: col_name = headers_main[cell.column - 1] if cell.column <= len(headers_main) else None if col_name in ("Destroyed", "Basket No."): cell.fill = new_col_fill - format_sheet(wb[expired_sheet], header_color="C00000", highlight_col="Exp Date", highlight_color="FFE0E0") - format_sheet(wb["Assigned not dispensed"], header_color="833C00", highlight_col="Subject ID", highlight_color="FFF2CC") - format_sheet(wb["Not returned"], header_color="375623", highlight_col="Max Visit Date", highlight_color="E2EFDA") - format_sheet(wb["Kits for destruction"], header_color="595959") - format_shipment_sheet(wb["Shipments"], "1F4E79", "375623", n_ship_cols) - format_sheet(wb["Site Summary"], header_color="1F4E79") + format_sheet(wb[expired_sheet], header_color="C00000", highlight_col="Exp Date", highlight_color="FFE0E0") + format_sheet(wb["Assigned not dispensed"], header_color="833C00", highlight_col="Subject ID", highlight_color="FFF2CC") + format_sheet(wb["Not returned"], header_color="375623", highlight_col="Max Visit Date", highlight_color="E2EFDA") + format_sheet(wb["Kits for destruction"], header_color="595959") + format_shipment_sheet(wb["Shipments"], "1F4E79", "375623", N_SHIP_COLS) + format_sheet(wb["Site Summary"], header_color="1F4E79") wb.save(OUTPUT_FILE) - print(f"\nSaved: {OUTPUT_FILE} ({len(df)} rows on main sheet, {wb.sheetnames})") + print(f"\nUloženo: {OUTPUT_FILE} ({len(df)} řádků, sheety: {wb.sheetnames})") if __name__ == "__main__": diff --git a/IWRS/Drugs/Working/create_shipment_report.py b/IWRS/Drugs/Working/create_shipment_report.py index 32599c6..3ac66c8 100644 --- a/IWRS/Drugs/Working/create_shipment_report.py +++ b/IWRS/Drugs/Working/create_shipment_report.py @@ -1,163 +1,205 @@ -import pandas as pd +import sys +import os +import mysql.connector import openpyxl from openpyxl.styles import Font, PatternFill, Alignment, Border, Side from openpyxl.utils import get_column_letter from datetime import date -import os +import pandas as pd -STUDY = "77242113UCO3001" -SHIPMENTS_FILE = f"xls_shipments_{STUDY}/shipments_report_{STUDY}.xlsx" -DETAILS_DIR = f"xls_shipment_details_{STUDY}" -OUTPUT_DIR = "output" -TEST_SHIPMENT = None # None = vsechny shipments +# db_config.py je v nadřazeném adresáři (Drugs/) +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) +import db_config -DROP_COLS = { - "Location", "Shipped Date", "Delivered Date [UTC]", - "Delivery Recipient", "Delivery Details", "Cancelled Date", - "Tracking #", "Total Medication IDs", - "Shipping Category", "Study", "Destination Location", "Destination Site", - "Medication type", "Container ID", "Quantity of Medication IDs", - "Packaged Lot description", -} +STUDY = "77242113UCO3001" +OUTPUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "output") os.makedirs(OUTPUT_DIR, exist_ok=True) -def read_shipments(): - df = pd.read_excel(SHIPMENTS_FILE, sheet_name=0, header=5) - df.columns = df.columns.str.strip() - df = df.dropna(how="all") - df["Shipment ID"] = df["Shipment ID"].astype(str).str.strip() - df = df.drop(columns=[c for c in DROP_COLS if c in df.columns]) - return df +def get_conn(): + return mysql.connector.connect( + host=db_config.DB_HOST, port=db_config.DB_PORT, + user=db_config.DB_USER, password=db_config.DB_PASSWORD, + database=db_config.DB_NAME, + ) -def read_details(shipment_id): - path = os.path.join(DETAILS_DIR, f"shipment_details_{shipment_id}.xlsx") - if not os.path.exists(path): - return None - df = pd.read_excel(path, sheet_name=0, header=5) - df.columns = df.columns.str.strip() - df = df.dropna(how="all") - df["Shipment"] = df["Shipment"].astype(str).str.strip() - return df +def load_data(study): + conn = get_conn() + cursor = conn.cursor(dictionary=True) + + # nejnovější import_id pro danou studii + cursor.execute( + "SELECT MAX(import_id) AS mid FROM iwrs_import WHERE study=%s AND report_type='drugs'", + (study,), + ) + row = cursor.fetchone() + import_id = row["mid"] + if import_id is None: + raise RuntimeError(f"Žádná data v MySQL pro studii {study}") + print(f" import_id = {import_id}") + + sql = """ + SELECT + s.shipment_id, + s.status AS irt_shipment_status, + s.type, + s.ship_from AS shipment_from, + s.ship_to_site AS ship_to, + s.request_date, + s.received_date, + s.received_by, + s.expected_arrival, + i.investigator, + i.medication_description, + i.medication_id, + i.packaged_lot_no, + i.expiration_date, + i.item_status AS status + FROM iwrs_shipments s + JOIN iwrs_shipment_items i + ON i.study = s.study + AND i.shipment_id = s.shipment_id + AND i.import_id = %s + WHERE s.import_id = %s + AND s.study = %s + ORDER BY s.ship_to_site, s.shipment_id, i.medication_id + """ + cursor.execute(sql, (import_id, import_id, study)) + rows = cursor.fetchall() + cursor.close() + conn.close() + print(f" Načteno řádků: {len(rows)}") + return rows -def build_report(): - shipments = read_shipments() - if TEST_SHIPMENT: - shipments = shipments[shipments["Shipment ID"] == TEST_SHIPMENT] +# shipment sloupce (modrý header) / detail sloupce (zelený header) +SHIP_COLS = [ + ("shipment_id", "Shipment ID"), + ("irt_shipment_status","IRT Shipment Status"), + ("type", "Type"), + ("shipment_from", "Shipment From"), + ("ship_to", "Ship To:"), + ("request_date", "Request Date"), + ("received_date", "Received Date"), + ("received_by", "Received by"), + ("expected_arrival", "Expected Arrival"), +] - shipment_cols = list(shipments.columns) - all_rows = [] +DETAIL_COLS = [ + ("investigator", "Investigator"), + ("medication_description", "Medication Description"), + ("medication_id", "Medication ID"), + ("packaged_lot_no", "Packaged Lot number"), + ("expiration_date", "Expiration Date"), + ("status", "Status"), +] - for _, s_row in shipments.iterrows(): - sid = s_row["Shipment ID"] - details = read_details(sid) - if details is None: - continue - extra_cols = [c for c in details.columns if c not in shipment_cols and c != "Shipment" and c not in DROP_COLS] - for _, d_row in details.iterrows(): - row = {**s_row.to_dict(), **{c: d_row[c] for c in extra_cols}} - all_rows.append(row) - print(f" [{sid}] {len(details)} kitu") +ALL_COLS = SHIP_COLS + DETAIL_COLS +N_SHIP_COLS = len(SHIP_COLS) - result = pd.DataFrame(all_rows) - all_cols = shipment_cols + [c for c in extra_cols if c in result.columns] - result = result[all_cols] +HEADER_FILL_SHIP = PatternFill("solid", fgColor="1F4E79") +HEADER_FILL_DETAIL = PatternFill("solid", fgColor="375623") +HEADER_FONT = Font(name="Arial", bold=True, color="FFFFFF", size=10) +DATA_FONT = Font(name="Arial", size=10) +THIN_BORDER = Border( + left=Side(style="thin", color="BFBFBF"), + right=Side(style="thin", color="BFBFBF"), + bottom=Side(style="thin", color="BFBFBF"), +) - wb = openpyxl.Workbook() + +def write_shipments_sheet(wb, rows): ws = wb.active ws.title = "Shipments" - HEADER_FILL_SHIP = PatternFill("solid", fgColor="1F4E79") - HEADER_FILL_DETAIL = PatternFill("solid", fgColor="375623") - HEADER_FONT = Font(name="Arial", bold=True, color="FFFFFF", size=10) - DATA_FONT = Font(name="Arial", size=10) - BORDER = Border( - left=Side(style="thin", color="BFBFBF"), - right=Side(style="thin", color="BFBFBF"), - bottom=Side(style="thin", color="BFBFBF"), - ) - - n_ship = len(shipment_cols) - for ci, col in enumerate(all_cols, 1): - cell = ws.cell(row=1, column=ci, value=col) - cell.font = HEADER_FONT - cell.fill = HEADER_FILL_SHIP if ci <= n_ship else HEADER_FILL_DETAIL + # záhlaví + for ci, (_, label) in enumerate(ALL_COLS, 1): + cell = ws.cell(row=1, column=ci, value=label) + cell.font = HEADER_FONT + cell.fill = HEADER_FILL_SHIP if ci <= N_SHIP_COLS else HEADER_FILL_DETAIL cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) - cell.border = BORDER + cell.border = THIN_BORDER ws.row_dimensions[1].height = 30 - for ri, (_, row) in enumerate(result.iterrows(), 2): - for ci, col in enumerate(all_cols, 1): - val = row[col] - if pd.isna(val): - val = None - elif hasattr(val, "date"): - val = val.date() + # data + for ri, row in enumerate(rows, 2): + for ci, (key, _) in enumerate(ALL_COLS, 1): + val = row[key] cell = ws.cell(row=ri, column=ci, value=val) - cell.font = DATA_FONT - cell.border = BORDER + cell.font = DATA_FONT + cell.border = THIN_BORDER cell.alignment = Alignment(horizontal="center", vertical="center") if isinstance(val, date): cell.number_format = "DD-MMM-YYYY" ws.auto_filter.ref = ws.dimensions - ws.freeze_panes = "A2" + ws.freeze_panes = "A2" - for ci, col in enumerate(all_cols, 1): - vals = [col] + [str(result.iloc[r][col]) for r in range(len(result)) if pd.notna(result.iloc[r][col])] - ws.column_dimensions[get_column_letter(ci)].width = min(max((len(v) for v in vals), default=10) + 2, 35) + # šířky sloupců + for ci, (key, label) in enumerate(ALL_COLS, 1): + vals = [label] + [str(r[key]) for r in rows if r[key] is not None] + ws.column_dimensions[get_column_letter(ci)].width = min( + max((len(v) for v in vals), default=10) + 2, 35 + ) - # --- Sheet 2: Site Summary --- + +def write_summary_sheet(wb, rows): STATUS_COLS = ["Available", "Assigned", "Dispensed", "Returned by Subject"] - pivot = result.groupby("Ship To:")["Status"].value_counts().unstack(fill_value=0) + + df = pd.DataFrame(rows) + pivot = df.groupby("ship_to")["status"].value_counts().unstack(fill_value=0) for s in STATUS_COLS: if s not in pivot.columns: pivot[s] = 0 - pivot = pivot[STATUS_COLS].reset_index().rename(columns={"Ship To:": "Site", "Returned by Subject": "Returned"}) - pivot = pivot.sort_values("Site").reset_index(drop=True) + pivot = ( + pivot[STATUS_COLS] + .reset_index() + .rename(columns={"ship_to": "Site", "Returned by Subject": "Returned"}) + .sort_values("Site") + .reset_index(drop=True) + ) pivot["Total"] = pivot[["Available", "Assigned", "Dispensed", "Returned"]].sum(axis=1) - ws2 = wb.create_sheet("Site Summary") - summary_cols = ["Site", "Available", "Assigned", "Dispensed", "Returned", "Total"] - HEADER_FILL_SUMM = PatternFill("solid", fgColor="1F4E79") + ws = wb.create_sheet("Site Summary") + s_cols = ["Site", "Available", "Assigned", "Dispensed", "Returned", "Total"] - for ci, col in enumerate(summary_cols, 1): - cell = ws2.cell(row=1, column=ci, value=col) - cell.font = HEADER_FONT - cell.fill = HEADER_FILL_SUMM + for ci, col in enumerate(s_cols, 1): + cell = ws.cell(row=1, column=ci, value=col) + cell.font = HEADER_FONT + cell.fill = PatternFill("solid", fgColor="1F4E79") cell.alignment = Alignment(horizontal="center", vertical="center") - cell.border = BORDER - ws2.row_dimensions[1].height = 25 + cell.border = THIN_BORDER + ws.row_dimensions[1].height = 25 for ri, (_, row) in enumerate(pivot.iterrows(), 2): - for ci, col in enumerate(summary_cols, 1): - cell = ws2.cell(row=ri, column=ci, value=row[col]) - cell.font = DATA_FONT - cell.border = BORDER + for ci, col in enumerate(s_cols, 1): + cell = ws.cell(row=ri, column=ci, value=row[col]) + cell.font = DATA_FONT + cell.border = THIN_BORDER cell.alignment = Alignment(horizontal="center", vertical="center") - for ci, col in enumerate(summary_cols, 1): + for ci, col in enumerate(s_cols, 1): vals = [col] + [str(pivot.iloc[r][col]) for r in range(len(pivot))] - ws2.column_dimensions[get_column_letter(ci)].width = min(max(len(v) for v in vals) + 4, 35) + ws.column_dimensions[get_column_letter(ci)].width = min( + max(len(v) for v in vals) + 4, 35 + ) - ws2.freeze_panes = "A2" + ws.freeze_panes = "A2" - suffix = f"_{TEST_SHIPMENT}" if TEST_SHIPMENT else "" - pattern = f"{STUDY} CZ Shipments{suffix}.xlsx" - for old in os.listdir(OUTPUT_DIR): - if old.endswith(pattern): - try: - os.remove(os.path.join(OUTPUT_DIR, old)) - print(f"Smazan -> {old}") - except OSError: - print(f"Preskakuji smazani (soubor otevren?) -> {old}") - outfile = os.path.join(OUTPUT_DIR, f"{date.today()} {STUDY} CZ Shipments{suffix}.xlsx") +def build_report(): + print(f"\nNačítám data z MySQL pro {STUDY}...") + rows = load_data(STUDY) + + wb = openpyxl.Workbook() + write_shipments_sheet(wb, rows) + write_summary_sheet(wb, rows) + + outfile = os.path.join(OUTPUT_DIR, f"{date.today()} {STUDY} CZ Shipments.xlsx") wb.save(outfile) - print(f"\nUlozeno -> {outfile}") + print(f"\nUloženo -> {outfile}") build_report() diff --git a/IWRS/Drugs/Working/create_studie_report.py b/IWRS/Drugs/Working/create_studie_report.py new file mode 100644 index 0000000..dfbba66 --- /dev/null +++ b/IWRS/Drugs/Working/create_studie_report.py @@ -0,0 +1,393 @@ +import sys +import os +import mysql.connector +import pandas as pd +from datetime import date +from pathlib import Path +from openpyxl import load_workbook +from openpyxl.styles import Font, PatternFill, Alignment, Border, Side +from openpyxl.utils import get_column_letter + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) +import db_config + +STUDIES = [ + ("77242113UCO3001", "UCO"), + ("42847922MDD3003", "MDD"), +] + +BASE_DIR = Path(os.path.dirname(os.path.abspath(__file__))) +OUTPUT_DIR = BASE_DIR / "output" + +DATE_COLUMNS = { + "Orig Exp Date", "Exp Date", "Rcv Date", + "Date Asgn", "Disp Date", "Date Ret", "Destroyed", "Max Visit Date", +} + +COLUMN_WIDTHS = { + "Site": 14, + "Med ID": 10, + "Lot No.": 12, + "Orig Exp Date": 16, + "Exp Date": 14, + "Rcv Date": 14, + "Rcpt User": 22, + "Subject ID": 14, + "Qty Asgn": 9, + "IRT Tx": 8, + "Date Asgn": 14, + "Asgn User": 20, + "Disp Status": 16, + "Disp Date": 14, + "Qty Disp": 9, + "Disp User": 20, + "Qty Ret": 10, + "Date Ret": 14, + "Ret User": 18, + "Destroyed": 14, + "Basket No.": 12, + "Max Visit Date": 16, +} + +N_SHIP_COLS = 9 # počet shipment sloupců (modrý header v Shipments sheetu) + + +# ── DB ──────────────────────────────────────────────────────────────────────── + +def get_conn(): + return mysql.connector.connect( + host=db_config.DB_HOST, port=db_config.DB_PORT, + user=db_config.DB_USER, password=db_config.DB_PASSWORD, + database=db_config.DB_NAME, + ) + + +def get_latest_import_id(cursor, study): + cursor.execute( + "SELECT MAX(import_id) AS mid FROM iwrs_import WHERE study=%s AND report_type='drugs'", + (study,), + ) + row = cursor.fetchone() + mid = row["mid"] + if mid is None: + raise RuntimeError(f"Žádná data v MySQL pro studii {study}") + return mid + + +# ── Načítání dat ────────────────────────────────────────────────────────────── + +def load_inventory(cursor, study, import_id): + sql = """ + SELECT + i.site AS Site, + i.medication_id AS `Med ID`, + i.packaged_lot_no AS `Lot No.`, + i.original_expiration_date AS `Orig Exp Date`, + i.expiration_date AS `Exp Date`, + i.received_date AS `Rcv Date`, + i.receipt_user AS `Rcpt User`, + i.subject_identifier AS `Subject ID`, + i.quantity_assigned AS `Qty Asgn`, + i.irt_transaction AS `IRT Tx`, + i.date_assigned AS `Date Asgn`, + i.assignment_user AS `Asgn User`, + i.dispensation_status AS `Disp Status`, + i.dispensing_date AS `Disp Date`, + i.quantity_dispensed AS `Qty Disp`, + i.dispensing_user AS `Disp User`, + i.quantity_returned AS `Qty Ret`, + i.date_returned AS `Date Ret`, + i.return_user AS `Ret User`, + d.destruction_date AS Destroyed, + d.basket_id AS `Basket No.` + FROM iwrs_inventory i + LEFT JOIN ( + SELECT medication_id, + ANY_VALUE(basket_id) AS basket_id, + ANY_VALUE(destruction_date) AS destruction_date + FROM iwrs_destruction + WHERE study = %s + GROUP BY medication_id + ) d ON d.medication_id = i.medication_id + WHERE i.import_id = %s + AND i.study = %s + ORDER BY i.site, i.received_date, i.medication_id + """ + cursor.execute(sql, (study, import_id, study)) + rows = cursor.fetchall() + df = pd.DataFrame(rows) + for col in DATE_COLUMNS: + if col in df.columns: + df[col] = pd.to_datetime(df[col], errors="coerce") + print(f" Inventory: {len(df)} kitu") + return df + + +def load_shipments(cursor, study, import_id): + sql = """ + SELECT + s.shipment_id AS `Shipment ID`, + s.status AS `IRT Shipment Status`, + s.type AS Type, + s.ship_from AS `Shipment From`, + s.ship_to_site AS `Ship To:`, + s.request_date AS `Request Date`, + s.received_date AS `Received Date`, + s.received_by AS `Received by`, + s.expected_arrival AS `Expected Arrival`, + i.investigator AS Investigator, + i.medication_description AS `Medication Description`, + i.medication_id AS `Medication ID`, + i.packaged_lot_no AS `Packaged Lot number`, + i.expiration_date AS `Expiration Date`, + i.item_status AS Status + FROM iwrs_shipments s + JOIN iwrs_shipment_items i + ON i.study = s.study + AND i.shipment_id = s.shipment_id + AND i.import_id = %s + WHERE s.import_id = %s + AND s.study = %s + ORDER BY s.ship_to_site, s.shipment_id, i.medication_id + """ + cursor.execute(sql, (import_id, import_id, study)) + rows = cursor.fetchall() + df = pd.DataFrame(rows) + for col in ("Request Date", "Received Date", "Expiration Date", "Expected Arrival"): + if col in df.columns: + df[col] = pd.to_datetime(df[col], errors="coerce") + n_ship = df["Shipment ID"].nunique() if len(df) else 0 + print(f" Shipments: {n_ship} zásilek, {len(df)} kitu") + return df + + +# ── Odvozené sheety ─────────────────────────────────────────────────────────── + +def build_site_summary(shipments_df): + STATUS_COLS = ["Available", "Assigned", "Dispensed", "Returned by Subject"] + pivot = shipments_df.groupby("Ship To:")["Status"].value_counts().unstack(fill_value=0) + for s in STATUS_COLS: + if s not in pivot.columns: + pivot[s] = 0 + pivot = ( + pivot[STATUS_COLS] + .reset_index() + .rename(columns={"Ship To:": "Site", "Returned by Subject": "Returned"}) + .sort_values("Site") + .reset_index(drop=True) + ) + pivot["Total"] = pivot[["Available", "Assigned", "Dispensed", "Returned"]].sum(axis=1) + print(f" Site Summary: {len(pivot)} center") + return pivot + + +def build_expired(df): + today = date.today() + mask = ( + df["Basket No."].isna() & + df["Subject ID"].isna() & + (df["Exp Date"] < pd.Timestamp(today)) + ) + filtered = df[mask].copy().reset_index(drop=True) + print(f" Expired: {len(filtered)}") + return filtered + + +def build_assigned_not_dispensed(df): + mask = df["Subject ID"].notna() & df["Disp Date"].isna() + filtered = df[mask].copy().reset_index(drop=True) + print(f" Assigned not dispensed: {len(filtered)}") + return filtered + + +def build_not_returned(df): + no_ret = df[ + df["Date Ret"].isna() & + df["Subject ID"].notna() & + (df["Disp Status"].fillna("").str.upper() != "NOT DISPENSED") + ].copy() + max_asgn = df.groupby("Subject ID")["Date Asgn"].max().rename("Max Visit Date") + no_ret = no_ret.join(max_asgn, on="Subject ID") + filtered = no_ret[no_ret["Date Asgn"] < no_ret["Max Visit Date"]].copy() + filtered = filtered.drop(columns=["Qty Ret", "Date Ret", "Ret User", "Destroyed", "Basket No."]) + filtered = filtered.reset_index(drop=True) + print(f" Not returned: {len(filtered)}") + return filtered + + +def build_kits_for_destruction(df): + mask = ( + df["Basket No."].isna() & + (df["Date Ret"].notna() | (df["Disp Status"].fillna("").str.upper() == "NOT DISPENSED")) + ) + filtered = ( + df[mask] + .copy() + .sort_values(["Site", "Date Ret"], ascending=[True, True]) + .drop(columns=["Destroyed", "Basket No."]) + .reset_index(drop=True) + ) + print(f" Kits for destruction: {len(filtered)}") + return filtered + + +# ── Formátování ─────────────────────────────────────────────────────────────── + +def format_sheet(ws, header_color, highlight_col=None, highlight_color=None): + thin = Side(style="thin", color="000000") + border = Border(left=thin, right=thin, top=thin, bottom=thin) + header_fill = PatternFill("solid", start_color=header_color) + header_font = Font(bold=True, color="FFFFFF", name="Arial", size=10) + row_font = Font(name="Arial", size=10) + hi_fill = PatternFill("solid", start_color=highlight_color) if highlight_color else None + + headers = [cell.value for cell in ws[1]] + + for cell in ws[1]: + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=False) + cell.border = border + + for row in ws.iter_rows(min_row=2, max_row=ws.max_row): + for cell in row: + col_name = headers[cell.column - 1] if cell.column <= len(headers) else None + cell.font = row_font + cell.border = border + cell.alignment = Alignment(horizontal="center") + if col_name in DATE_COLUMNS: + cell.number_format = "DD-MMM-YYYY" + if hi_fill and col_name == highlight_col: + cell.fill = hi_fill + + for cell in ws[1]: + width = COLUMN_WIDTHS.get(cell.value, 14) + ws.column_dimensions[get_column_letter(cell.column)].width = width + + ws.auto_filter.ref = ws.dimensions + ws.freeze_panes = "A2" + + +def format_overview_sheet(ws): + format_sheet(ws, header_color="1F4E79") + new_col_fill = PatternFill("solid", start_color="E2EFDA") + headers = [c.value for c in ws[1]] + for row in ws.iter_rows(min_row=2, max_row=ws.max_row): + for cell in row: + col_name = headers[cell.column - 1] if cell.column <= len(headers) else None + if col_name in ("Destroyed", "Basket No."): + cell.fill = new_col_fill + + +def format_shipment_sheet(ws): + thin = Side(style="thin", color="000000") + border = Border(left=thin, right=thin, top=thin, bottom=thin) + hfont = Font(bold=True, color="FFFFFF", name="Arial", size=10) + dfont = Font(name="Arial", size=10) + fill_ship = PatternFill("solid", start_color="1F4E79") + fill_detail = PatternFill("solid", start_color="375623") + + for cell in ws[1]: + cell.fill = fill_ship if cell.column <= N_SHIP_COLS else fill_detail + cell.font = hfont + cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) + cell.border = border + ws.column_dimensions[get_column_letter(cell.column)].width = min( + len(str(cell.value or "")) + 4, 35 + ) + ws.row_dimensions[1].height = 30 + + for row in ws.iter_rows(min_row=2, max_row=ws.max_row): + for cell in row: + cell.font = dfont + cell.border = border + cell.alignment = Alignment(horizontal="center", vertical="center") + if cell.value.__class__.__name__ in ("datetime", "date", "Timestamp"): + cell.number_format = "DD-MMM-YYYY" + + ws.auto_filter.ref = ws.dimensions + ws.freeze_panes = "A2" + + +# ── Main ────────────────────────────────────────────────────────────────────── + +SHEETS_DEF = [ + ("CountryMedicationOverview", "overview"), + ("Expired", "expired"), + ("Assigned not dispensed", "assigned"), + ("Not returned", "not_returned"), + ("Kits for destruction", "destruction"), + ("Shipments", "shipments"), + ("Site Summary", "site_summary"), +] + +FORMAT_MAP = { + "overview": lambda ws: format_overview_sheet(ws), + "expired": lambda ws: format_sheet(ws, "C00000", "Exp Date", "FFE0E0"), + "assigned": lambda ws: format_sheet(ws, "833C00", "Subject ID", "FFF2CC"), + "not_returned": lambda ws: format_sheet(ws, "375623", "Max Visit Date", "E2EFDA"), + "destruction": lambda ws: format_sheet(ws, "595959"), + "shipments": lambda ws: format_shipment_sheet(ws), + "site_summary": lambda ws: format_sheet(ws, "1F4E79"), +} + + +def process_study(cursor, study): + today = date.today().strftime("%d-%b-%Y") + import_id = get_latest_import_id(cursor, study) + print(f" import_id = {import_id}") + + df = load_inventory(cursor, study, import_id) + shipments_df = load_shipments(cursor, study, import_id) + + expired_df = build_expired(df) + assigned_df = build_assigned_not_dispensed(df) + not_returned_df = build_not_returned(df) + destruction_df = build_kits_for_destruction(df) + site_summ_df = build_site_summary(shipments_df) + + return [ + df, expired_df, assigned_df, not_returned_df, + destruction_df, shipments_df, site_summ_df, + ] + + +def save_study_report(study, data_frames): + output_file = OUTPUT_DIR / f"{date.today().strftime('%Y-%m-%d')} {study} report.xlsx" + + with pd.ExcelWriter(output_file, engine="openpyxl") as writer: + for (sheet_name, _), df_sheet in zip(SHEETS_DEF, data_frames): + df_sheet.to_excel(writer, index=False, sheet_name=sheet_name) + + wb = load_workbook(output_file) + for (sheet_name, fmt_key) in SHEETS_DEF: + FORMAT_MAP[fmt_key](wb[sheet_name]) + wb.save(output_file) + print(f" Uloženo: {output_file}") + + +def main(): + OUTPUT_DIR.mkdir(exist_ok=True) + + conn = get_conn() + cursor = conn.cursor(dictionary=True) + + for study, _ in STUDIES: + print(f"\n{'='*55}") + print(f"[{study}]") + print(f"{'='*55}") + try: + data_frames = process_study(cursor, study) + save_study_report(study, data_frames) + except Exception as e: + import traceback + print(f" CHYBA: {e}") + traceback.print_exc() + + cursor.close() + conn.close() + print(f"\nHotovo.") + + +if __name__ == "__main__": + main() diff --git a/IWRS/Drugs/Working/output/2026-05-05 42847922MDD3003 report.xlsx b/IWRS/Drugs/Working/output/2026-05-05 42847922MDD3003 report.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e2266e5717a4f174e7a07f2496848c025743e71d GIT binary patch literal 115985 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 SQV2QWWqJomme6CwmH!_`>AsNw literal 0 HcmV?d00001 diff --git a/IWRS/Drugs/Working/output/2026-05-05 77242113UCO3001 report.xlsx b/IWRS/Drugs/Working/output/2026-05-05 77242113UCO3001 report.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..615bfe672d5f48f20f60f5c729c7e62439534b18 GIT binary patch literal 26920 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

Lo~Qi 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 chy3sHPf-RI(gXh*8!@0LApyZdlfS