korrektur der Steuerberechnung

This commit is contained in:
Ralph Soika 2026-02-24 16:29:50 +01:00
parent 676310ae38
commit d7c9682bfd
6 changed files with 448 additions and 31 deletions

View file

@ -224,14 +224,10 @@ public class KSeFAdapter implements SignalAdapter {
// Netto // Netto
model.setNetTotalAmount(workitem.getItemValueDouble("invoice.total.net")); model.setNetTotalAmount(workitem.getItemValueDouble("invoice.total.net"));
// Tax // Tax
if (workitem.getItemValueDouble("invoice.total.tax") > 0) { model.setTaxTotalAmount(InvoiceUtil.round(workitem.getItemValueDouble("invoice.total")
// wir haben eine Steuer! - workitem.getItemValueDouble("invoice.total.net")));
model.setTaxTotalAmount(InvoiceUtil.round(workitem.getItemValueDouble("invoice.total") model.setTaxRate(workitem.getItemValueDouble("invoice.total.tax"));
- workitem.getItemValueDouble("invoice.total.net")));
model.setTaxRate(workitem.getItemValueDouble("invoice.total.tax"));
}
// Brutto // Brutto
model.setGrandTotalAmount(workitem.getItemValueDouble("invoice.total")); model.setGrandTotalAmount(workitem.getItemValueDouble("invoice.total"));
@ -353,9 +349,14 @@ public class KSeFAdapter implements SignalAdapter {
tradeLineItem.setName(orderItem.getItemValueString("datev.text")); tradeLineItem.setName(orderItem.getItemValueString("datev.text"));
tradeLineItem.setQuantity(1); tradeLineItem.setQuantity(1);
tradeLineItem.setNetPrice(orderItem.getItemValueDouble("datev.umsatz"));
tradeLineItem.setTotal(orderItem.getItemValueDouble("datev.umsatz")); double vat = orderItem.getItemValueDouble("datev.vatrate"); // 23.00
// tradeLineItem.setTaxRate(orderItem.getItemValueDouble("vat")); double netto = orderItem.getItemValueDouble("datev.umsatz"); // 970.00
double brutto = netto * (1 + (vat / 100));
double steuer = brutto - netto;
tradeLineItem.setTaxRate(vat);
tradeLineItem.setNetPrice(netto);
tradeLineItem.setTotal(brutto);
return tradeLineItem; return tradeLineItem;
} }

View file

@ -612,7 +612,8 @@ public class CargosoftXMLInvoiceImportService {
XPathExpression netAmountValueExpr = xPath.compile("InvoiceAmount/NetAmount/Amount/Value/text()"); XPathExpression netAmountValueExpr = xPath.compile("InvoiceAmount/NetAmount/Amount/Value/text()");
XPathExpression netAmountExchangeRateExpr = xPath XPathExpression netAmountExchangeRateExpr = xPath
.compile("InvoiceAmount/NetAmount/Amount/ExchangeRate/text()"); .compile("InvoiceAmount/NetAmount/Amount/ExchangeRate/text()");
XPathExpression vatInformationExpr = xPath
.compile("InvoiceAmount/VATInformation/VAT/VATRate/text()");
XPathExpression netActivityTypeExpr = xPath.compile("ActivityType/Codes/Code[@Type='cs']/text()"); XPathExpression netActivityTypeExpr = xPath.compile("ActivityType/Codes/Code[@Type='cs']/text()");
NodeList rowList = doc.getElementsByTagName("InvoiceRow"); NodeList rowList = doc.getElementsByTagName("InvoiceRow");
@ -634,6 +635,14 @@ public class CargosoftXMLInvoiceImportService {
String fileNumber = (String) fileNumberExpr.evaluate(rowNode, XPathConstants.STRING); String fileNumber = (String) fileNumberExpr.evaluate(rowNode, XPathConstants.STRING);
childItemCol.setItemValue("datev.text", fileNumber); childItemCol.setItemValue("datev.text", fileNumber);
// get VAT Rate
try {
String vatRateText = (String) vatInformationExpr.evaluate(rowNode, XPathConstants.STRING);
childItemCol.setItemValue("datev.vatrate", Double.valueOf(vatRateText));
} catch (Exception e) {
// no op
}
// speichere die Position in invoice.positions zur suche nach dem // speichere die Position in invoice.positions zur suche nach dem
// Positionskennzeichen // Positionskennzeichen
workitem.appendItemValue("invoice.positions", fileNumber); workitem.appendItemValue("invoice.positions", fileNumber);

View file

@ -48,9 +48,7 @@ public class KSeFAdapterTest {
private static Logger logger = Logger.getLogger(KSeFAdapterTest.class.getName()); private static Logger logger = Logger.getLogger(KSeFAdapterTest.class.getName());
private static final String TEMPLATE_FILE = "ksef/ksef.xml"; private static final String TEMPLATE_FILE = "ksef/ksef.xml";
private static final String OUTPUT_FILE = "ksef-output.xml";
ItemCollection workitem;
ItemCollection businessPartner; ItemCollection businessPartner;
@Mock @Mock
@ -69,8 +67,28 @@ public class KSeFAdapterTest {
void setup() throws Exception { void setup() throws Exception {
TestLoggerConfig.setupTestLogger(); TestLoggerConfig.setupTestLogger();
// Prepare mock business partner
businessPartner = new ItemCollection();
businessPartner.setItemValue("partner.name", "Test Sp. z o.o.");
businessPartner.setItemValue("partner.country", "PL");
businessPartner.setItemValue("partner.city", "Warszawa");
businessPartner.setItemValue("partner.zip", "00-001");
businessPartner.setItemValue("partner.address", "ul. Testowa 1");
businessPartner.setItemValue("partner.vat", "PL1234567890");
businessPartner.setItemValue("dbtr.number", "D-12345");
}
/**
* Erzeugt ein lokales XML File zum testen
*/
@Test
@DisplayName("Test Simple Invoice")
public void testSimpleInvoice() throws Exception {
logger.info("==> Test: Upload Invoice XML");
// Prepare a workitem with typical invoice data // Prepare a workitem with typical invoice data
workitem = new ItemCollection(); ItemCollection workitem = new ItemCollection();
workitem.setItemValue("invoice.number", "FV/2025/001"); workitem.setItemValue("invoice.number", "FV/2025/001");
workitem.setItemValue("invoice.date", LocalDate.of(2025, 2, 10)); workitem.setItemValue("invoice.date", LocalDate.of(2025, 2, 10));
workitem.setItemValue("invoice.duedate", LocalDate.of(2025, 3, 10)); workitem.setItemValue("invoice.duedate", LocalDate.of(2025, 3, 10));
@ -99,25 +117,131 @@ public class KSeFAdapterTest {
workitem.setItemValue("_childitems", childItems); workitem.setItemValue("_childitems", childItems);
// Prepare mock business partner // Arrange
businessPartner = new ItemCollection(); when(businessPartnerService.getBusinessPartnerByID("BP-001"))
businessPartner.setItemValue("partner.name", "Test Sp. z o.o."); .thenReturn(businessPartner);
businessPartner.setItemValue("partner.country", "PL");
businessPartner.setItemValue("partner.city", "Warszawa"); FileData xmlTemplate = loadTemplateFromResources(TEMPLATE_FILE);
businessPartner.setItemValue("partner.zip", "00-001");
businessPartner.setItemValue("partner.address", "ul. Testowa 1"); // Act
businessPartner.setItemValue("partner.vat", "PL1234567890"); adapter.updateEInvoice(xmlTemplate, workitem);
businessPartner.setItemValue("dbtr.number", "D-12345");
// Assert - basic checks
assertNotNull(xmlTemplate.getContent(), "XML content should not be null after update");
assertTrue(xmlTemplate.getContent().length > 0, "XML content should not be empty");
// Write output for manual inspection
writeOutputToResources(xmlTemplate, "invoice-simple.xml");
} }
/** /**
* Erzeugt ein lokales XML File zum testen * Erzeugt ein lokales XML File zum testen
*/ */
@Test @Test
@DisplayName("Test Transform") @DisplayName("Test Invoice Korrektur")
public void testTransform() throws Exception { public void testInvoiceKorektur() throws Exception {
logger.info("==> Test: Upload Invoice XML"); logger.info("==> Test: Upload Invoice XML");
// Prepare a workitem with typical invoice data
ItemCollection workitem = new ItemCollection();
workitem.setItemValue("invoice.number", "FV/2025/001");
workitem.setItemValue("invoice.date", LocalDate.of(2025, 2, 10));
workitem.setItemValue("invoice.duedate", LocalDate.of(2025, 3, 10));
workitem.setItemValue("invoice.currency", "EUR");
workitem.setItemValue("invoice.total.net", 0.00);
workitem.setItemValue("invoice.total.tax", 0.0);
workitem.setItemValue("invoice.total", 0.00);
workitem.setItemValue("partner.id", "BP-001");
workitem.setItemValue("partner.vat", "PL1234567890");
// simulation Korrekturrechnung
workitem.setItemValue("invoice.correction", true);
workitem.setItemValue("invoice.CorrectionInvoiceNumber", "6551");
// Prepare child items (invoice line items)
List<Object> childItems = new ArrayList<>();
ItemCollection lineItem1 = new ItemCollection()
.setItemValue("numpos", "1")
.setItemValue("datev.shzeichen", "H")
.setItemValue("datev.kurs", 0.236485)
.setItemValue("datev.basisumsatz", -3805.74)
.setItemValue("datev.text", "Transport Berlin - Warsaw")
.setItemValue("billingtext", "usługa spedycyjna / transport w relacji, PL63 - CZ43")
.setItemValue("datev.umsatz", -900.00)
.setItemValue("datev.wkz", "EUR")
.setItemValue("billingcode", "TRANSLKW");
childItems.add(lineItem1.getAllItems());
/**
* <NrWierszaFa>1</NrWierszaFa>
* <UU_ID>7f846436-7c29-48b3-8f5a-fed996ea30a3</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>0.00</P_9A>
* <P_11>0.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>2</NrWierszaFa>
* <UU_ID>f3077e37-9198-4431-a82b-68d9439b587e</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>-900.00</P_9A>
* <P_11>-900.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>3</NrWierszaFa>
* <UU_ID>31fdfe9e-671e-42f6-9f7e-ceb227a3a42c</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>0.00</P_9A>
* <P_11>0.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>4</NrWierszaFa>
* <UU_ID>79ffd1e8-be87-478b-97b5-d37aa302d090</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>0.00</P_9A>
* <P_11>0.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>5</NrWierszaFa>
* <UU_ID>38e8cbd3-e558-4b0e-875c-c4f2d96d1659</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>900.00</P_9A>
* <P_11>900.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>6</NrWierszaFa>
* <UU_ID>3774dab3-b6c4-433e-8298-60ecf6cbab74</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>0.00</P_9A>
* <P_11>0.00</P_11>
* </FaWiersz>
* <FaWiersz>
* <NrWierszaFa>7</NrWierszaFa>
* <UU_ID>f19846ab-3567-4e5d-823b-807d474af062</UU_ID>
* <P_7>IM-POL-2512-008</P_7>
* <P_8A>szt.</P_8A>
* <P_8B>1</P_8B>
* <P_9A>0.00</P_9A>
* <P_11>0.00</P_11>
*/
workitem.setItemValue("_childitems", childItems);
// Arrange // Arrange
when(businessPartnerService.getBusinessPartnerByID("BP-001")) when(businessPartnerService.getBusinessPartnerByID("BP-001"))
.thenReturn(businessPartner); .thenReturn(businessPartner);
@ -132,7 +256,7 @@ public class KSeFAdapterTest {
assertTrue(xmlTemplate.getContent().length > 0, "XML content should not be empty"); assertTrue(xmlTemplate.getContent().length > 0, "XML content should not be empty");
// Write output for manual inspection // Write output for manual inspection
writeOutputToResources(xmlTemplate, OUTPUT_FILE); writeOutputToResources(xmlTemplate, "test-korrekturrechnung.xml");
} }
@ -159,7 +283,7 @@ public class KSeFAdapterTest {
* Write the resulting XML to src/test/resources/output/ for manual inspection. * Write the resulting XML to src/test/resources/output/ for manual inspection.
*/ */
private void writeOutputToResources(FileData fileData, String filename) throws IOException { private void writeOutputToResources(FileData fileData, String filename) throws IOException {
Path outputDir = Paths.get("src", "test", "resources", "output"); Path outputDir = Paths.get("src", "test", "resources", "ksef/output");
Files.createDirectories(outputDir); Files.createDirectories(outputDir);
Path outputPath = outputDir.resolve(filename); Path outputPath = outputDir.resolve(filename);
Files.write(outputPath, fileData.getContent()); Files.write(outputPath, fileData.getContent());

View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?>
<Faktura xmlns="http://crd.gov.pl/wzor/2025/06/25/13775/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Naglowek>
<KodFormularza kodSystemowy="FA (3)" wersjaSchemy="1-0E">FA</KodFormularza>
<WariantFormularza>3</WariantFormularza>
<DataWytworzeniaFa>2026-02-09T16:46:47.217821373Z</DataWytworzeniaFa>
<SystemInfo>Imixs eInvoice</SystemInfo>
</Naglowek>
<!-- Seller (Your Polish Company - Pre-filled) -->
<Podmiot1>
<DaneIdentyfikacyjne>
<NIP>9552521552</NIP>
<Nazwa>Alexander Global Logistics</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>Gdanska 36</AdresL1>
<AdresL2>70-660 Szczecin</AdresL2>
</Adres>
<DaneKontaktowe>
<Email>MBudas@alexander-logistics.com</Email>
</DaneKontaktowe>
</Podmiot1>
<!-- Buyer (Customer - Empty, to be filled) -->
<Podmiot2>
<DaneIdentyfikacyjne>
<!-- NIP falls eine PL Ust Vorliegt
ansonsten NrID - geht immer -->
<!-- <Nazwa>#Customer Name#</Nazwa> -->
<NIP>7851801689</NIP>
<Nazwa>DWORCZAK LOGISTICS Sp. z o.o.</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>ul. Szkolna 10</AdresL1>
<AdresL2>63-100 Niesłabin</AdresL2>
</Adres>
<!---
Contact information from buyer can be left
<DaneKontaktowe>
<Email></Email>
<Telefon></Telefon>
</DaneKontaktowe>
-->
<NrKlienta>D21839</NrKlienta>
<JST>2</JST>
<!-- fixed -->
<GV>2</GV>
<!-- fixed -->
</Podmiot2>
<!-- Invoice Data -->
<Fa>
<KodWaluty>EUR</KodWaluty>
<P_1>2025-12-12</P_1>
<!-- Invoice Date -->
<P_2>6602</P_2>
<!-- Invoice Number -->
<P_6>2026-01-11</P_6>
<!-- Due Date -->
<!-- Totals will only be computed by the EInvoiceModelKSeF Class-->
<!--
<P_13_1>0.00</P_13_1>
<P_14_1>0.00</P_14_1>
<P_15>0.00</P_15>
-->
<P_13_1>0.00</P_13_1>
<P_15>0.00</P_15>
<Adnotacje>
<!-- 1 yes - 2 no -->
<P_16>2</P_16>
<!-- Keine Selbstfakturierung -->
<P_17>2</P_17>
<!-- Kein Reverse Charge -->
<P_18>2</P_18>
<!-- Kein Split Payment (Rechnung unter 15.000 PLN/EUR) -->
<P_18A>2</P_18A>
<!-- Keine Steuerbefreiung -->
<Zwolnienie>
<P_19N>1</P_19N>
</Zwolnienie>
<!-- Keine neuen Verkehrsmittel -->
<NoweSrodkiTransportu>
<P_22N>1</P_22N>
</NoweSrodkiTransportu>
<!-- Kein vereinfachtes Verfahren nach Art. 135 -->
<P_23>2</P_23>
<!-- Keine Margenregelung -->
<PMarzy>
<P_PMarzyN>1</P_PMarzyN>
</PMarzy>
</Adnotacje>
<!-- Invoice Type (VAT) -->
<RodzajFaktury>KOR</RodzajFaktury>
<!-- Invoice Positions: FaWiersz -->
<DaneFaKorygowanej>
<DataWystFaKorygowanej>2025-12-05</DataWystFaKorygowanej>
<NrFaKorygowanej>6551</NrFaKorygowanej>
<NrKSeFN>1</NrKSeFN>
</DaneFaKorygowanej>
<FaWiersz>
<NrWierszaFa>1</NrWierszaFa>
<UU_ID>7f846436-7c29-48b3-8f5a-fed996ea30a3</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.00</P_9A>
<P_11>0.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>2</NrWierszaFa>
<UU_ID>f3077e37-9198-4431-a82b-68d9439b587e</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>-900.00</P_9A>
<P_11>-900.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>3</NrWierszaFa>
<UU_ID>31fdfe9e-671e-42f6-9f7e-ceb227a3a42c</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.00</P_9A>
<P_11>0.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>4</NrWierszaFa>
<UU_ID>79ffd1e8-be87-478b-97b5-d37aa302d090</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.00</P_9A>
<P_11>0.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>5</NrWierszaFa>
<UU_ID>38e8cbd3-e558-4b0e-875c-c4f2d96d1659</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>900.00</P_9A>
<P_11>900.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>6</NrWierszaFa>
<UU_ID>3774dab3-b6c4-433e-8298-60ecf6cbab74</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.00</P_9A>
<P_11>0.00</P_11>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>7</NrWierszaFa>
<UU_ID>f19846ab-3567-4e5d-823b-807d474af062</UU_ID>
<P_7>IM-POL-2512-008</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.00</P_9A>
<P_11>0.00</P_11>
</FaWiersz>
</Fa>
</Faktura>

View file

@ -6,7 +6,7 @@
<Naglowek> <Naglowek>
<KodFormularza kodSystemowy="FA (3)" wersjaSchemy="1-0E">FA</KodFormularza> <KodFormularza kodSystemowy="FA (3)" wersjaSchemy="1-0E">FA</KodFormularza>
<WariantFormularza>3</WariantFormularza> <WariantFormularza>3</WariantFormularza>
<DataWytworzeniaFa>2026-02-10T12:46:08.366684Z</DataWytworzeniaFa> <DataWytworzeniaFa>2026-02-24T15:23:18.952460Z</DataWytworzeniaFa>
<SystemInfo>Imixs eInvoice</SystemInfo> <SystemInfo>Imixs eInvoice</SystemInfo>
</Naglowek> </Naglowek>
<!-- Seller (Your Polish Company - Pre-filled) --> <!-- Seller (Your Polish Company - Pre-filled) -->
@ -94,11 +94,16 @@
</PMarzy> </PMarzy>
</Adnotacje> </Adnotacje>
<!-- Invoice Type (VAT) --> <!-- Invoice Type (VAT) -->
<RodzajFaktury>VAT</RodzajFaktury> <RodzajFaktury>KOR</RodzajFaktury>
<!-- Invoice Positions: FaWiersz --> <!-- Invoice Positions: FaWiersz -->
<DaneFaKorygowanej>
<DataWystFaKorygowanej>2025-02-10</DataWystFaKorygowanej>
<NrFaKorygowanej>6551</NrFaKorygowanej>
<NrKSeFN>1</NrKSeFN>
</DaneFaKorygowanej>
<FaWiersz> <FaWiersz>
<NrWierszaFa>1</NrWierszaFa> <NrWierszaFa>1</NrWierszaFa>
<UU_ID>5a2dd34c-6592-40aa-aafc-80bac9c9b9c4</UU_ID> <UU_ID>f8deaaf2-dfe0-4a7e-801a-c977a4e400ba</UU_ID>
<P_7>Transport Berlin - Warsaw</P_7> <P_7>Transport Berlin - Warsaw</P_7>
<P_8A>szt.</P_8A> <P_8A>szt.</P_8A>
<P_8B>1</P_8B> <P_8B>1</P_8B>
@ -107,7 +112,7 @@
</FaWiersz> </FaWiersz>
<FaWiersz> <FaWiersz>
<NrWierszaFa>2</NrWierszaFa> <NrWierszaFa>2</NrWierszaFa>
<UU_ID>d44bf6a0-758b-415b-b45a-d83052a2f2aa</UU_ID> <UU_ID>29636625-ac8a-47a6-a795-8954d1d106f2</UU_ID>
<P_7>Customs handling</P_7> <P_7>Customs handling</P_7>
<P_8A>szt.</P_8A> <P_8A>szt.</P_8A>
<P_8B>1</P_8B> <P_8B>1</P_8B>

View file

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<Faktura xmlns="http://crd.gov.pl/wzor/2025/06/25/13775/"
xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Naglowek>
<KodFormularza kodSystemowy="FA (3)" wersjaSchemy="1-0E">FA</KodFormularza>
<WariantFormularza>3</WariantFormularza>
<DataWytworzeniaFa>2026-02-24T16:11:02.707702Z</DataWytworzeniaFa>
<SystemInfo>Imixs eInvoice</SystemInfo>
</Naglowek>
<!-- Seller (Your Polish Company - Pre-filled) -->
<Podmiot1>
<DaneIdentyfikacyjne>
<NIP>9552521552</NIP>
<Nazwa>Alexander Global Logistics</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>Gdanska 36</AdresL1>
<AdresL2>70-660 Szczecin</AdresL2>
</Adres>
<DaneKontaktowe>
<Email>MBudas@alexander-logistics.com</Email>
</DaneKontaktowe>
</Podmiot1>
<!-- Buyer (Customer - Empty, to be filled) -->
<Podmiot2>
<DaneIdentyfikacyjne>
<!-- NIP falls eine PL Ust Vorliegt
ansonsten NrID - geht immer -->
<!-- <Nazwa>#Customer Name#</Nazwa> -->
<NIP>1234567890</NIP>
<Nazwa>Test Sp. z o.o.</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>ul. Testowa 1</AdresL1>
<AdresL2>00-001 Warszawa</AdresL2>
</Adres>
<!---
Contact information from buyer can be left
<DaneKontaktowe>
<Email></Email>
<Telefon></Telefon>
</DaneKontaktowe>
-->
<NrKlienta>D-12345</NrKlienta>
<JST>2</JST>
<!-- fixed -->
<GV>2</GV>
<!-- fixed -->
</Podmiot2>
<!-- Invoice Data -->
<Fa>
<KodWaluty>EUR</KodWaluty>
<P_1>2025-02-10</P_1>
<!-- Invoice Date -->
<P_2>FV/2025/001</P_2>
<!-- Invoice Number -->
<P_6>2025-03-10</P_6>
<!-- Due Date -->
<!-- Totals will only be computed by the EInvoiceModelKSeF Class-->
<!--
<P_13_1>0.00</P_13_1>
<P_14_1>0.00</P_14_1>
<P_15>0.00</P_15>
-->
<P_13_1>0.00</P_13_1>
<P_14_1>0.00</P_14_1>
<P_15>0.00</P_15>
<Adnotacje>
<!-- 1 yes - 2 no -->
<P_16>2</P_16>
<!-- Keine Selbstfakturierung -->
<P_17>2</P_17>
<!-- Kein Reverse Charge -->
<P_18>2</P_18>
<!-- Kein Split Payment (Rechnung unter 15.000 PLN/EUR) -->
<P_18A>2</P_18A>
<!-- Keine Steuerbefreiung -->
<Zwolnienie>
<P_19N>1</P_19N>
</Zwolnienie>
<!-- Keine neuen Verkehrsmittel -->
<NoweSrodkiTransportu>
<P_22N>1</P_22N>
</NoweSrodkiTransportu>
<!-- Kein vereinfachtes Verfahren nach Art. 135 -->
<P_23>2</P_23>
<!-- Keine Margenregelung -->
<PMarzy>
<P_PMarzyN>1</P_PMarzyN>
</PMarzy>
</Adnotacje>
<!-- Invoice Type (VAT) -->
<RodzajFaktury>KOR</RodzajFaktury>
<!-- Invoice Positions: FaWiersz -->
<DaneFaKorygowanej>
<DataWystFaKorygowanej>2025-02-10</DataWystFaKorygowanej>
<NrFaKorygowanej>6551</NrFaKorygowanej>
<NrKSeFN>1</NrKSeFN>
</DaneFaKorygowanej>
<FaWiersz>
<NrWierszaFa>1</NrWierszaFa>
<UU_ID>781e1f16-a86e-452d-b959-01c76743a792</UU_ID>
<P_7>Transport Berlin - Warsaw</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>-900.00</P_9A>
<P_11>-900.00</P_11>
</FaWiersz>
</Fa>
</Faktura>