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