Waluty i NBP
Fakturę w walucie innej niż PLN przeliczamy do złotych po kursie średnim NBP z ostatniego dnia roboczego poprzedzającego moment powstania obowiązku podatkowego (art. 31a ustawy o VAT). To kurs wymagany przez KSeF dla pola FA(3) P_14_xW.
Reguła
- Waluta = PLN → bez przeliczania.
- Waluta ≠ PLN → kurs średni NBP (tabela A) z ostatniego dnia roboczego przed dniem powstania obowiązku podatkowego.
Dla usługi ciągłej (subskrypcja SaaS) momentem obowiązku podatkowego jest koniec okresu rozliczeniowego. Gdy faktura jest wystawiana z dołu (po zakończeniu okresu), wiążącą datą jest koniec okresu, nie późniejsza data wystawienia. Gdy faktura jest wystawiona przed powstaniem obowiązku (z góry), wiążąca jest data wystawienia — bierzemy więc wcześniejszą z dwóch dat.
Tabela A NBP publikowana jest tylko w dni robocze, więc odpytujemy krótkie okno kończące się dzień przed datą wiążącą i bierzemy najnowszy opublikowany kurs w tym oknie.
Czego NIE używamy
Kursu rozliczeniowego Stripe (FX settlement). To zły kurs do celów podatkowych — KSeF wymaga średniego kursu NBP, nie kursu, po którym Stripe rozliczył płatność.
Źródło
NBP API, tabela A:
https://api.nbp.pl/api/exchangerates/rates/A/{waluta}/{od}/{do}/?format=json
Bierzemy pole mid (kurs średni) najnowszego wpisu z okna. Brak kursu lub błąd sieci → faktura nie zostaje cicho złożona ze złym kursem; błąd jest zgłaszany.