Krajowy system e-Faktur

0

Zauważyłem, że obecnie sesja interaktywna nie musi być zamykana i wystawione w niej faktury zaraz otrzymują numer KSeF. Tak chyba nie było, prawda? Piszę o środowisku testowym.

0

Czy pobieranie faktur zakupu, które spływają od podmiotów zewnętrznych, lepiej ogarniać za pomocą:

/online/Query/Invoice/Sync

czy

/online/Query/Invoice/Async/Init
/online/Query/Invoice/Async/Fetch

Czy są jakieś plusy/minusy obu metod, ograniczenia lub zalecenia?

0

Z serii nieudokumentowanych funkcji API ... nie KSeF, ale z nim związanych ;) (API: https://ksef-test.mf.gov.pl/web/api/invoice)
Widziałem, że w aplikacji testowej MF dodali możliwość pobrania faktury w formacie XML, HTML i PDF.
Sprawdziłem, czy zadziała pobieranie tych zawartości za pomocą tokena sesji interaktywnej.

Przetestowane tylko na platformie testowej, ale może komuś się przyda ... no i trzeba mieć na uwadze, że to jest z ich aplikacji, więc mogą to zmienić :(

2023-11-09 20:43
Testowałem jeszcze trochę to rozwiązanie no i niestety muszę poinformować, że działa tylko w tej samej przeglądarce, w której jest właśnie otwarta sesja aplikacji MF :( ... pewnie działa przez jakieś zapamiętane "ciasteczka" w ramach przeglądarki ... bo nawet nie było trzeba podawać tokena sesji.

0

Cześć, mam do was pytanie jak to najlepiej zrobić. Jestem na etapie, że mogę wysyłać wiele faktur za pomcoą sesji interaktywnej, z racji tego że tego jest kilka/kilanaście faktur wykorzystuję pętle do wysyłanai po kolei faktur zamiast wysyłki wsadowej i to działa, ale chciałem się zapytać o dalszy krok czyli zapisywanie statusu faktury i odbierania UPO.

W skrócie
-> u mnie po wysłaniu faktur odpytuję o status sesji i na podstawie odpowiedzi (SessionStatusResponse), gdzie jeśli faktura ma kod 200, zapisuję nr ksef w bazie danych, bo gdy faktura ma kod 200, pojawia się jej nr ksef.
Ale teraz jest to zrobione u mnie na sztywno, czyli że po wysłaniu faktur czekam X sekund i sprawdzam wtedy dopiero status sesji.
Czy tutaj bardziej jakieś odpytywanie o status sesji wraz z upływem czasu miałoby większy sens ? I załóżmy że sesja się zamyka gdy:

a) wszystkie faktury mają kod 200 albo
b) sesja zamyka się automatycznie, po 4 wywołaniu statusu sesji (pierwsze wywołanie po 1 sek, drugie po 6, trzecie po 12 , czwarte po 24 ?), i zapisuję stan faktury "wysłana czyli kod 200" lub "nie wysłana" (kod inny niż 200)
Dlaczego tak myślę zrobić? Bo klient po kliknęciu przycisku "wyślij faktury" oczekiwałby jakiejś odpowiedzi po X czasie, a jakieś procesowanie w tle faktur albo zostawianie otwartej sesji dłużej przy takiej małej ilości mija się z celem ?

  1. UPO
    w tym przypadku jeśli bym faktycznie wymuszał zamknięcie sesji po określonym czasie cały proces wysyłki faktur do ksef mógłby zostać zakończony generowaniem UPO, czy lepiej nie łączyć tego z powyższym procesem opisanym na początku mojego pytania?
    Tylko wtedy musiałbym stworzyć typowy automat, i zapisywać nr referencyjny każdej sesji w jakiejś tabeli i automatycznie zapisywać UPO gdzieś w katalogu.

Generalnie chyba najważniejszą informacją dla mnie jest sprawdzenie statusu sesji i jeśli tam procesowana faktura ma kod 200 to już dla mnie jest temat zamknięty, bo faktura otrzymała nr ksef itp.
Ale teraz nie wiem czy cały proces wysyłki faktur do KSEF kończyć generowaniem UPO czy po prostu statusem faktury.

0

zna ktoś pełen wachlarz parametrów i dopuszczalnych wartości dla https://ksef-test.mf.gov.pl/api/online/Query/Invoice/Sync ... np.:

  • subjectType: "subject1", "subject2", "subject3", ... i co tam jeszcze może być?
  • type: "incremental", ... i co tam jeszcze może być ... i z jakimi dodatkowymi parametrami?
{
  "queryCriteria": {
    "subjectType": "subject2",
    "type": "incremental",
    "acquisitionTimestampThresholdFrom": "2023-11-08T00:00:00Z",
    "acquisitionTimestampThresholdTo": "2023-11-09T20:00:00Z"
  }
}
0

Ustawa o VAT z 29.10.2021 r. o zmianie ustawy o podatku od towarów i usług oraz niektórych innych ustaw, określiła budżet na wykonanie, wdrożenie i utrzymanie KSeF do roku 2031 w wysokości 230 mln PLN. Błędy w systemie o takim budżecie naprawiane są w tempie jeden ma dwa miesiące. Odpowiedzi na zgłoszenie udzielane są po dwóch tygodniach lub dłużej. Każde udostępnienie nowej wersji powoduje problemy, a niedostępności systemu w tym czasie sięgają kilku godzin. Jednocześnie, Aplikacje Krytyczne odwłasza (11.10.2023) zamówienie na testy wydajnościowe i bezpieczeństwa KSeF, w chwili gdy system działa już w zasadzie produkcyjnie. Oto jest Polska właśnie.

0

Dlaczego otrzymuję tutaj 441? Po przesłaniu do portalu testowego pojawia się komunikat: Sukces?

screenshot-20231110093316.png

screenshot-20231110093341.png

0

Może komuś się przyda, parę takich istotnych informacji wyciągnąłem tak na szybko... Głównie prawne.
KSeF.zip

0

Odnośnie #/common/Upo/{ReferenceNumber}/{UpoReferenceNumber}
W poprawnym wyniku content-type chyba powinno być application/vnd.v3+octet-stream albo ewentualnie application/octet-stream
... a jest application/json

Przecież wynik zawiera xml z UPO ... prawdę mówię, czy coś pomyliłem? :P

headers w odpowiedzi mam:

connection: keep-alive
content-length: 5854
content-type: application/json
date: Fri, 10 Nov 2023 10:53:04 GMT

... a sama odpowiedź to UPO w postaci XML

0

Czy mi się wydaje, czy w Fa(2) przy produkcie nie ma kraju pochodzenia?

0

Hej, jakiś czas temu popełniłem wpis z zapytaniem o błąd w pobieraniu UPO dla wysyłki wsadowej, gdzie wszystko dzieje się w porządku tj. inicjowanie sesji wsadowej, wysyłka części ZIP i zamknięcie sesji wsadowej. W momencie wywołania /api/common/Status/ w celu pobrania UPO, w odpowiedzi na status sesji wsadowej dostaję

"processingCode": 441,
"processingDescription": "Błąd etapu weryfikacji wyników podprocesów przetwarzania faktury",

Te same faktury wysyłane pojedynczo, zostają przyjęte przez KSeF w sesji interaktywnej i otrzymują UPO bez problemu.
ZIP sprawdzałem, jest poprawny.

Wysłałem także zapytanie do KSEF w związku z powyższym problemem ale za kilka dni minie 3 tygodnie jak czekam na odpowiedź.

Wiecie o co może chodzić z problemem opisanym powyżej? Długo czekacie na odpowiedź z KSeF?

0

Cześć,

Testuje integrację z KSeFem i mam ostatnio trochę problemów z online/Session/InitToken. Wydaje się, że nic nie zostało zmienione, a dostaje 400 z "Dokument nie jest zgodny ze schemą (xsd).".
Ten sam komunikat wysyłałem wcześniej i nie było problemów.

Patrząc na komunikat poniżej, co może być problemem? Porównując z xsd wszystko się zgadza.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:InitSessionTokenRequest xmlns="http://KSeF.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001" xmlns:ns2="http://KSeF.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001" xmlns:ns3="http://KSeF.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
  <ns3:Context>
    <Challenge>20231113-CR-7328F88FF5-1C640FAE9D-52</Challenge>
    <Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
      <ns2:Identifier>{nip}</ns2:Identifier>
    </Identifier>
    <DocumentType>
      <ns2:Service>KSeF</ns2:Service>
      <ns2:FormCode>
        <ns2:SystemCode>FA (2)</ns2:SystemCode>
        <ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
        <ns2:TargetNamespace>http://crd.gov.pl/wzor/2023/06/29/12648/</ns2:TargetNamespace>
        <ns2:Value>FA</ns2:Value>
      </ns2:FormCode>
    </DocumentType>
    <Token>{token}</Token>
  </ns3:Context>
</ns3:InitSessionTokenRequest>

Token wygląda tak: FU4gJeBiYLtODoqUrDAuXOI4EJDsfjFvDbKLr+u5PThI2kawnBJbNkhw+eyEFduqNRpDCIX2V/7kfskq4Q0rkGm6JyrLsC0KbRfxn2dJsRprx/L+fQRnSadVm2YTBxbn/19UtJONYxlQ2uIq5EQZ7SpsBBLFooPVsYxF5EoQO0C1Tu1ot0bF3v5KM1BmT5TodNTKQgyH8/2HzLNzXAfdf15TGdadLSw4b08S89fe0nxPcTI1NQMNLDJsvzzV7CwqbFBo8QwdgdUy55OPlH0p+zEBZPYO2NGGqwRKbErAMwfi7nIvyyOEmw2X5jsu9C35OrIIjEc1VZDJ1Q0utCLjFw==

0

Mam dziwne pytanie w sprawie limitów.

Mamy w dokumentacji taki zapis

online.session.authorisation.challenge | limit : 2 | czas życia : 2 | Ograniczenie na liczbę identycznych wywołań usługi authorisation.challenge w sekwencji.

I faktycznie, jak za pomocą postmana próbuję nawiązać wyzwanie autoryzacyjne więcej niż 2 razy w szybkim odstępie czasu to dostaję komunikat too many request i muszę poczekać 2 minuty.

Ale u mnie w aplikacji tych limitów nie mam (?), za każdym razem jak wyślę faktury, sesja jest terminowana i jak wysyłam kolejne, to wykonuję nowe wyzwanie autoryzacyjne z tymi samymi danymi.
image Zdjęcie poniżej ukazje wysłanie w 5 sesjach różnych faktur w ciągu niecałych 2 min (za każdym razem nowe wyzwanie autoryzacyjne)

0

Problem z pobieraniem faktur.
Wołam najpierw /online/Query/Invoice/Sync i dostaję listę nagłówków faktur, z tej listy wyciągam ksefReferenceNumber i po kolei wołam dla każdej faktury:

/online/Invoice/Get/{KSeFReferenceNumber}

I dostaję błędy:

{
	"exception": {
		"serviceCtx": "default",
		"serviceCode": "20231113-EX-DC3A19D30C-19C8F5BF77-CB",
		"serviceName": "online.invoice.invoice.get",
		"timestamp": "2023-11-13T10:14:56.146Z",
		"referenceNumber": "20231113-SE-924594EBD5-75C1CF0DA6-55",
		"exceptionDetailList": [
			{
				"exceptionCode": 21414,
				"exceptionDescription": "Nieobsługiwana wersja zapytania."
			}
		]
	}
}

Request wołam jako GET, z tokenem oraz:
content-type: application/json
accept: application/json, text/plain; q=0.9, text/html; q=0.8

Co robię źle? To najprostszy request się wydaje.

0

Tak wyglądają moje ustawienia dla RESTDebuggera:

{
"method": "GET",
"url": "https://ksef-test.mf.gov.pl/api/online/Invoice/Get/7834333820-20231106-DF5415AB0F4C-CB",
"resource": "",
"contenttype": "",
"auth": {
"method": "NONE",
"username": "",
"passwordkey": "",
"password": "",
"passwordkey": "",
"clientid": "",
"clientsecret": "",
"authcode": "",
"accesstoken": "",
"accesstokensecret": "",
"requesttoken": "",
"requesttokensecret": "",
"refreshtoken": "",
"signaturemethod": "",
"responsetype": "",
"endpointauth": "",
"endpointaccesstoken": "",
"endpointrequesttoken": "",
"endpointredirect": "",
"authscope": "",
"datasetview": 0
},
"parameters": [
{
"name": "SessionToken",
"value": "e5b46b5e1c255303afc3895b26af037d660fc4d4ebeb9e30f89205d814268f62",
"kind": "HEADER",
"encode": true
},
{
"name": "Accept",
"value": "application/octet-stream",
"kind": "HEADER",
"encode": true
}
],
"body": ""
}

0

Mam pytanie odnośnie
/common/Upo/{ReferenceNumber}/{UpoReferenceNumber}
Wysyłam :
jako ReferenceNumber numer referencyjnym
jako {UpoReferenceNumber} NumerKSeFDokumentu

GET https://ksef-test.mf.gov.pl/api/common/Upo/20231113-SE-11D666099A-28E21C32F3-25/5123823109-20231113-D3B299CE0D93-A6 HTTP/1.1
Host: ksef-test.mf.gov.pl
Accept: application/json

Otrzymuję błąd HTTP/1.1 406 Not Acceptable
/common/Status/{ReferenceNumber} działa bez problemu
Ktoś może coś wie dlaczego nie mogę pobrać danych UPO?

0

Dzień dobry,
wracając do wczorajszego wątku odnośnie RESTDebuggera w Delphi. Skoro RESTDebugger działa niepoprawnie z Content-Type=application/octet-stream, to jakich komponentów używacie w Delphi do odczytu faktury? Zestaw komponentów TRESTClient i TRESTRequest oraz TRESTResponse w innych odwołaniach do KSeF działa, a takie komponenty są tworzone przez wspomnianego RESTDebuggera. Dlatego logiczne wydawało się skorzystać właśnie z takiej drogi do tworzenia komponentów do komunikacji z KSeF. TIdHTTP?

0

Cześć, mam pytanie związane z generowanymi tokenami z poziomu web KSeFu, czy wiedzie może czy gdzieś jest informacja od MF czy te tokeny które generujemy z poziomu WEB zgodne są z jakimś wyrażeniem regularnym? Chcemy w naszej aplikacji wprowadzić walidację na pole w które użytkownik wprowadza Token otrzymany z KSeF ale nie jestem w stanie zlokalizować czy została przekazana przez MF jakaś techniczna informacja dotycząca jego poprawności czy może tylko powinniśmy patrzeć czy długość jest ok.

0

Mam pytanie odnosnie onboardingu klienta do korzystania z KSeF. Generalnie chodzi mi o to "czy tak moze byc czy trzeba jakos inaczej".
zalozmy ze firma (osoba prawna) doda sie do naszego systemu i chce sie zonboardowac do ksef.
Finalnie chodzi o utworzenie tokena ktory bedzie potem w "naszej apce" wstawiony do komunikacji z ksef.
Ale pojawilo się zagadnienie "jak to zrobic bardziej user friendly". Wiem ze firma musi miec albo pieczec albo zlozyc ZAW-FA do US i tam wyznaczyc czlowieka (pesel) ktory sie bedzie mogl zalogowac. To wszystko musi sie zadziac i byc juz w ksefowym systemie zanim w ogole zaczniemy podpinanie sie do ksefu z naszej apki.
Osoba wyznaczona przez spolke mogla by na naszej apce przejsc nazwijmy to "onboard screens" i tam pobierając xml, podpisując go (swoim profilem zaufanym/podpisem) zauploadowac i dzeiki temu wygenerowac token. (podobnie jak w przuypadku 1 os dzialalnosci).

Czy to jest poprawny flow? Jakos nie pasuje mi zeby tu wplatac autoryzowanie za pomoca pieczeci. nie ma to dla mnie kompletnie sensu.

Oczywiscie wiem ze firma moze wygenerowac token w ksef-web apce.

0

Miesiąc temu pisałem na info.ksef@mf.gov.pl, że batch nie działa ani na test, ani na prod.
Właśnie odpisali, cytuję:
nie zidentyfikowaliśmy w ostatnich dniach problemów w działaniu wysyłki batch na środowisku produkcyjny.

Oj, chyba tego ksefa to jednak nie będzie..

0

Wysyłam fakturę /online/Invoice/Send, otrzymuję elementReferenceNumber. Gdy wysyłam od razu zapytanie /online/Invoice/Status/ odpowiedz jest 320. Czy przed tym pytaniem dajecie jakiś czas oczekiwania? Ile razy i z jakimi odstępami czasu wysyłacie pytanie ponownie/? Czy przerwy powinny być zależne od wielkości faktury?

1
Komunikat nr 79 Utrudnienia w dostępie do środowiska testowego API Krajowego Systemu e-Faktur oraz Aplikacji Podatnika KSeF.
15.11.2023
15 listopada 2023 r. w godzinach od 11.00 do 12.30 będą prowadzone prace serwisowe
na środowisku testowym API Krajowego Systemu e-Faktur oraz Aplikacji Podatnika KSeF.
W tym czasie mogą wystąpić chwilowe utrudnienia w dostępie do tych środowisk.

Przepraszamy za utrudnienia.

To już robi się wkurzające, w środku dnia coś namieszają, później przez tydzień coś nie działa.

0

Lista sesji
W aplikacji WEB można sobie przejrzeć listę sesji (poprzednich i bieżącej). Nie widzę w API metody, która by to umożliwiała. Jestem ślepy, czy nie ma takiej metody?

0

Taki przypadek - wysyłam fakturę ze wszystkimi polami wypełnionymi:
Pozycja: Netto: 10, podatek 2,30, brutto: 12,30
Nagłówek: Netto: 10, podatek: 0; brutto: 12,30

No tak, w XML jest błąd, bo w podatku na podsumowaniu jest 0. To jak takie coś można poprawić? Przez web nijak się tego nie wprowadzi. Na pozycjach tak naprawdę nie ma zmiany, bo one są ok. To jak skorygować błędne pole w podsumowaniu (przy nagłówku)?

0

Chciałem się dowiedzieć czym jest subjectType o nazwie: subjectAuthorized

No to patrzę w te pierdy zwane szumnie "dokumentacja" i czytam:

W szczególności parametr subjectType:
subject1 – kontekst wyszukiwania znajduje się w polu podmiotu pierwszego dokumentu faktury
subject2 – kontekst wyszukiwania znajduje się w polu podmiotu drugiego dokumentu faktury
subject3 – kontekst wyszukiwania znajduje się w polu podmiotu trzeciego dokumentu faktury
subjectAuthorized – kontekst wyszukiwania znajduje się w polu podmiotu upoważnionego
dokumentu faktury

Mądrzejszy od tej dawki wiedzy się nie poczułem, zatem pytam Was, czym jest faktura wystawiona dla/przez subjectAuthorized?

0

Wywołanie get na UPO w postaci:

https://ksef-test.mf.gov.pl/api/common/Upo/20231108-SE-0678663E1E-52E80D16AE-2D/20231108-EU-E042ECF744-65EE54F0D1-D5

zwraca surowego XMLa a nagłówki response są zabawne:

Connection: keep-alive
Content-Length: 6972
Content-Type: application/json  <--- szczególnie ten
Date: Thu, 16 Nov 2023 15:27:54 GMT
0

Cześć,
Przećwiczyłem komunikację z KSeF na środowisku testowym poprzez POSTMAN i implementuje w Delphi 10.2.

Z programu Delphi pobieram token sesyjny i mogę sprawdzic status sesji lub ją zakończyc.
Zaciąłem się na synchronicznym pobieraniu faktury , ciągle otrzymuję status 400 - Bad request a dokładnie to:
{"exception":{"serviceCtx":"srvTEMFA","serviceCode":"95E4323F-6CC5-4F77-A579-1E9CCF4EEB5E","serviceName":"exception.handler","timestamp":"2023-11-16T12:59:15.148Z","exceptionDetailList":[{"exceptionCode":21180,"exceptionDescription":"Nieprawidłowe żądanie."}]}}
Kod jaki wykonuję na komponentach:

RESTRequest2.Body.ClearBody;
RESTRequest2.Params.Clear;

RESTRequest2.Client.BaseURL := 'https://ksef-test.mf.gov.pl/api';
RESTRequest2.Resource := 'online/Invoice/Get';
RESTRequest2.accept := 'application/json';
RESTRequest2.AcceptCharset := 'utf-8';
RESTRequest2.Method := rmGet;

//   RESTRequest2.AddAuthParameter('SessionToken', EditSessionToken.Text, pkHTTPHEADER,[]);
RESTRequest2.AddParameter('SessionToken', EditSessionToken.Text);
RESTRequest2.Params.ParameterByName('SessionToken').Kind :=  pkHTTPHEADER;
RESTRequest2.AddParameter('KSeFReferenceNumber', EditKSeFReferenceNumber.Text);
RESTRequest2.Params.ParameterByName('KSeFReferenceNumber').Kind :=  pkREQUESTBODY;
RESTRequest2.Execute;

Tak samo jest źle kiedy korzystam z utworzonej klasy REST chociaż pobieranie tokenu sesyjnego działa mi tylko na własnej klasie.
Listę faktur i KSeFReferenceNumber faktury pobrałem z Postmana i pobieranie faktury poprzez Postmana na podstawie tokenu sesyjnego
otrzymanego z programu Delphi odbywa sie prawidłowo.
Mam wrażenie, że popełniam gruby błąd ale go nie widzę. Czy ktoś z Was to dostrzega?

1

Tymczasem na rynku:

"1 września br. Ministerstwo Finansów zaktualizowało Krajowy System e-Faktur i opublikowało FA2 – nową strukturę logiczną elektronicznej faktury. Miało to ułatwić dostosowanie się do wymogów KSeF (wcześniej obowiązywały równolegle dwie struktury faktury), ale okazuje się, że nie wpłynęło to na przyśpieszenie przez przedsiębiorców przygotowań do integracji z KSeF. 9517 faktur – dokładnie tyle faktur wysłali przedsiębiorcy do KSeF od 1 do 27 września br. To oznacza, że w systemie pojawiło się zaledwie 50 faktur więcej niż miesiąc wcześniej. Co więcej, zmalała liczba podmiotów, które z KSeF skorzystały – z 512 w sierpniu – do 455 we wrześniu."

https://www.pit.pl/aktualnosci/firmy-wstrzymuja-sie-z-integracja-z-ksef-we-wrzesniu-zaledwie-10-tys-e-faktur-1008915

0

Czy ktoś próbował wygenerować identyfikator płatności? Za cholerę nie mogę tego uzyskać, niby wszystko zgodnie z dokumentacją, a nadal błędy w odpowiedzi:

headers to call <POST> on /online/Payment/Identifier/Request
[req] accept: application/json, text/plain; q=0.9, text/html; q=0.8,
[req] accept-charset: utf-8, *;q=0.8
[cli] user-agent: Embarcadero RESTClient/1.0
[req] [HEADER] Content-Type=application/json
[req] [HEADER / E] SessionToken=d018b5b86bb2b2da39e39cac2a611cbfef993051a59c474a5ca8ce23c02b4c80
[req] [BODY] body=(stream)

body or query:
{"ksefReferenceNumberList":["1254809786-20231106-D95CFF1191CE-10"]}

response after call (http code: 400): 
{
	"exception": {
		"serviceCtx": "default",
		"serviceCode": "20231118-EX-9BFB3429D7-E08008FB57-1C",
		"serviceName": "online.payment.payment.identifier.request",
		"timestamp": "2023-11-18T14:00:33.576Z",
		"referenceNumber": "20231118-SE-2A66648697-9E9DAD36BB-97",
		"exceptionDetailList": [
			{
				"exceptionCode": 31000,
				"exceptionDescription": "Nieprawidłowe wywołanie."
			}
		]
	}
}

Musi to być jakiś kardynalny błąd z mojej strony, ale go nie widzę.

0

Zamyka wam się sesja podczas wysłania requesta z terminowaniem jej?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.