# NacistPredpis — Funkční SOAP klient pro IS eRecept SÚKL ## Status **OVĚŘENO FUNKČNÍ** — 6. dubna 2026 Odpověď serveru: `HTTP 200`, velikost: ~3.7 KB Schéma ověřeno proti: `schema1.xsd` verze `202501A` (dokumentace SÚKL 2025-04-24) Debug ověřen z: `MedicusDebug/eR_SuklMesage_bf002578-*.mime` --- ## Co tato operace dělá `NacistPredpis` je SOAP operace IS eRecept (SÚKL), která vrátí **kompletní detail jednoho konkrétního receptu** podle jeho ID. Vrací vše: pacienta (jméno, adresa, rodné číslo, ZP), lékaře, ordinaci, předepsaný lék (ATC, dávkování, úhrada), stav receptu, výdej z lékárny. Typické použití: lékař si zobrazí detail receptu, který sám vystavil, nebo ověří zda byl vydán. --- ## Klíčové informace ### Endpoint (produkce) ``` https://lekar-soap.erecept.sukl.cz/cuer/Lekar ``` > Tato operace je na **starším** endpointu `/cuer/Lekar` — **bez** číslice 2. > Operace `NacistLekovyZaznam` je naopak na `/cuer/Lekar2`. ### Endpoint (testovací prostředí) ``` https://lekar-soap.test-erecept.sukl.cz/cuer/Lekar ``` ### SOAPAction ``` "NacistPredpis" ``` ### XML namespace ``` http://www.sukl.cz/erp/201704 ``` > Starší namespace z roku 2017 — tato operace existuje od počátku IS eRecept. > Na rozdíl od `NacistLekovyZaznam` (namespace `201912`) zde zůstává `201704`. --- ## Porovnání s NacistLekovyZaznam | | NacistPredpis | NacistLekovyZaznam | |---|---|---| | **Namespace** | `201704` | `201912` | | **Endpoint** | `/cuer/Lekar` | `/cuer/Lekar2` | | **SOAPAction** | `NacistPredpis` | `NacistLekovyZaznam` | | **Identifikace** | ID receptu (alfanumerický kód) | jméno + datum narození pacienta | | **Výsledek** | detail jednoho receptu | celý lékový záznam pacienta (roky) | | **Velikost odpovědi** | ~3.7 KB | ~227 KB | --- ## Autentizace (dvojitá — stejná jako u všech operací) ### 1. Klientský certifikát (TLS mutual auth) - Soubor: `AMBSUKL214235369G_31DEC2024.pfx` - Formát: PKCS#12 (`.pfx`) - Knihovna: `requests-pkcs12` → `Pkcs12Adapter` ### 2. HTTP Basic Auth - Uživatel: UUID lékaře - Heslo: osobní heslo lékaře do portálu eRecept --- ## Struktura SOAP dotazu ```xml E08C89C6-2B1A-4EBA-8ED9-4E3E63618379 00214235367 PPIBVF93285E bf002578-4e0d-48f9-86b4-ea3e21f280ec 202501A 2026-04-06T07:24:04+00:00 MEDICUS_____ ``` ### Parametry dotazu (ověřeno proti schema1.xsd verze 202501A) | Element | Povinný | Omezení | Poznámka | |---|---|---|---| | `Uzivatel` | ✅ ano | UUID formát | UUID lékaře přidělené SÚKL | | `Pracoviste` | ✅ ano | — | IČP pracoviště lékaře | | `ID_Dokladu` | ❌ volitelný* | 12–25 znaků | alfanumerický kód receptu | | `ID_Podani` | ❌ volitelný* | UUID formát (36 znaků) | alternativní identifikátor podání | | `ID_Zpravy` | ✅ ano | UUID formát | nové UUID pro každý dotaz | | `Verze` | ✅ ano | — | aktuálně `202501A` | | `Odeslano` | ✅ ano | ISO 8601 | čas odeslání s časovou zónou | | `SW_Klienta` | ✅ ano | přesně 12 znaků | doplnit mezerami | > *Uvést právě jedno z: `ID_Dokladu` nebo `ID_Podani` — viz chybový kód L001. ### Formát ID receptu (`ID_Dokladu`) Alfanumerický kód délky 12–25 znaků, např. `PPIBVF93285E`. - Nesmí obsahovat písmena O (zaměnitelné s nulou), I (zaměnitelné s jedničkou), Y, Z - Nesmí obsahovat malá písmena ani diakritiku - Lékař jej vidí na průvodce receptu / v Medicusu --- ## Struktura odpovědi (ověřeno proti schema1.xsd verze 202501A) ``` NacteniPredpisuOdpoved ├── Doklad │ ├── ID_Dokladu alfanumerický kód receptu │ ├── DatumVystaveni datum │ ├── PlatnostDo datum │ ├── VypisDo datum — volitelný (prodloužená platnost výpisem) │ ├── Akutni boolean — volitelný │ ├── Rodina boolean — volitelný │ ├── Preshranicni boolean — volitelný │ ├── Opakovani int — volitelný (opakovací předpis) │ │ │ ├── Pacient │ │ ├── Totoznost │ │ │ ├── Jmeno (Prijmeni, Jmena) │ │ │ ├── DatumNarozeni │ │ │ ├── Adresa (ulice, číslo, obec, PSC, okres...) │ │ │ └── ROB způsob ztotožnění: ECD / JPDN / JPDNA │ │ ├── CP číslo pojištěnce (rodné číslo) │ │ ├── ZP Kod + Nazev zdravotní pojišťovny │ │ ├── Telefon volitelný │ │ ├── Notifikace SMS / Email — volitelný │ │ └── Pohlavi M / Z — volitelný │ │ │ ├── Predepisujici │ │ ├── Lekar Kod (UUID) + Jmeno │ │ ├── ICZ 8 číslic │ │ ├── ICP 8 číslic │ │ ├── PZS Kod + Nazev + IC + Telefon + Adresa │ │ ├── Telefon │ │ ├── Email volitelný │ │ └── Odbornost Kod + Nazev │ │ │ ├── Doporucujici volitelný — doporučující lékař │ │ ├── Jmeno │ │ ├── PZS │ │ └── Odbornost │ │ │ ├── Revize volitelný — schválení revizním lékařem ZP │ │ │ ├── PLP[] předepsané léčivé přípravky (1 nebo více) │ │ ├── Mnozstvi int, 1–9999 │ │ ├── Navod dávkování, max 80 znaků (např. "1-1-0") │ │ ├── Uhrada ZAKLADNI / ZVYSENA / NEHRAZENY │ │ ├── HVLPReg volitelný — registrovaný lék │ │ │ ├── Kod SÚKL kód (7 číslic, např. "0087076") │ │ │ ├── ATC ATC kód (např. "R05CB15") │ │ │ ├── Nazev např. "ERDOMED" │ │ │ ├── Forma léková forma (např. "CPS DUR") │ │ │ ├── Sila síla (např. "300MG") │ │ │ ├── CestaPodani např. "POR" │ │ │ └── Baleni počet kusů v balení │ │ ├── HVLPNereg volitelný — neregistrovaný HVLP │ │ ├── IPLP volitelný — individuálně připravovaný LP │ │ ├── INN volitelný — generický název │ │ ├── Prekroceni boolean — překročení limitu │ │ ├── ID_LP_Zdroj int — ID zdroje LP │ │ └── ID_LP UUID položky předpisu │ │ │ ├── Pozn poznámka, max 1000 znaků — volitelný │ ├── Stav stav receptu (viz níže) │ │ │ ├── Vydej[] volitelný — výdeje z lékáren (zkrácená forma) │ │ ├── ID_Dokladu ID výdeje │ │ ├── ID_Dokladu_ERP ID receptu (zpětný odkaz) │ │ ├── DatumVydeje datum │ │ ├── NazevPZS název lékárny │ │ ├── JmenoVydavajiciho jméno lékárníka (může být "skryto") │ │ ├── VLP[] vydané léčivé přípravky │ │ │ ├── Mnozstvi │ │ │ ├── Nazev plný název léku (např. "ERDOMED 300MG CPS DUR 20") │ │ │ ├── Kod SÚKL kód │ │ │ ├── Navod │ │ │ └── IdLpErp UUID zpětný odkaz na PLP │ │ ├── Zmena datetime │ │ └── Zalozeni datetime │ │ │ ├── Zmena datetime — poslední změna receptu │ ├── Zalozeni datetime — vytvoření receptu │ ├── DruhPojisteni VEREJNE / OSTATNI — volitelný │ ├── ModryPruh boolean — volitelný (omamné látky) │ ├── Papirovy boolean — volitelný │ └── ZapocitatelnyDoplatekZbyvaDoLimitu decimal — zbývající limit doplatků pacienta │ └── Zprava ├── ID_Zpravy nové UUID od serveru ├── Verze ├── Odeslano ├── ID_Podani echo ID podání └── Prijato datetime — čas přijetí na serveru ``` ### Popis jednotlivých polí odpovědi (zdroj: `documentationCuer.html` SÚKL 2025-04-24) | Pole | Typ | Povinné | Popis | |---|---|---|---| | `ID_Dokladu` | string 12–25 | ✅ | Identifikátor dokladu | | `DatumVystaveni` | date | ✅ | Datum vystavení eReceptu | | `PlatnostDo` | date | ✅ | Datum konce platnosti eReceptu určené při předepsání | | `VypisDo` | date | ❌ | Datum prodloužení platnosti eReceptu (lékárna může platnost prodloužit výpisem) | | `Akutni` | boolean | ❌ | Symbol Akutní péče nebo Neodkladná péče | | `Rodina` | boolean | ❌ | Symbol „Pro potřebu rodiny" nebo „Ad usum proprium" (lékař předepisuje sobě/rodině) | | `Preshranicni` | boolean | ❌ | Přeshraniční předpis *(nepoužívá se)* | | `Opakovani` | long | ❌ | Celkový počet výdejů u opakovacích receptů | | `Pacient` | nacteni_pacient_type | ✅ | Údaje o pacientovi | | `Predepisujici` | nacteni_predepisujici_type | ✅ | Údaje o předepisujícím lékaři | | `Doporucujici` | nacteni_doporucujici_type | ❌ | Údaje o doporučujícím lékaři | | `Revize` | nacteni_revize_type | ❌ | Schválení revizním lékařem ZP *(nepoužívá se)* | | `PLP` | nacteni_predepsany_lp_erp_type[] | ❌ | Předepsané položky (léky) | | `Pozn` | string 1–1000 | ❌ | Poznámka na eReceptu | | `UpozornitLekare` | enum | ❌ | Akceptace zpětného předání poznámky z lékárny — viz tabulka níže | | `Stav` | enum | ✅ | Stav eReceptu — viz tabulka níže | | `Vydej` | nacteni_zkraceny_vydej_erp_doklad_odpoved_type[] | ❌ | Seznam výdejů uskutečněných dosud na tento eRecept | | `Zmena` | dateTime | ✅ | Datum a čas poslední změny eReceptu | | `Zalozeni` | dateTime | ✅ | Datum a čas založení eReceptu | | `DruhPojisteni` | enum | ❌ | Druh pojištění pacienta — viz tabulka níže | | `ModryPruh` | boolean | ❌ | Předpis na LP s obsahem vysoce návykové látky (omamné/psychotropní) | | `Papirovy` | boolean | ❌ | Digitalizovaný papírový předpis *(nepoužívá se)* | | `ZapocitatelnyDoplatekZbyvaDoLimitu` | decimal 0–999999.99 | ❌ | Částka zbývající do max. ročního limitu započitatelných doplatků pacienta (po překročení limitu ZP hradí doplatky za pacienta) | --- ### Hodnoty stavu receptu (`Stav`) — enum `stav_elektronickeho_receptu` | Hodnota | Popis | |---|---| | `KE_SCHVALENI` | *(Nepoužívá se)* Ke schválení zdravotní pojišťovnou | | `ZAMITNUTY` | *(Nepoužívá se)* Zamítnutý zdravotní pojišťovnou | | `PREDEPSANY` | Předepsaný — výchozí stav po založení, lze provést výdej ✅ | | `PRIPRAVOVANY` | Připravovaný — lékárna pracuje na výdeji (připravuje IPLP nebo objednala HVLP u distributora); výdej může provést jen tato lékárna; používá se i pro blokaci při technickém výpadku | | `CASTECNE_VYDANY` | Částečně vydaný — výdej proběhl, ale může následovat další (prodloužená platnost nebo opakovací recept s dalšími opakováními) | | `PLNE_VYDANY` | Plně vydaný — výdej dokončen, žádný další výdej nenásleduje ✅ | | `NEDOKONCENY_VYDEJ` | Nedokončený výdej — lékárna nevydala léčivo, ale zaznamenala doplňující informaci (důvod nevydání); lze použít pouze u prvního takového výdeje | | `UZAVRENY` | *(Nepoužívá se)* Uzavřený | ### Hodnoty druhu pojištění (`DruhPojisteni`) — enum `druh_pojisteni` | Hodnota | Popis | |---|---| | `NEZADANO` | Nezadáno | | `VEREJNE` | Veřejné zdravotní pojištění (běžný případ v ČR) | | `SMLUVNI_PRIPOJISTENI` | Smluvní připojištění | | `CESTOVNI_PRIPOJISTENI` | Cestovní zdravotní připojištění | | `POJISTENI_EU` | Pojištění EU (pacient z jiného státu EU) | ### Hodnoty upozornění lékaře (`UpozornitLekare`) — enum `upozornit_lekare` Lékárník může k výdeji přidat poznámku pro předepisujícího lékaře. Toto pole říká, zda lékař tuto funkci akceptoval a jak urgentně chce být informován. | Hodnota | Popis | |---|---| | `BEZODKLADNE` | Upozornit lékaře bezodkladně (akceptuje BEZODKLADNE i PRISTI_NAVSTEVA) | | `PRISTI_NAVSTEVA` | Upozornit lékaře při příští návštěvě pacienta (akceptuje pouze PRISTI_NAVSTEVA) | | *(neuvedeno)* | Lékař neakceptoval zpětné předávání poznámek z lékárny | ### Hodnoty způsobu ztotožnění (`ROB`) | Hodnota | Popis | |---|---| | `ECD` | elektronicky čitelný doklad (občanský průkaz/pas) | | `JPDN` | jednoznačný dle jména, příjmení, data a adresy | | `JPDNA` | jednoznačný dle jména, příjmení a data (bez adresy) | --- ## HTTP hlavičky ```python headers = { "Content-Type": 'text/xml; charset="UTF-8"', "SOAPAction": '"NacistPredpis"', # uvozovky jsou součástí hodnoty! "User-Agent": "Medicus" } ``` --- ## Závislosti (Python) ``` requests requests-pkcs12 ``` --- ## Soubor skriptu `NacistPredpis_FUNKCNI.py` — funkční implementace, ověřeno 6. 4. 2026. --- ## Zdroje dokumentace SÚKL | Soubor | Datum | Obsah | |---|---|---| | `MedicusDebug/eR_PostData.xml` | 2026-04-05 | reálný dotaz z Medicusu | | `MedicusDebug/eR_SuklMesage_*.mime` | 2026-04-05 | HTTP hlavičky + tělo dotazu | | `MedicusDebug/eR_SuklMesage_*_Resp.xml` | 2026-04-05 | reálná odpověď serveru | | `CUERLekar.wsdl` | 2025-04-24 | definice operace NacistPredpis | | `schema1.xsd` | 2025-04-24 | kompletní XSD schéma dotazu i odpovědi |