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 9bf5fe7..02a0488 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 @@ -84,7 +84,8 @@ class Souhrn: datum: str = "" stazeni: list[StazeniRadek] = field(default_factory=list) parse: list[ParseRadek] = field(default_factory=list) - kriticka_chyba: str = "" + parse_preskoceno: int = 0 + kriticka_chyba: str = "" # ───────────────────────────────────────────────────────────────────────────── @@ -375,6 +376,7 @@ def faze_parsovani(dnes_str, out_dir, souhrn: Souhrn): if zpracovane.get(erp_kod) == rel_path: print("přeskočeno (beze změny)") + souhrn.parse_preskoceno += 1 continue xml_text = xml_file.read_text(encoding="utf-8") @@ -419,7 +421,7 @@ def sestav_email(souhrn: Souhrn) -> tuple[str, str]: parse_chyby = [r for r in souhrn.parse if r.stav == "CHYBA"] ma_chybu = bool(souhrn.kriticka_chyba or stazeno_chyby or parse_chyby) - predmet = f"eRecept {souhrn.datum} — {'⚠ CHYBA' if ma_chybu else 'OK'} ({len(stazeno_ok)} staženo, {len(parse_ok)} zpracováno)" + predmet = f"eRecept {souhrn.datum} — {'⚠ CHYBA' if ma_chybu else 'OK'} ({len(stazeno_ok)} staženo, {len(parse_ok)} zpracováno, {souhrn.parse_preskoceno} přeskočeno)" css = "font-family:Arial,sans-serif;font-size:14px;color:#222" h2 = "margin:20px 0 4px;font-size:15px;border-bottom:1px solid #ddd;padding-bottom:3px" @@ -473,7 +475,7 @@ def sestav_email(souhrn: Souhrn) -> tuple[str, str]: f"

eRecept — denní souhrn {souhrn.datum}

" f"{krit}" f"

Stažení: {len(stazeno_ok)} OK  |  {len(stazeno_chyby)} chyb

" - f"

Parsování: {len(parse_ok)} zpracováno  |  {len(parse_chyby)} chyb

" + f"

Parsování: {len(parse_ok)} zpracováno  |  {souhrn.parse_preskoceno} přeskočeno (beze změny)  |  {len(parse_chyby)} chyb

" + tabulka_stazeni(stazeno_ok, "Stažené recepty") + tabulka_stazeni(stazeno_chyby, "Chyby při stahování") + tabulka_parse(parse_ok, "Zpracované recepty") @@ -524,7 +526,7 @@ def main(): print(f"\n{'='*60}") print(f" SOUHRN {dnes}") print(f" Stažení: {stazeno_ok} OK, {stazeno_chyby} chyb") - print(f" Parsování: {parse_ok} zpracováno, {parse_chyby} chyb") + print(f" Parsování: {parse_ok} zpracováno, {souhrn.parse_preskoceno} přeskočeno, {parse_chyby} chyb") if souhrn.kriticka_chyba: print(" !! Kritická chyba — viz email") print(f"{'='*60}\n") diff --git a/Recepty/NačteníPředpisuWithClaude/NacistPredpis_DOKUMENTACE.md b/Recepty/NačteníPředpisuWithClaude/NacistPredpis_DOKUMENTACE.md index 51edb67..3ff17c7 100644 --- a/Recepty/NačteníPředpisuWithClaude/NacistPredpis_DOKUMENTACE.md +++ b/Recepty/NačteníPředpisuWithClaude/NacistPredpis_DOKUMENTACE.md @@ -15,6 +15,7 @@ které hromadný dotaz nevrací. | `09_VytvorTabulky.py` | Vytvoří tabulky `recept_doklad` a `recept_plp` v MySQL | | `10_StahnoutXML.py` | **Stahování** — načte ERP kódy z Medicusu, přeskočí terminální, uloží XML | | `11_ParseXML.py` | **Parsování** — naparsuje XML archiv a uloží data do MySQL | +| `12_DenníStaženíAZpracování.py` | **Denní kombinovaný skript** — stažení + parsování + emailový souhrn; spouští se každé 3 hodiny | ``` NačteníPředpisuWithClaude/ @@ -23,6 +24,7 @@ NačteníPředpisuWithClaude/ ├── 09_VytvorTabulky.py ← DDL MySQL tabulek ├── 10_StahnoutXML.py ← hromadné stahování s přeskakováním ├── 11_ParseXML.py ← parsování XML do MySQL +├── 12_DenníStaženíAZpracování.py ← denní kombinovaný skript (stažení + parsování + email) ├── NacistPredpis_DOKUMENTACE.md ← tento soubor ├── xml_archive/ ← archiv XML odpovědí (YYYY-MM-DD/ERP_KOD.xml) ├── MedicusDebug/ ← zachycené SOAP požadavky z Medicusu @@ -291,6 +293,41 @@ Bez spuštění `11` budou terminální recepty znovu stahovány. --- +## 12_DenníStaženíAZpracování.py — denní kombinovaný skript + +### Parametry (příkazová řádka) + +``` +python 12_DenníStaženíAZpracování.py +python 12_DenníStaženíAZpracování.py --od 2025-01-01 +python 12_DenníStaženíAZpracování.py --limit 50 +``` + +### Co dělá + +1. Načte terminální set z MySQL +2. Načte ERP kódy z Firebirdu (od `--od`, výchozí `2025-01-01`) +3. Stáhne XML pro neterminální recepty do `xml_archive/DNES/` (pauza 1–3 s mezi requesty) +4. Naparsuje XML z dnešního adresáře do MySQL +5. Odešle HTML emailový souhrn na `vladimir.buzalka@buzalka.cz` + +### Chování při opakovaném spuštění (každé 3 hodiny) + +Stahování přeskakuje pouze terminální recepty — neterminální se stahují každý běh. +Parsování přeskakuje soubory, jejichž cesta `xml_soubor` v DB se nezměnila: + +- **První běh dne** (po půlnoci): nová složka `xml_archive/YYYY-MM-DD/` → cesta nová → parsuje vše +- **Další běhy téhož dne**: stejná složka, cesta beze změny → přeskočí → 0 zpracováno + +Email vždy obsahuje počet přeskočených, takže "0 zpracováno | 29 přeskočeno" je normální stav. + +### Statistika (duben 2026) + +- Neterminálních receptů: ~29 (z 10 151 celkem) +- Doba stahování: ~1 minuta + +--- + ## Ověřeno (16. 4. 2026) - Hromadné stažení od 1. 1. 2025 dokončeno (`LIMIT = None`)