notebookvb
This commit is contained in:
@@ -84,6 +84,7 @@ class Souhrn:
|
||||
datum: str = ""
|
||||
stazeni: list[StazeniRadek] = field(default_factory=list)
|
||||
parse: list[ParseRadek] = field(default_factory=list)
|
||||
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"<h1 style='font-size:18px;margin-bottom:6px'>eRecept — denní souhrn {souhrn.datum}</h1>"
|
||||
f"{krit}"
|
||||
f"<p><strong>Stažení:</strong> {len(stazeno_ok)} OK | {len(stazeno_chyby)} chyb</p>"
|
||||
f"<p><strong>Parsování:</strong> {len(parse_ok)} zpracováno | {len(parse_chyby)} chyb</p>"
|
||||
f"<p><strong>Parsování:</strong> {len(parse_ok)} zpracováno | {souhrn.parse_preskoceno} přeskočeno (beze změny) | {len(parse_chyby)} chyb</p>"
|
||||
+ 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")
|
||||
|
||||
@@ -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`)
|
||||
|
||||
Reference in New Issue
Block a user