FA_VAT Format Guide: Poland's KSeF Invoice Schema Explained
Deep dive into Poland's FA_VAT e-invoice format used in KSeF. Schema structure, mandatory fields, XML examples, versioning, and how FA_VAT compares to EN 16931, ZUGFeRD, and FatturaPA.
FA_VAT Format Guide: Poland's KSeF Invoice Schema Explained
If you're doing e-invoicing in Poland, FA_VAT is the format you need to understand. Unlike Germany's XRechnung (a European standard) or Italy's FatturaPA (an older proprietary format), FA_VAT is Poland's own XML schema — designed from the ground up for the KSeF clearance model.
This guide explains what FA_VAT actually is, how the schema is structured, what the mandatory fields are, and how to handle edge cases.
What Is FA_VAT?
FA_VAT (short for Faktura ustrukturyzowana — structured invoice) is the XML schema used for all KSeF e-invoices in Poland. It is:
- A pure XML format — no PDF wrapper (unlike Factur-X or ZUGFeRD)
- Defined and maintained by the Ministerstwo Finansów (Polish Ministry of Finance)
- Submitted to the KSeF platform via a REST API — the format itself is validated server-side before a KSeF reference number is issued
- Versioned — the current mandatory version is FA(2), sometimes referred to as FA_VAT v2
The schema is publicly available on the Polish tax authority's portal: podatki.gov.pl/ksef.
FA(1) vs FA(2): Understanding the Versions
When KSeF launched in voluntary mode in 2021, it used FA(1). The Ministry released FA(2) in 2023 ahead of the (then-planned) mandatory rollout. Key changes in FA(2):
- Extended support for margin scheme invoicing (VAT marża)
- Better handling of fiscal receipts converted to invoices (paragon fiskalny z NIP)
- Improved structure for intra-group transactions and self-billing
- Additional KSeF-specific metadata fields
- Stricter validation rules that reject previously tolerated edge cases
FA(1) invoices are no longer accepted by KSeF as of the mandatory mandate date. All software must generate FA(2).
Schema Structure Overview
An FA_VAT FA(2) invoice is an XML document with a root element of <Faktura> in the namespace http://crd.gov.pl/wzor/2023/06/29/12648/. The high-level structure is:
<Faktura>
<Naglowek> <!-- Header: KSeF schema version, creation timestamp -->
<Podmiot1> <!-- Seller (sprzedawca) -->
<Podmiot2> <!-- Buyer (nabywca) -->
<Podmiot3> <!-- Optional: third party (e.g., recipient for triangular supply) -->
<Fa> <!-- Invoice body: type, date, line items, totals -->
<KodWaluty> <!-- Currency code (ISO 4217) -->
<P_1> <!-- Invoice date (data wystawienia) -->
<P_2> <!-- Invoice number (numer faktury) -->
<P_6> <!-- Sale/supply date (data dokonania/zakończenia dostawy) -->
<FaWiersze> <!-- Line items -->
<FaWiersz> <!-- Individual line item -->
<NrWierszaFa> <!-- Line number -->
<P_7> <!-- Product/service description -->
<P_8A> <!-- Unit of measure -->
<P_8B> <!-- Quantity -->
<P_9A> <!-- Net unit price -->
<P_11> <!-- Net line value -->
<P_12> <!-- VAT rate code -->
</FaWiersze>
<Adnotacje> <!-- Invoice annotations / special flags -->
<Rozliczenie> <!-- VAT summary by rate -->
<Platnosc> <!-- Payment terms -->
<WarunkiTransakcji> <!-- Transaction conditions (optional) -->
</Fa>
</Faktura>
This is a simplified view. The full FA(2) XSD has over 200 possible elements, though most are optional.
Mandatory Fields
The following fields are always required regardless of invoice type:
| Field | Element | Description |
|---|---|---|
| Schema version | <Naglowek>/<SchemaVersion> |
Must be 1-0E for FA(2) |
| Creation timestamp | <Naglowek>/<DataCzasWytworzenia> |
ISO 8601 datetime |
| Seller NIP | <Podmiot1>/<DaneIdentyfikacyjne>/<NIP> |
10-digit Polish tax ID |
| Seller name | <Podmiot1>/<DaneIdentyfikacyjne>/<PelnaNazwa> |
Full legal name |
| Seller address | <Podmiot1>/<Adres> |
Full address including postal code |
| Buyer NIP | <Podmiot2>/<DaneIdentyfikacyjne>/<NIP> |
Required for all VAT-registered buyers |
| Buyer name | <Podmiot2>/<DaneIdentyfikacyjne>/<PelnaNazwa> |
|
| Invoice number | <Fa>/<P_2> |
Sequential invoice number |
| Invoice date | <Fa>/<P_1> |
Date of issue |
| Supply date | <Fa>/<P_6> |
Date goods delivered / service completed |
| Currency | <Fa>/<KodWaluty> |
ISO 4217, e.g., PLN, EUR, USD |
| Line items | <Fa>/<FaWiersze> |
At least one <FaWiersz> required |
| VAT summary | <Fa>/<Rozliczenie> |
Totals by VAT rate |
VAT Rate Codes in FA_VAT
FA_VAT uses specific numeric codes for VAT rates rather than the percentage directly:
| Code | Rate | Description |
|---|---|---|
23 |
23% | Standard rate |
8 |
8% | Reduced rate (food, hospitality) |
5 |
5% | Reduced rate (basic food, books) |
0 |
0% | Zero rate (exports, intra-Community) |
ZW |
Exempt | VAT-exempt supplies (zwolnienie) |
NP |
Not subject | Outside VAT scope (nie podlega) |
OO |
Reverse charge | Odwrotne obciążenie |
Corrective Invoices (Faktury Korygujące)
When you need to correct a KSeF invoice that has already received a reference number, you must issue a corrective invoice (faktura korygująca) — you cannot simply re-submit the original.
The corrective invoice in FA_VAT:
- Has
<RodzajFaktury>KOR</RodzajFaktury>in the<Fa>element - Contains a reference to the original invoice's KSeF reference number in
<DaneFaKorygowanej>/<NrKSeF> - Shows the corrected values (not just the delta — the full corrected invoice data)
- Is submitted through KSeF and receives its own KSeF reference number
The buyer must confirm receipt of the corrective invoice in KSeF before they are required to adjust their VAT deduction — this is an important difference from paper corrective invoices.
How FA_VAT Compares to Other European Formats
| Feature | FA_VAT (Poland) | XRechnung (Germany) | FatturaPA (Italy) | Factur-X (France) |
|---|---|---|---|---|
| Format | Pure XML | Pure XML (UBL/CII) | Pure XML | PDF + embedded XML |
| EN 16931 compliant | No (Polish-specific) | Yes | No | Yes |
| Government clearance | Yes (all invoices) | No | Yes (SDI) | No (PDP routing) |
| Buyer NIP required | Yes | No | Codice Fiscale/P.IVA | No |
| Offline mode | Yes (specific procedure) | N/A | No | N/A |
| Multi-currency | Yes | Yes | No (EUR only implied) | Yes |
The most important practical difference: in Poland, the government validates every invoice before it is legally valid. In Germany, compliance is a bilateral matter between sender and receiver.
Testing Your FA_VAT Implementation
Before going live with KSeF, always test in the dedicated KSeF test environment (środowisko testowe):
- Test environment URL: https://ksef-test.mf.gov.pl/
- Uses a separate test NIP — do not use your real NIP in the test environment
- Test credentials are separate from production
Most accounting software has a built-in "KSeF test mode" that routes submissions to the test environment. Enable this and submit at least 5–10 test invoices covering:
- Standard domestic sale (23% VAT)
- Mixed-rate invoice (multiple VAT rates on one invoice)
- Zero-rated export
- Corrective invoice referencing an existing KSeF test invoice
- Advance payment invoice
The FA(2) XSD schema and official documentation are maintained at podatki.gov.pl/ksef. Schema changes are announced with minimum 3 months' notice.