XML FA(3)

XML FA(3): jak go wygenerować i zwalidować

FA(3) to schemat XML, z którym musi być zgodna każda faktura wysyłana do KSeF. Ten poradnik opisuje jego strukturę, walidację względem oficjalnego XSD, typowe błędy i sposób na uzyskanie poprawnego XML FA(3) z prostego JSON.

Aktualizacja 7 min czytania

Czym jest FA(3)

FA(3) to trzecia wersja struktury logicznej polskiej faktury ustrukturyzowanej (e-Faktury), publikowanej przez Ministerstwo Finansów jako XSD. Od KSeF 2.0 każda faktura wysyłana do KSeF musi być poprawnym XML FA(3). W KSeF to XML jest fakturą, a PDF jest tylko jego wizualizacją.

Każdy dokument FA(3) zaczyna się od takiego samego nagłówka:

faktura.xmlFA (3) · 1-0E
<Faktura xmlns="http://crd.gov.pl/wzor/2025/06/25/13775/">
  <Naglowek>
    <KodFormularza kodSystemowy="FA (3)" wersjaSchemy="1-0E">FA</KodFormularza>
    <WariantFormularza>3</WariantFormularza>
    <DataWytworzeniaFa>2026-10-12T07:23:07Z</DataWytworzeniaFa>
  </Naglowek>
  <!-- Podmiot1 (sprzedawca), Podmiot2 (nabywca), Fa (dane faktury) -->
</Faktura>

Struktura faktury FA(3)

Standardowa faktura VAT składa się z czterech głównych bloków. Tabela pokazuje, gdzie trafia każde pole żądania POST /invoices w Notaly.

Element FA(3)ZawartośćPole JSON
NaglowekKod formularza, wersja schematu, data wytworzeniaGenerowane
Podmiot1Sprzedawca: NIP, Nazwa, Adresseller
Podmiot2Nabywca: NIP, Nazwa, Adresbuyer
Fa/KodWalutyWaluta (ISO 4217)currency
Fa/P_1Data wystawieniaissueDate
Fa/P_2Numer fakturynumber
Fa/P_13_x, P_14_xSumy netto i VAT według stawki (23%, 8%, 5%, 0%)Liczone z items
Fa/P_15Kwota bruttoLiczone
Fa/AdnotacjeObowiązkowe adnotacje (MPP, zwolnienia, procedura marży…)Wartości domyślne
Fa/FaWierszPozycje: P_7 nazwa, P_8A jednostka, P_8B ilość, P_9A cena netto, P_11 wartość netto, P_12 stawka VATitems[]

Jak zwalidować FA(3) względem XSD

Waliduj lokalnie, zanim cokolwiek wyślesz do KSeF. Pobierz oficjalny schemat FA(3) ze strony Ministerstwa Finansów (główny schemat.xsd importuje wspólne definicje typów, więc trzymaj wszystkie pliki w jednym folderze) i uruchom:

terminal
xmllint --noout --schema schemat.xsd faktura.xml
# faktura.xml validates

Walidacja XSD wychwytuje błędy struktury i typów. KSeF po XSD wykonuje też kontrole biznesowe, więc plik zgodny ze schematem nadal może zostać odrzucony. Notaly waliduje każdą fakturę względem XSD przed wysyłką i zwraca odrzucenia KSeF jako stałe kody błędów.

Najczęstsze błędy walidacji FA(3)

  • Nieprawidłowy NIP. NIP ma 10 cyfr i cyfrę kontrolną (wagi 6, 5, 7, 2, 3, 4, 5, 6, 7 modulo 11). Literówka zatrzyma fakturę, zanim zobaczy ją KSeF.
  • Sumy, które się nie zgadzają. P_13_x i P_14_x muszą równać się sumie pozycji dla każdej stawki VAT, a P_15 kwocie brutto, w zaokrągleniu do 2 miejsc.
  • Zły format daty lub waluty. Daty w formacie RRRR-MM-DD, waluty według ISO 4217 (PLN, EUR), kraje według ISO 3166 alpha-2 (PL).
  • Brak adnotacji. Adnotacje są obowiązkowe nawet wtedy, gdy nic szczególnego nie występuje: każdą flagę (P_16, P_17, P_18, P_18A, P_23…) trzeba ustawić jawnie.
  • Stara przestrzeń nazw. Pliki FA(2) mają inną przestrzeń nazw i nie są akceptowane jako FA(3).
  • Niezakodowane znaki. Nazwy zawierające &, < lub cudzysłowy trzeba zakodować w XML.

Generowanie XML FA(3) z JSON

Z Notaly nie piszesz FA(3) ręcznie. Wysyłasz fakturę jako JSON, a Notaly liczy sumy według stawek VAT, uzupełnia nagłówek i adnotacje, koduje tekst, waliduje wynik i wysyła go do KSeF.

  1. Utwórz fakturęWyślij POST /invoices ze sprzedawcą, nabywcą i pozycjami, jak w przykładzie API KSeF.
  2. Pobierz dokładny XMLWywołaj GET /invoices/{id}/xml, aby pobrać dokument FA(3) wysłany do KSeF, bajt w bajt.
  3. Zachowaj dowódGdy faktura ma status accepted, zapisz numer KSeF i UPO, a klientowi przekaż PDF z kodem QR KSeF.
GET/invoices/{id}/xml200 application/xml
curl https://api.getnotaly.com/invoices/inv_8f2c…/xml \
  -H "Authorization: Bearer $NOTALY_API_KEY" -o faktura.xml

Najczęstsze pytania

Czym jest FA(3)?

FA(3) to trzecia wersja struktury logicznej e-Faktury publikowanej przez Ministerstwo Finansów. To schemat XSD, względem którego KSeF 2.0 waliduje każdą fakturę.

Jakiej przestrzeni nazw używa FA(3)?

http://crd.gov.pl/wzor/2025/06/25/13775/ z KodFormularza kodSystemowy="FA (3)" i wersjaSchemy="1-0E".

Jak zwalidować XML FA(3)?

Zwaliduj go względem oficjalnego XSD FA(3) (np. xmllint --schema) przed wysyłką. Notaly waliduje każdą fakturę względem XSD, zanim trafi do KSeF.

Czy mogę wysłać do Notaly własny XML FA(3)?

Obecnie Notaly generuje FA(3) z JSON przez POST /invoices, a dokładny wysłany XML pobierzesz przez GET /invoices/{id}/xml.

Czy PDF jest fakturą?

Nie. W KSeF fakturą jest XML FA(3). PDF z Notaly to czytelna wizualizacja z kodem QR do weryfikacji w KSeF (KOD I).

Wystaw pierwszą fakturę testową w KSeF jeszcze dziś

Załóż konto sandbox: klucz API w kilka sekund, 3 darmowe faktury testowe w KSeF TEST, bez karty płatniczej.