Back to Insights
Payments11 min read

Invoicing in EUR or USD: NBP Rate, VAT, and KSeF Step by Step

Currency invoicing under KSeF adds a trap layer to rules that were stable for years. The rate depends on the tax point date, but online mode deems the invoice issued on the transmission day. KSeF accepts any rate value without validation.

Invoicing in EUR or USD: NBP Rate, VAT, and KSeF Step by Step

The rule for currency invoicing in Poland has been stable since Slim VAT in 2021: use the average NBP exchange rate from the last working day before the tax point. KSeF did not change this rule. What KSeF added is a trap layer that incumbent content covers thinly, and a set of FA(3) fields that make the rate structurally mandatory in the XML even though the system never validates its value.

The Rule in One Sentence

Use the average NBP exchange rate from the last working day before the tax point (art. 31a ust. 1-2 of the VAT Act). If the invoice is issued before the tax point, use the last working day before the issue date. The weekend rule reaches back to Friday's table.

VAT must always be expressed in PLN (art. 106e ust. 11). Net and gross amounts can stay in the foreign currency. The KursWaluty field in FA(3) carries the rate used, with 6 decimal places.

The Transmission-Date Trap

In online mode, KSeF deems the invoice issued on the day it is transmitted to the system. Not the day you drafted it. Not the day you clicked "create." The transmission day.

This matters because the tax point for most B2B services is the issue date. If you draft an invoice on Friday but transmit it to KSeF on Monday, the deemed issue date is Monday. The applicable NBP rate is from the last working day before Monday, which is Friday. But if you calculated the rate based on Thursday's table (the last working day before Friday's draft date), your rate is wrong.

The invoice will pass KSeF validation. The system does not check whether KursWaluty matches any NBP table. It checks that the field is present and formatted as a number with 6 decimal places. A wrong rate yields a formally valid but substantively wrong invoice. The error surfaces during reconciliation, during an audit, or when the buyer's accountant notices the PLN VAT line does not match their calculation.

Offline24 mode preserves the P_1 issue date (the date you put on the invoice), so the rate calculation is based on the date you wrote on the invoice, not the date KSeF received it. This is one of the few cases where offline mode is safer than online mode for currency invoices.

What Must Be in PLN

Only the VAT amount. The VAT line on the invoice shows the PLN equivalent of the foreign-currency VAT. Net and gross can remain in EUR, USD, or whatever currency you are invoicing in.

The calculation: net amount in foreign currency times the NBP rate equals the PLN net equivalent. PLN net times the VAT rate equals PLN VAT. The invoice shows both: foreign currency net and gross, PLN VAT.

Rounding: the PLN VAT amount is rounded to the nearest grosz (0.01 PLN). The rounding difference between the calculated PLN VAT and the rounded amount is posted to a rounding account in your ledger.

FA(3) Currency Fields

FieldContentFormat
KodWalutyISO 4217 currency code3-letter string (EUR, USD, GBP)
KursWalutyExchange rate usedNumber with 6 decimal places
KursWalutyZExchange rate for settlement (optional)Number with 6 decimal places

KSeF accepts any numeric value in KursWaluty. A rate of 1.000000 or 999.999999 will pass schema validation. The system checks presence and format, not correctness. This is why pre-send validation against the NBP table is a product feature, not a documentation exercise.

Advances in Foreign Currency

Each advance payment creates its own tax point and uses the NBP rate from the last working day before that advance. The final invoice does not re-rate the advance portions. It keeps each advance at its historical rate and applies the current rate only to the remaining balance.

Example: a construction company invoices a 10,000 EUR advance in March (rate 4.32 PLN/EUR) and the final 5,000 EUR in May (rate 4.28 PLN/EUR). The final invoice shows:

  • Advance portion: 10,000 EUR at 4.32 PLN/EUR (March rate)
  • Remaining balance: 5,000 EUR at 4.28 PLN/EUR (May rate)
  • PLN VAT calculated on each portion at its respective rate

This is the hardest mechanical case in currency invoicing. Getting it wrong produces a formally valid KSeF invoice with wrong PLN VAT, which surfaces as a correction weeks later.

Corrections and Currency Rates

Corrections use the rate from the original invoice for corrections of the original cause (wrong quantity, wrong price). If the correction is for a reason that creates a new tax point, the rate is from the new tax point date.

The one contested-interpretation area: corrections that change the tax point. The KIS interpretation trail is not fully settled on whether a correction that shifts the supply date should use the original or the new rate. If you are in this situation, consult a tax adviser. Flag the interpretation risk in your correction documentation.

Special Situations

Monday invoicing: If the tax point is a Monday, the last working day before it is Friday. Use Friday's NBP table.

ECB rate: For some transactions (notably intra-EU services), the ECB reference rate may be used instead of the NBP rate. The choice depends on the transaction type and the taxpayer's accounting policy. Document which rate you used and why.

12-month rule: If the invoice is issued within 12 months of the tax point, the rate is from the last working day before the tax point. If issued later, the rate is from the last working day before the issue date. This rarely applies in practice because KSeF makes issue and transmission near-simultaneous.

Scenario: IT Freelancer Invoicing in EUR

An IT freelancer invoices a Polish client 8,000 EUR for a project milestone. The tax point is Friday, 24 July 2026. The freelancer drafts the invoice on Friday but transmits it to KSeF on Monday, 27 July 2026.

Wrong approach: The freelancer calculates the rate based on Thursday's NBP table (the last working day before Friday's draft date). Rate: 4.3052 PLN/EUR. PLN VAT: 8,000 * 4.3052 * 23% = 7,921.57 PLN.

Correct approach: The deemed issue date is Monday (transmission date). The last working day before Monday is Friday. Use Friday's NBP table. Rate: 4.3118 PLN/EUR. PLN VAT: 8,000 * 4.3118 * 23% = 7,933.71 PLN.

The difference is 12.14 PLN in VAT. Small enough to miss, large enough to trigger a correction during reconciliation.

FA(3) fields on the invoice:

  • KodWaluty: EUR
  • KursWaluty: 4.311800
  • Net: 8,000.00 EUR
  • VAT (PLN): 7,933.71 PLN
  • Gross: 8,000.00 EUR

Ten Checks Before Sending a Currency Invoice

  1. Tax point date: Confirm the actual tax point, not the draft date.
  2. Transmission date: If transmitting online, the deemed issue date is the transmission day. Calculate the rate accordingly.
  3. NBP table: Pull the rate from the last working day before the tax point (or issue date if earlier). Record the table number and date.
  4. Weekend rule: If the last working day is Friday, use Friday's table. Do not skip to Monday.
  5. PLN VAT: Calculate VAT in PLN. Net and gross stay in foreign currency.
  6. KursWaluty format: 6 decimal places. No commas. Use dot as decimal separator.
  7. KodWaluty: Valid ISO 4217 code (EUR, USD, GBP, CHF).
  8. Advance portions: If the invoice includes advance portions, each keeps its historical rate.
  9. Rounding: Round PLN VAT to 0.01. Post the rounding difference.
  10. NBP provenance: Store the NBP table number and date with the invoice record. You will need it during an audit.

Plandesk's currency engine performs all ten checks. It pulls the NBP rate from the correct table, warns if the transmission date shifts the applicable rate, splits advance portions at their historical rates, and stores the NBP table provenance with each invoice. The checks exist because KSeF does not perform them, and the cost of getting them wrong is a correction in a regime where corrections are harder than they have ever been.

This material is information of a general nature and does not constitute legal or tax advice. For a specific situation, verify the current rules or consult a qualified adviser.