Feedback von Taxman

This commit is contained in:
Ralph Soika 2026-04-27 12:47:59 +02:00
parent 47fc7e151e
commit f8c13c5b2b
5 changed files with 66 additions and 8 deletions

25
doc/KSeF/FEEDBACK.md Normal file
View file

@ -0,0 +1,25 @@
# Feedback zum PDF FIle
## 1. Podmiot 1 — Daten des Rechnungsausstellers (AGLP)
- `<Nazwa>` FIXED
- `<AdresL1>` FIXED
- `<PrefiksPodatnika>PL</PrefiksPodatnika>` FIXED
## 2. Podmiot 2 — Daten des Rechnungsempfängers
- `<NrID> <NIP>` - ALREADY IMPLEMENTED
- EU-Rechnungsempfänger - UNCLEAR!
- Anschrift des Rechnungsempfängers - CARGOSOFT TOPIC
## 3. Abschnitt <Fa> — Rechnungskopf (außer Standardfelder P_1, P_2, P_6)
- `<P_1M>` - FIXED
- `<KursWalutyZ>` - FIXED
# 4. Rechnungspositionen <FaWiersz> — Pflichtfelder je Position
- `<P_7>` - FIXED
- `<P_8B>` - IGNORED - NOT FIXED!
ab `<P_11A>` wird es krimminell

Binary file not shown.

View file

@ -292,6 +292,26 @@ public class KSeFAdapter implements SignalAdapter {
*/ */
model.setGrandTotalAmount(workitem.getItemValueDouble("invoice.total")); model.setGrandTotalAmount(workitem.getItemValueDouble("invoice.total"));
/*
* KursWalutyZ
*
* Für Rechnungen in Fremdwährung obligatorisch. Anzuwenden ist der NBP-
* Durchschnittskurs des Tages vor Entstehen der Steuerpflicht (Art. 31a
* UStG-PL).
* Dezimalformat mit Punkt.
*/
String currency = workitem.getItemValueString("invoice.currency");
if (!currency.isBlank() && !"PLN".equals(currency)) {
Element p15 = model.findChildNode(elementFa, EInvoiceNS.KSEF, "P_15");
if (p15 != null) {
Double rate = workitem.getItemValueDouble("invoice.rate");
logger.info("│ ├── set KursWalutyZ = " + rate);
Element element = model.findOrCreateChildNodeAfter(elementFa, EInvoiceNS.KSEF, "KursWalutyZ",
"P_15");
element.setTextContent(rate.toString());
}
}
// finally set the due date at the end of the XML tree // finally set the due date at the end of the XML tree
model.setDueDateTime(workitem.getItemValueLocalDate("invoice.duedate")); model.setDueDateTime(workitem.getItemValueLocalDate("invoice.duedate"));
@ -460,7 +480,18 @@ public class KSeFAdapter implements SignalAdapter {
// Herrn Grzegorz Grzelczyk möchte hier BillingText // Herrn Grzegorz Grzelczyk möchte hier BillingText
// tradeLineItem.setName(orderItem.getItemValueString("datev.text")); // tradeLineItem.setName(orderItem.getItemValueString("datev.text"));
tradeLineItem.setName(orderItem.getItemValueString("billingtext")); // tradeLineItem.setName(orderItem.getItemValueString("billingtext"));
// Herr Grzelczyk will das alle billing texte aus der liste, verkettet
// ausgegeben werden.
List<String> billingTexts = orderItem.getItemValue("billingtext");
String billingTextName = billingTexts == null
? ""
: String.join(", ", billingTexts);
final int MAX_LENGTH = 512;
if (billingTextName.length() > MAX_LENGTH) {
billingTextName = billingTextName.substring(0, MAX_LENGTH);
}
tradeLineItem.setName(billingTextName);
tradeLineItem.setQuantity(1); tradeLineItem.setQuantity(1);

View file

@ -13,14 +13,14 @@
<!-- Seller (Your Polish Company - Pre-filled) --> <!-- Seller (Your Polish Company - Pre-filled) -->
<Podmiot1> <Podmiot1>
<PrefiksPodatnika>PL</PrefiksPodatnika>
<DaneIdentyfikacyjne> <DaneIdentyfikacyjne>
<NIP>9552521552</NIP> <NIP>9552521552</NIP>
<Nazwa>Alexander Global Logistics</Nazwa> <Nazwa>ALEXANDER GLOBAL LOGISTICS POLAND sp. z o.o.</Nazwa>
</DaneIdentyfikacyjne> </DaneIdentyfikacyjne>
<Adres> <Adres>
<KodKraju>PL</KodKraju> <KodKraju>PL</KodKraju>
<AdresL1>Gdanska 36</AdresL1> <AdresL1>ul. Gdańska 36, 70-660 Szczecin</AdresL1>
<AdresL2>70-660 Szczecin</AdresL2>
</Adres> </Adres>
<DaneKontaktowe> <DaneKontaktowe>
<Email>MBudas@alexander-logistics.com</Email> <Email>MBudas@alexander-logistics.com</Email>
@ -57,6 +57,7 @@
<KodWaluty>#CURRENCY#</KodWaluty> <KodWaluty>#CURRENCY#</KodWaluty>
<P_1></P_1> <!-- Invoice Date --> <P_1></P_1> <!-- Invoice Date -->
<P_1M>Szczecin</P_1M>
<P_2></P_2> <!-- Invoice Number --> <P_2></P_2> <!-- Invoice Number -->
<P_6></P_6> <!-- Due Date --> <P_6></P_6> <!-- Due Date -->

View file

@ -2878,7 +2878,8 @@ AGL Poland Team
<imixs:value/> <imixs:value/>
</imixs:item> </imixs:item>
<imixs:item name="txtactivityresult" type="xs:string"> <imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value> <imixs:value><![CDATA[<item name="comment" ignore="true"/>
<item name="action">home</item>]]></imixs:value>
</imixs:item> </imixs:item>
<imixs:item name="txtname" type="xs:string"> <imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value> <imixs:value><![CDATA[Speichern]]></imixs:value>
@ -3193,13 +3194,13 @@ AGL Poland Team
<bpmndi:BPMNShape bpmnElement="event_nQBQjw" id="BPMNShape_093C9Q"> <bpmndi:BPMNShape bpmnElement="event_nQBQjw" id="BPMNShape_093C9Q">
<dc:Bounds height="36.0" width="36.0" x="897.0" y="407.0"/> <dc:Bounds height="36.0" width="36.0" x="897.0" y="407.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_OMsueg"> <bpmndi:BPMNLabel id="BPMNLabel_OMsueg">
<dc:Bounds height="20.0" width="100.0" x="865.0" y="436.0"/> <dc:Bounds height="20.0" width="100.0" x="865.0" y="446.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_0YONsg" id="BPMNShape_PuiuLA"> <bpmndi:BPMNShape bpmnElement="event_0YONsg" id="BPMNShape_PuiuLA">
<dc:Bounds height="36.0" width="36.0" x="1307.0" y="407.0"/> <dc:Bounds height="36.0" width="36.0" x="1307.0" y="407.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_wi6IGg"> <bpmndi:BPMNLabel id="BPMNLabel_wi6IGg">
<dc:Bounds height="20.0" width="100.0" x="1275.0" y="436.0"/> <dc:Bounds height="20.0" width="100.0" x="1275.0" y="446.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_NIn1DQ" id="BPMNShape_rAwIzQ"> <bpmndi:BPMNShape bpmnElement="event_NIn1DQ" id="BPMNShape_rAwIzQ">
@ -3301,7 +3302,7 @@ AGL Poland Team
<bpmndi:BPMNShape bpmnElement="event_3FDnsA" id="BPMNShape_bRk7og"> <bpmndi:BPMNShape bpmnElement="event_3FDnsA" id="BPMNShape_bRk7og">
<dc:Bounds height="36.0" width="36.0" x="1717.0" y="407.0"/> <dc:Bounds height="36.0" width="36.0" x="1717.0" y="407.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_XhmDNA"> <bpmndi:BPMNLabel id="BPMNLabel_XhmDNA">
<dc:Bounds height="20.0" width="100.0" x="1685.0" y="436.0"/> <dc:Bounds height="20.0" width="100.0" x="1685.0" y="446.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gateway_S4b22A" id="BPMNShape_whGktg"> <bpmndi:BPMNShape bpmnElement="gateway_S4b22A" id="BPMNShape_whGktg">