# VZP B2B API – technická dokumentace připojení

Sep 23, 2026 · @Someone · doplněno o výsledky ověření proti SIMU 24. 9. 2026

## Přehled

Exekutorská kancelář se k VZP připojí přes B2B rozhraní a automatizovaně získá součinnost: ověření čísla pojištěnce a údaje o plátcích pojistného (zaměstnavatelích) povinného.

- **Kanál:** B2B komunikace VZP – SOAP (synchronní služby) a asynchronní služby s odpovědí za minuty až dny.
- **Autentizace:** komerční certifikát (klientský TLS), podpis zpráv certifikátem. Jméno/heslo/SMS B2B nepodporuje.
- **Subjekt:** typ „soudní exekutor“ – B2B se nenabízí pojištěncům ani OSVČ, přístup má úřad jako subjekt.
- **Rozsah dokumentu:** registrace, SIMU a produkce, certifikáty, protokol, služby pro SE, příklady, provoz.

Zdroj: [B2B komunikace – VZP](https://www.vzp.cz/e-vzp/b2b-komunikace), [Registrace a obecné informace o B2B](https://www.vzp.cz/e-vzp/b2b-komunikace/registrace-a-obecne-informace-o-b2b).

**Doprovodné soubory:** balíček `vzp-b2b-se.zip` – `schema/` (všechna XSD a WSDL od VZP, ověřená xmllint, relativní odkazy – držet v jedné složce), `certs/` (veřejné certifikáty VZP v PEM), `docs-vzp/` (originální PDF) a `README.md` s přehledem. `CommonB2B.xsd` je novější verze z balíku WS-Secure (obsahuje stav −8).

## Součinnost exekutora – co z B2B skutečně potřebujete

Z celého B2B využije exekutor jen dvě služby pro SE. Synchronní validace řekne, zda a u které pojišťovny je subjekt pojištěn. Asynchronní žádost vrátí podrobnosti pro exekuci (zaměstnavatel, adresa, účet OSVČ).

| Co exekutor zjišťuje | Služba | Pole v odpovědi |
| --- | --- | --- |
| Je subjekt pojištěn k datu? | ValidaceCislaPojistenceSEB2B (sync) | stavVyrizeniPozadavku 1 = nalezen, 0 = nenalezen |
| U které zdravotní pojišťovny? | ValidaceCislaPojistenceSEB2B (sync) | zdravotniPojistovna kod + nazev (i u jiných ZP než VZP) |
| Stav pojištění | VyzadaneUdajeOPojistenciB2B (async) | stavPojisteni |
| Zaměstnavatel / plátce pojistného (srážky ze mzdy) | VyzadaneUdajeOPojistenciB2B (async) | udajeZamestnavatele 0..N: cisloPlatce, nazev, adresa |
| Adresa a identifikace povinného | VyzadaneUdajeOPojistenciB2B (async) | jmeno, prijmeni, rodnePrijmeni, datumNarozeni, adresa |
| Státní pojištěnec (např. důchodce, uchazeč o zaměstnání) | VyzadaneUdajeOPojistenciB2B (async) | kategorieStatnihoPojistence |
| OSVČ / samoplátce – účet a příjmy | VyzadaneUdajeOPojistenciB2B (async) | kategorieSamoplatce, udajeSamoplatce: cisloUctu, rokPrehledu, prijmy, vydaje |

**Minimální varianta:** jen validace – čistý SOAP s přístupovým certifikátem, žádný AS2 ani veřejný endpoint. Stačí na otázku „pojištěn ano/ne a kde“.

**Plná varianta:** validace + vyžádané údaje. **Rozhodnuto: přenos přes WS-Secure (partner v privátní síti) – bez vlastního veřejného serveru, AS2 se nepoužije.** Vyžaduje podpisový certifikát, pravidelné vyzvedávání a potvrzování odpovědí a párování přes idPozadavku a korelaceZpravy. Odpověď přijde za minuty až dny.

|  | WS-Secure (zvoleno) | AS2 |
| --- | --- | --- |
| Doručení odpovědi | Pull – avizo nejdřív za 10 min, obecně 1× denně | Push – VZP pošle hned po zpracování |
| Infrastruktura | Žádný vlastní server | Veřejný HTTPS server 24/7, DNS, serverový certifikát |
| Implementace | 4 SOAP služby + WS-Security podpis | S/MIME podpis, MDN, příjem zpráv |
| Kapacita | Nouzové řešení s limity; blokace −8 při nepotvrzených zprávách | Standardní cesta VZP |

Pro exekutora s malým objemem dotazů a odpověďmi v řádu minut až dní WS-Secure stačí; validace je v obou případech okamžitá (synchronní SOAP). AS2 by dávalo smysl při velkém objemu, např. jedna aplikace pro mnoho úřadů.

**Co exekutor nepotřebuje:** služby pro poskytovatele zdravotních služeb, zaměstnavatele a další subjekty. „Hromadné oznámení instituce“ je sice u SE uvedené, ale slouží k podávání oznámení do VZP, ne k součinnosti – ověřit u VZP.

**Ověřeno:**

- Validace vrací název pojišťovny i u lidí pojištěných u jiné ZP – potvrzeno z praxe spolupracujícího exekutora.
- Vyžádané údaje VZP poskytne jen o svých pojištěncích. U ostatních ZP se součinnost žádá přes Portál ZP a ZP MV – obě komunikace jsou vyřešené samostatně, mimo tento dokument.

Zdroj: [Přehled služeb B2B – VZP](https://www.vzp.cz/e-vzp/b2b-komunikace/prehled-poskytovanych-sluzeb-b2b), [Služby pro SE (ZIP)](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani_sluzby_pro_se.zip).

## Prostředí

Vývoj a testy běží v SIMU s fiktivními daty a subjekty; skutečná data tam poslat nelze. Produkce vyžaduje smlouvu a spárovaný certifikát.

| Prostředí | Host | Ověření spárování certifikátu + zjištění UID |
| --- | --- | --- |
| SIMU (test) | `simu.b2b.vzp.cz` | [SIMUStavCertifikatuB2B](https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMUStavCertifikatuB2B?sluzba=SIMUStavCertifikatuB2B) |
| Produkce | `prod.b2b.vzp.cz:443` | [StavCertifikatuB2B](https://prod.b2b.vzp.cz/B2BProxy/HttpProxy/StavCertifikatuB2B?sluzba=StavCertifikatuB2B) |

**Stav našeho SIMU účtu (e-maily z ekk@vzp.cz, 10. 6. a 22. 9. 2026):**

| Položka | Hodnota |
| --- | --- |
| Zastupovaný subjekt | Fiktivní exekutor, IČO `00000000` – v XML jako `idSubjektu`; skutečné IČO v SIMU neuvádět |
| UID účtu | `SNJgk418oBVred4V7f3l` |
| Podpisový certifikát | Kvalifikovaný – přiřazen k účtu pro podpis. Náš certifikát: PostSignum Qualified CA 4, SN `016F5791`, platí do 5. 12. 2026. VZP sériové číslo v e-mailu neuvádí, ale zpráva podepsaná tímto certifikátem prošla bránou SIMU (24. 9. 2026, viz níže) |
| Přístupový certifikát | **Spárován** – komerční certifikát zaslaný 20. 8. 2026, VZP 22. 9. 2026 potvrdila spárování (provedené v srpnu) a žádá o ověření komunikace. Kvalifikovaným certifikátem se vůči bráně prokázat nelze. |

**Ověření na SIMUStavCertifikatuB2B (23. 9. 2026): komunikace v pořádku.**

| Položka | Hodnota |
| --- | --- |
| Certifikát | CN Daniel Němec, vydavatel PostSignum Public CA 4, SN `107b3fb` |
| Kategorie | 1 – max. 2 zprávy za 3 s |
| Asynchronní služby | VyzadaneUdajeOPojistenciB2B, ZurnalPartneraB2B, nastaveniB2BUctu, nastaveniB2BUctu2 |
| Synchronní služby pro SE | ValidaceCislaPojistenceSEB2B, StavCertifikatuB2B |
| WS-Secure (partner v privátní síti) | WSSOdeslaniZprav, WSSAvizo, WSSPrijemZprav, WSSPotvrzeniZprav |
| Abonované služby | žádné |

Další povolené synchronní služby (OverPrukazPojistenceB2B, RegistracePojistencePZSB2B, StornoFakturyB2B aj.) exekutor nepotřebuje. Důležité: účet má povolené WSS služby, takže vyžádané údaje lze odesílat a odpovědi si stahovat bez veřejného AS2 endpointu. Popis WSS je v dokumentu VZP „Popis rozhraní pro partnery v privátní síti“.

Plánované odstávky B2B VZP zveřejňuje rok dopředu: [Odstávky B2B prostředí](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/odstavky-b2b-prostredi). Na požádání zařadí VZP e-mail do seznamu pro oznámení o změnách a výpadcích.

- Adresy služeb mají tvar `https://<host>/B2BProxy/HttpProxy/<Sluzba>`; v SIMU nesou názvy prefix `SIMU`. Parametr ?sluzba= se používá jen u kontrolní stránky StavCertifikatuB2B.
- `idSubjektu` / UID: v SIMU přidělený testovací subjekt; v produkci se UID zjistí na odkazu výše po spárování certifikátu.
- Antivir s HTTPS inspekcí umí rozbít klientský TLS – pro B2B hosty nastavit výjimku.

Zdroj: [Vytvoření účtu v SIMU](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/sprava-uctu-v-simu-prostredi), [Tipy B2B](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/tipy-b2b).

## Registrace a přístup

Právní základ součinnosti je § 33 zákona č. 120/2001 Sb. (exekuční řád). U VZP probíhá lustrace povinných přes B2B; ostatní pojišťovny mají vlastní kanály (viz níže).

**SIMU (vývoj) – už zřízeno:** e-mail na ekk@vzp.cz, vyřízení do 2 pracovních dnů. Přiložit:

1. Podepsaný a naskenovaný formulář žádosti o přístup (.doc od VZP).
2. Oficiální výpis z obchodního/živnostenského rejstříku.
3. Veřejnou část komerčního certifikátu, zabalenou do archivu (.cer/.der mailservery blokují).
4. Typ subjektu: **soudní exekutor**.

**Produkce:**

1. Smlouva / dodatek o přenosu dat s VZP – služby pro SE si v ní výslovně vyžádat, samy se neaktivují.
2. Spárování komerčního certifikátu s účtem; VZP zašle protokol spárovaných certifikátů.
3. Zjištění UID na StavCertifikatuB2B (viz Prostředí).

**Ostatní zdravotní pojišťovny (mimo VZP):**

| Pojišťovna | Kanál součinnosti |
| --- | --- |
| ČPZP, OZP, ZP Škoda, RBP, VoZP | Portál ZP – webový formulář s certifikátem nebo XML webové služby ([Komunikační brána](http://www.portalzp.cz/clanky/komunikacni-brana-pro-klienty)) |
| ZP MV ČR | XML dotazy, účet přes info@zpmvcr.cz (předmět „Exekutoři - NES“), přístup PIN + heslo |

Zdroj: [EK ČR – Zdravotní pojišťovny](https://ekcr.cz/exekutor/zdravotni_pojistovny), [Vytvoření účtu v SIMU](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/sprava-uctu-v-simu-prostredi), [Registrace B2B](https://www.vzp.cz/e-vzp/b2b-komunikace/registrace-a-obecne-informace-o-b2b).

## Certifikáty

Potřebuješ komerční certifikát pro autentizaci. Kvalifikovaný certifikát k autentizaci použít nesmíš, slouží jen k podpisu.

| Certifikát | Účel | Poznámka |
| --- | --- | --- |
| Komerční (klient) | Klientský TLS + případně podpis dat | Vydavatel: PostSignum (Česká pošta), I.CA (První certifikační autorita), eIdentity; testovací certifikáty CA VZP nepřijímá |
| Kvalifikovaný (klient) | Podpis dat odesílaných do VZP | Nelze použít k autentizaci |
| VZP podpisový PROD / SIMU | Ověření podpisu odpovědí VZP (asynchronní služby) | VZP obnovuje ročně, oznámí e-mailem |
| VZP přístupový | Server VZP při příchozí B2B komunikaci | Pro PROD i SIMU |

Podle obecné dokumentace VZP (v5.4) se pro AS2 používají tři certifikáty; při zvolené variantě WS-Secure stačí dva – přístupový a podpisový, serverový odpadá: **přístupový** (komerční, identifikace vůči bráně), **podpisový** (podpis AS2 zpráv; jeho CN = hodnota `AS2-From`) a **serverový** pro vlastní AS2 endpoint. Certifikát musí obsahovat kompletní řetězec a všechny certifikáty VZP musí být nastavené jako důvěryhodné. VZP podle poznámky v dokumentu povoluje pro bránu i kvalifikované certifikáty; pro autentizaci ale platí omezení z podmínek CA uvedené výše.

**Konverze pro PHP/curl (.p12 → .pem):**

```bash
# klientský certifikát
openssl pkcs12 -in klient.p12 -clcerts -nokeys -out klient.crt.pem
# soukromý klíč (bez hesla – chránit právy 600)
openssl pkcs12 -in klient.p12 -nocerts -nodes -out klient.key.pem
# řetěz CA
openssl pkcs12 -in klient.p12 -cacerts -nokeys -out ca.pem
```

U OpenSSL 3 a starších .p12 může být potřeba přidat `-legacy`.

### Certifikáty VZP a k čemu slouží

Pro ověření podpisu stažených odpovědí a pro ověření serveru brány jsou potřeba veřejné certifikáty VZP. VZP je obnovuje jednou ročně a oznámí to e-mailem – proto je nedržet natvrdo v kódu, ale v konfiguraci.

| Certifikát (soubor v ZIP) | Prostředí | Subject CN | Vydavatel | Platnost do | SHA-256 otisk | K čemu slouží |
| --- | --- | --- | --- | --- | --- | --- |
| Podpis\_SIMU.cer ([ZIP](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/podpis-b2b-simu-1.zip)) | SIMU | VZP podpisSIMU | I.CA EU Qualified CA2/RSA 06/2022 | 24. 3. 2027 | `00:DA:A0:76:A3:66:EC:C4:8D:3C:1F:5B:85:C4:60:13:68:B4:41:A5:75:3A:43:1A:D6:5A:64:96:5E:A9:24:C7` | Ověření podpisu odpovědí WSSPrijemZprav |
| Podpis\_PROD.cer ([ZIP](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/podpis-b2b-prod-1.zip)) | PROD | VZP podpis | I.CA EU Qualified CA2/RSA 06/2022 | 24. 3. 2027 | `78:FD:C4:20:6E:8E:6F:30:AA:9E:49:4F:B2:2E:DA:B9:67:55:EB:47:C9:1B:BA:AD:E0:E4:2B:C8:2C:E6:60:BB` | Totéž pro produkci |
| ALL.b2b.vzp.cz.cer ([ZIP](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/pristup-b2b-prod-simu.zip)) | PROD + SIMU | \*.b2b.vzp.cz | Thawte TLS RSA CA G1 (DigiCert) | 18. 2. 2027 | `D6:19:CF:00:E9:C7:56:28:EC:EF:74:F1:98:A0:CD:19:0E:C8:65:84:1F:39:5B:7E:B9:49:4A:0B:8F:05:93:21` | Serverový TLS certifikát brány |

- Podpisové certifikáty VZP jsou kvalifikované certifikáty pro elektronickou pečeť (I.CA), RSA 4096, dodávané v binárním DER – převést na PEM: `openssl x509 -inform DER -in Podpis_SIMU.cer -out vzp-podpis-simu.pem`. PEM obsah je v Příloze.
- Serverový certifikát brány vydala veřejná CA (DigiCert/Thawte), takže pro TLS stačí systémové úložiště CA; vlastní ca-bundle není potřeba. Soubor slouží jen pro případný pinning.
- Nejbližší výměna: TLS certifikát brány 18. 2. 2027, podpisové certifikáty 24. 3. 2027.

VPN kořenové certifikáty VZP (VZP-Root-CA apod.) pro B2B potřeba nejsou.

**Ověření podepsané odpovědi (WSSPrijemZprav):**

1. Najít `ds:Signature` v `wsse:Security` hlavičce odpovědi.
2. Pro každou `ds:Reference` najít prvek s odpovídajícím `wsu:Id`, kanonizovat exc-c14n a porovnat digest s `DigestValue`. **Odpověď VZP používá digest SHA-1** (`http://www.w3.org/2000/09/xmldsig#sha1`), ne SHA-256.
3. Kanonizovat `ds:SignedInfo` a ověřit `SignatureValue` přes `openssl_verify(..., OPENSSL_ALGO_SHA1)` – **VZP podepisuje `rsa-sha1`** (`http://www.w3.org/2000/09/xmldsig#rsa-sha1`).
4. Certifikát z `BinarySecurityToken` porovnat (otisk SHA-1/SHA-256) s uloženým podpisovým certifikátem VZP pro dané prostředí – nevěřit slepě certifikátu přiloženému ve zprávě.
5. Teprve pak dekódovat `obsahZpravy` (base64) a zpracovat; nakonec potvrdit přes WSSPotvrzeniZprav.

Strukturu podpisu odpovědi VZP dokumentace nepopisuje, proto byla zjištěna na první skutečné odpovědi ze SIMU (24. 9. 2026, `WSSPrijemZprav`) a postup výše byl na ní ověřen (digesty i podpis sedí):

- Hlavička `wsse:Security` (`mustUnderstand="1"`) obsahuje `wsu:Timestamp` (platnost 5 minut, čas s milisekundami a `Z`), `wsse:BinarySecurityToken` s certifikátem VZP a `ds:Signature`.
- `SignatureMethod` = `rsa-sha1`, `DigestMethod` = `sha1`, `CanonicalizationMethod` i `Transform` = exkluzivní c14n.
- Podepsané jsou dva odkazy: SOAP `Body` (`wsu:Id="Id-…"`) a `Timestamp`.
- `KeyInfo` odkazuje přes `wsse:SecurityTokenReference/wsse:Reference` na `BinarySecurityToken`.
- `BinarySecurityToken` v odpovědi je přesně certifikát „VZP podpisSIMU", tedy `vzp-podpis-simu.pem` z tohoto balíčku.
- Uvnitř `ds:Signature` jsou odřádkování mezi prvky (a v `SignatureValue`). Ta jsou součástí digestu – XML se před ověřením nesmí normalizovat ani přeformátovat.
- Odpověď `WSSPrijemZprav` je v jmenném prostoru `http://www.gem.com/b2b/wss/2` s prefixem `ns1:`. Uvnitř `obsahZpravy` (base64) je odpověď služby, u vyžádaných údajů s mnoha nepoužitými deklaracemi jmenných prostorů (Oracle) a s jmenným prostorem `http://xmlns.gemsystem.cz/VyzadaneUdajeOPojistenciB2B` jako výchozím; prvek `korelaceZpravy` je bez prefixu, `stavVyrizeniPozadavku` s prefixem `ns1:`.
- Odpověď na žádost v SIMU vznikla 5 sekund po odeslání (`casVytvoreni`). Kdy je k vyzvednutí v avízu, jsme neměřili; na avízo se podle VZP smí ptát nejdřív 10 minut po odeslání (pokus 10 sekund po odeslání, 24. 9. 2026, vrátil prázdné avízo – je to proti pravidlu VZP, nic to o SIMU neříká). U produkce se počítá s minutami až dny.

Zdroj: [Podporované certifikáty](https://www.vzp.cz/e-vzp/b2b-komunikace/podporovane-certifikaty), [Certifikáty VZP](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/certifikaty-vzp).

## Komunikační protokol

Validace čísla pojištěnce je synchronní SOAP přes HTTPS s klientským certifikátem. Vyžádané údaje (asynchronní) jdou přes WS-Secure – zpráva se odešle a odpověď vyzvedne synchronními SOAP službami (pull, viz níže). Vše HTTP/1.1 POST na portu 443.

Nejdřív validace (získá příznak čísla pojištěnce), pak žádost o údaje.

### Endpointy

| Prostředí | Vzor URL služby |
| --- | --- |
| SIMU | `https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMU<NazevSluzby>` |
| Produkce | `https://prod.b2b.vzp.cz/B2BProxy/HttpProxy/<NazevSluzby>` |

Vždy DNS jméno, nikdy IP adresa. VZP si vyhrazuje změnu názvu služby nebo endpointu po oznámení.

### SOAP (synchronní)

- SOAP 1.1 document/literal, operace `process`, `SOAPAction: "process"`.
- Endpoint ve WSDL je záměrně `*** SERVICE ENDPOINT LOCATION ***` – URL patří do konfigurace.
- Nerozpoznaný certifikát = HTTP 401. Opakovat se smí jen po 503.
- Opakované stejné dotazy neposílat – výsledky cachovat na straně partnera.

**Poznámka – AS2 (nepoužíváme):** standardní push cesta VZP pro asynchronní služby (RFC 4130, S/MIME podpis, podepsané MDN). Vyžaduje veřejný HTTPS endpoint 24/7 se serverovým certifikátem, nastavený službou nastaveniB2BUctu2. Detail v dokumentu VZP [Popis rozhraní pro partnery v5.4](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani5_4.zip).

### Pomocné služby (asynchronní)

| Služba | Účel |
| --- | --- |
| nastaveniB2BUctu2 | Protokol (AS2/SOAP), URI endpointu, objednání zpráv, obnova přístupového/podpisového certifikátu (stejný subject + issuer). Namespace `http://www.gemsystem.cz/B2BUpdate/2.0` |
| ZurnalPartneraB2B | Stav vyměněných zpráv: podrobný/souhrnný, filtr podle idZpravy, typu, data; stavy vyrizeno / zpracovani / kontrola / chyba |
| StavCertifikatuB2B (web) | Kontrola certifikátu, kategorie a limitu zpráv v prohlížeči |

### WS-Secure – partner v privátní síti (varianta pro exekutora bez veřejného serveru)

Místo AS2 se asynchronní zpráva odešle a odpověď vyzvedne čtyřmi synchronními SOAP službami (pull model). Náš SIMU účet je má povolené. Žádný veřejný endpoint ani serverový certifikát není potřeba; nastavení účtu (nastaveniB2BUctu2) je pro tuto variantu nepovinné.

```mermaid
sequenceDiagram
    participant IS as IS exekutora
    participant B2B as Brána B2B VZP
    IS->>B2B: WSSOdeslaniZprav (typZpravy=VyzadaneUdajeOPojistenciB2B, podepsané)
    B2B-->>IS: idPozadavku, stav 1
    Note over IS: čekat min. 10 minut
    IS->>B2B: WSSAvizo
    B2B-->>IS: seznam idOdpovedi k vyzvednutí
    IS->>B2B: WSSPrijemZprav (idOdpovedi, max. 5)
    B2B-->>IS: obsahZpravy base64 (odpověď služby)
    IS->>B2B: WSSPotvrzeniZprav (idOdpovedi)
    B2B-->>IS: stav 1
```

| Služba (endpoint) | Účel | Podpis WS-Security |
| --- | --- | --- |
| odeslaniZprav (`WSSOdeslaniZprav`) | Odešle 1–5 zpráv stejného typu, atomicky; vrací `idPozadavku` od VZP | Povinný, podpisovým certifikátem |
| avizo (`WSSAvizo`) | Seznam zpráv k vyzvednutí: typZpravy, idPozadavku, idOdpovedi, subjekt; příznak `zkraceno` | Ne |
| prijemZprav (`WSSPrijemZprav`) | Stáhne až 5 zpráv podle idOdpovedi; neatomické, každá má stavVyrizeniZpravy | Ne (odpověď VZP podepsaná) |
| potvrzeniZprav (`WSSPotvrzeniZprav`) | Potvrdí převzetí; atomické, při chybě vrátí první špatné idOdpovedi | Ne |

- **URL:** `https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMUWSSAvizo` apod., produkce bez prefixu SIMU.
- **SOAP:** operace `process`, SOAPAction `http://www.gem.com/b2b/wss/2/<sluzba>/process`, datový namespace `http://www.gem.com/b2b/wss/2`.
- **Obsah:** `obsahZpravy` = base64 celého XML požadavku služby (např. vyzadaneUdajeOPojistenciB2BPozadavek); odpověď přijde stejně zabalená. Limit 10 mil. znaků na zprávu.
- **Korelace:** idPozadavku (VZP) sváže odeslání s avizem; uvnitř obsahu platí dál idZpravy → korelaceZpravy.
- **Frekvence dotazů:** avizo nejdřív 10 minut po odeslání; na nové zprávy obecně jednou denně. Nepřetlačovat dotazy.
- **Potvrzování je povinné:** nepotvrzené zprávy se vrací v avizu a po překročení limitu VZP zablokuje další odesílání (stav **−8**).
- **Chyby transportu:** SOAP Fault (např. `InvalidSecurity`).

**WS-Security podpis (odeslaniZprav):**

| Parametr | Hodnota |
| --- | --- |
| Token | X.509 v `BinarySecurityToken` (policy: IncludeToken Always, WssX509V3Token10) nebo issuer + serial v KeyInfo |
| Canonicalization / Transform | `http://www.w3.org/2001/10/xml-exc-c14n#` |
| SignatureMethod | `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256` |
| DigestMethod | `http://www.w3.org/2001/04/xmlenc#sha256` |
| Timestamp | `wsu:Timestamp` povinný; `wsu:Created` nesmí být v budoucnosti (tolerance 5 min) – synchronizovat čas přes NTP |

Zdroj: VZP [Popis rozhraní pro partnery v privátní síti](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani_partner_v_privatni_siti.zip) (PDF, WSDL, b2bwssadapter2.xsd).

### Podepsaná zpráva WS-Security – postup a ověřená ukázka

Postup níže vychází z WS-Policy v `odeslaniZprav.wsdl` (AsymmetricBinding, Basic256Sha256, Layout Strict, IncludeTimestamp, SignedParts = Body). Ukázkový PHP kód byl lokálně ověřen (digesty i podpis sedí) s testovacím certifikátem. **Proti bráně SIMU ověřeno 24. 9. 2026:** brána takto sestavenou zprávu přijala (HTTP 200, `stavVyrizeniPozadavku` 1, `idPozadavku` `2460460`), podepsanou kvalifikovaným certifikátem SN `016F5791`. `KeyInfo` odkazuje na `BinarySecurityToken` přímo (`wsse:Reference URI="#id-cert"`), i když politika ve WSDL uvádí `RequireEmbeddedTokenReference` – bráně to nevadí. Podepisují se jen `Timestamp` a `Body`, WS-Addressing hlavičky se neposílají.

1. Sestavit SOAP 1.1 obálku; `soapenv:Body` dostane `wsu:Id="id-body"`.
2. Do `soapenv:Header` vložit `wsse:Security` (`mustUnderstand="1"`) v tomto pořadí: `wsu:Timestamp` (Created = teď UTC, Expires = +5 min) → `wsse:BinarySecurityToken` (DER podpisového certifikátu v base64) → `ds:Signature`.
3. Pro Timestamp a Body spočítat SHA-256 digest z exkluzivní kanonizace (exc-c14n, bez komentářů).
4. `ds:SignedInfo` kanonizovat exc-c14n a podepsat RSA-SHA256 soukromým klíčem podpisového certifikátu.
5. `ds:KeyInfo` odkazuje přes `wsse:SecurityTokenReference` na BinarySecurityToken.
6. Po podpisu už XML **nijak neměnit ani neformátovat** (ani mezery) – rozbije to digest.
7. Čas serveru synchronizovat přes NTP – Created v budoucnosti = chyba „Timestamp could not be validated“.

PHP 8 bez externích knihoven (DOM + OpenSSL); vestavěný `SoapClient` WS-Security podpis neumí, proto se obálka skládá ručně a posílá curl-em s klientským certifikátem:

```php
const NS_S    = 'http://schemas.xmlsoap.org/soap/envelope/';
const NS_WSSE = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
const NS_WSU  = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
const NS_DS   = 'http://www.w3.org/2000/09/xmldsig#';
const C14N    = 'http://www.w3.org/2001/10/xml-exc-c14n#';

function podepisSoap(string $bodyXml, string $certPem, $privKey): string {
    $d = new DOMDocument('1.0', 'UTF-8');
    $d->loadXML('<soapenv:Envelope xmlns:soapenv="'.NS_S.'"><soapenv:Header/>'
      .'<soapenv:Body xmlns:wsu="'.NS_WSU.'" wsu:Id="id-body">'.$bodyXml.'</soapenv:Body></soapenv:Envelope>');
    $sec = $d->createElementNS(NS_WSSE, 'wsse:Security');
    $sec->setAttributeNS(NS_S, 'soapenv:mustUnderstand', '1');
    $d->getElementsByTagNameNS(NS_S, 'Header')->item(0)->appendChild($sec);

    $ts = $d->createElementNS(NS_WSU, 'wsu:Timestamp');
    $ts->setAttributeNS(NS_WSU, 'wsu:Id', 'id-ts');
    $ts->appendChild($d->createElementNS(NS_WSU, 'wsu:Created', gmdate('Y-m-d\TH:i:s\Z')));
    $ts->appendChild($d->createElementNS(NS_WSU, 'wsu:Expires', gmdate('Y-m-d\TH:i:s\Z', time() + 300)));
    $sec->appendChild($ts);

    $der = preg_replace('/-----[^-]+-----|\s/', '', $certPem);
    $bst = $d->createElementNS(NS_WSSE, 'wsse:BinarySecurityToken', $der);
    $bst->setAttribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary');
    $bst->setAttribute('ValueType', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3');
    $bst->setAttributeNS(NS_WSU, 'wsu:Id', 'id-cert');
    $sec->appendChild($bst);

    $sig = $d->createElementNS(NS_DS, 'ds:Signature');  $sec->appendChild($sig);
    $si  = $d->createElementNS(NS_DS, 'ds:SignedInfo'); $sig->appendChild($si);
    $cm = $d->createElementNS(NS_DS, 'ds:CanonicalizationMethod'); $cm->setAttribute('Algorithm', C14N); $si->appendChild($cm);
    $sm = $d->createElementNS(NS_DS, 'ds:SignatureMethod'); $sm->setAttribute('Algorithm', 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'); $si->appendChild($sm);

    $body = $d->getElementsByTagNameNS(NS_S, 'Body')->item(0);
    foreach (['id-ts' => $ts, 'id-body' => $body] as $id => $node) {
        $r = $d->createElementNS(NS_DS, 'ds:Reference'); $r->setAttribute('URI', '#'.$id);
        $tr = $d->createElementNS(NS_DS, 'ds:Transforms');
        $t = $d->createElementNS(NS_DS, 'ds:Transform'); $t->setAttribute('Algorithm', C14N);
        $tr->appendChild($t); $r->appendChild($tr);
        $dm = $d->createElementNS(NS_DS, 'ds:DigestMethod'); $dm->setAttribute('Algorithm', 'http://www.w3.org/2001/04/xmlenc#sha256');
        $r->appendChild($dm);
        $r->appendChild($d->createElementNS(NS_DS, 'ds:DigestValue',
            base64_encode(hash('sha256', $node->C14N(true, false), true))));
        $si->appendChild($r);
    }
    openssl_sign($si->C14N(true, false), $sv, $privKey, OPENSSL_ALGO_SHA256);
    $sig->appendChild($d->createElementNS(NS_DS, 'ds:SignatureValue', base64_encode($sv)));

    $ki = $d->createElementNS(NS_DS, 'ds:KeyInfo');
    $str = $d->createElementNS(NS_WSSE, 'wsse:SecurityTokenReference');
    $ref = $d->createElementNS(NS_WSSE, 'wsse:Reference');
    $ref->setAttribute('URI', '#id-cert');
    $ref->setAttribute('ValueType', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3');
    $str->appendChild($ref); $ki->appendChild($str); $sig->appendChild($ki);
    return $d->saveXML();
}
```

Výsledná zpráva (zkráceno, formátováno jen pro čtení):

```xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <wsse:Security xmlns:wsse="...wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
      <wsu:Timestamp wsu:Id="id-ts">
        <wsu:Created>2026-09-23T13:04:05Z</wsu:Created>
        <wsu:Expires>2026-09-23T13:09:05Z</wsu:Expires>
      </wsu:Timestamp>
      <wsse:BinarySecurityToken EncodingType="...#Base64Binary" ValueType="...#X509v3" wsu:Id="id-cert">MIID...</wsse:BinarySecurityToken>
      <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
          <ds:Reference URI="#id-ts">...sha256...</ds:Reference>
          <ds:Reference URI="#id-body">...sha256...</ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>Y9r8...</ds:SignatureValue>
        <ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#id-cert" ValueType="...#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo>
      </ds:Signature>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body wsu:Id="id-body">
    <odeslaniZpravPozadavek xmlns="http://www.gem.com/b2b/wss/2">
      <typZpravy>VyzadaneUdajeOPojistenciB2B</typZpravy>
      <pozadavek poradiPozadavku="1"><obsahZpravy>PHZ5emFk...</obsahZpravy></pozadavek>
    </odeslaniZpravPozadavek>
  </soapenv:Body>
</soapenv:Envelope>
```

Odeslání: HTTP POST na `https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMUWSSOdeslaniZprav`, hlavičky `Content-Type: text/xml; charset=utf-8` a `SOAPAction: "http://www.gem.com/b2b/wss/2/odeslaniZprav/process"`, TLS s přístupovým (komerčním) certifikátem. Pozor: TLS běží s přístupovým certifikátem, podpis zprávy s podpisovým (u nás kvalifikovaným).

Pozn.: dokument VZP uvádí SSL 3.0 / TLS 1.0 – text je z roku 2015. Spojení s bránou SIMU funguje; jakou verzi TLS brána domluví, jsme nezjišťovali.

Zdroj: VZP [Popis rozhraní pro partnery v5.4](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani5_4.zip), [Žurnál B2B pro partnery](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani_zurnal_partnera.zip), [Služby pro SE](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani_sluzby_pro_se.zip).

## Služby pro soudní exekutory

Pro SE jsou dvě služby: synchronní validace čísla pojištěnce a asynchronní vyžádané údaje (vrátí mimo jiné zaměstnavatele = plátce pojistného). Specifikace verze 1.5, 11. 4. 2018. *(PDF `docs-vzp/B2B_rozhrani_Sluzby_pro_SE.pdf` v našem balíčku nese verzi 1.45 z 25. 9. 2016; jestli se od ní obsah liší, jsme neověřovali.)*

### ValidaceCislaPojistenceSEB2B (synchronní)

| Element požadavku | Typ | Povinný | Poznámka |
| --- | --- | --- | --- |
| kDatu | date | ano | Datum, k němuž se ověřuje |
| cisloPojistence | `\d{9,10}` | ne | Může být neúplné – pak doplnit další údaj |
| prijmeni, jmeno, rodnePrijmeni | string | ne | Zpřesnění při více shodách |
| datumNarozeni | date | ne |  |

Odpověď: `pojistenec` (cisloPojistence, **priznakCislaPojistence**, zdravotniPojistovna kod/nazev) + `stavVyrizeniPozadavku`: 1 nalezen, 0 nenalezen, 9 více záznamů, −1 technická chyba, −2 chyba vstupu.

### VyzadaneUdajeOPojistenciB2B (asynchronní)

| Element požadavku | Typ | Povinný | Poznámka |
| --- | --- | --- | --- |
| idZpravy | `[0-9A-Za-z]{1,12}` | ano | Vrátí se v `korelaceZpravy` |
| idSubjektu | string ≤ 12 | ano | IČ soudního exekutora |
| typSubjektu | enum | ano | `se` |
| zadost/nazevSubjektu | string | ano | Název úřadu |
| zadost/adresaSubjektu | string | ano | Adresa úřadu |
| zadost/cisloRozhodnuti | string | ano | Číslo soudního rozhodnutí |
| zadost/cisloJednaci | string | ano | Č. j. exekutora |
| zadost/rozhodneDatum | date | ano |  |
| zadost/cisloPojistence | string ≤ 12 | ano | Z validace |
| zadost/priznakCislaPojistence | integer | ano | Z validace |
| zadost/dokument (nazev ≤ 20 zn., mime, obsah base64) | complex | ne | Pověření, `application/pdf` nebo `image/jpeg`; od 2013 nepovinné |

Odpověď `vyzadaneUdajeOPojistenci`: udajeKeDni, referent, stav (kod/popis), jméno, příjmení, rodné příjmení, datum narození, adresa, materskeUP, zdravotniPojistovna, stavPojisteni, **udajeZamestnavatele 0..N** (cisloPlatce, nazev, adresa), kategorieStatnihoPojistence, kategorieSamoplatce, udajeSamoplatce (cisloUctu, rokPrehledu, prijmy, vydaje).

Stavy: 2 zpracovává se (čekat na další odpověď), 1 OK, 0 nenalezeno, −2 chyba vstupu, −3 bez oprávnění, −9 chyba zpracování (kontaktovat ekk@vzp.cz).

### Testovací data SIMU (maketa)

| Služba | Vstup | Odpověď makety |
| --- | --- | --- |
| ValidaceCislaPojistenceSEB2B | cisloPojistence `8012125854` | stav 1 (ověřeno 24. 9. 2026: příznak `1`, ZP kód `222` „NÁRODNÍ ZDRAVOTNÍ POJIŠŤOVNA ČESKÉ REPUBLIKY" – fiktivní hodnota makety, v číselníku níže není) |
| ValidaceCislaPojistenceSEB2B | jiné číslo | stav 0 |
| VyzadaneUdajeOPojistenciB2B | jakýkoli validní požadavek | fiktivní údaje, stav 1 (podle dokumentu VZP z roku 2016). **Ověřeno 24. 9. 2026: maketa na žádost s číslem `8012125854` a příznakem `1` vrátila `stavVyrizeniPozadavku` 0 („Data nenalezena"), bez údajů** – s dokumentem VZP se to rozchází. Původní domněnka (číslo vede u jiné pojišťovny, kód 222, proto 0) **byla 2. 10. 2026 vyvrácena**: stejný stav 0 vrátila i žádost se zcela nahodilým, nikdy nevalidovaným číslem (`1234567890`, příznak `0`, odesláno dvakrát se shodným výsledkem) a žádost se známým číslem `8012125854`, ale s příznakem `99` místo `1` z validace. **Celkem 5 nezávislých pokusů s různými kombinacemi čísla a příznaku, všechny se stavem 0** – maketa tedy v SIMU u našeho účtu nevrací fiktivní data se stavem 1 podle dokumentace, bez ohledu na vstup. Nahlášeno VZP 2. 10. 2026 (ekk@vzp.cz, vlákno „SIMU B2B – testovací číslo pojištěnce pro služby SE"), čeká se na odpověď. |

Zdroj: ZIP VZP – [B2B rozhraní: Služby pro SE](https://media.vzpstatic.cz/media/Default/dokumenty/ekk/b2b_rozhrani_sluzby_pro_se.zip) (PDF + XSD + WSDL).

## Příklady volání

Oba payloady níže projdou validací proti XSD od VZP (xmllint). URL odpovídá jmenné konvenci z dokumentace VZP; první volání v SIMU ji potvrdilo (24. 9. 2026).

**SOAP požadavek – validace (SIMU, maketa vrátí stav 1):**

```xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:v="http://xmlns.gemsystem.cz/ValidaceCislaPojistenceSEB2B">
  <soapenv:Body>
    <v:validaceCislaPojistenceSEB2BPozadavek>
      <v:kDatu>2026-09-23</v:kDatu>
      <v:cisloPojistence>8012125854</v:cisloPojistence>
    </v:validaceCislaPojistenceSEB2BPozadavek>
  </soapenv:Body>
</soapenv:Envelope>
```

**curl:**

```bash
curl -sS --cert klient.crt.pem --key klient.key.pem \
  -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "process"' \
  --data @validace.xml \
  'https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMUValidaceCislaPojistenceSEB2B'
```

**PHP (SoapClient):**

```php
$url = 'https://simu.b2b.vzp.cz/B2BProxy/HttpProxy/SIMUValidaceCislaPojistenceSEB2B';
$client = new SoapClient(__DIR__.'/ValidaceCislaPojistenceSEB2B.wsdl', [
    'location'       => $url,
    'local_cert'     => '/etc/vzp/klient.pem', // cert + key v jednom PEM
    'passphrase'     => getenv('VZP_KEY_PASS'),
    'soap_version'   => SOAP_1_1,
    'exceptions'     => true,
    'trace'          => true,
    'stream_context' => stream_context_create(['ssl' => ['verify_peer' => true]]),
]);
$odp = $client->process(['kDatu' => date('Y-m-d'), 'cisloPojistence' => '8012125854']);
// $odp->stavVyrizeniPozadavku, $odp->pojistenec->priznakCislaPojistence
```

**Payload – vyžádané údaje (odesílá se přes WS-Secure jako base64 v `obsahZpravy` zprávy `WSSOdeslaniZprav`, obálka viz „WS-Secure" a „Podepsaná zpráva" výše; AS2 se nepoužívá):**

```xml
<v:vyzadaneUdajeOPojistenciB2BPozadavek
    xmlns:v="http://xmlns.gemsystem.cz/VyzadaneUdajeOPojistenciB2B">
  <v:idZpravy>EX2026000001</v:idZpravy>
  <v:idSubjektu>00000000</v:idSubjektu>
  <v:typSubjektu>se</v:typSubjektu>
  <v:zadost>
    <v:nazevSubjektu>Exekutorský úřad Praha 2</v:nazevSubjektu>
    <v:adresaSubjektu>Nábřeží 43, 120 00 Praha 2</v:adresaSubjektu>
    <v:cisloRozhodnuti>12 EXE 3456/2026</v:cisloRozhodnuti>
    <v:cisloJednaci>001 EX 1234/26</v:cisloJednaci>
    <v:rozhodneDatum>2026-09-23</v:rozhodneDatum>
    <v:cisloPojistence>8012125854</v:cisloPojistence>
    <v:priznakCislaPojistence>0</v:priznakCislaPojistence>
  </v:zadost>
</v:vyzadaneUdajeOPojistenciB2BPozadavek>
```

Hodnoty jsou fiktivní; `priznakCislaPojistence` se bere z odpovědi validace (validace vrací pro číslo `8012125854` příznak `1`, ne `0` jako v tomto příkladu).

## Chyby a troubleshooting

`stavVyrizeniPozadavku` z CommonB2B.xsd – platí pro všechny služby:

| Kód | Význam | Co dělat |
| --- | --- | --- |
| 1 | Nalezen jeden záznam / OK | Zpracovat |
| 2 | Přijato, čekat na další odpověď | Nefinální, čekat |
| 0 | Data nenalezena | Zkontrolovat vstup |
| 9 | Více záznamů | Doplnit jméno, příjmení, datum narození |
| −1 | Technická chyba | Opakovat později |
| −2 | Chyba vstupních dat | Validovat proti XSD |
| −3 | Role nemá oprávnění | Služba není aktivovaná ve smlouvě / špatný typ subjektu |
| −4 | Duplicitní idZpravy | Generovat unikátní ID |
| −8 | Překročen limit nepřevzatých zpráv (jen WS-Secure) | Vyzvednout a potvrdit dřívější odpovědi, teprve pak odeslat znovu |
| −9 | Zpracuje se později / chyba zpracování | Kontaktovat ekk@vzp.cz |
| −10 | Zpráva pro jiné prostředí | SIMU vs. PROD endpoint/certifikát |

**Doporučené reakce partnera na HTTP a síťové chyby** (přímo z dokumentu VZP „Popis rozhraní pro partnery" v5.4, kap. 2.1.7.1; VZP tam píše „ASW" = aplikační software partnera). U všech níže platí, že požadavky se mají do vyřešení odkládat a ne zahazovat:

| Kód / situace | Význam podle VZP | Doporučená reakce |
| --- | --- | --- |
| HTTP 401 | Použitý certifikát nebyl autorizován k přístupu ke službě | Pokud stav přetrvává, kontaktovat VZP a přidat nebo změnit přístupový certifikát; bez zásahu správce dál nevolat |
| HTTP 403 | Přístup ke službě zakázán podle B2B kategorie | Kontaktovat VZP a požádat o úpravu přístupu |
| HTTP 404 | Pro požadavek nebyla nalezena služba | Zkontrolovat URL proti té, kterou VZP sdělila; je-li shodná, kontaktovat VZP |
| HTTP 503 | Služba je přetížená nebo partner překročil povolený počet volání (kategorie); odpověď nese hlavičku `Retry-After` | Nevolat dřív, než uplyne počet sekund z `Retry-After` (dřívější volání se zakazuje); bez hlavičky nejdříve za **5 minut** |
| HTTP 500 | Služba je momentálně nefunkční | Opakovat nejdříve za **2 hodiny** |
| TCP „Connection refused" / „timeout" | Brána není dostupná nebo přenos trval dlouho | Nejdřív ověřit lokální připojení k internetu a povolený port 443; je-li v pořádku, chovat se jako u HTTP 500 (opakovat za **2 hodiny**) |
| Chyba sestavení SSL | Chyba je na straně partnera, když není přístup k přístupovému certifikátu; jinak na straně brány | Je-li přístup k certifikátu funkční a problém je na bráně, opakovat po **4 hodinách** |
| SOAP: rozhraní nesouhlasí | Odpověď nebo požadavek neodpovídá očekávanému datovému rozhraní | Kontaktovat VZP a vyžádat si aktuální rozhraní služby |
| SOAP Fault `InvalidSecurity` / „Timestamp could not be validated" (WS-Secure) | Podpis zprávy nebo čas | Zkontrolovat podpis a čas serveru (NTP) |

Opakovat se má jen po 503 a po technických výpadcích výše; před odesláním je vhodné zprávu ověřit proti XSD. Prodlevy 5 minut, 2 hodiny a 4 hodiny jsou doporučení VZP, ověřit se nám je nepodařilo (chybu brány jsme nevyvolali).

**Typické problémy:**

- TLS handshake selže – certifikát není spárovaný nebo je kvalifikovaný (nemá autentizační použití). Ověřit na StavCertifikatuB2B.
- HTTP 503 – překročen rate limit; dodržet `Retry-After`, jinak se blokace prodlužuje.
- HTTPS inspekce antiviru/proxy rozbije klientský certifikát – výjimka pro `*.b2b.vzp.cz`.

**Podpora ekk@vzp.cz** – poslat UID, subjekt, přesné znění chyby od VZP a síťový log.

## Provoz a bezpečnost

- Soukromý klíč mimo webroot, práva 600, vlastník = uživatel, pod kterým komunikace běží; heslo klíče z proměnné prostředí, ne z kódu.
- Hlídat expiraci klientského certifikátu (typicky 1 rok) a roční výměnu certifikátů VZP; nový klientský certifikát je nutné znovu spárovat. U nás: kvalifikovaný podpisový certifikát platí do **5. 12. 2026**, komerční do 9. 9. 2027, podpisové certifikáty VZP do 24. 3. 2027 a TLS certifikát brány do 18. 2. 2027.
- Logovat idZpravy, korelaceZpravy, stav a čas; osobní údaje z odpovědí do logů neukládat.
- Asynchronní odpovědi párovat přes korelaceZpravy a zpracovat idempotentně (přijde víc odpovědí na jeden požadavek).

## Checklist SIMU → produkce

- [x] Komerční certifikát vydaný (PostSignum / I.CA / eIdentity) – PostSignum Public CA 4, SN `0107B3FB`, platí do 9. 9. 2027, spárovaný se SIMU účtem (produkci zatím ne)
- [x] SIMU účet založený přes ekk@vzp.cz, typ subjektu SE
- [x] Validace: `8012125854` vrací stav 1 (24. 9. 2026; komerční certifikát bez řetězce stačí)
- [ ] Vyžádané údaje: odpověď makety se stavem 1, párování přes korelaceZpravy (odeslání, avízo, příjem, ověření podpisu a potvrzení ověřeno 24. 9. 2026 dvakrát a párování přes `korelaceZpravy` funguje; **odpověď se stavem 1 a údaji o pojištěnci ještě nepřišla** – maketa vrátila stav 0, pravděpodobně proto, že číslo `8012125854` vede u NZP (222), ne u VZP)
- [ ] Smlouva / dodatek s VZP včetně aktivace služeb pro SE
- [ ] Produkční certifikát spárovaný, UID zjištěné na StavCertifikatuB2B
- [ ] Konfigurace endpointů a certifikátů oddělená pro SIMU / PROD (SIMU: adresa s prefixem `SIMU`, komerční a podpisový certifikát a veřejný certifikát `vzp-podpis-simu.pem` hotové; produkce čeká na smlouvu a spárovaný certifikát)

## Otevřené otázky

- [x] Získat obecný dokument `B2B_rozhrani_X.X` (AS2, podpis, šifrování, příjem odpovědí)
- [x] Ověřit URL služeb pro SE prvním voláním v SIMU – potvrzeno 24. 9. 2026 na ValidaceCislaPojistenceSEB2B (`SIMU` + název služby)
- [x] Ověřit komunikaci s komerčním certifikátem na SIMUStavCertifikatuB2B (VZP o to žádá v e-mailu z 22. 9. 2026)
- [ ] Vystupovat bude úřad exekutora (IČ) – certifikát by měl být na úřad, ne na fyzickou osobu?
- [x] Rozhodnuto: WS-Secure (pull, bez vlastního serveru), AS2 se nepoužije
- [ ] Aktuálně podporované verze TLS na bráně (dokument VZP uvádí zastaralé SSL 3.0 / TLS 1.0) – spojení s bránou SIMU funguje, konkrétní domluvenou verzi jsme nezjišťovali

## Limity a frekvence volání

- Max. 2 zprávy za 3 s (kategorie 1) – mezi voláními držet odstup ≥ 1,5 s.
- Odeslání: až 5 žádostí v jednom `odeslaniZprav` (atomicky).
- Avizo: poprvé nejdřív 10 min po odeslání; na nové zprávy obecně 1× denně. Častější kontrolu při čekajících žádostech VZP neupravuje – držet konzervativně, příp. dohodnout s ekk@vzp.cz.
- Validaci necachovat nad rámec jednoho dne; stejný dotaz opakovaně neodesílat.

## Hromadné dotazy (např. 100 rodných čísel)

VZP **nemá službu, která by v jednom požadavku vzala víc rodných čísel** (na rozdíl od ZP MV a Portálu ZP). Ověřeno v XSD i v originálních dokumentech VZP:

- `ValidaceCislaPojistenceSEB2B` – jedno číslo pojištěnce na jedno volání (synchronně).
- `VyzadaneUdajeOPojistenciB2B` – jedna žádost = jedno číslo pojištěnce (`zadost` obsahuje jediné `cisloPojistence`).
- `WSSOdeslaniZprav` – v jednom volání **1 až 5 zpráv stejného typu**, atomicky (projdou všechny, nebo žádná). Tedy nejvýš 5 žádostí, každá s vlastním číslem pojištěnce.
- `WSSPrijemZprav` – stažení nejvýš 5 odpovědí najednou; `WSSPotvrzeniZprav` – potvrzení víc zpráv v jednom volání.

Na 100 čísel tedy připadá 100 validací, až 100 žádostí (jen u těch, co validace ukázala u VZP – ostatní se u VZP nedají zjistit), tj. 20 volání odeslání po pěti, a stejně tak 20 volání příjmu po pěti, plus potvrzení. Validace navíc musí předcházet (příznak čísla pojištěnce je v žádosti povinný). Při odstupu ≥ 1,5 s trvá samotných 100 validací aspoň 2,5 minuty.

Dokument VZP „Popis rozhraní pro partnery v privátní síti" (v1.2, 1. 7. 2015, kap. 1) navíc výslovně říká, že rozhraní WS-Secure nesmí být „bezdůvodně přetěžováno dávkovým zpracováním nebo opakovaným dotazováním", a že standardní cesta pro větší objemy je AS2. Kolik je „dávka", dokument nedefinuje.

Odeslání další zprávy VZP odmítne stavem **-8**, pokud existuje nepotvrzená zpráva libovolného typu starší než dobu určenou VZP, nebo pokud počet nevyzvednutých zpráv stejného typu přesáhne určené množství. **Konkrétní počet ani dobu dokumenty neuvádějí** – je to nastavení konkrétního partnera. Při odesílání dávky proto hrozí, že se limit nepotvrzených odpovědí překročí. Doporučení: před prvním hromadným dotazem se zeptat ekk@vzp.cz na (1) přípustný objem jednorázové dávky, (2) limit a dobu nepotvrzených zpráv, (3) případně na navýšení kategorie; a odpovědi průběžně potvrzovat.

## Akceptace v SIMU

- [x] Validace `8012125854` → stav 1 s příznakem a pojišťovnou; jiné číslo → stav 0 (obojí ověřeno 24. 9. 2026)
- [x] Odeslání žádosti s `idSubjektu` 00000000 → stav 1 a idPozadavku (24. 9. 2026, `idPozadavku` `2460460`; odpověď má prvky v jmenném prostoru `http://www.gem.com/b2b/wss/2` s prefixem `ns1:`)
- [x] Avizo → příjem → ověření podpisu VZP → potvrzení (vše ověřeno 24. 9. a 2. 10. 2026, celkem na 5 žádostech; podpis odpovědi se pokaždé ověřil, nepotvrzenou zprávu lze stáhnout opakovaně, `WSSPotvrzeniZprav` vrací stav 1 s kořenovým prvkem `ns1:potvrzeniZpravOpoved` – jako v XSD, s překlepem). **Chybí jen větev s fiktivními údaji pojištěnce a stavem 1** – maketa ji dosud nikdy nevrátila, viz tabulka testovacích dat výše a nahlášení VZP z 2. 10. 2026
- [x] Zpráva po potvrzení už není v avizu (24. 9. 2026; prázdné avízo = `avizoOdpoved` se `stavVyrizeniPozadavku` 1 a bez prvku `avizoSeznamZprav`, ne stav 0). Potvrzenou zprávu už nelze stáhnout znovu: `WSSPrijemZprav` vrátí celkový `stavVyrizeniPozadavku` 1, ale zpráva uvnitř má `stavVyrizeniZpravy` 0 a jen `idOdpovedi` (bez typu, času a obsahu)
- [ ] Záznam v ZurnalPartneraB2B odpovídá stavu v databázi (zatím nezkoušeno)

## Číselníky

Většina kódovaných polí v odpovědi VZP přichází jako dvojice `kod` + `nazev`/`popis`. Doporučuje se ukládat oba údaje a zobrazovat text od VZP – lokální číselníky níže slouží jen pro kontrolu a filtrování.

### Zdravotní pojišťovny (`zdravotniPojistovna/kod`)

| Kód | Pojišťovna | Součinnost řešit přes |
| --- | --- | --- |
| 111 | Všeobecná zdravotní pojišťovna ČR | VZP B2B (tento dokument) |
| 201 | Vojenská zdravotní pojišťovna ČR | Portál ZP |
| 205 | Česká průmyslová zdravotní pojišťovna | Portál ZP |
| 207 | Oborová zdravotní pojišťovna zaměstnanců bank, pojišťoven a stavebnictví | Portál ZP |
| 209 | Zaměstnanecká pojišťovna Škoda | Portál ZP |
| 211 | Zdravotní pojišťovna ministerstva vnitra ČR | ZP MV (samostatná komunikace) |
| 213 | RBP, zdravotní pojišťovna | Portál ZP |

Praktické použití: validace vrátí kód pojišťovny → 111 pokračovat vyžádanými údaji u VZP, jiný kód předat do komunikace s Portálem ZP nebo ZP MV.

### Kategorie státních pojištěnců (`kategorieStatnihoPojistence`)

| Kód | Kategorie |
| --- | --- |
| B | Nezaopatřené dítě 15–26 let (studium) |
| C | Poživatel důchodu |
| D | Osoba nad 26 let v doktorském studiu |
| E | Příjemce peněžité pomoci v mateřství / rodičovského příspěvku |
| G | Uchazeč o zaměstnání |
| H | Příjemce dávky pomoci v hmotné nouzi |
| I | Osoba závislá na péči (st. II–IV) a osoba o ni pečující |
| L | Osoba pečující o dítě do 7 let |
| M | Příjemce dávky z doplňkového důchodového spoření |
| N | Invalidita III. stupně bez důchodu / důchodový věk bez nároku na důchod |
| O | Příjemce dávky nemocenského pojištění |
| V | Cizinec s dočasnou ochranou / azylem |
| W | Manžel(ka) státního zaměstnance v zahraničí |
| 1, 2 | Pěstounská péče / pečující osoba s dávkou |

Zdroj kódů: oficiální poučení k formuláři zdravotních pojišťoven pro rok 2026 (společné pro všechny ZP). Že VZP v B2B odpovědi používá právě tato písmena, dokumentace neuvádí – ověřit na první odpovědi, vždy ukládat i `nazev`.

### Samoplátci (`kategorieSamoplatce`, `udajeSamoplatce`)

OSVČ a OBZP (osoba bez zdanitelných příjmů) platí pojistné samy. Pro exekutora jsou u nich důležité `cisloUctu` (účet, ze kterého platí) a u OSVČ `rokPrehledu`, `prijmy`, `vydaje` z posledního přehledu.

### Pole bez zveřejněného číselníku

| Pole | Jak s ním zacházet |
| --- | --- |
| `priznakCislaPojistence` | Neprůhledná hodnota z validace; beze změny předat do `VyzadaneUdajeOPojistenciB2B` (tam jako integer). Význam VZP nepopisuje. |
| `stavPojisteni/kod` + `popis` | Stav pojištění k datu; ukládat oba, zobrazovat `popis`. |
| `stav/kod` + `popis` (ve vyžádaných údajích) | Výsledek zpracování žádosti referentem; ukládat oba. |
| `materskeUP/kod` | Kód územního pracoviště VZP (formát `[1-9][0-9]00`, např. 1100). |
| `stavVyrizeniPozadavku` | Pevný číselník – viz oddíl Chyby a troubleshooting (+ −8 u WS-Secure). |

### Číslo pojištěnce

`CisloPojistenceTyp` = 9–10 číslic. Většinou jde o rodné číslo, ale existují i čísla přidělená VZP (cizinci, agenda EU): k měsíci se přičítá +20 (muži) nebo +70 (ženy) a ke dni +50. Číslo pojištěnce se proto nesmí validovat jako rodné číslo (datum, modulo 11).

Zdroje: [VZP – Zdravotní pojišťovny](https://www.vzp.cz/poskytovatele/ciselniky/zdravotni-pojistovny), [Poučení k oznámení pojištěnce 2026 (ZP MV)](https://www.zpmvcr.cz/system/files/dokumenty/2026-01/Pou%C4%8Den%C3%AD%20k%20ozn%C3%A1men%C3%AD%20poji%C5%A1t%C4%9Bnce_2026.pdf), [VZP – Nový formát čísla pojištěnců](https://www.vzp.cz/o-nas/aktuality/oznameni-o-novem-formatu-cisla-pojistencu).

## Příloha A – podpisové certifikáty VZP (PEM)

Platné do 24. 3. 2027; po roční výměně stáhnout nové z [Certifikáty VZP](https://www.vzp.cz/e-vzp/informace-pro-sw-firmy/b2b-komunikace/certifikaty-vzp).

**vzp-podpis-simu.pem** (CN = VZP podpisSIMU):

```
-----BEGIN CERTIFICATE-----
MIIJATCCBumgAwIBAgIJAoAfRIdR4ZsmMA0GCSqGSIb3DQEBDQUAMIGBMSowKAYD
VQQDDCFJLkNBIEVVIFF1YWxpZmllZCBDQTIvUlNBIDA2LzIwMjIxLTArBgNVBAoM
JFBydm7DrSBjZXJ0aWZpa2HEjW7DrSBhdXRvcml0YSwgYS5zLjEXMBUGA1UEYQwO
TlRSQ1otMjY0MzkzOTUxCzAJBgNVBAYTAkNaMB4XDTI2MDMyNDA5MzkxNloXDTI3
MDMyNDA5MzkxM1owgZgxFzAVBgNVBAMMDlZaUCBwb2RwaXNTSU1VMQswCQYDVQQG
EwJDWjE+MDwGA1UECgw1VsWhZW9iZWNuw6EgemRyYXZvdG7DrSBwb2ppxaHFpW92
bmEgxIxlc2vDqSByZXB1Ymxpa3kxFzAVBgNVBGEMDk5UUkNaLTQxMTk3NTE4MRcw
FQYDVQQFEw5JQ0EgLSAxMDc5MDgyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBANCflwoO5Lekjv0vNFD46YLfSZMATb+uaGzwC8xU4w3E9SDdpqHdC8jv
trYLz387mXRkkodCTy/mRyeQ9peLzZhXSpUDwbDus8dArJYfvLScV092t5iL+T/G
0do6o4uel8vX69c5hnLbIp39x0rRNtzrsOYyPRB+LQSl+5VWZquGsScwA58QCXXY
bJTgDtpIIwla7neXLSJUeGNrc99KSmpq8Iu9r0IgtCotiGNOVTUesJ9c/0+M6uDf
MMMxegN2A0be97e0bfyipvhKHt8H1pqvAo49d06zZvb+p+9Wl2XwIifijI7DCbxL
wooMpo1rz7LQI0a9UcxbD9wDK+/e+4Cq3nV3B2kd1TUVs93NMoaZBrKfkKeGQxgJ
1bjlmHO/qA4JQOvK0D/Pyd/DB9lk9db8OKLwPzZe16yl0hQcO9uvyq4Aga0R0pZx
WDdD7n7tBY11Rz8TdtCC7FUpv7Ug+fGQ5j0Gt1kEQ+LOP9EOdZFOW24P7kQpQSfu
zdSqgK4iysXKQDQiGF7n/caHlapEBW441fMoK4/dGi6RWfC0fL1v+Qs0MGO5upwB
mRZ2K5oByaK4SUEZ4u6+B0nesIQjO6kTOdn+tAY9G2e2Qlfzvi++nqieHBteugOr
qCK694n8SlPkxiAP7N2V+/VajC93QyadODm/ZjXfLxuuCqKwORktAgMBAAGjggNh
MIIDXTA2BgNVHREELzAtgRFwZXRyLnZpdGVrQHZ6cC5jeqAYBgorBgEEAYG4SAQG
oAoMCDEwNzkwODIxMA4GA1UdDwEB/wQEAwIF4DAJBgNVHRMEAjAAMIIBIwYDVR0g
BIIBGjCCARYwggEHBg0rBgEEAYG4SAoBHwEAMIH1MB0GCCsGAQUFBwIBFhFodHRw
Oi8vd3d3LmljYS5jejCB0wYIKwYBBQUHAgIwgcYMgcNUZW50byBrdmFsaWZpa292
YW55IGNlcnRpZmlrYXQgcHJvIGVsZWt0cm9uaWNrb3UgcGVjZXQgYnlsIHZ5ZGFu
IHYgc291bGFkdSBzIG5hcml6ZW5pbSBFVSBjLiA5MTAvMjAxNC5UaGlzIGlzIGEg
cXVhbGlmaWVkIGNlcnRpZmljYXRlIGZvciBlbGVjdHJvbmljIHNlYWwgYWNjb3Jk
aW5nIHRvIFJlZ3VsYXRpb24gKEVVKSBObyA5MTAvMjAxNC4wCQYHBACL7EABATCB
jwYDVR0fBIGHMIGEMCqgKKAmhiRodHRwOi8vcWNybGRwMS5pY2EuY3ovMnFjYTIy
X3JzYS5jcmwwKqAooCaGJGh0dHA6Ly9xY3JsZHAyLmljYS5jei8ycWNhMjJfcnNh
LmNybDAqoCigJoYkaHR0cDovL3FjcmxkcDMuaWNhLmN6LzJxY2EyMl9yc2EuY3Js
MIGGBggrBgEFBQcBAwR6MHgwCAYGBACORgEBMFcGBgQAjkYBBTBNMC0WJ2h0dHBz
Oi8vd3d3LmljYS5jei9acHJhdnktcHJvLXV6aXZhdGVsZRMCY3MwHBYWaHR0cHM6
Ly93d3cuaWNhLmN6L1BEUxMCZW4wEwYGBACORgEGMAkGBwQAjkYBBgIwZQYIKwYB
BQUHAQEEWTBXMCoGCCsGAQUFBzAChh5odHRwOi8vcS5pY2EuY3ovMnFjYTIyX3Jz
YS5jZXIwKQYIKwYBBQUHMAGGHWh0dHA6Ly9vY3NwLmljYS5jei8ycWNhMjJfcnNh
MB8GA1UdIwQYMBaAFIr/YLK2SFAljy7NQ1M7CITFyuhkMB0GA1UdDgQWBBQo6id7
sHC87uHz4wveW965FvhToDAfBgNVHSUEGDAWBggrBgEFBQcDBAYKKwYBBAGCNwoD
DDANBgkqhkiG9w0BAQ0FAAOCAgEAOeR5IFK+IKzglX1jymZvCvU9oI37pMoJ9KZN
OlAzIzPPmAEBGSZ3D7QB+VAiEpLimq4eADyJofx3hNvtMAn4xRk2nsg3DYlgwXeQ
0eUYu/+K820RUjzG4RaO8FDhV4qf37y8CnwLZkl26kaEVZ6EPtNw3Ss3eykOYUDf
47s0sYfcb9y8OOFjWuX1m+0FPDK/X6tjZ2p0cPymv5r+ffgkNRJb8W337fW2XZlh
OgI8ALP7AfeffYUnxN8hQ5Dj09qZtZjsgeBExm9deXAV7aBLQKhmouZBcdpPxI+h
mLFsE6B0IoH3bIlwbev+LRQ0MLQ+5S47d7QSgUURg4HZ9L+6+LH79LTCIduA9a5u
R5H/qWy/XiLoH5NEkJ7j7kpVBqROGwf838+tBwInQPAvq0TaDZHIb97csk4wcM5b
jC76ZsZsV69k+xph5Nr3t9PXfhyelmpvyBew4DEjTq5Jh5owOtojP/hZa4j+S7uZ
I+TBpbknoSoqJYUVAbff9/mu9Iy7khJXPPIDCzYCnsk3RRVqWe7OZC7KpfD3ABOg
nb7S/jQAArF91thYCIC3lW1+F8Z26kQEu527+Mbyk5rBPHUHgpNA09EBHSzcTg1l
Z79JLZ1ro9PZICJWrxUsv1SIr5d/ewGY9RI0HJvR1lDus8p+KRH9lCKTNZw9ouyI
v6jwCxI=
-----END CERTIFICATE-----
```

**vzp-podpis-prod.pem** (CN = VZP podpis):

```
-----BEGIN CERTIFICATE-----
MIII/TCCBuWgAwIBAgIJAtEGY1O2GlFZMA0GCSqGSIb3DQEBDQUAMIGBMSowKAYD
VQQDDCFJLkNBIEVVIFF1YWxpZmllZCBDQTIvUlNBIDA2LzIwMjIxLTArBgNVBAoM
JFBydm7DrSBjZXJ0aWZpa2HEjW7DrSBhdXRvcml0YSwgYS5zLjEXMBUGA1UEYQwO
TlRSQ1otMjY0MzkzOTUxCzAJBgNVBAYTAkNaMB4XDTI2MDMyNDA5NDU1M1oXDTI3
MDMyNDA5NDU1MFowgZQxEzARBgNVBAMMClZaUCBwb2RwaXMxCzAJBgNVBAYTAkNa
MT4wPAYDVQQKDDVWxaFlb2JlY27DoSB6ZHJhdm90bsOtIHBvamnFocWlb3ZuYSDE
jGVza8OpIHJlcHVibGlreTEXMBUGA1UEYQwOTlRSQ1otNDExOTc1MTgxFzAVBgNV
BAUTDklDQSAtIDEwNzkwODIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEAxZGDYBXWxCK4Lrb6m9L9M+mdpLeHn/fch/8wths7CEUeqziVCi6wCfF47z2M
LxSfUt3bi5uyh8ZabTQCVuOsDj/J4uaRnpOj4UhMHmuVpClrNCKPw4Avy3+yvdXW
U6ALx7GP2g7LB7FKrUrHKZLBLdQhVmO3WcyJhUjb8r7kDrfh6vG8Xf3taN3PZKW+
1muBW4FkNZOgCpAonbyQgJ5hkle3CxDj9v6Tb3S9mNZQfo8H+PRpTOu+iLINguzg
dNzzq0oSedxSlnCqI9jYQXtETA6sSJz/zKe7wC1DYNik5+1/rTb3P4HZpRYnoy8M
ZhCHwNRsJPJiNLrlz5qQoivHiNR4yqUBAOGc852AyYEs/BXt37sjsdtw7mmHMtwO
cNZBtnoQF6nk2aC6X4cKYgvFULYGqB5H5G0QLduc8fxVpkexWXe7Atf9IqsekmUp
YNUWJksHVRFoy7zPruL9BTlDXdpQzGZvp7EOqfy6HBFlI0g1Hb0S68JKUfyHEc5w
O8QIkAD1GSq67ykg8KyURW6S2fAPVRw+YtZyQd63XMmbMSZTnBWf4wx1UBQhH5fp
5tKCVEOpDWaJzc9uHeEtSuQ5SEk3ZVKNwbIIhTQYthVSGXV4gP8nTKGtcrxw/Kuj
fa8h/d3UBYJCv5zu0Kj5v+pBcHxV4WIWG1YlHYZvI8Y1ODkCAwEAAaOCA2EwggNd
MDYGA1UdEQQvMC2BEXBldHIudml0ZWtAdnpwLmN6oBgGCisGAQQBgbhIBAagCgwI
MTA3OTA4MjAwDgYDVR0PAQH/BAQDAgXgMAkGA1UdEwQCMAAwggEjBgNVHSAEggEa
MIIBFjCCAQcGDSsGAQQBgbhICgEfAQAwgfUwHQYIKwYBBQUHAgEWEWh0dHA6Ly93
d3cuaWNhLmN6MIHTBggrBgEFBQcCAjCBxgyBw1RlbnRvIGt2YWxpZmlrb3Zhbnkg
Y2VydGlmaWthdCBwcm8gZWxla3Ryb25pY2tvdSBwZWNldCBieWwgdnlkYW4gdiBz
b3VsYWR1IHMgbmFyaXplbmltIEVVIGMuIDkxMC8yMDE0LlRoaXMgaXMgYSBxdWFs
aWZpZWQgY2VydGlmaWNhdGUgZm9yIGVsZWN0cm9uaWMgc2VhbCBhY2NvcmRpbmcg
dG8gUmVndWxhdGlvbiAoRVUpIE5vIDkxMC8yMDE0LjAJBgcEAIvsQAEBMIGPBgNV
HR8EgYcwgYQwKqAooCaGJGh0dHA6Ly9xY3JsZHAxLmljYS5jei8ycWNhMjJfcnNh
LmNybDAqoCigJoYkaHR0cDovL3FjcmxkcDIuaWNhLmN6LzJxY2EyMl9yc2EuY3Js
MCqgKKAmhiRodHRwOi8vcWNybGRwMy5pY2EuY3ovMnFjYTIyX3JzYS5jcmwwgYYG
CCsGAQUFBwEDBHoweDAIBgYEAI5GAQEwVwYGBACORgEFME0wLRYnaHR0cHM6Ly93
d3cuaWNhLmN6L1pwcmF2eS1wcm8tdXppdmF0ZWxlEwJjczAcFhZodHRwczovL3d3
dy5pY2EuY3ovUERTEwJlbjATBgYEAI5GAQYwCQYHBACORgEGAjBlBggrBgEFBQcB
AQRZMFcwKgYIKwYBBQUHMAKGHmh0dHA6Ly9xLmljYS5jei8ycWNhMjJfcnNhLmNl
cjApBggrBgEFBQcwAYYdaHR0cDovL29jc3AuaWNhLmN6LzJxY2EyMl9yc2EwHwYD
VR0jBBgwFoAUiv9gsrZIUCWPLs1DUzsIhMXK6GQwHQYDVR0OBBYEFJlH9FkQhv/V
duuEMOxW1FbHmgDFMB8GA1UdJQQYMBYGCCsGAQUFBwMEBgorBgEEAYI3CgMMMA0G
CSqGSIb3DQEBDQUAA4ICAQCbRu9uF8GbxvHNiWX2YsQJB2x95z+/Ex3uZIUBVi/y
MvV1pGxVQus3pZVrZs2G+7rNqisgz6tL4FmakfSc4CyOOAfODkvbGtI43O3Jk8Pg
n7Ei3kov7LcnsbCkZedrk8U0fbTDtFcFQab4IdJkVOVPlhfOKWGHZkJrvQ2bXuFm
/BECdZwmoQlAuYlgN6Top0yzVk7eVmRuMLTcjb5nr9WrwBY/IW4g3ybnShipumDb
ohkTZ+08yLfasUvWGYiX3ay/wA3d186j8kp5L57CqqxHMPxru6sFuy4vOzS2q3MB
PH2FRdz/yUak593zDabgQzMyrOLdp+vVClBRpCNFZGiFBlo6depl5HSfm8sjQkru
S3F+w5/Rx101xmAFJtfbiaTrNIRls80UDoVcM2UKl21b1W2KW44P03kwJL/ZcwYb
9U+bBF2cRtoNaNkOZwcORYro60NmBq8vVu3glbbDS9JegUx4+mf4toc2wbpCFuVc
j+0HONfMbzbbrcAd6j6X6IVZtkZtlI/OulnAcfyC7o86GsnIk7oXOWA9+CbFK1x0
mWvg81Afv7/T4KxDdNTFd6MgoIWf5WAYx0bXD5GYR2uZssX1oO/3yIMAuLz4swT+
EYLTutEJRX1BEdwq0w+21q8upxB/ZaMBGbRbgppFe0hhzmRzd2WAEpyXcfYwmbzn
rA==
-----END CERTIFICATE-----
```
