diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/einvoice/KSeFInvoiceLineBuilder.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/einvoice/KSeFInvoiceLineBuilder.java
index cbd2cca..569e7ce 100644
--- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/einvoice/KSeFInvoiceLineBuilder.java
+++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/einvoice/KSeFInvoiceLineBuilder.java
@@ -102,7 +102,13 @@ public class KSeFInvoiceLineBuilder {
String currency = workitem.getItemValueString("invoice.currency");
if (!"PLN".equalsIgnoreCase(currency) && !currency.isBlank()) {
BigDecimal exchangeRate = BigDecimal.valueOf(workitem.getItemValueDouble("invoice.rate"));
- writeForeignCurrencyFields(model, elementFa, aggregates, exchangeRate);
+
+ // 11.05.2026 - Maciej Budas:
+ // Exchange rate in KSeF is used CargoSoft format (EUR=PLN), whereas it should
+ // be PLN=EUR (i.e., 4.2537). To get the correct data in KSeF, there is just to
+ // divide 1 by the current rate (1 / 0.235089).
+ BigDecimal invertedRate = BigDecimal.ONE.divide(exchangeRate, 4, RoundingMode.HALF_UP);
+ writeForeignCurrencyFields(model, elementFa, aggregates, invertedRate);
}
// Phase 4: remove all summary placeholders that were not filled.
diff --git a/office-alexander-logistics-app/src/test/resources/ksef/ksef.xml b/office-alexander-logistics-app/src/test/resources/ksef/ksef.xml
index 42f711d..6e7da29 100644
--- a/office-alexander-logistics-app/src/test/resources/ksef/ksef.xml
+++ b/office-alexander-logistics-app/src/test/resources/ksef/ksef.xml
@@ -85,8 +85,14 @@
2
-
- 2
+
+ 1
2
diff --git a/workflow/pl/e-invoice/templates/ksef.xml b/workflow/pl/e-invoice/templates/ksef.xml
index 42f711d..6e7da29 100644
--- a/workflow/pl/e-invoice/templates/ksef.xml
+++ b/workflow/pl/e-invoice/templates/ksef.xml
@@ -85,8 +85,14 @@
2
-
- 2
+
+ 1
2