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.
NBP publikuje tabelę A 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, a 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 → nie składamy po cichu faktury ze złym kursem, tylko zgłaszamy błąd.