Jak działa składanie
Faktura ze Stripe trafia do KSeF bez Twojego udziału. Oto cały przepływ.
Pipeline
invoice.finalized— Stripe wysyła webhook po sfinalizowaniu faktury. Rozpoznajemy konto po połączonym koncie Stripe i zapisujemy fakturę jako niezmienny dokument źródłowy. Payload nie jest później modyfikowany.- FA(3) — mapujemy payload Stripe na ustrukturyzowaną fakturę FA(3) (schemat KSeF). Stripe nie ma wszystkiego: adres sprzedawcy bierzemy z profilu firmy, NIP nabywcy z
customer_tax_ids, a kwoty rozbijamy na pozycje VAT. - Sesja online KSeF — otwieramy sesję, szyfrujemy fakturę (RSA-OAEP + AES-256-CBC, dokładnie jak wymaga KSeF), wysyłamy i odpytujemy o status.
- UPO — po przyjęciu KSeF zwraca numer KSeF i podpisane UPO (urzędowe poświadczenie odbioru). To jest dowód prawny złożenia.
- Zapis zwrotny do Stripe — numer KSeF zapisujemy z powrotem na fakturze: w
metadata(maszynowo) i dopisany dofooter(widoczny dla nabywcy na PDF/stronie).custom_fieldsjest niemodyfikowalne po finalizacji, więc świadomie go nie używamy.
Co widzisz na ekranie
Każda faktura ma jeden, zrozumiały status. Tyle wystarczy, żeby wiedzieć, co się dzieje:
| Status | Co znaczy |
|---|---|
| W kolejce | Czeka na wysyłkę. Zaraz ją złożymy. |
| Składanie | Trwa wysyłka do KSeF — sekundy, nie godziny. |
| Złożona | Przyjęta. Masz numer KSeF i UPO — to dowód. |
| Odrzucona | KSeF nie przyjął. Pokazujemy powód i konkretny następny krok. Faktura czeka — możesz złożyć ponownie. |
| Wstrzymana | Świadomie nie wysłaliśmy: wyczerpany darmowy limit albo niekompletny profil firmy. Nic nie ginie. |
Odrzucona i Wstrzymana to dwie różne rzeczy. Odrzucenie to odpowiedź KSeF — coś w danych lub połączeniu wymaga poprawy. Wstrzymanie to nasza świadoma decyzja, żeby jeszcze nie wysyłać (np. ponad darmowy limit albo zanim uzupełnisz NIP i adres). W obu razach faktura czeka bezpiecznie.
Próby = osobne rekordy
Każda próba wysyłki to osobny rekord (Submission), nie nadpisanie. Ponowna próba tworzy nowy wiersz — historia jest audytowalna, a podwójna wysyłka niemożliwa. W tle statusy próby to submitting, accepted, rejected, blocked — to one składają się na widoczny status faktury powyżej.
Wysyłka jest blokująca
#submit w bibliotece śpi między odpytaniami o status — działa w zadaniu w tle, nigdy w żądaniu webowym. Jeśli proces padnie po otwarciu sesji, #await wznawia ją po zapisanych referencjach (idempotentnie — nie składa dwa razy).
Scenariusze faktur, które obsługujemy
KSeF to system B2B/B2G: nabywcą jest firma albo podmiot publiczny. To, kim jest nabywca, decyduje o sposobie opodatkowania VAT, a sposób opodatkowania decyduje o tym, które pola FA(3) wypełniamy. Oto, na co mapuje się każdy scenariusz i na jakim jest etapie.
| Scenariusz | Nabywca | Traktowanie VAT | Mapowanie FA(3) | Status |
|---|---|---|---|---|
| Krajowy PL B2B | Polska firma (ma NIP) | Standardowe 23% (lub 8% / 5% / inne stawki PL) | NIP nabywcy; netto + VAT w pozycji ze stawką (P_13_1/P_14_1 dla 23%) |
W pełni wspierany |
| B2B w UE | Firma w innym kraju UE (nr VAT UE) | Odwrotne obciążenie — VAT rozlicza nabywca | KodUE + NrVatUE nabywcy; pozycja tylko netto P_13_9; znacznik odwrotnego obciążenia P_18 |
Wspierany |
| Firma spoza UE | Firma poza UE (np. polski JDG fakturujący firmę SaaS z USA) | Eksport usług — niepodlegający VAT w PL (NP), rozliczany przez nabywcę | KodKraju + NrID nabywcy; pozycja tylko netto P_13_8 |
Wspierany |
| Konsument B2C | Osoba prywatna (bez NIP) | Poza zakresem KSeF | — | Nie w KSeF |
Każdy z powyższych scenariuszy B2B jest zbudowany od początku do końca — mapowanie FA(3), znaczniki i przeliczenie kursem NBP. Zanim włączymy traktowanie VAT dla UE i spoza UE na produkcji, doradca podatkowy potwierdza dokładne znaczniki VAT (P_18, pozycje NP) w jednym przeglądzie — to bramka poprawności, nie stopniowe wdrażanie. W trybie testowym złożysz je wszystkie już dziś.
Konsumenci B2C
KSeF jest dla B2B i B2G. Sprzedaż osobom prywatnym jest w KSeF dobrowolna i praktycznie poza zakresem tego narzędzia — wystawiaj ją tak jak dotychczas (np. paragon albo zwykła faktura bez KSeF). Jeśli konsument później poprosi o fakturę ze swoim NIP, to jest faktura B2B i przechodzi przez KSeF normalnie.
Waluta obca
Faktury do UE i eksportowe są zwykle w EUR lub USD. Kwotę w złotych, której potrzebuje KSeF, liczymy po kursie średnim NBP z ostatniego dnia roboczego przed momentem powstania obowiązku podatkowego (dla usługi ciągłej — koniec okresu rozliczeniowego; przy fakturze wystawionej z góry — data wystawienia) — to kurs wymagany prawem (art. 31a), nigdy kurs rozliczeniowy Stripe. Zobacz Waluty i NBP.
To nie jest porada podatkowa. Potwierdź traktowanie VAT swojej konkretnej sprzedaży ze swoją księgową.
Powiadomienia
Mailujemy właściciela tylko o dwóch rzeczach wartych przerwania: odrzucenie (trzeba zadziałać) oraz złożenie, które właśnie wyczerpało darmowy limit (raz, na granicy). Zobacz Plany i limity.
Gdy faktura zostanie odrzucona: Odrzucenia i problemy.