notebookvb
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
# 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
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soapenv:Body>
|
||||
<NacteniPredpisuDotaz xmlns="http://www.sukl.cz/erp/201704">
|
||||
|
||||
<Doklad>
|
||||
<Pristupujici>
|
||||
<Uzivatel>E08C89C6-2B1A-4EBA-8ED9-4E3E63618379</Uzivatel> <!-- UUID lékaře -->
|
||||
<Pracoviste>00214235367</Pracoviste> <!-- IČP pracoviště -->
|
||||
</Pristupujici>
|
||||
<Identifikator>
|
||||
<ID_Dokladu>PPIBVF93285E</ID_Dokladu> <!-- ID receptu, 12–25 znaků -->
|
||||
<!-- alternativně: -->
|
||||
<!-- <ID_Podani>uuid-guid-formát</ID_Podani> -->
|
||||
</Identifikator>
|
||||
</Doklad>
|
||||
|
||||
<Zprava>
|
||||
<ID_Zpravy>bf002578-4e0d-48f9-86b4-ea3e21f280ec</ID_Zpravy>
|
||||
<Verze>202501A</Verze>
|
||||
<Odeslano>2026-04-06T07:24:04+00:00</Odeslano>
|
||||
<SW_Klienta>MEDICUS_____</SW_Klienta>
|
||||
</Zprava>
|
||||
|
||||
</NacteniPredpisuDotaz>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>
|
||||
```
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||
### Hodnoty stavu receptu (`Stav`)
|
||||
|
||||
| Hodnota | Popis |
|
||||
|---|---|
|
||||
| `KE_SCHVALENI` | čeká na schválení revizním lékařem ZP |
|
||||
| `ZAMITNUTY` | zamítnut |
|
||||
| `PREDEPSANY` | vystaven, čeká na výdej |
|
||||
| `PRIPRAVOVANY` | lékárna si ho načetla, připravuje výdej |
|
||||
| `CASTECNE_VYDANY` | vydán částečně (opakovací předpis) |
|
||||
| `PLNE_VYDANY` | kompletně vydán ✅ |
|
||||
| `NEDOKONCENY_VYDEJ` | výdej nedokončen |
|
||||
| `UZAVRENY` | uzavřen, nelze měnit |
|
||||
|
||||
### 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 |
|
||||
Reference in New Issue
Block a user