Jak przeliczać faktury walutowe z KSeF na PLN zgodnie z ustawą o VAT?
Zgodnie z art. 31a ustawy o VAT kwoty w walucie obcej przelicza się na PLN według kursu średniego NBP z ostatniego dnia roboczego poprzedzającego dzień powstania obowiązku podatkowego (najczęściej: poprzedzającego datę wystawienia faktury). KSeF Import automatycznie pobiera faktury walutowe z API KSeF i eksportuje je do arkusza z gotową kolumną równowartości w PLN, wyliczoną po właściwym kursie. Ostateczna odpowiedzialność za rozliczenie VAT spoczywa na podatniku.
- Obowiązek prawny: art. 31a ust. 1 ustawy o VAT – kurs średni NBP z ostatniego dnia roboczego poprzedzającego dzień powstania obowiązku podatkowego (typowo: poprzedzającego datę wystawienia).
- KSeF Import pobiera faktury EUR/USD/GBP z KSeF i eksportuje je do Excela lub Arkuszy Google razem z polem Waluta i Kwota.
- Kolumna PLN wg NBP jest doliczona automatycznie – kurs z dnia poprzedzającego datę wystawienia, bez ręcznego szukania tabel.
-
Tabela kursów NBP typu A (dni robocze) jest publiczna i bezpłatna;
WORKDAY(data,-1)w Sheets/Excelu automatycznie omija weekendy. - Dla firm z kilkudziesięcioma fakturami walutowymi miesięcznie to kilka godzin mniej pracy księgowej przy każdym zamknięciu okresu.
W tym artykule
Od problemu do efektu
PWEGoogle Ireland, AWS, Meta – każda faktura walutowa ma inną datę i inny kurs NBP z dnia poprzedzającego. Przy 20 fakturach w miesiącu to 40 minut szukania na stronie NBP, przy 100 – pół dnia pracy i ryzyko pomyłki o jeden dzień.
KSeF Import pobiera faktury z API KSeF i eksportuje je do arkusza z gotową kolumną równowartości w PLN. Jedna formuła IMPORTXML lub WEBSERVICE pobiera kurs z publicznego API NBP – dla każdej faktury osobno, z właściwego dnia.
Arkusz z fakturami walutowymi przeliczonymi kursem zgodnym z art. 31a jest gotowy do wysyłki do biura rachunkowego, importu do JPK_V7 lub do systemu ERP – bez żadnego ręcznego szukania kursów.
Podstawa prawna: art. 31a ustawy o VAT
Art. 31a ust. 1 ustawy o VAT mówi jasno: jeżeli kwoty na fakturze są wyrażone w walucie obcej, przelicza się je na złote według kursu średniego NBP ogłoszonego na ostatni dzień roboczy poprzedzający dzień powstania obowiązku podatkowego. Obowiązek podatkowy zwykle powstaje z chwilą dokonania dostawy lub wykonania usługi, a dla wielu transakcji pokrywa się to z datą wystawienia faktury – dlatego w praktyce bierzesz kurs z ostatniego dnia roboczego przed datą wystawienia (a dla importu usług – przed datą wykonania usługi).
Ustawa dopuszcza też stosowanie kursu ogłoszonego przez Europejski Bank Centralny (EBC) z ostatniego dnia poprzedzającego dzień powstania obowiązku podatkowego. Większość firm pozostaje przy NBP – oba kursy są zgodne z ustawą, ale musisz stosować wybrany konsekwentnie.
Co to oznacza w praktyce dla dat:
- Faktura wystawiona w poniedziałek – kurs z piątku (ostatni dzień roboczy przed poniedziałkiem).
- Faktura wystawiona po świętach – kurs z ostatniego dnia roboczego przed dniem świątecznym.
- Każda faktura może mieć inny kurs – nie można użyć jednego kursu z końca miesiąca dla całej paczki.
- Tabela kursów NBP typu A publikowana jest wyłącznie w dni robocze.
Faktury walutowe w KSeF – co zawiera schemat FA(3)
KSeF przechowuje faktury w schemacie FA(3) – ok. 80 pól zagnieżdżonych w sekcjach. Faktury od polskich kontrahentów przychodzą w PLN, ale faktury od podmiotów zagranicznych zarejestrowanych w Polsce (VAT-UE) oraz od oddziałów globalnych korporacji rozliczających się na polski NIP (np. Google Ireland, Amazon Web Services EMEA, Meta Platforms Ireland) – będą w EUR, USD lub GBP.
| Pole FA(3) | Zawartość | Do czego służy |
|---|---|---|
| KodWaluty | EUR / USD / GBP / PLN | Identyfikacja waluty faktury |
| P_1 | Data wystawienia | Wyznaczenie dnia D do kursu (D-1 roboczy) |
| P_6 | Data sprzedaży / wykonania usługi | Obowiązek podatkowy przy dostawie towarów |
| WartoscNetto | Kwota netto w walucie faktury | Podstawa do przeliczenia na PLN |
| KwotaVAT | Kwota VAT w walucie faktury | Przeliczenie kwoty podatku |
| WartoscBrutto | Kwota brutto w walucie faktury | Kontrola i archiwum |
Ustawa mówi o dniu powstania obowiązku podatkowego, który zwykle równa się dacie sprzedaży (dostawy / wykonania usługi), a nie dacie wystawienia faktury. Przy imporcie usług z UE (reverse charge: Google Ads, AWS, Meta) obowiązek podatkowy powstaje w dniu wykonania usługi – używaj pola P_6, nie P_1. KSeF Import eksportuje oba pola, więc możesz wybrać właściwe w swoim arkuszu.
Zobacz, jak KSeF Import pobiera faktury kosztowe i układa je w gotowy arkusz.
Jak KSeF Import automatyzuje przeliczanie
KSeF Import pobiera faktury walutowe z API KSeF i eksportuje je do arkusza razem ze wszystkimi polami FA(3). W kolumnie Równowartość PLN aplikacja dolicza kwotę po kursie średnim NBP z dnia poprzedzającego datę wystawienia – zgodnie z art. 31a. To ułatwienie obliczeniowe; ostateczne rozliczenie VAT weryfikuje podatnik lub jego biuro rachunkowe.
-
1
Wgraj certyfikat dla NIP
W panelu przejdź do Certyfikaty i dodaj plik
.p12lub.pfxz KSeF. Certyfikat szyfrujemy AES-256-GCM kluczem generowanym osobno per użytkownik (HKDF) i przechowujemy na serwerach w Unii Europejskiej (OVH). Wgrywasz raz. -
2
Pierwsze pobranie – ostatnie 90 dni
Pierwsze pobranie obejmuje ostatnie 90 dni faktur. Potem każda nowa faktura dochodzi automatycznie przy kolejnej synchronizacji (co 24 h / 6 h / 2 h / 15 min, zależnie od planu).
-
3
Eksport do Excela lub Arkuszy Google
Kliknij Eksportuj do Excela lub uruchom synchronizację z Arkuszami Google. W pliku znajdziesz kolumnę Waluta, Kwota w walucie oraz Równowartość PLN z kursem NBP z dnia poprzedzającego datę wystawienia.
-
4
Sprawdź i uzupełnij w arkuszu
Jeśli chcesz użyć kursu z daty sprzedaży (P_6) lub kursu EBC – dostosuj formułę w arkuszu. API NBP jest publiczne i bezpłatne; endpoint to
api.nbp.pl/api/exchangerates/rates/a/{waluta}/{data}/.
Przy pierwszym, dużym imporcie zostaw synchronizację na noc. API KSeF udostępnia ok. 60 faktur na godzinę dla jednego NIP, więc zaległości dociągają się partiami w tle – rano masz pełny zakres bez ręcznego ponawiania.
Formuły do samodzielnego wyliczenia kursu w arkuszu
Jeśli chcesz samodzielnie doliczyć lub zweryfikować kurs w arkuszu, Narodowy Bank Polski udostępnia bezpłatne REST API pod adresem api.nbp.pl – bez klucza API, z odpowiedzią XML lub JSON. Jedna formuła pobiera kurs dowolnej waluty z tabeli A na wskazany dzień roboczy.
| Arkusz | Formuła kursu (przykładowa) | Opis |
|---|---|---|
| Google Sheets | =IFERROR(IMPORTXML("https://api.nbp.pl/api/exchangerates/rates/a/"&D2&"/"&TEXT(WORKDAY(C2,-1),"yyyy-mm-dd")&"/?format=xml","//Mid"),"-") | Pobiera kurs średni z dnia poprzedzającego; WORKDAY omija weekendy |
| Excel (Office 365) | =FILTERXML(WEBSERVICE("https://api.nbp.pl/api/exchangerates/rates/a/"&D2&"/"&TEXT(WORKDAY(C2,-1),"yyyy-mm-dd")&"/?format=xml"),"//Mid") | Identyczna logika; Excel odświeża przy otwarciu lub F9 |
| Netto PLN | =E2*G2 | Netto w walucie × kurs NBP |
| VAT PLN | =F2*G2 | VAT w walucie × kurs NBP |
| Brutto PLN | =H2+I2 | Suma netto + VAT w PLN |
Kluczowy fragment: WORKDAY(C2,-1) – cofa się o jeden dzień roboczy, automatycznie omijając weekendy. Jeśli faktura wypada po święcie, dodaj listę świąt jako trzeci argument funkcji WORKDAY. W tabeli powyżej C2 = data wystawienia, D2 = kod waluty (np. EUR), E2 = kwota netto w walucie, F2 = kwota VAT w walucie, G2 = wyliczony kurs NBP.
Kursy walut zmieniają się codziennie. Przykłady w artykule (np. EUR ok. 4,27 zł, USD ok. 3,98 zł) są wyłącznie ilustracyjne – nie używaj ich jako bieżących kursów. Zawsze pobieraj aktualny kurs z tabeli A na stronie NBP lub przez API.
Pułapki i przypadki szczególne
Przy fakturach walutowych jest kilka sytuacji, w których data kursu może się różnić od typowej reguły – warto je znać przed zamknięciem okresu.
- Faktura zaliczkowa i końcowa: zaliczka ma obowiązek podatkowy w dniu zapłaty (osobny kurs), faktura końcowa – w dniu sprzedaży (osobny kurs). Przeliczasz każdą z właściwego dnia.
- Import usług – reverse charge: faktury od Google Ireland, Meta, AWS to import usług – VAT rozliczasz Ty jako nabywca. Obowiązek podatkowy powstaje w dniu wykonania usługi (P_6), nie wystawienia (P_1). Pamiętaj, żeby użyć właściwego pola w formule.
- Faktura wystawiona po świętach: bierzesz kurs z ostatniego dnia roboczego przed datą wystawienia, nie z dnia bezpośrednio poprzedzającego w kalendarzu. Funkcja WORKDAY z listą świąt obsłuży to automatycznie.
- Waluta spoza tabeli A NBP: tabela A zawiera wszystkie waluty UE i główne waluty światowe; egzotyczne mogą się nie pojawić – API zwróci 404. Użyj IFERROR w formule, żeby oznaczyć te faktury do ręcznego przeliczenia.
Jeśli masz setki faktur walutowych miesięcznie i chcesz uniknąć setek zapytań do API przy każdym otwarciu arkusza – pobierz raz dziennie całą tabelę A z NBP i wstaw do osobnej zakładki. Wszystkie formuły przeliczają wtedy przez WYSZUKAJ.PIONOWO po parze (waluta, data): szybko, offline, bez limitów API.
Efekt: rejestr VAT w PLN, gotowy do JPK i kontroli
Po wdrożeniu automatycznego przeliczania masz arkusz, w którym każda faktura walutowa z KSeF ma prawidłowo wyliczoną równowartość w PLN i jest gotowa do dalszego przetwarzania.
- Kurs z właściwego dnia – niezależnie czy to poniedziałek, środa po świętach czy koniec kwartału.
- Netto, VAT i brutto w PLN zgodne z art. 31a – zarówno dla typowych faktur, jak i zaliczkowych oraz reverse charge.
- Dane gotowe do eksportu do JPK_V7 – patrz uzgodnienie faktur KSeF z JPK_V7 w Excelu.
- Transparentny dowód źródła kursu (adres API NBP lub numer tabeli A) – gotowy do okazania w razie kontroli.
Najczęstsze pytania
Krótkie, konkretne odpowiedzi na pytania, które zadają użytkownicy i wyszukiwarki.
Z ostatniego dnia roboczego poprzedzającego dzień powstania obowiązku podatkowego – typowo poprzedzającego datę wystawienia faktury. Tak stanowi art. 31a ust. 1 ustawy o VAT. Jeśli faktura wypada w poniedziałek, bierzesz kurs z piątku. Jeśli po świętach – z ostatniego dnia roboczego przed dniem świątecznym.
Tak. W eksporcie do Excela i Arkuszy Google doliczona jest kolumna z równowartością PLN, wyliczoną po kursie średnim NBP z dnia poprzedzającego datę wystawienia. To ułatwienie obliczeniowe – ostateczną poprawność rozliczenia VAT weryfikuje podatnik lub jego biuro rachunkowe.
Tabela A NBP publikowana jest tylko w dni robocze, więc nie ma kursu na weekend ani na święto. Bierzesz kurs z ostatniego dnia roboczego przed tą datą. Funkcja WORKDAY w Excelu i Arkuszach Google automatycznie omija weekendy; do obsługi świąt dodaj listę świąt jako trzeci argument funkcji.
Tak, art. 31a ustawy o VAT dopuszcza stosowanie kursu Europejskiego Banku Centralnego z ostatniego dnia poprzedzającego dzień powstania obowiązku podatkowego. Musisz jednak stosować wybrany kurs (NBP albo EBC) konsekwentnie dla wszystkich transakcji w danym roku podatkowym.
Faktura zaliczkowa ma obowiązek podatkowy w dniu otrzymania zapłaty, a nie w dniu wystawienia. Przeliczasz ją kursem NBP z dnia poprzedzającego datę zapłaty zaliczki. Faktura końcowa ma osobny kurs – z dnia poprzedzającego datę sprzedaży. Oba pola data (sprzedaży i zapłaty) są dostępne w eksporcie KSeF Import.
Tak, ale z ważną uwagą: faktury od Google Ireland, Amazon Web Services EMEA i Meta Platforms Ireland to import usług, gdzie VAT rozliczasz Ty jako nabywca (reverse charge). Obowiązek podatkowy powstaje w dniu wykonania usługi (pole P_6 w FA(3)), nie w dniu wystawienia faktury. Użyj pola Data sprzedaży, nie Data wystawienia, przy wyborze kursu NBP.
Inżynier integracji KSeF. Odpowiada za połączenia z API Krajowego Systemu e-Faktur, automatyzacje i parsowanie struktury logicznej FA(3).
