Co znajdziesz w artykule?
Usługa SOAP – E-deklaracje POZ
E-deklaracje POZ SOAP (Web Service) jest to kolejna usługa w ramach projektu P1 stworzona przez CeZ (dawniej CSIOZ). Pozwala ona na informatyzację obsługi procesu składania deklaracji wraz z jego realizacją.
Integracja z systemem P1 w zakresie E-deklaracji POZ od centrum E-zdrowia umożliwia nam:
- Odczyt E-deklaracji POZ – wyszukiwanie deklaracji złożonych do przychodni POZ przez pacjenta na IKP (Internetowe Konto Pacjenta),
- Odczyt szczegółów E-deklaracji – umożliwia pobranie pliku XML E-deklaracji z szczegółami np. danymi pacjenta. Dodatkowo otrzymujemy oficjalną transformatę wydruku takiego XML, dzięki czemu możemy wydrukować deklaracje,
- Realizacje przyjęcia E-deklaracji – możliwość przyjęcia elektronicznej deklaracji wyboru lekarza, pielęgniarki oraz położnej podstawowej opieki zdrowotnej,
- Odmówienie przyjęcia E-deklaracji – możliwość odmówienia realizacji deklaracji wraz z dodaniem powodu w postaci komentarza.
UWAGA! – SOAP nie posiada zapytania do dodawania E-deklaracji POZ
E-deklaracja POZ – co to jest?
E-Deklaracja POZ jest to dokument elektroniczny deklaracji zgodny z Rozporządzeniem Ministra Zdrowia z dnia 12 czerwca 2018 r. w sprawie wzorów deklaracji wyboru świadczeniodawcy udzielającego świadczeń z zakresu podstawowej opieki zdrowotnej (POZ).
Pacjent składa taki dokument jeżeli chce dokonać wyboru/zmiany lekarza rodzinnego, pielęgniarki lub położnej w ramach POZ – podstawowej opieki zdrowotnej. Warto zwrócić uwagę, że pacjent może posiadać różne deklaracje w innych przychodniach – np. lekarza w przychodni 1, a pielęgniarkę w przychodni 2.
Jak wygląda elektroniczna deklaracja POZ dostarczona przez SOAP od Centrum E-Zdrowia (dawniej CSIOZ)?
Plik XML dokumentu E-deklaracji POZ dostarczony przez odczyt szczegółów E-deklaracji prezentuje się w następujący sposób:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:DeklaracjaPOZ>
<dataWystawienia>2021-01-29T14:22:40.749+01:00</dataWystawienia>
<uuidDeklaracji>xc3320c5-9fx6-265x-96ab-55d2991684dx</uuidDeklaracji>
<typDeklaracji>LEKARZ</typDeklaracji>
<swiadczeniodawca>
<adres>TESTOWA 2, WROCŁAW 50-000</adres>
<nazwa>Przychodnia Testowa</nazwa>
<identyfikatorPodmiotu>
<root>2.16.840.1.113883.3.4424.2.3.1</root>
<extension>000000000000</extension>
</identyfikatorPodmiotu>
<identyfikatorPlacowki>
<root>2.16.840.1.113883.3.4424.2.3.3</root>
<extension>000</extension>
</identyfikatorPlacowki>
<ktoraDeklaracjaWRoku>PIERWSZA_LUB_DRUGA</ktoraDeklaracjaWRoku>
</swiadczeniodawca>
<pracownikMedyczny>
<imie>Janina</imie>
<nazwisko>Kowalska</nazwisko>
<numerPWZ>1110000</numerPWZ>
<ktoraDeklaracjaWRoku>PIERWSZA_LUB_DRUGA</ktoraDeklaracjaWRoku>
</pracownikMedyczny>
<danePacjenta>
<imie>MAŁGORZATA MARIA</imie>
<nazwisko>Dudek</nazwisko>
<dataUrodzenia>1993-08-17+02:00</dataUrodzenia>
<plec>KOBIETA</plec>
<pesel>93011100000</pesel>
<adresZamieszkania>
<kodPocztowyMiejscowosc>51-114 Wrocław</kodPocztowyMiejscowosc>
<ulica>Obornicka</ulica>
<numerDomuMieszkania>83a / 4</numerDomuMieszkania>
</adresZamieszkania>
<numerTelefonu>+480000000000</numerTelefonu>
<adresEmail>000000000@mail.com</adresEmail>
<daneOpiekunow/>
</danePacjenta>
<ds:Signature>
<!-- Podpis Elektroniczny -->
</ds:Signature>
</ns2:DeklaracjaPOZ>
Jak można zauważyć, XML zawiera szczegółowe informacje o deklaracji, pacjencie, przychodni, pracowniku medycznym oraz dodatkowe słowniki:
typDeklaracji:
- LEKARZ
- PIELEGNIARKA_PIELEGNIARZ
- POLOZNA_POLOZNY
statusDeklaracji (osobne pole w odpowiedzi od p1 CeZ):
- ZAAKCEPTOWANA
- ANULOWANA
- WYCOFANA
- WYGASŁA
- WYSTAWIONA
Natomiast wydruk dokumentu E-deklaracji POZ wykorzystujący oficjalną transformatę wygląda w następujący sposób:

Co trzeba zrobić aby zaimplementować własne E-deklaracje POZ API lub E-deklaracje POZ bibliotekę?
W jaki sposób napisałem swoja integrację w P1?
Jestem programistą .NET, piszę aplikacje głównie webowe (.net core + react / .net core MVC), ale również desktopowe (WPF), czy mobilne (Flutter). Po wielu niepowodzeniach pisania implementacji w .NET, postanowiłem zmienić taktykę i powrócić do pisania kodu w języku JAVA. Po prostu prościej jest tam zaprogramować integracje, z powodu wielu gotowych bibliotek. Całą integracje z P1 odnośnie wszystkich usług napisałem w JAVIE, natomiast integracji używam w .NET przez API – Azure Functions Java.
Wymogi które trzeba spełnić:
- Posiadać dwa certyfikaty: placowka_TLS.p12 i placowka_WSS.p12 dostarczone od Centrum E-zdrowia dla placówki medycznej. Jeżeli posiadamy już dostęp do systemu P1 uzyskany w ramach innych usług np. E-recept lub E-Skierowań, otrzymujemy automatycznie uprawnienia w zakresie E-deklaracji POZ. Oznacza to, że nie jest wymagane ponowne złożenie wniosku. Jeżeli nie posiadamy takich certyfikatów, należy złożyć wniosek o przydzielenie ich na poniższej stronie:
https://ezdrowie.gov.pl/portal/home/dla-dostawcow/pytania-i-odpowiedzi-dla-integratorow-programistow-dostawcow-oprogramowania - Połączyć się z Web Service w sposób bezpieczny wykorzystując certyfikat TLS z obustronnym uwierzytelnianiem. W Javie wykorzystamy tutaj klasy SSLContext, KeyManagerFactory, TrustManagerFactory z pakietu javax.net.ssl,
- Przygotować poprawny komunikat XML zgodny z przekazanymi plikami WSDL/XSD. W Javie możemy wygenerować gotowe klasy z XSDL lub WSDL, wykorzystać XJC lub org.apache.cxf, albo napisać własne szablony XML i podmienić tekst,
- Przygotować koperty SOAP z nagłówkiem WS-Security (XML Signature, wykorzystując certyfikat WSS) – W Javie możemy użyć w tym celu bibliotekę org.apache.wss4j,
- Przesłać komunikat SOAP do systemu P1 i odebrać wiadomość,
- Zweryfikować w komunikacie odpowiedzi nagłówek WS-Security,
- Zinterpretować odpowiedź systemu P1.
Co ciekawe, usługa e-deklaracji nie wymaga od nas dodatkowego certyfikatu użytkownika np. lekarza do wysłania zapytania.
Ukryte pułapki integracji z E-Deklaracjami POZ – na co uważać?
Niestety pomijając bardzo ciężką integracje z samym system P1, istnieją również dodatkowe ukryte pułapki w usługach. W SOAP E-deklaracji POZ jest to pułapka podwójnego Base64 pliku XML deklaracji.

Treść E-deklaracji, która zostaje dostarczona przez zapytanie „Odczyt szczegółów E-deklaracji” jest zakodowana dwa razy Base64.
Nie jest problemem aby odkodować dwa razy Base64, ale najpierw trzyba o tym wiedzieć. Niestety nigdzie w dokumentacji nie znalazłem informacji, że jest to właśnie podwójny Base64. Napotkałem informację, że treść jest zakodowana w Base64, ale przydałoby się tam wtrącenie, że podwójnie… No więc skąd ja wiedziałem że to podwójny Base64? A miałem takie szczęście że ktoś dobry mi o tym powiedział 😀
Oczywiście, o powyższym problemie poinformowałem Centrum E-zdrowia i poprosiłem o dodatkowy zapisek w dokumentacji.