Stawka VAT w strukturze FA(3) występuje w dwóch miejscach naraz i na tym polega cała trudność. Raz w każdym wierszu faktury, drugi raz w podsumowaniu dokumentu. Jeżeli te dwa miejsca mówią co innego, KSeF odrzuca fakturę, a komunikat, który dostajesz, zwykle nie tłumaczy dlaczego.
Najczęściej zgłaszane sformułowania to „Suma pozycji w danej stawce musi być wartością dodatnią” oraz komunikaty w rodzaju „sprawdź kategorię i stawkę VAT”. To drugie pochodzi zwykle z programu księgowego, nie z samego KSeF, ale przyczyna źródłowa jest ta sama.
Jeżeli twój komunikat mówi o semantyce dokumentu, a nie o stawce, jesteś w innym scenariuszu, który opisaliśmy w tekście o błędzie 450 w KSeF.
Gdzie w FA(3) siedzi stawka VAT
Dwa poziomy, dwa różne pola:
- W wierszu faktury:
P_12. Stawka dla tej konkretnej pozycji, zapisana jako sama liczba (23,8,5,0) albo jako oznaczenie literowe:ZWdla zwolnionych,NPdla niepodlegających opodatkowaniu. - W podsumowaniu:
P_13_xiP_14_x. To nie jest jedna para pól, tylko zestaw „koszyków”, po jednym na stawkę.P_13_xtrzyma sumę netto w danej stawce,P_14_xsumę VAT.
Numer koszyka nie jest dowolny. Odpowiada konkretnej stawce:
| Koszyk | Stawka |
|---|---|
P_13_1 / P_14_1 | 23% (oraz historyczne 22%) |
P_13_2 / P_14_2 | 8% (oraz historyczne 7%) |
P_13_3 / P_14_3 | 5% |
Faktura ze stawką 8% w wierszu, ale z kwotami wpisanymi do P_13_1, jest wewnętrznie sprzeczna. Deklaruje 8% i jednocześnie raportuje te pieniądze jako obrót 23-procentowy.
Cztery przyczyny, od najczęstszej
1. Kwoty trafiły do złego koszyka
To zdecydowanie najczęstszy przypadek przy eksporcie z Excela albo z zewnętrznego systemu. Program zna kwotę netto i kwotę VAT, ale nie wie, do którego koszyka je włożyć, więc wkłada wszystko do pierwszego. Na fakturach 23-procentowych nigdy się to nie ujawni. Pierwsza faktura z 8% wraca odrzucona.
Sposób sprawdzenia jest arytmetyczny i zajmuje sekundę: podziel VAT przez netto. Wynik 0,08 to koszyk drugi, 0,05 to trzeci, 0,23 to pierwszy. Jeżeli faktura ma pozycje w kilku stawkach, każda musi trafić do własnego koszyka, a nie zostać zsumowana w jednym.
2. Suma w koszyku jest zerowa albo ujemna
Stąd bierze się komunikat o wartości dodatniej. Koszyk, który został zadeklarowany, musi zawierać realną, dodatnią kwotę. Dwie typowe sytuacje:
- Pusty koszyk zapisany jako zero. Program wypełnia wszystkie pary
P_13_x/P_14_x, wstawiając0.00tam, gdzie nie ma sprzedaży. Koszyk, w którym nie ma obrotu, po prostu nie powinien się pojawić w dokumencie. - Wartość ujemna na fakturze pierwotnej. Minus jest dopuszczalny na korekcie, ale nie na zwykłej fakturze sprzedaży. Jeżeli rabat został wpisany jako pozycja ujemna zamiast obniżyć cenę jednostkową, suma koszyka potrafi zejść poniżej zera.
3. Zero procent, zwolnione i niepodlegające to trzy różne rzeczy
Z samych kwot tego nie da się rozstrzygnąć. Netto 1000, VAT 0 może oznaczać stawkę 0%, zwolnienie albo transakcję niepodlegającą opodatkowaniu. Dla KSeF to trzy różne przypadki, w różnych polach, a dwa z nich wymagają wypełnienia sekcji Adnotacje. Przy zwolnieniu trzeba wskazać podstawę prawną.
Jeżeli twój eksport traktuje je wymiennie, faktury z zerowym VAT będą wracać, podczas gdy wszystkie inne przechodzą. To dobry trop diagnostyczny: jeśli odrzucane są wyłącznie faktury bez VAT, problem jest tutaj, a nie w koszykach.
4. Stawka zapisana jako tekst z procentem
P_12 przyjmuje 23, nie 23%. Nie przyjmuje też 0,23 ani 23,00. To brzmi trywialnie, ale przy generowaniu XML z arkusza formatowanie komórki potrafi dokleić znak procenta w sposób niewidoczny na ekranie.
Jak to sprawdzić przed wysyłką, a nie po
Kolejność ma znaczenie, bo wysyłki do KSeF nie da się cofnąć. Przyjęta faktura zostaje w systemie na stałe, a w praktyce jedynym sposobem naprawy jest wystawienie korekty. Odrzucenie jest więc mniej kłopotliwe niż przyjęcie dokumentu z błędną stawką.
Trzy rzeczy do sprawdzenia na pliku XML, zanim pójdzie dalej:
- Podziel
P_14_xprzezP_13_xw każdym koszyku. Wynik musi odpowiadać stawce, którą ten koszyk reprezentuje. - Sprawdź, czy każdy koszyk obecny w dokumencie ma wartość większą od zera.
- Porównaj
P_12w wierszach z zadeklarowanymi koszykami. Stawka, która pojawia się w wierszu, musi mieć swój koszyk w podsumowaniu.
Te trzy kroki można wykonać ręcznie, ale przy większej paczce faktur jest to nierealne. Nasz darmowy walidator XML sprawdza plik pod kątem struktury FA(3) i zgodności kwot, zanim wyślesz go do KSeF. Bez konta sprawdzisz trzy pliki dziennie, a plik nie opuszcza przeglądarki, bo walidacja dzieje się lokalnie.
Uwaga na faktury zbiorcze bez pozycji
Osobny przypadek, który potrafi zaskoczyć: dokument, który ma tylko kwoty podsumowania, bez rozpisanych wierszy. Trzeba wtedy wyznaczyć stawkę z samych kwot, dzieląc VAT przez netto. Działa to dobrze dla 23%, 8% i 5%, ale przy zerowym VAT jest z definicji niejednoznaczne, co opisuje punkt trzeci powyżej.
W FakturaFlow stawka takiej faktury jest wyliczana z kwot i dla 23%, 8% oraz 5% wychodzi jednoznacznie. Jeżeli proporcja nie pasuje do żadnej znanej stawki w granicach półtora punktu procentowego, dokument dostaje stawkę podstawową 23% wraz z ostrzeżeniem w logu.
Warto znać to ograniczenie, bo dotyczy dokładnie przypadku z punktu trzeciego: przy zerowym VAT z samych kwot nie da się odróżnić stawki 0%, zwolnienia i transakcji niepodlegającej opodatkowaniu. Faktury bez VAT lepiej więc rozpisać na pozycje z jawną stawką w P_12, zamiast liczyć na wyliczenie z podsumowania.