Files
recept/NačteníPředpisuWithClaude/NacistPredpis_DOKUMENTACE.md
T
2026-04-14 07:20:28 +02:00

6.7 KiB
Raw Blame History

NacistPredpis — Funkční SOAP klient pro IS eRecept SÚKL

Pipeline pro stažení detailu jednotlivých receptů z eRecept SÚKL API. Doplňuje existující hromadný lékový záznam (NacistLekovyZaznam) o údaje, které hromadný dotaz nevrací.


Soubory

Soubor Co dělá
NacistPredpis_FUNKCNI.py Stáhne detail jednoho receptu dle hardcoded ID_Dokladu (ruční test)
08StahnoutPredpisy.py Hlavní skript — načte ERP kódy z Medicusu, stáhne detaily, uloží XML
NačteníPředpisuWithClaude/
├── NacistPredpis_FUNKCNI.py          ← test jednoho receptu
├── 08StahnoutPredpisy.py             ← hromadné stahování
├── NacistPredpis_DOKUMENTACE.md      ← tento soubor
├── xml_archive/                      ← archiv XML odpovědí (YYYY-MM-DD/ERP_KOD.xml)
├── MedicusDebug/                     ← zachycené SOAP požadavky z Medicusu
└── Tests/                            ← starší vývojové soubory

Co NacistPredpis vrací navíc oproti NacistLekovyZaznam

Hromadný lékový záznam (NacistLekovyZaznam, endpoint /cuer/Lekar2) vrací seznam předpisů a výdejů za pacienta, ale bez detailů o receptu jako celku.

NacistPredpis (endpoint /cuer/Lekar, namespace 201704) vrací detail jednoho konkrétního receptu, včetně:

Údaje o receptu (dokladu)

Pole Popis
ID_Dokladu Alfanumerický kód receptu (např. PPIBVF93285E)
Stav Stav receptu: PREDEPSANY, CASTECNE_VYDANY, PLNE_VYDANY, ZRUSENY…
PlatnostDo Datum konce platnosti receptu
VypisDo Prodloužení platnosti výpisem
Akutni Příznak akutní péče
Rodina „Pro potřebu rodiny" / ad usum proprium
Opakovani Počet výdejů u opakovacích receptů
DruhPojisteni VEREJNE / OSTATNI
ModryPruh Omamné/psychotropní látky
Pozn Poznámka na receptu (max 1000 znaků)
ZapocitatelnyDoplatekZbyvaDoLimitu Zbývá do limitu doplatků pacienta
Zmena / Zalozeni Datetime poslední změny / vytvoření

Údaje o úhradě léku (per PLP)

Pole Popis
Uhrada ZAKLADNI / ZVYSENA / NEHRAZENY
Prekroceni Překročení limitu

Údaje o pacientovi

Pole Popis
CP Číslo pojištěnce (rodné číslo)
ZP Zdravotní pojišťovna (kód + název)
Adresa Kompletní adresa pacienta
Pohlavi M / Z
Telefon Telefonní číslo
Notifikace SMS / Email

Údaje o předepisujícím

Pole Popis
Odbornost Kód + název (např. 001 — všeobecné praktické lékařství)
Email Email lékaře

Zkrácený výdej

Odpověď obsahuje i sekci Vydej[] se zkrácenou informací o výdejích — název lékárny, jméno lékárníka (často „skryto"), datum vydeje, vydané léky.


Porovnání operací

NacistPredpis NacistLekovyZaznam
Namespace 201704 201912
Endpoint /cuer/Lekar /cuer/Lekar2
SOAPAction NacistPredpis NacistLekovyZaznam
Identifikace ID_Dokladu (alfanumerický kód receptu) jméno + datum narození pacienta
Výsledek detail jednoho receptu celý lékový záznam pacienta (roky)
Velikost odpovědi ~3.54.5 KB ~227 KB

Autentizace (stejná jako u všech operací eReceptu)

Parametr Hodnota
Endpoint https://lekar-soap.erecept.sukl.cz/cuer/Lekar
mTLS certifikát AMBSUKL214235369G_31DEC2024.pfx (platnost do 31. 12. 2026)
HTTP Basic user UUID lékaře e08c89c6-2b1a-4eba-8ed9-4e3e63618379
SOAP operace NacistPredpis
XML namespace http://www.sukl.cz/erp/201704
Verze zprávy 202501A

Zdroj ID_Dokladu — Medicus (Firebird)

Alfanumerický kód receptu (ID_Dokladu) není v hromadném lékovém záznamu. Nachází se v tabulce RECEPT_EPODANI v Medicusu:

RECEPT.id_epodani  →  RECEPT_EPODANI.id
RECEPT_EPODANI.erp  =  ID_Dokladu  (např. "PPIBVF93285E")

SQL dotaz

SELECT DISTINCT ep.erp, r.datum, r.lek, r.dop,
       TRIM(kar.prijmeni) AS prijmeni, TRIM(kar.jmeno) AS jmeno
FROM recept r
JOIN recept_epodani ep ON r.id_epodani = ep.id
JOIN kar ON r.idpac = kar.idpac
WHERE r.datum >= '2025-01-01' AND ep.erp IS NOT NULL
ORDER BY r.datum DESC

Statistika (duben 2026)

  • 13 571 receptů s ERP kódem od 1. 1. 2025
  • 13 578 receptů celkem (7 bez ERP kódu — papírové/neodeslané)

08StahnoutPredpisy.py — hlavní skript

Parametry (editovat přímo v souboru)

LIMIT      = 100                  # max počet receptů ke stažení
DATUM_OD   = "2025-01-01"        # recepty od tohoto data
PRIJMENI   = ["Buzalka"]         # filtr příjmení (list), nebo None = všichni

Co dělá

  1. Připojí se k Firebirdu, načte unikátní ERP kódy (deduplikované — jeden recept může mít více léků)
  2. Pro každý ERP kód zavolá NacistPredpis přes SOAP API
  3. Uloží XML odpověď do xml_archive/YYYY-MM-DD/{ERP_KOD}.xml
  4. Chybové odpovědi uloží jako {ERP_KOD}_CHYBA.xml
  5. Pauza 5 sekund mezi voláními

Výstup v konzoli

[   1/55] Buzalka Vladimír               PPM5HM49EBF9  OK     3.6 KB  EZETIMIB/ATORVASTATIN STADA 10MG/20MG TB
[  25/55] Buzalka Vladimír               POMOTIAJ77PI  CHYBA  HTTP 500  D003 - Předpis zrušen...

Ošetření chyb

Kód Popis Chování skriptu
D003 Předpis byl zrušen lékařem Uloží _CHYBA.xml, pokračuje dál
HTTP 500 SOAP Fault (obecný) Uloží _CHYBA.xml, pokračuje dál
Timeout / Exception Síťová chyba Vypíše EXCEPTION, pokračuje dál

Ověřeno (14. 4. 2026)

Testovací běh na receptech pacienta Buzalka od 1. 1. 2025:

  • 55 unikátních ERP kódů nalezeno v Medicusu
  • 51 úspěšně staženo (OK)
  • 4 chyby D003 (zrušené recepty)
  • XML uloženy do xml_archive/2026-04-14/

Další kroky (plán)

  1. MySQL tabulka recept — uložit detail receptu (stav, platnost, úhrada, pojišťovna…)
  2. Parsování XML — extrakce dat z odpovědí do MySQL
  3. Inkrementální stahování — procházet jen nové recepty od posledního běhu
  4. Stažení všech 13 571 receptů od 1. 1. 2025 (odhad: ~19 hodin při 5s pauze)

XSD zdroje

Schéma verze 202501A, soubory v Dokumentace/2025-04-24/WSDL_XSD/:

Soubor Obsah
PRIORITNI_WEBOVE_SLUZBY/schema1.xsd NacteniPredpisuDotaz, identifikace_dokladu_type, nacteni_predpisu_erp_odpoved_type
NEPRIORITNI_WEBOVE_SLUZBY/CuerSchema.xsd hvlp_type, zprava_type, jmeno_osoby_type