fixed KSeF Upload
This commit is contained in:
parent
082f0f609d
commit
9024ee2e38
10 changed files with 482 additions and 115 deletions
|
|
@ -173,6 +173,8 @@ The implementation uses `PluginException` for error handling with two error type
|
|||
- [Facture Details](https://github.com/CIRFMF/ksef-docs/blob/main/sesja-interaktywna.md#2-wys%C5%82anie-faktury)
|
||||
- [XML Invoice Example](https://github.com/CIRFMF/ksef-docs/blob/main/faktury/weryfikacja-faktury.md)
|
||||
|
||||
- [Github Discussions](https://github.com/CIRFMF/ksef-docs/issues/351#issuecomment-3538013805)
|
||||
|
||||
# Validate XML
|
||||
|
||||
To validate XML results use xmllint. To install run:
|
||||
|
|
@ -242,14 +244,6 @@ Invoice that corrects a previously issued invoice (VAT, ZAL, or ROZ).
|
|||
<P_15>-628.00</P_15> <!-- Difference in Total -->
|
||||
```
|
||||
|
||||
⚠️ **Important:**
|
||||
|
||||
- KOR uses different P_13/P_14 fields than VAT
|
||||
- `P_13_1`, `P_14_1` → Used in VAT invoices
|
||||
- `P_13_6_1`, `P_13_7`, etc. → Used in KOR invoices (for 0% rate, exempt, etc.)
|
||||
|
||||
---
|
||||
|
||||
## DaneFaKorygowanej Element
|
||||
|
||||
**Required in KOR invoices** - Must appear AFTER `<RodzajFaktury>KOR</RodzajFaktury>`
|
||||
|
|
@ -296,3 +290,12 @@ Invoice that corrects a previously issued invoice (VAT, ZAL, or ROZ).
|
|||
```
|
||||
|
||||
---
|
||||
|
||||
# Testdaten
|
||||
|
||||
Um Testdaten in die lokale Dev Umgebung zu importieren:
|
||||
|
||||
1. aus dem Produktiv Archiv System das XML eines Rechnungs-Snapshots unter /docker/transfer speichern
|
||||
2. per api Call importieren:
|
||||
|
||||
http://localhost:8080/api/cargosoft/import?file=/opt/jboss/wildfly/transfer/f28bf914-04de-4843-9809-54c724bdc9bf-1764111735524.xml
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -70,7 +70,7 @@ public class KSeFAPIService {
|
|||
public void uploadInvoice(ItemCollection workitem, String fileName) throws PluginException {
|
||||
|
||||
// First open an interactive session (reuses existing if valid)
|
||||
kseFAuthManager.openSession();
|
||||
kseFAuthManager.openSession(workitem);
|
||||
|
||||
logger.info("├── 📤 Upload Invoice...");
|
||||
|
||||
|
|
@ -190,20 +190,32 @@ public class KSeFAPIService {
|
|||
|
||||
// Status abfragen
|
||||
// Now we need to wait until auth/{AuthRef} will return 200
|
||||
int code = -1;
|
||||
long start = System.currentTimeMillis();
|
||||
long timeout = 20_000; // 20 Sekunden
|
||||
boolean timeoutStatus = true;
|
||||
while (System.currentTimeMillis() - start < timeout) {
|
||||
int code = kseFAuthManager.checkSessionStatus();
|
||||
|
||||
code = kseFAuthManager.checkSessionStatus(workitem);
|
||||
if (code >= 200) {
|
||||
break; // ok or borken
|
||||
timeoutStatus = false;
|
||||
break; // ok or broken
|
||||
}
|
||||
|
||||
// kleine Pause, um CPU zu schonen
|
||||
kseFAuthManager.waitSomeTime(500);
|
||||
|
||||
}
|
||||
|
||||
if (timeoutStatus) {
|
||||
logger.severe("├── ⚠️ Status timeout");
|
||||
}
|
||||
|
||||
// In case we have an error we print out the reason...
|
||||
if (code > 200) {
|
||||
kseFAuthManager.checkSessionStatusInvoices();
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"Failed to process invoice: " + response.statusCode());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.severe("├── ⚠️ Invoice upload failed: " + e.getMessage());
|
||||
|
||||
|
|
@ -217,96 +229,6 @@ public class KSeFAPIService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Poll Invoice Status
|
||||
*
|
||||
* https://ksef-test.mf.gov.pl/docs/v2/index.html#tag/Status-wysylki-i-UPO/paths/~1api~1v2~1sessions~1%7BreferenceNumber%7D/get
|
||||
*
|
||||
* @param workitem
|
||||
* @return
|
||||
* @throws PluginException
|
||||
*/
|
||||
private int xxxgetInvoiceStatus(ItemCollection workitem) throws PluginException {
|
||||
|
||||
logger.info("├── 🔎 Get Invoice Status...");
|
||||
|
||||
// Validate session
|
||||
if (kseFAuthManager.getAccessToken() == null) {
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"API Error - missing AccessToken!");
|
||||
}
|
||||
if (kseFAuthManager.getSessionRefNumber() == null) {
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"API Error - missing SessionRefNumber!");
|
||||
}
|
||||
if (kseFAuthManager.getSessionEncryption() == null) {
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"API Error - missing Session Encryption!");
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
String referenceNumber = workitem.getItemValueString("ksef.referenceNumber");
|
||||
if (referenceNumber.isBlank()) {
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"API Error - missing invoice referenceNumber!");
|
||||
}
|
||||
|
||||
// Calculate hashes
|
||||
|
||||
// Send upload request
|
||||
String uri = kseFAuthManager.getBaseURI() + "/sessions/" + kseFAuthManager.getSessionRefNumber();
|
||||
|
||||
logger.info("│ ├── GET: " + uri);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(uri))
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", "Bearer " + kseFAuthManager.getAccessToken())
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response = kseFAuthManager.getHttpClient().send(
|
||||
request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
logger.info("│ ├── HTTP Response: " + response.statusCode());
|
||||
|
||||
logger.info("│ ├── Response Body: " + response.body());
|
||||
|
||||
int statusCode = -1;
|
||||
String statusDescription = "";
|
||||
try (Jsonb jsonb = JsonbBuilder.create()) {
|
||||
JsonObject jsonObject = jsonb.fromJson(response.body(), JsonObject.class);
|
||||
|
||||
// Status Code aus dem status-Objekt extrahieren
|
||||
if (jsonObject.containsKey("status")) {
|
||||
JsonObject statusObject = jsonObject.getJsonObject("status");
|
||||
if (statusObject.containsKey("code")) {
|
||||
statusCode = statusObject.getInt("code");
|
||||
statusDescription = statusObject.getString("description");
|
||||
logger.info("│ ├── Status Code: " + statusCode);
|
||||
logger.info("│ ├── Status Description: " + statusDescription);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.severe("├── ⚠️ Error parsing JSON response: " + e.getMessage());
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"Error parsing JSON response: " + e.getMessage());
|
||||
}
|
||||
|
||||
workitem.setItemValue("ksef.status.code", statusCode);
|
||||
workitem.setItemValue("ksef.status.description", statusDescription);
|
||||
return statusCode;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.severe("├── ⚠️ Get Invoice status failed: " + e.getMessage());
|
||||
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"Invoice upload failed: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt invoice XML with the session encryption keys
|
||||
*
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import javax.crypto.spec.OAEPParameterSpec;
|
|||
import javax.crypto.spec.PSource;
|
||||
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.imixs.workflow.exceptions.InvalidAccessException;
|
||||
import org.imixs.workflow.exceptions.PluginException;
|
||||
|
||||
|
|
@ -182,7 +183,7 @@ public class KSeFAuthManager {
|
|||
*
|
||||
* @throws PluginException
|
||||
*/
|
||||
public void openSession() throws PluginException {
|
||||
public void openSession(ItemCollection workitem) throws PluginException {
|
||||
logger.info("├── open Session...");
|
||||
if (!hasValidSession()) {
|
||||
|
||||
|
|
@ -203,7 +204,7 @@ public class KSeFAuthManager {
|
|||
|
||||
this.openInteractiveSession();
|
||||
|
||||
this.waitForSessionStatus();
|
||||
this.waitForSessionStatus(workitem);
|
||||
|
||||
} else {
|
||||
logger.warning("│ ├── ! Session already exists - reuse existing KSeF Session...");
|
||||
|
|
@ -497,7 +498,7 @@ public class KSeFAuthManager {
|
|||
*
|
||||
* @throws PluginException
|
||||
*/
|
||||
public void waitForSessionStatus() throws PluginException {
|
||||
public void waitForSessionStatus(ItemCollection workitem) throws PluginException {
|
||||
logger.info("├── 🔜 Waiting for Session status 200...");
|
||||
|
||||
// Now we need to wait until auth/{AuthRef} will return 200
|
||||
|
|
@ -505,7 +506,7 @@ public class KSeFAuthManager {
|
|||
long timeout = 120_000; // 120 Sekunden
|
||||
|
||||
while (System.currentTimeMillis() - start < timeout) {
|
||||
int status = this.checkSessionStatus();
|
||||
int status = this.checkSessionStatus(workitem);
|
||||
|
||||
// Status 100 = Session opened and ready for uploads!
|
||||
if (status == 100 || status == 200) {
|
||||
|
|
@ -638,7 +639,7 @@ public class KSeFAuthManager {
|
|||
String jsonPayload = String.format(
|
||||
"{" +
|
||||
"\"formCode\": {" +
|
||||
" \"systemCode\": \"FA (2)\"," +
|
||||
" \"systemCode\": \"FA (3)\"," +
|
||||
" \"schemaVersion\": \"1-0E\"," +
|
||||
" \"value\": \"FA\"" +
|
||||
"}," +
|
||||
|
|
@ -862,8 +863,8 @@ public class KSeFAuthManager {
|
|||
* @return Session Status Code
|
||||
* @throws PluginException
|
||||
*/
|
||||
public int checkSessionStatus() throws PluginException {
|
||||
logger.info("├── ↩️ KSeF API check session status...");
|
||||
public int checkSessionStatus(ItemCollection workitem) throws PluginException {
|
||||
logger.info("├── ↩️ KSeF API check session status...");
|
||||
String uri = baseURI + "/sessions/" + this.sessionRefNumber;
|
||||
int httpResponse = -1;
|
||||
int statusCode = -1;
|
||||
|
|
@ -898,6 +899,8 @@ public class KSeFAuthManager {
|
|||
statusCode = statusObject.getInt("code");
|
||||
logger.info("│ ├── Status Code: " + statusCode);
|
||||
logger.info("│ ├── Status Description: " + statusObject.getString("description"));
|
||||
workitem.setItemValue("ksef.status.code", statusCode);
|
||||
workitem.setItemValue("ksef.status.description", statusObject.getString("description"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -910,6 +913,44 @@ public class KSeFAuthManager {
|
|||
return statusCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method verifies the actual status of the status of all invoices
|
||||
*
|
||||
* The method returns the aut status code (not the HTTP Response code!)
|
||||
*
|
||||
* https://ksef-test.mf.gov.pl/docs/v2/index.html#tag/Status-wysylki-i-UPO/paths/~1api~1v2~1sessions~1%7BreferenceNumber%7D/get
|
||||
*
|
||||
* @return Session Status Code
|
||||
* @throws PluginException
|
||||
*/
|
||||
public void checkSessionStatusInvoices() throws PluginException {
|
||||
logger.info("├── ↩️ KSeF API check session status invoices...");
|
||||
String uri = baseURI + "/sessions/" + this.sessionRefNumber + "/invoices";
|
||||
int httpResponse = -1;
|
||||
int statusCode = -1;
|
||||
logger.info("│ ├── GET: " + uri);
|
||||
HttpResponse<String> response = null;
|
||||
try {
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(uri))
|
||||
.header("Accept", "application/json")
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", "Bearer " + this.accessToken)
|
||||
.GET()
|
||||
.build();
|
||||
response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
|
||||
"API Error: Unable to request auth status: " + e.getMessage());
|
||||
}
|
||||
|
||||
httpResponse = response.statusCode();
|
||||
logger.info("│ ├── HTTP Response: " + httpResponse);
|
||||
|
||||
logger.info("│ ├── " + response.body());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns all active auth sessions
|
||||
*
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import java.util.logging.Logger;
|
|||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
|
|
@ -90,7 +91,7 @@ public class KSeFAuthManagerTest {
|
|||
|
||||
manager.openInteractiveSession();
|
||||
|
||||
manager.waitForSessionStatus();
|
||||
manager.waitForSessionStatus(new ItemCollection());
|
||||
|
||||
assertNotNull(manager.getAccessToken(), "AccessToken fehlt");
|
||||
// assertNotNull(manager.getRefNumber(), "ReferenceNumber fehlt");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
<?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>2025-11-26T20:54:14.666080555Z</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> -->
|
||||
<NrID>TR3830419015</NrID>
|
||||
<Nazwa>Evolog Nakliyat ve Lojistik Hizmetleri</Nazwa>
|
||||
</DaneIdentyfikacyjne>
|
||||
<Adres>
|
||||
<KodKraju>TR</KodKraju>
|
||||
<AdresL1>Caddesi,No. 56 Halkali, Kucukcekmece,</AdresL1>
|
||||
<AdresL2>34303 Istanbul</AdresL2>
|
||||
</Adres>
|
||||
<!---
|
||||
Contact information from buyer can be left
|
||||
<DaneKontaktowe>
|
||||
<Email></Email>
|
||||
<Telefon></Telefon>
|
||||
</DaneKontaktowe>
|
||||
-->
|
||||
<NrKlienta>D21578</NrKlienta>
|
||||
<JST>2</JST>
|
||||
<!-- fixed -->
|
||||
<GV>2</GV>
|
||||
<!-- fixed -->
|
||||
</Podmiot2>
|
||||
<!-- Invoice Data -->
|
||||
<Fa>
|
||||
<KodWaluty>EUR</KodWaluty>
|
||||
<P_1>2025-10-27</P_1>
|
||||
<!-- Invoice Date -->
|
||||
<P_2>6210</P_2>
|
||||
<!-- Invoice Number -->
|
||||
<P_6>2025-11-26</P_6>
|
||||
<!-- Due Date -->
|
||||
<!-- Totals -->
|
||||
<P_13_1>150.00</P_13_1>
|
||||
<!-- Total Net -->
|
||||
<P_14_1>0.00</P_14_1>
|
||||
<!-- Total VAT -->
|
||||
<P_15>150.00</P_15>
|
||||
<!-- Total Gross -->
|
||||
<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>VAT</RodzajFaktury>
|
||||
<!-- Invoice Positions: FaWiersz -->
|
||||
<FaWiersz>
|
||||
<NrWierszaFa>1</NrWierszaFa>
|
||||
<UU_ID>d8c66c5e-dc09-45be-b986-a2cc298f4195</UU_ID>
|
||||
<P_7>EX-GDY-2509-010</P_7>
|
||||
<P_8A>szt.</P_8A>
|
||||
<P_8B>1</P_8B>
|
||||
<P_9A>100.00</P_9A>
|
||||
<P_11>100.00</P_11>
|
||||
<P_12>0 KR</P_12> <!-- 0% explizit angegeben -->
|
||||
</FaWiersz>
|
||||
<FaWiersz>
|
||||
<NrWierszaFa>2</NrWierszaFa>
|
||||
<UU_ID>e8f02172-9b2a-4dcb-84b5-632e5c2a52b6</UU_ID>
|
||||
<P_7>EX-GDY-2509-010</P_7>
|
||||
<P_8A>szt.</P_8A>
|
||||
<P_8B>1</P_8B>
|
||||
<P_9A>50.00</P_9A>
|
||||
<P_11>50.00</P_11>
|
||||
<P_12>0 KR</P_12> <!-- 0% explizit angegeben -->
|
||||
</FaWiersz>
|
||||
</Fa>
|
||||
</Faktura>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"invoices": [
|
||||
{
|
||||
"ordinalNumber": 1,
|
||||
"referenceNumber": "20251126-EE-481F863000-7F510C2298-8A",
|
||||
"invoiceHash": "tR5z/LEg2accg3AKWoibxJF9Xoht15Pf8T1lT6S3WLc=",
|
||||
"invoicingDate": "2025-11-26T21:00:26.5956823+00:00",
|
||||
"status": {
|
||||
"code": 450,
|
||||
"description": "Błąd weryfikacji semantyki dokumentu faktury",
|
||||
"details": [
|
||||
"Could not find schema information for the element 'http://crd.gov.pl/wzor/2025/06/25/13775/:Faktura'."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Faktura
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
<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="http://crd.gov.pl/wzor/2025/06/25/13775/">
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -128,6 +128,8 @@ th { font-weight: bold;}
|
|||
<bpmn2:flowNodeRef>gateway_H0SvJw</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>task_awoe6g</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_UOQyTg</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_uWaQ1A</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_wYot0Q</bpmn2:flowNodeRef>
|
||||
</bpmn2:lane>
|
||||
<bpmn2:lane id="Lane_6" name="Buchhaltung">
|
||||
<bpmn2:documentation id="documentation_N3gEbw"/>
|
||||
|
|
@ -168,6 +170,7 @@ th { font-weight: bold;}
|
|||
<bpmn2:flowNodeRef>ExclusiveGateway_3</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>dataObject_V0KVQg</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_w96sOg</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_hOBFVQ</bpmn2:flowNodeRef>
|
||||
</bpmn2:lane>
|
||||
</bpmn2:laneSet>
|
||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5000-20" imixs:activityid="50" name="[Due date]">
|
||||
|
|
@ -494,6 +497,7 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
|
|||
<bpmn2:outgoing>SequenceFlow_34</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_zhcE7Q</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_I5jpvQ</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_4Wq8Vw</bpmn2:outgoing>
|
||||
</bpmn2:task>
|
||||
<bpmn2:endEvent id="EndEvent_1" name="Ende">
|
||||
<bpmn2:incoming>SequenceFlow_61</bpmn2:incoming>
|
||||
|
|
@ -1413,7 +1417,9 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
|||
<bpmn2:incoming>sequenceFlow_sO35Dg</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_jpNRMg</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_ui7tJg</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_1T6Vew</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_2BSFNw</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_hN7cDg</bpmn2:outgoing>
|
||||
</bpmn2:task>
|
||||
<bpmn2:intermediateCatchEvent id="event_sGMk3g" imixs:activityid="200" name="[create E-Invoice]">
|
||||
<bpmn2:extensionElements>
|
||||
|
|
@ -2194,6 +2200,7 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
|||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:exclusiveGateway default="sequenceFlow_Tp8LKg" gatewayDirection="Diverging" id="gateway_S4b22A" name="">
|
||||
<bpmn2:documentation id="documentation_k0Mbug"/>
|
||||
<bpmn2:incoming>sequenceFlow_AdA0GA</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_DCA0Tw</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_2th1MQ</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_Tp8LKg</bpmn2:outgoing>
|
||||
|
|
@ -2388,6 +2395,167 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
|||
<bpmn2:sequenceFlow id="sequenceFlow_ui7tJg" sourceRef="gateway_k00hrA" targetRef="task_nKKaIg">
|
||||
<bpmn2:documentation id="documentation_guvIKA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateThrowEvent id="event_hOBFVQ" name="KSEF">
|
||||
<bpmn2:incoming>sequenceFlow_4Wq8Vw</bpmn2:incoming>
|
||||
<bpmn2:linkEventDefinition id="linkEventDefinition_FX1s0Q" name="Link Event Definition 5"/>
|
||||
<bpmn2:documentation id="documentation_90gY9Q"/>
|
||||
</bpmn2:intermediateThrowEvent>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_4Wq8Vw" sourceRef="Task_1" targetRef="event_hOBFVQ">
|
||||
<bpmn2:documentation id="documentation_JBOF3w"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateCatchEvent id="event_uWaQ1A" imixs:activityid="10" name="Save">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="keylogtimeformat" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyarchive" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtmailsubject" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyaccessmode" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="rtfmailbody" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyversion" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[$creator]]></imixs:value>
|
||||
<imixs:value><![CDATA[$editor]]></imixs:value>
|
||||
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="numnextactivityid" type="xs:int">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyfollowup" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keypublicresult" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keylogdateformat" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyownershipfields" type="xs:string">
|
||||
<imixs:value><![CDATA[$editor]]></imixs:value>
|
||||
<imixs:value><![CDATA[$creator]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="numnextid" type="xs:int">
|
||||
<imixs:value><![CDATA[5000]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtnextprocesstree" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtactivityresult" type="xs:string">
|
||||
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtname" type="xs:string">
|
||||
<imixs:value><![CDATA[Speichern]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyownershipmode" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="rtfresultlog" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||
<imixs:value>false</imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_fjA9Bg"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
|
||||
<bpmn2:outgoing>sequenceFlow_1T6Vew</bpmn2:outgoing>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_1T6Vew" sourceRef="event_uWaQ1A" targetRef="task_nKKaIg">
|
||||
<bpmn2:documentation id="documentation_961bZA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateCatchEvent id="event_wYot0Q" imixs:activityid="207" name="[Export KSeF]">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="keylogtimeformat" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyarchive" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtmailsubject" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyaccessmode" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="rtfmailbody" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyversion" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[$creator]]></imixs:value>
|
||||
<imixs:value><![CDATA[$editor]]></imixs:value>
|
||||
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="numnextactivityid" type="xs:int">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyfollowup" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keypublicresult" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keylogdateformat" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyownershipfields" type="xs:string">
|
||||
<imixs:value><![CDATA[$editor]]></imixs:value>
|
||||
<imixs:value><![CDATA[$creator]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="numnextid" type="xs:int">
|
||||
<imixs:value><![CDATA[5000]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtnextprocesstree" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtactivityresult" type="xs:string">
|
||||
<imixs:value><![CDATA[<ksef name="EXPORT">
|
||||
<debug>true</debug>
|
||||
</ksef> ]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtname" type="xs:string">
|
||||
<imixs:value><![CDATA[Speichern]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyownershipmode" type="xs:string">
|
||||
<imixs:value><![CDATA[0]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="rtfresultlog" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||
<imixs:value>false</imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_QA74Ag"/>
|
||||
<bpmn2:incoming>sequenceFlow_hN7cDg</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_AdA0GA</bpmn2:outgoing>
|
||||
<bpmn2:signalEventDefinition id="signalEventDefinition_O7abkQ" signalRef="signal_11"/>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_hN7cDg" sourceRef="task_nKKaIg" targetRef="event_wYot0Q">
|
||||
<bpmn2:documentation id="documentation_MXhwpg"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_AdA0GA" sourceRef="event_wYot0Q" targetRef="gateway_S4b22A">
|
||||
<bpmn2:documentation id="documentation_bun7fw"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
</bpmn2:process>
|
||||
<bpmn2:process id="process_2" name="Default Process" processType="Public">
|
||||
<bpmn2:documentation id="documentation_J67Rkw"/>
|
||||
|
|
@ -2759,6 +2927,24 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
|||
<dc:Bounds height="20.0" width="100.0" x="2325.0" y="396.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="event_hOBFVQ" id="BPMNShape_lp0cJw">
|
||||
<dc:Bounds height="36.0" width="36.0" x="1300.0" y="1260.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_Nfu0Cw">
|
||||
<dc:Bounds height="20.0" width="100.0" x="1268.0" y="1299.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="event_uWaQ1A" id="BPMNShape_SQwkDA">
|
||||
<dc:Bounds height="36.0" width="36.0" x="977.0" y="557.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_M5uthw">
|
||||
<dc:Bounds height="20.0" width="100.0" x="945.0" y="596.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="event_wYot0Q" id="BPMNShape_c1U2mw">
|
||||
<dc:Bounds height="36.0" width="36.0" x="1297.0" y="387.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_x2CXZA">
|
||||
<dc:Bounds height="20.0" width="100.0" x="1265.0" y="426.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_33" id="BPMNEdge_SequenceFlow_34" sourceElement="BPMNShape_ExclusiveGateway_1">
|
||||
<di:waypoint x="910.0" y="835.0"/>
|
||||
<di:waypoint x="1130.0" y="835.0"/>
|
||||
|
|
@ -3101,6 +3287,29 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
|||
<di:waypoint x="921.0" y="527.0"/>
|
||||
<di:waypoint x="921.0" y="490.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_4Wq8Vw" id="BPMNEdge_YLr5gA" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_lp0cJw">
|
||||
<di:waypoint x="1240.0" y="1375.0"/>
|
||||
<di:waypoint x="1270.0" y="1375.0"/>
|
||||
<di:waypoint x="1270.0" y="1278.0"/>
|
||||
<di:waypoint x="1300.0" y="1278.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1T6Vew" id="BPMNEdge_NI9PQQ" sourceElement="BPMNShape_SQwkDA" targetElement="BPMNShape_ksu2zQ">
|
||||
<di:waypoint x="977.0" y="575.0"/>
|
||||
<di:waypoint x="964.0" y="575.0"/>
|
||||
<di:waypoint x="964.0" y="465.0"/>
|
||||
<di:waypoint x="950.0" y="465.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_hN7cDg" id="BPMNEdge_d0uNUg" sourceElement="BPMNShape_ksu2zQ" targetElement="BPMNShape_c1U2mw">
|
||||
<di:waypoint x="894.0" y="440.0"/>
|
||||
<di:waypoint x="894.0" y="409.0"/>
|
||||
<di:waypoint x="1297.0" y="409.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_AdA0GA" id="BPMNEdge_ZdEobw" sourceElement="BPMNShape_c1U2mw" targetElement="BPMNShape_whGktg">
|
||||
<di:waypoint x="1333.0" y="409.0"/>
|
||||
<di:waypoint x="1420.0" y="409.0"/>
|
||||
<di:waypoint x="1420.0" y="465.0"/>
|
||||
<di:waypoint x="1500.0" y="465.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
|
||||
<dc:Font name="arial" size="9.0"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue