Cześć,
Czy jest tu ktoś, komu udało się dokonać integracji z systemem NFZ do zleceń na zaopatrzenie w wyroby medyczne i wykonać na nim z sukcesem metodę "putDocument"? Niestety mi za każdym razem zwraca "91011 - Błąd walidacji ze schemą", mail ezpo nie odpowiada i nie mam pomysłu do kogo się zwrócić po pomoc ani co jeszcze spróbować przestawić w kodzie. Przykładowa przechodząca koperta soap to już w ogóle byłaby super.
Też mam ten błąd.
Udało się rozwiązać problem tego błędu?
Mój plik wygląda tak:
<dokument-zpo
xmlns="https://ezwm.nfz.gov.pl/xml/e-zpo/dok-zlecenia/v2.1" typ-nad="S" ow-nad="01" id-nad="123456789" id-inst-nad="IRIS3_2_3" id-tech-dokumentu="IRIS0000001" nr-wersji="1" data-gen="2020-02-03 14:15:59">
<zlecenie>
<miejsce-wystawienia-zlecenia nazwa="medi sp. z o.o." regon="12345678901234">
<swd ow-nfz="01" kod-swd="1234567890"></swd>
<adres kod-poczt="50-502" miejscowosc="Wrocław" ulica="Hubska" nr-domu="11" nr-lokalu="1" kod-kraju="PL"></adres>
</miejsce-wystawienia-zlecenia>
<pacjent typ-id-osoby="P" plec="2" id-osoby="22222222222" nazwisko="Kasina" imie="Anna"></pacjent>
<okreslenie-wyrob-med>
<okulary odleglosc-zrenic="83">
<soczewka rodzaj="B" oko="L" pryzma:="1" sfera:="1" cylinder:="10" os:="100"></soczewka>
<soczewka rodzaj="B" oko="P" pryzma:="1" sfera:="10" cylinder:="12" os:="90"></soczewka>
</okulary>
</okreslenie-wyrob-med>
<dane-dt-wystawienia data-wystawienia="2020-02-03">
<osoba-uprawniona typ-pers-zlec="11" id-zlec="123456789" nazwisko="Lecznica" imie="Danuta"></osoba-uprawniona>
</dane-dt-wystawienia>
</zlecenie>
</dokument-zpo>
Nie, pisałam do [email protected] i na razie czekam na odpowiedź (przez telefon wyrazili chęć pomocy). Jak wspomniałam, wcześniej pisałam wielokrotnie do ezpo, ale odpowiedzieli tylko raz w październiku. Wskazali wtedy dwa problemy które miałam ze swoim zleceniem: że data-gen powinna być w formacie data-gen="2019-09-25T1400 i że <kobieta-w-ciazy /> samym pojawieniem się informuje że kobieta jest w ciąży. Dostosowanie się do ich uwag nic nie zmieniło.
Obiecałem sobie, że jak mi się uda to udostępnię prawidłową odpowiedź dla potomnych :)
Ze względu na dane wrażliwe zmieniłem lekko request, ale w razie pytań chętnie pomogę :)
<ns2:dokument-zpo xmlns:ns2="https://ezwm.nfz.gov.pl/xml/e-zpo/dok-zlecenia/v2.1" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" typ-nad="S" ow-nad="07" id-nad="11111111" id-inst-nad="11111111-00001" id-tech-dokumentu="PM185797" nr-wersji="1" data-gen="2020-05-29T11:19:49">
<ns2:zlecenie>
<ns2:miejsce-wystawienia-zlecenia nazwa="Przychodnia" regon="123456789">
<ns2:swd ow-nfz="07" kod-swd="11111111"/>
<ns2:adres kod-poczt="11-111" miejscowosc="test" ulica="testowa" nr-domu="70"/>
</ns2:miejsce-wystawienia-zlecenia>
<ns2:pacjent typ-id-osoby="P" id-osoby="12345678901" nazwisko="TEST" imie="TEST"/>
<ns2:okreslenie-wyrob-med>
<ns2:okulary>
<ns2:soczewka rodzaj="D" oko="P" sfera="-1.00" cylinder="-1.00" os="1" pryzma="0.75"/>
</ns2:okulary>
</ns2:okreslenie-wyrob-med>
<ns2:dane-dt-wystawienia data-wystawienia="2020-05-29">
<ns2:osoba-uprawniona typ-pers-zlec="11" id-zlec="1234567" nazwisko="LEKARZ" imie="KASIA"/>
</ns2:dane-dt-wystawienia>
</ns2:zlecenie>
</ns2:dokument-zpo>
okazało się że miałam złe kodowanie przesyłanego pliku -- powinno być utf8, nfz wspominał o tym chyba niedawno w jakimś powiadomieniu
Eh ten nfz i ich komunikaty :). Przy okazji masz może u siebie funkcjonalność pobierania PDF zrobioną? Komunikacja u mnie śmiga, ale za nic nie mogę poprawnie odkodować pliku :/
Niestety, zawsze miałam przekłamania na kilku bajtach więc po prostu zapisuję na dysku całego zipa -- windows umie go rozpakować. Jeszcze nie kazali mi tego zmienić.
No nic, powalczę :). Dla pewności zapytam. Ten zakodowany plik Base64 co jest w response to już domyślnie jest w formacie .zip?
Tak, ta byte[] co się ją dostaje w Streamloadzie to plik zip.
Super, dzięki wielkie za podpowiedź :)
Witam
Piszę w c# (winforms) integrację z powyższym systemem. Logowanie działa ale mam problem z wysyłaniem zlecenia. Dla uproszczenia wysyłam zlecenie testowe z tego wątku ale za każdym razem dostaję informacje Brak danych wejściowych. Czy ktoś może spotkał się z takim problemem? Niżej przesyłam fragment metody którą wysyłam zlecenie. Z góry dziękuję za wszelkie wskazówki.
private void Wysylanie()
{
ServiceRequest serviceReq = new ServiceRequest();
serviceReq.location = new EzwmWSB.ServiceLocation();
serviceReq.location.@namespace = "www.nfz.gov.pl/ws/broker/nfz/e-zpo/zlecenie";
serviceReq.location.localname = "putDocument";
serviceReq.location.version = "2.1";
XmlDocument doc = new XmlDocument();
EndpointAddress endpointAddress = new EndpointAddress("https://test-ezwm.nfz.gov.pl/ws-broker-server-ezlec/services/ServiceBroker");
serviceBinding.ReceiveTimeout = new TimeSpan(0, 0, 240);
string Xml = "<ezwm:dokument-zpo xmlns:ezwm=\"https://ezwm.nfz.gov.pl/xml/e-zpo/dok-zlecenia/v2.1\" typ-nad=\"S\" ow-nad=\"14\" id-nad=\"11111111\" id-inst-nad=\"11111111-00001\" id-tech-dokumentu=\"123\" nr-wersji=\"1\" data-gen=\"2020-12-02Y11:11:11\">" +
"<ezwm:zlecenie>" +
"<ezwm:miejsce-wystawienia-zlecenia nazwa=\"przych\" regon=\"5345234861\">" +
"<ezwm:swd ow-nfz=\"10\" kod-swd=\"11111111\"/>" +
"<ezwm:adres kod-poczt=\"11-400\" miejscowosc=\"Kraków\" ulica=\"Ulica\" nr-domu=\"1\"/>" +
"</ezwm:miejsce-wystawienia-zlecenia>" +
"<ezwm:pacjent typ-id-osoby=\"P\" id-osoby=\"12345678901\" nazwisko=\"Jan\" imie=\"KOWALSKI\"/>" +
"<ezwm:okreslenie-wyrob-med>" +
"<ezwm:okulary>" +
"<ezwm:soczewka rodzaj=\"D\" oko=\"P\" sfera=\"-1.00\" cylinder=\"-1.00\" os=\"1\" pryzma=\"0.75\"/>" +
"</ezwm:okulary>" +
"</ezwm:okreslenie-wyrob-med>" +
"<ezwm:dane-dt-wystawienia data-wystawienia=\"" + DateTime.Now.ToShortDateString() + "\">" +
"<ezwm:osoba-uprawniona typ-pers-zlec=\"11\" id-zlec=\"1234\" nazwisko=\"Nowak\" imie=\"Barbara\"/>" +
"</ezwm:dane-dt-wystawienia>" +
"</ezwm:zlecenie>" +
"</ezwm:dokument-zpo>";
doc.LoadXml(Xml);
serviceReq.payload = new Payload();
serviceReq.payload.textload = doc.DocumentElement;
EzwmWSB.session sesja = new EzwmWSB.session();
sesja.id = m_Sesja.id;
EzwmWSB.authToken token = new EzwmWSB.authToken();
token.id = m_AuthTok.id;
serviceReq.date = DateTime.Now;
ServiceBrokerClient servBrokCli = new ServiceBrokerClient(serviceBinding, endpointAddress);
ServiceResponse servResp = null;
try
{
servResp = servBrokCli.executeService(sesja, token, serviceReq);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return;
}
XmlDocument respXml = new XmlDocument();
respXml.LoadXml(servResp.payload.textload.OuterXml);
....
}
Z tego co widzę, w ramach payload ustawiasz tylko textload, i to na wartość która powinna być przesyłana w streamloadzie. Należy ustawiać i textload, i streamload.
Przykładowy textload:
<komunikat xmlns="https://ezwm.nfz.gov.pl/ws/broker/nfz/xml/e-zpo/document/v2.1" nazwa-sys="MOJA NAZWA" tryb-przeslania="1" typ="https://ezwm.nfz.gov.pl/xml/e-zpo/dok-anulowania-zlec/v2.1" wersja-sys="2.1.4"/>
Przykładowy streamload został już wcześniej podany, z tym że trzeba go jeszcze zzipować (w kodowaniu UTF-8) i zrobić z niego tablicę bajtów.
Dzięki za konkretną odpowiedź. Pytanie odnośnie tego zip - mam zzipować stringa czy może wygenerować plik xml i potem go spakować?
P.S. Pozwolę sobie zadać jeszcze kilka pytań -
- Czy czy treść textload zawiera się w streamload? Np. jako nadrzędny element czy może textload i streamload ma wyglądać "dokładnie" jak ten pokazane w tym temacie? Dokładnie tzn. te same atrybuty z innymi zmiennymi w zależności czy wysyłam zlecenie czy anulowanie itd.
- Proporties "stream" obiektu payload jest typu PayloadStreamload. Ten z kolei ma dwa properties "name" w co nie wiem co mam wpisać i proporties "stream" typu "base64Binary" którego z kolei proprties Value typu bite[] gdzie podaję ową tablicę bajtów. Czy dobrze rozumiem?
- Czy tylko mi się wydaję że dokumentacja całej integracji jest raczej skąpa, ogólnikowa?
Uwaga, poniższe odpowiedzi to tylko moje opinie / "u mnie tak działa"; nie jest wykluczone że może działać też inaczej.
- Zajrzyj do schem .xsd -- nie wiem jak w c#, ale w javie można sobie z nich wygenerować klasy (dzięki czemu łatwo wypełniać obiekty zlecenia), a po zmarshallowaniu do stringa można sprawdzić ich zgodność ze schemą (dzięki czemu od razu wiesz jeśli czegoś nie wypełniłeś). Jestem przekonana że podobne pomocne mechanizmy istnieją w innych popularnych językach.
Textload i streamload są równorzędne, elementem nadrzędnym do nich jest payload. - W "name" dajesz nazwę przesyłanego pliku zlecenia. W przesyłanym archiwum zip (teoretycznie) może być wiele plików, więc w ten sposób wskazujesz o który chodzi.
- Tzn jeśli weźmie się pod uwagę te wszystkie pliki .xsd to nie jest taka znów ogólnikowa. "Technicznie" wiadomo jakie mają być pola, jakiego typu i które są kiedy obowiązkowe. Natomiast brakuje czasem wyjaśnienia co one właściwie znaczą, skąd wziąć słowniki dla tych wszystkich kodów i skąd brać nazwy / identyfikatory systemu. Placówka medyczna nie zawsze pomoże.
Nie wiem o co chodzi w pierwszym pytaniu, więc odpowiem przez przykład.
W javie tworzenie streamloada moze wyglądać mniej więcej tak (gdzie xmlDokument to taki xml co został już podany):
Streamload streamloadZpoDoc(String xmlDokument)
{
Streamload streamload = new Streamload();
final String fileName = "zlecenie.xml";
streamload.setName(fileName);
Base64Binary value = new Base64Binary();
value.setValue(zipString(xmlDokument, fileName));
streamload.setStream(value);
return streamload;
}
byte[] zipString(String entry, String entryName)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ZipOutputStream zipOut = new ZipOutputStream(baos, StandardCharsets.UTF_8))
{
ZipEntry ze = new ZipEntry(entryName);
zipOut.putNextEntry(ze);
zipOut.write(entry.getBytes(StandardCharsets.UTF_8));
zipOut.closeEntry();
}
return baos.toByteArray();
}
- rzeczywisty kod generujacy klasy C# pliku JPK MAG. Generalnie narzędzie nie pobiera schem po http, trzeba je ręcznie ściągnąć. Widoczne xsd to materialne pliki leżące w tym samym katalogu.
xsd /c /namespace:moje.swojskie.generated ElementarneTypyDanych_v4-0E.xsd KodyKrajow_v4-1E.xsd KodyUrzedowSkarbowych_v4-0E.xsd Schemat_JPK_MAG(1)_v1-0.xsd StrukturyDanych_v4-0E.xsd KodyCechKrajow_v3-0E.xsd Schemat_JPK_KR1_v1-0.xsd
- Schemy rodziny JPK nie mają problemu ze słownikami. Nie jestem wyjadaczem, wiem o nich tyle, ile muszę, ale jest dobrze (rządowy soft w pionie skarbowym w mojej opinii zwykle jest lepszej jakości 3) niż społecznym czy pożal się boże sądowym).
Czyli się da zrobić 100% ścisłą schemę XML, tylko czasem ktoś odpuszcza / polegnie.
- choć zwolnienie podatkowe 26 latków zj...li już w samych koncepcjach, były wielokrotnie "patchowane" aby choć trochę były kompatybilne z realiami.
@AnyKtokolwiek:
3. W tym przypadku słowników nie dostajemy w schemie (niektóre enumy tak), tylko są do pobrania z różnych stron NFZ, czasem trochę "ukrytych" (i zmieniają się cyklicznie).
Ponownie dziękuję za odzew. @cas__ Dzięki za przykład. Muszę jeszcze jednak z tym powalczyć. Nie jestem pewien czy dobrze tworzę tego zipa z tych danych. Czy wystarczy jak zippuję tego string (co np. mam w swoim kodzie z zleceniem) i zamienie na byte array?