diff --git a/Recepty/NačteníPředpisuWithClaude/12_DenníStaženíAZpracování.py b/Recepty/NačteníPředpisuWithClaude/12_DenníStaženíAZpracování.py index 18207ab..2b0f8fd 100644 --- a/Recepty/NačteníPředpisuWithClaude/12_DenníStaženíAZpracování.py +++ b/Recepty/NačteníPředpisuWithClaude/12_DenníStaženíAZpracování.py @@ -73,6 +73,8 @@ class StazeniRadek: pacient: str stav: str # "OK" | "CHYBA" | "PRESKOCENO" detail: str = "" # stav receptu nebo chybová zpráva + datum_vystaveni: str = "" + platnost_do: str = "" @dataclass @@ -164,6 +166,32 @@ def volej_nacist_predpis(sess, erp_kod): return resp.status_code, resp.text +_STAV_POPIS = { + "PREDEPSANY": "nevyzvednutý", + "CASTECNE_VYDANY": "částečně vydaný", + "PLNE_VYDANY": "plně vydaný", + "ZRUSENY": "zrušený", + "PRIPRAVOVANY": "připravovaný", +} + +def _stav_z_xml(xml_text): + """Vytáhne stav receptu — funguje i s namespace prefixem ().""" + for kod in _STAV_POPIS: + if f">{kod}<" in xml_text: + return _STAV_POPIS[kod] + return "?" + + +def _datum_z_xml(xml_text, tag): + """Vytáhne datum z XML tagu (prvý výskyt), vrátí jen YYYY-MM-DD nebo ''.""" + try: + start = xml_text.index(f"{tag}>") + len(tag) + 1 + end = xml_text.index("<", start) + return xml_text[start:end].strip()[:10] + except ValueError: + return "" + + def faze_stazeni(datum_od, limit, out_dir, souhrn: Souhrn): print("Připojuji MySQL...") mysql = connect_mysql(database="medicus", cursorclass=pymysql.cursors.DictCursor) @@ -208,8 +236,15 @@ def faze_stazeni(datum_od, limit, out_dir, souhrn: Souhrn): xml_file = out_dir / f"{erp_kod}.xml" xml_file.write_text(text, encoding="utf-8") kb = len(text.encode()) / 1024 - print(f"OK {kb:5.1f} KB {lek_str[:40]}") - souhrn.stazeni.append(StazeniRadek(erp_kod=erp_kod, pacient=label, stav="OK", detail=lek_str[:60])) + stav_receptu = _stav_z_xml(text) + datum_vystaveni = _datum_z_xml(text, "DatumVystaveni") + platnost_do = _datum_z_xml(text, "PlatnostDo") + print(f"OK {kb:5.1f} KB {stav_receptu} {lek_str[:40]}") + souhrn.stazeni.append(StazeniRadek( + erp_kod=erp_kod, pacient=label, stav="OK", + detail=f"{stav_receptu} | {lek_str[:50]}", + datum_vystaveni=datum_vystaveni, platnost_do=platnost_do, + )) else: chyba_short = text[:120].replace("\n", " ") print(f"CHYBA HTTP {status} {chyba_short}") @@ -438,14 +473,18 @@ def sestav_email(souhrn: Souhrn) -> tuple[str, str]: if not radky: return "" rows = "".join( - f"{r.erp_kod}{r.pacient}" + f"{r.erp_kod}" + f"{r.datum_vystaveni}" + f"{r.platnost_do}" + f"{r.pacient}" f"{_badge(r.stav)}{r.detail}" for r in radky ) return ( f"

{nadpis}

" f"" - f"" + f"" + f"" f"" f"{rows}
ERP kódPacient
ERP kódVystavenoPlatnost doPacientStavDetail
" )