18 KiB
NacistLekovyZaznam — Funkční SOAP klient pro IS eRecept SÚKL
Status
OVĚŘENO FUNKČNÍ — 5. dubna 2026
Odpověď serveru: HTTP 200, velikost: ~227 KB reálných dat
Schéma ověřeno proti: Cuer2Schema.xsd verze 202501A (dokumentace SÚKL 2025-04-24)
Co tato operace dělá
NacistLekovyZaznam je SOAP operace IS eRecept (SÚKL), která vrátí kompletní lékový záznam pacienta — tedy seznam všech předpisů a výdejů léků napříč všemi lékaři a lékárnami v ČR za zadané období.
Typické použití: lékař si před konzultací zobrazí, co pacient aktuálně bere, co mu bylo předepsáno a vydáno v lékárně.
Klíčové informace (těžce dohledané)
Endpoint (produkce)
https://lekar-soap.erecept.sukl.cz/cuer/Lekar2
Pozor: Endpoint má na konci číslici
2— tj./cuer/Lekar2, nikoli/cuer/Lekar. Tato operace není dostupná na starším endpointu/cuer/Lekar. Poprvé zdokumentováno v:eRecept_lekovy_zaznam_1v3.docx(dokumentace SÚKL ze dne 2024-01-18).
Endpoint (testovací prostředí)
https://lekar-soap.test-erecept.sukl.cz/cuer/Lekar2
SOAPAction
"NacistLekovyZaznam"
XML namespace
http://www.sukl.cz/erp/201912
Namespace pochází z prosince 2019 a nemění se ani v novějších verzích rozhraní. Verze rozhraní se předává v elementu
<Verze>uvnitř zprávy, ne změnou namespace. SÚKL zachovává zpětnou kompatibilitu — namespace zůstává201912i pro verze202401A,202501Aatd.
Další operace dostupné na stejném endpointu /cuer/Lekar2
Dle CUERLekarService.wsdl (2025-04-24) jsou na tomto endpointu celkem 4 operace:
| Operace | SOAPAction | Popis |
|---|---|---|
NacistLekovyZaznam |
NacistLekovyZaznam |
✅ lékový záznam pacienta |
OverDuplicity |
OverDuplicity |
kontrola duplicitních předpisů |
ZjistitPoznamkyHvlp |
ZjistitPoznamkyHvlp |
poznámky k HVLP přípravkům |
GetAppInfo |
GetAppInfo |
info o verzi API |
AppPing |
AppPing |
test spojení |
Autentizace (dvojitá)
IS eRecept vyžaduje dvě vrstvy autentizace současně:
1. Klientský certifikát (TLS mutual auth)
- Soubor:
AMBSUKL214235369G_31DEC2024.pfx(certifikát lékaře vydaný SÚKL) - Formát: PKCS#12 (
.pfx) - Knihovna:
requests-pkcs12→Pkcs12Adapter - Platnost certifikátu: do 31. 12. 2024 (při expiraci je nutné zažádat SÚKL o nový)
2. HTTP Basic Auth
- Uživatel: UUID lékaře (přiděluje SÚKL, jednoznačný v celé ČR)
- Heslo: osobní heslo lékaře do portálu eRecept
Struktura SOAP dotazu
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<NacistLekovyZaznamLekarDotaz xmlns="http://www.sukl.cz/erp/201912">
<Doklad>
<Pristupujici>
<Uzivatel>E08C89C6-2B1A-4EBA-8ED9-4E3E63618379</Uzivatel> <!-- UUID lékaře, povinný -->
<Pracoviste>00214235367</Pracoviste> <!-- IČP pracoviště, povinný -->
</Pristupujici>
<PocetZnakuATC>7</PocetZnakuATC> <!-- POUZE hodnoty 5 nebo 7 (enum!), povinný -->
<PocetMesicu>60</PocetMesicu> <!-- max 99, VOLITELNÝ -->
<Pacient>
<Totoznost>
<Jmeno>
<Prijmeni>Buzalka</Prijmeni>
<Jmena>Vladimír</Jmena>
</Jmeno>
<DatumNarozeni>1973-09-20</DatumNarozeni>
</Totoznost>
</Pacient>
<!-- Zastupce — volitelný, pouze pokud dotazuje zastupující lékař -->
<!-- <Zastupce>
<DruhDokladu>OP</DruhDokladu> 1–2 znaky, volitelný -->
<!-- <CisloDokladu>123456789</CisloDokladu> 1–9 znaků, volitelný -->
<!-- </Zastupce> -->
</Doklad>
<Zprava>
<ID_Zpravy>dabda2ad-df61-41db-bd46-a969eced026b</ID_Zpravy> <!-- UUID, generovat pro každý dotaz -->
<Verze>202501A</Verze> <!-- aktuální verze protokolu -->
<Odeslano>2026-04-05T10:00:00+00:00</Odeslano> <!-- UTC timestamp -->
<SW_Klienta>MEDICUS_____</SW_Klienta> <!-- identifikátor SW, přesně 12 znaků -->
</Zprava>
</NacistLekovyZaznamLekarDotaz>
</soapenv:Body>
</soapenv:Envelope>
Parametry dotazu (ověřeno proti Cuer2Schema.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 |
PocetZnakuATC |
✅ ano | pouze 5 nebo 7 | enum — jiné hodnoty server odmítne |
PocetMesicu |
❌ volitelný | max 99 | počet měsíců do minulosti |
Prijmeni |
✅ ano | — | příjmení pacienta |
Jmena |
✅ ano | — | jméno/jména pacienta |
DatumNarozeni |
✅ ano | YYYY-MM-DD |
datum narození pacienta |
Zastupce |
❌ volitelný | — | pouze pro zastupujícího lékaře |
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 zleva nebo zprava |
Struktura odpovědi (ověřeno proti Cuer2Schema.xsd verze 202501A)
NacistLekovyZaznamOdpoved
├── Doklad
│ ├── Pacient potvrzení identity pacienta
│ │ ├── Jmeno (Prijmeni, Jmena) volitelný
│ │ └── DatumNarozeni volitelný
│ │
│ ├── PredepisujiciSeznam volitelný — lékaři kteří předepisovali
│ │ └── Predepisujici[]
│ │ ├── Lekar Kod (UUID) + Jmeno — volitelný
│ │ ├── ICZ 8 číslic — volitelný
│ │ ├── ICP 8 číslic — povinný
│ │ ├── PZS volitelný
│ │ │ ├── Nazev max 200 znaků
│ │ │ ├── Telefon max 20 znaků — volitelný
│ │ │ └── Adresa
│ │ └── Telefon max 20 znaků — volitelný
│ │
│ ├── VydavajiciSeznam volitelný — lékárníci kteří vydávali
│ │ └── Vydavajici[]
│ │ ├── Lekarnik Kod (UUID) + Jmeno
│ │ └── PZS Nazev + Adresa
│ │
│ ├── PredpisSeznam volitelný — všechny předpisy
│ │ └── Predpis[]
│ │ ├── ID_LP_Predpis UUID předpisu — povinný
│ │ ├── KodPredepisujiciho odkaz do PredepisujiciSeznam — povinný
│ │ ├── DatumVystaveni datum vystavení
│ │ ├── Mnozstvi int, 1–9999
│ │ ├── Navod max 80 znaků (dávkování)
│ │ ├── Opakovani int — volitelný
│ │ ├── HVLPReg volitelný (registrovaný HVLP)
│ │ ├── HVLPNereg volitelný (neregistrovaný HVLP)
│ │ ├── IPLP volitelný (individuálně připravovaný LP)
│ │ ├── INN volitelný (generický název)
│ │ └── ModryPruh boolean — volitelný
│ │
│ ├── VydejSeznam volitelný — výdeje z lékáren
│ │ └── Vydej[]
│ │ ├── ID_LP_Vydej UUID výdeje
│ │ ├── ID_LP_Predpis UUID předpisu — volitelný (odkaz na předpis)
│ │ ├── KodVydavajiciho odkaz do VydavajiciSeznam — povinný
│ │ ├── DatumVydeje datum výdeje
│ │ ├── Mnozstvi decimal, 0.01–9999.99
│ │ ├── Navod max 80 znaků
│ │ ├── Exspirace datum — volitelný
│ │ ├── Sarze max 50 znaků
│ │ ├── SerioveCislo max 20 znaků — volitelný
│ │ ├── Pozn max 1000 znaků — volitelný
│ │ ├── HVLPReg volitelný
│ │ ├── HVLPNereg volitelný
│ │ └── IPLP volitelný
│ │
│ └── DuplicitaSeznam volitelný — detekované duplicity výdejů
│ └── Duplicita[]
│ └── ID_LP[]
│ ├── ID_LP_Vydej UUID — volitelný
│ └── ID_LP_Predpis UUID — volitelný
│
└── Zprava
├── ID_Zpravy echo zpět
├── Verze
├── Odeslano
└── ...
Poznámka k odkazům:
KodPredepisujicihov předpisu odpovídáLekar.KodvPredepisujiciSeznam. Stejně takKodVydavajicihoodpovídáLekarnik.KodvVydavajiciSeznam. Struktura je záměrně normalizovaná — lékaři a lékárny jsou uloženi jednou, předpisy a výdeje se na ně odkazují.
Reálná velikost odpovědi: ~227 KB (pacient s 60měsíční historií).
HTTP hlavičky
headers = {
"Content-Type": 'text/xml; charset="UTF-8"',
"SOAPAction": '"NacistLekovyZaznam"', # uvozovky jsou součástí hodnoty!
"User-Agent": "Medicus"
}
Závislosti (Python)
requests
requests-pkcs12
Instalace:
pip install requests requests-pkcs12
Jak dohledat správný endpoint (postup pro budoucí operace)
Endpoint /cuer/Lekar2 byl dohledán tímto postupem:
- Prohledání veškeré dokumentace SÚKL (2017–2025) fulltext hledáním výrazu
soap:address - Klíčový dokument:
eRecept_lekovy_zaznam_1v3.docx(2024-01-18):"Pro webové služby, které používá lékař a klinický farmaceut je nová verze rozhraní 202401A (původní 201912A):
https://lekar-soap.erecept.sukl.cz/cuer/Lekar2" - Ověřeno živým voláním — HTTP 200, reálná data
Mapa endpointů IS eRecept (produkce)
| Endpoint | Určen pro | Operace |
|---|---|---|
https://lekar-soap.erecept.sukl.cz/cuer/Lekar |
lékař | CUER operace (předpis, zrušení…) |
https://lekar-soap.erecept.sukl.cz/cuer/Lekar2 |
lékař | NacistLekovyZaznam, OverDuplicity, ZjistitPoznamkyHvlp |
https://lekar-soap.erecept.sukl.cz/rlpo/Lekar |
lékař | RLPO operace |
https://lekarnik-soap.erecept.sukl.cz/cuer/Lekarnik |
lékárník | CUER operace (výdej…) |
https://lekarnik-soap.erecept.sukl.cz/cuer/Lekarnik2 |
lékárník | nové CUER operace lékárníka |
https://cuer-soap.erecept.sukl.cz/ |
lékárna, ZP | doplatky, limity pojištěnce |
Ztotožnění pacienta a chybové kódy
Zdroj: živé volání NacistCiselnikChyb na https://lekar-soap.erecept.sukl.cz/cuer/Lekar — ověřeno 5. 4. 2026.
Jak funguje ztotožnění pacienta (Registr obyvatel)
Server každý dotaz porovná s Registrem obyvatel (ROB). Lze použít dvě sady údajů:
| Sada | Prvky | Poznámka |
|---|---|---|
| A — jméno | Prijmeni + Jmena + DatumNarozeni | základní, stačí pokud je pacient jednoznačný |
| B — doklad | DruhDokladu + CisloDokladu | jednoznačné vždy, řeší jmenovce |
Obě sady lze kombinovat. Pokud jsou uvedeny obě, musí být konzistentní (jinak C017).
Jak přesně probíhá ztotožnění pacienta v ROB
Zdroj: oficiální dokumentace SÚKL k IS eRecept
IS eRecept nejprve prohledá svůj interní kmen pacientů (vlastní databáze dříve ztotožněných osob). Teprve při neúspěchu volá Registr obyvatel (ROB) — což může trvat až několik sekund. U každého pacienta s korektními údaji by se to mělo stát pouze jednou. IS eRecept průběžně přebírá změny z ROB (např. přejmenování po svatbě se projeví automaticky).
Způsoby ztotožnění probíhají v tomto pořadí:
1. ECD — elektronicky čitelný doklad
Hledání dle DruhDokladu + CisloDokladu. Pokud zadáno, má přednost.
2. JPDN — jméno, příjmení, datum narození
Pokud nalezena právě jedna osoba → hotovo (ROB=JPDN).
Pokud nalezeno více jmenovců → přechod na JPDNA.
Pokud nenalezena žádná → upozornění (měkká chyba).
3. JPDNA — jméno, příjmení, datum narození + adresa trvalého pobytu
ROB umí automaticky opravit záměnu čísla popisného a orientačního.
Pokud nalezena právě jedna osoba → hotovo (ROB=JPDNA).
Pokud nenalezena žádná → upozornění, předpis se uloží s kódem C023.
Důležité: Adresu není nutné uvádět, pokud proběhne úspěšné vyhledání bez ní. V takovém případě se na předpisu použije adresa dohledaná v ROB.
Cizinci: Lze uvést zahraniční adresu, nebo adresu hotelu/lázní v ČR.
⚠️ Testování: Ztotožňování reálných osob smí probíhat pouze na produkci. O každém ztotožnění je záznam v základních registrech — pacient může obdržet výpis do datové schránky. Na testovacím prostředí jsou dostupné testovací identity na: https://www.szrcr.cz/cs/sluzby/spravci-a-vyvojari/vyvojari-agendovych-informacnich-systemu#testdata (mění se denně mezi 6:00–6:30).
Hodnoty DruhDokladu
⚠️ Oprava předchozí dokumentace — povolených hodnot je více než jen ID a P:
| Hodnota | Doklad |
|---|---|
ID |
občanský průkaz (nový formát) |
OP |
občanský průkaz (starší označení) |
P |
cestovní pas |
IR |
povolení k pobytu |
VS |
vízový štítek |
PS |
pobytový štítek |
CisloDokladu — pouze číslice, max 9 znaků.
Chybové kódy — ztotožnění pacienta (skupina C)
| Kód | Typ | Popis | Co udělat |
|---|---|---|---|
| C010 | tvrdá | Jméno + příjmení + datum narození nenalezeno v ROB | Zkontrolovat překlep, záměnu jména a příjmení |
| C011 | tvrdá | Druh a číslo dokladu nenalezeno v ROB | Zkontrolovat číslo a platnost dokladu |
| C012 | tvrdá | Adresa neodpovídá — více jmenovců | Doplnit DruhDokladu + CisloDokladu |
| C014 | tvrdá | Není uvedeno ani jméno/datum, ani číslo dokladu | Doplnit alespoň jednu sadu |
| C015 | tvrdá | Více jmenovců v ROB, nelze dohledat adresu | Doplnit adresu nebo číslo dokladu |
| C016 | měkká | Pacient mladší 33 dní | Předpis uložen, ale nebude v lékovém záznamu |
| C017 | tvrdá | Jméno/datum neodpovídá osobě nalezené dle čísla dokladu | Opravit jméno nebo ho neuvádět |
| C018 | tvrdá | Nelze dohledat, chybí adresa | Doplnit adresu nebo číslo dokladu |
| C019 | tvrdá | Datum narození v budoucnosti | Opravit datum |
| C020 | tvrdá | Chybí jméno, příjmení nebo datum narození | Doplnit kompletní sadu |
| C022 | tvrdá | Pacient dle ROB již zemřel | — |
| C023 | měkká | Předpis uložen, ale kvůli chybě ztotožnění nebude v lékovém záznamu | Opravit identifikaci a provést změnu předpisu |
| C024 | měkká | Registr LP prohledán, pacient nenalezen v ROB (možný cizinec) | — |
| C025 | měkká | Výdej uložen, ale kvůli chybě ztotožnění nebude v lékovém záznamu | — |
Měkká chyba = operace proběhla, ale s upozorněním. Tvrdá chyba = operace odmítnuta.
Chybové kódy — doklad totožnosti
| Kód | Popis |
|---|---|
| L076 | Neznámý druh dokladu — viz tabulka povolených hodnot výše |
Chybové kódy — systémové
| Kód | Popis |
|---|---|
| I005 | Registr obyvatel nedostupný (mimo kontrolu SÚKL) — zkusit znovu |
| I007 | Chyba dotazu na ROB — vstupní data nemají správný formát |
Proč Medicus žádá o občanský průkaz
Typický scénář: lékař pošle dotaz pouze se jménem + datem narození. Pokud existuje více jmenovců v ROB (méně než 1 % obyvatel), server vrátí C015. Medicus tento kód rozpozná a zobrazí dialog "zadejte číslo občanského průkazu". Lékař zadá číslo, Medicus pošle dotaz znovu s DruhDokladu=ID + CisloDokladu=... → server jednoznačně identifikuje pacienta metodou ECD.
Identifikace pro úhradové mechanismy (ZP)
Oddělená od ztotožnění v ROB — probíhá přes kód ZP + číslo pojištěnce. IS eRecept číslo pojištěnce neověřuje — není garantováno, že je správné. Pokud lékárna zjistí chybu kódu pojišťovny, může ji opravit operací ZmenitPojistovnuPredpisu.
Skript s občankou
NacistLekovyZaznam_FUNKCNI_OBCANKA.py — varianta s DruhDokladu + CisloDokladu v dotazu.
Soubory skriptů
| Skript | Popis |
|---|---|
NacistLekovyZaznam_FUNKCNI.py |
základní dotaz — jméno + datum narození |
NacistLekovyZaznam_FUNKCNI_OBCANKA.py |
dotaz s číslem občanského průkazu |
NacistCiselnikChyb.py |
stáhne kompletní číselník chybových kódů ze serveru |
Zdroje dokumentace SÚKL
| Soubor | Datum | Obsah |
|---|---|---|
eRecept_lekovy_zaznam_1v1.docx |
2020-05-28 | původní popis lékového záznamu |
eRecept_lekovy_zaznam_1v3.docx |
2024-01-18 | endpointy Lekar2/Lekarnik2, verze 202401A |
CUERLekarService.wsdl |
2025-04-24 | nejnovější definice rozhraní, seznam operací |
Cuer2Schema.xsd |
2025-04-24 | kompletní XSD schéma dotazu i odpovědi, verze 202501A |
CuerSchema.xsd |
2025-04-24 | sdílené typy (Zprava, Pristupujici, adresy…) |