GitHub

Faktura w KSeF

Droga faktury od wysłania XML do numeru KSeF, metadanych, pobrania i UPO.

Na tej stronie

W KSeF wysłanie faktury rozpoczyna przetwarzanie, ale nie jest finalnym wynikiem. API najpierw przyjmuje zaszyfrowane dane faktury do sesji. Dopiero potem KSeF asynchronicznie waliduje i przetwarza fakturę.

SDK odzwierciedla ten model: wysyłka najpierw zwraca uchwyt przetwarzania. Numer KSeF, widoczność w metadanych, pobranie faktury i UPO pojawiają się później.

XML FA(3)
  -> sesja online albo batch
    -> numer referencyjny faktury
      -> przetwarzanie KSeF
        -> numer KSeF
          -> metadane, pobranie, UPO
        -> status niepowodzenia faktury
text

Etapy

  1. Przygotuj poprawny XML faktury.

    SDK może wysłać bajty z pliku albo bajty wygenerowane przez builder FA(3).

  2. Wyślij XML przez sesję online albo batch.

    Sesje online wysyłają faktury pojedynczo. Sesje batch wgrywają przygotowaną paczkę ZIP i pokazują wyniki poszczególnych faktur po przetworzeniu paczki.

  3. Zapisz zwrócone referencje.

    Numer referencyjny faktury jest pierwszym trwałym uchwytem dla wysłanej faktury. Referencja sesji mówi KSeF, gdzie ta faktura została wysłana.

  4. Polluj status sesji albo faktury.

    Poprawna odpowiedź HTTP nie oznacza jeszcze, że faktura ma numer KSeF.

  5. Używaj finalnych identyfikatorów do pobierania i audytu.

    Po poprawnym przetworzeniu numer KSeF staje się stabilnym identyfikatorem do bezpośredniego pobierania, uzgodnień, metadanych i wielu przepływów wsparcia.

Send nie oznacza akceptacji

send_invoice() szyfruje XML i wysyła go do otwartej sesji online. Zwraca reference_number faktury.

send_invoice() zwraca uchwyt InvoiceSubmission. Jego wait() polluje status faktury, aż KSeF nada ksef_number, osiągnie terminalny błąd albo minie lokalny timeout.

submission = session.send_invoice(xml_bytes)
print(submission.reference_number)

status = session.get_invoice_status(
    invoice_reference_number=sent.reference_number,
)
print(status.status.code, status.ksef_number)
python

Identyfikatory, których nie warto mieszać

IdentyfikatorGdzie się pojawiaDo czego służy
Lokalny numer fakturyW XML faktury i lokalnym systemie.Korelacja biznesowa przed i po przetworzeniu przez KSeF.
Numer referencyjny sesjiPo otwarciu sesji online albo batch.Odnalezienie zdalnego przepływu wysyłki.
Numer referencyjny fakturyOdpowiedź z wysyłki i status faktury w sesji.Polling jednej faktury i pobranie UPO faktury po referencji.
Hash fakturyStatus faktury w sesji i przygotowanie batch.Korelacja wyników batch z lokalnymi dokumentami źródłowymi.
Numer KSeFPoprawny status faktury i metadane.Stabilny identyfikator KSeF do pobierania, uzgodnień i wsparcia.
Referencja UPOStatus sesji, gdy dostępne jest zbiorcze UPO.Pobranie strony UPO dla sesji albo batch.

Dla wysyłki batch numer referencyjny faktury może nie być widoczny, dopóki KSeF nie przetworzy wgranej paczki. Zachowaj metadane przygotowanej paczki, aby invoice_hash i invoice_file_name łączyły wyniki KSeF z lokalnymi plikami.

Metadane i pobieranie są późniejszymi powierzchniami

Status sesji mówi, co stało się z wysyłką. Metadane i pobieranie faktury są powierzchniami odczytu używanymi po przetworzeniu i materializacji faktury przez KSeF.

Używaj tych powierzchni do różnych zadań:

PowierzchniaNajlepsze pytanie
Status faktury w sesjiCzy ta wysłana faktura dostała numer KSeF albo nie przeszła przetwarzania?
Zapytanie metadanychKtóre przetworzone faktury pasują do filtrów, ról i dat?
Bezpośrednie pobranie fakturyDaj XML dla znanego numeru KSeF.
Paczka eksportuDaj większy filtrowany zestaw plików XML faktur.
UPODaj urzędowe poświadczenie dla przyjętej faktury albo sesji.
invoice_xml = auth.invoices.download(status.ksef_number)
print(len(invoice_xml))
python

Daty nie są zamienne

Metadane KSeF wystawiają kilka dat. Wybieraj datę na podstawie przepływu, a nie etykiety, która wygląda najwygodniej.

DataZnaczenie
issue_dateData deklarowana na dokumencie faktury.
invoicing_dateData otrzymania faktury przez KSeF do przetwarzania.
acquisition_dateData udostępnienia faktury stronie w KSeF.
permanent_storage_dateData używana przez trwały zapis i przepływy eksportu przyrostowego.

Dla synchronizacji przyrostowej preferuj model Permanent Storage opisany na stronach o zapytaniach i eksporcie. Jest zaprojektowany tak, aby nie pomijać faktur mimo asynchronicznego przetwarzania KSeF.

Powiązane strony