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:

E-deklaracje POZ - Wydruk z oficialnej transformaty P1 od CeZ (dawniej CSIOZ)
Wydruk E-deklaracji POZ

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ć:

  1. 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
  2. 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,
  3. 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,
  4. 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,
  5. Przesłać komunikat SOAP do systemu P1 i odebrać wiadomość,
  6. Zweryfikować w komunikacie odpowiedzi nagłówek WS-Security,
  7. 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.