Mit der Funktion
- POST /api/v1/transactions/cancelDocument
wird der Abbruch einer Transaktion an das Fiskalservice übertragen und dort gespeichert. Sie wird verwendet, um eine Transaktion abzubrechen, bevor diese zu einem Abschluss kommt. Zum Beispiel:
- Kunde möchte einige Artikel in einem Geschäft kaufen
- Kassierer beginnt mit dem Scannen der Artikel (Kasse sendet: PUT /api/v1/transactions/createDocument)
- Kunde stellt fest, dass er sein Portemonnaie verloren hat und daher den Kauf nicht tätigen kann
- Kassierer bricht die Transaktion ab und löscht alle gescannten Artikel (die Kasse sendet POST /api/v1/transactions/cancelDocument, um die Transaktion abzuschließen, welche zuvor mit PUT /api/v1/transactions/createDocument gestartet wurde)
Ergebnis
Bei einer erfolgreichen Verarbeitung (200) antwortet der jeweilige Client des Fiskalservices mit einer fiscalResponse und speichert den Abbruch der Transaktion.
Verwendung
- Jedes Mal, wenn ein Dokument im elektronischen Aufzeichnungssystem durch Abbruch abgeschlossen wird.
Voraussetzungen
- Vor einem cancelDocument muss der Aufruf des Endpunktes PUT /api/v1/transactions/createDocument erfolgen
- Daten aus der response von createDocument müssen in der JSON-Struktur von cancelDocument integriert werden. Siehe dazu nachfolgenden Abschnitt.
Übertragungsprozess
Wie beschrieben, setzt ein cancelDocument vorhergehendes createDocument voraus. Die fiscalResponse von createDocument beinhaltet die Felder:
"fiscalisationDocumentNumber": 0,
"fiscalisationDocumentRevision": 0,
"fiscalDocumentStartTime": 0,
die Informationen dieser Felder müssen in der JSON-Struktur, welche bei cancelDocument übermittelt wird, enthalten sein. Diese Felder beinhalten Werte, welche von einer benötigten Fiskalhardware (technische Sicherheitseinrichtung "TSE" in Deutschland) erzeugt werden und zur Transaktionsverkettung dienen.
Achtung: beachten Sie, folgende Besonderheiten:
Die fiscalResponse von createDocument gibt die Felder fiscalisationDocumentNumber und fiscalisationDocumentRevision zurück. Im cancelDocument müssen diese Felder allerdings mit
"fiscalDocumentNumber": 24,
"fiscalDocumentRevision": 1,
übergeben werden, also ohne "isation"! Beachten Sie auch: Given transaction not started
Beispiel:
Das nachfolgende Beispiel zeigt einen einfachen Kassenbeleg für Deutschland (documentType = [0] = receipt), welcher an den Endpunkt POST /api/v1/transactions/cancelDocument geschickt wird.
{
"uniqueClientId": "c1062c55-57c4-4ed2-9c53-aff1762326a4",
"documentGuid": "7d4a7761-e9e9-4759-8591-ed147a581da4",
"documentId": "HAM01-00010329",
"documentNumber": "00010329",
"createDate": "2023-04-18T21:34:45",
"bookDate": "2023-04-18T21:34:46",
"cancellationDocument": false,
"isTraining": false,
"documentType": 0,
"user": {
"id": "1234",
"caption": "1234"
},
"fiscalDocumentNumber": 2853,
"fiscalDocumentStartTime": 1681803100,
"fiscalDocumentRevision": 1,
"Positions": [
{
"positionNumber": 0,
"netValue": 10.66,
"grossvalue": 12.90,
"taxValue": 2.24,
"quantity": 1,
"itemId": "1101202930050",
"itemCaption": "Pizza Margherita",
"cancellationPosition": "false",
"type": "0",
"businessTransactionType": 0,
"vatPercent": 19,
"vatIdentification": 1,
}
],
"Payments": [
{
"Amount": 12.90,
"paymentType": "cash",
"uniqueReadablePaymentIdentifier": "Cash",
"caption": "Bar+Euro",
"currencyIsoCode": "EUR"
}
]
}
Beispiel Mindestangaben cancelDocument:
{
"uniqueClientId": "c1062c55-57c4-4ed2-9c53-aff1762326a4",
"documentGuid": "{bdf8b5e9-5634-4c02-afad-543a7c480111}",
"documentId": "100001",
"documentNumber": "00002",
"createDate": "2022-12-22T10:06:03",
"bookDate": "2022-12-22T10:06:03",
"user": {
"id": "1234",
"caption": "1234"
},
"fiscalDocumentNumber": 2938,
"fiscalDocumentStartTime": "1671699962",
"fiscalDocumentRevision": 1
}
}
fiscalResponse
Die Rückmeldung (fiscalResponse) bei einem cancelDocument sollte in der Datenbank des Kassensystems, für Referenzzwecke, gespeichert werden.
Die fiscalResponse enthält:
- generische Informationen
- landespezifische Informationen
Beispiel fiscalResponse:
{
"fiscalCountry": "[0] = Germany",
"fiscalisationDocumentNumber": 52,
"fiscalisationDocumentRevision": 2,
"fiscalDocumentStartTime": 1674819139,
"processStartTime": 0,
"errorDescription": null,
"cashRegisterId": "00345-00345",
"signature": "pCeGi98gNNhshcGJkbw0DwtSzuJkaawON8l5QwsFDEaDHOyYK2aNVO4ZAlpkYYnub7oxM/2R1/KB36UzmOQwew==",
"userMessage": null,
"printMessage": "***Test***",
"requestTime": "2023-01-27T12:34:21.3088836+01:00",
"requestCompletionTime": "2023-01-27T12:34:22.4379009+01:00",
"AdditionalFields": {
"QrCodeDataString": "V0;00345-00345;Kassenbeleg-V1;Beleg^13.90_0.00_0.00_0.00_0.00^13.90:Unbar;52;197;2023-01-27T11:32:19.000Z;2023-01-27T11:34:20.000Z;ecdsa-plain-SHA256;unixTime;pCeGi98gNNhshcGJkbw0DwtSzuJkaawON8l5QwsFDEaDHOyYK2aNVO4ZAlpkYYnub7oxM/2R1/KB36UzmOQwew==;BNHckCuXF2fEktIp8qwtnMLLgvpJDX6wEOqFENlHXZpekBHxHniQh9gbigjWS9UbCwZSrOTJTMK7WiV5owAfXkk=",
"TransactionStartTime": 1674819139,
"TransactionEndTime": 1674819260,
"ProcessData": "Beleg^13.90_0.00_0.00_0.00_0.00^13.90:Unbar",
"ProcessType": "Kassenbeleg-V1",
"TseSerial": "e5f5836a57c50c526d4bed37f18823608f2f44e2c98cab73278a7676c5ea0885",
"TseTimeFormat": "unixTime",
"TseHashAlgorithm": "ecdsa-plain-SHA256",
"TsePublicKey": "BNHckCuXF2fEktIp8qwtnMLLgvpJDX6wEOqFENlHXZpekBHxHniQh9gbigjWS9UbCwZSrOTJTMK7WiV5owAfXkk=",
"TseSignatureCounter": 197,
"TseCertificate": "MIIB0jCCAVmgAwIBAgIhAOX1g2pXxQxSbUvtN/GII2CPL0TiyYyrcyeKdnbF6giFMAoGCCqGSM49BAMDMDExFTATBgNVBAoTDGZpc2thbHkgR21iSDEYMBYGA1UEAxMPZmlza2FseSBUZXN0IENBMB4XDTIyMTAzMDEyMjgzMloXDTIzMTAzMDEyMjgzMlowMjEVMBMGA1UEChMMZmlza2FseSBHbWJIMRkwFwYDVQQDExBmaXNrYWx5IFRlc3QgVFNFMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dyQK5cXZ8SS0inyrC2cwsuC+kkNfrAQ6oUQ2Uddml6QEfEeeJCH2BuKCNZL1RsLBlKs5MlMwrtaJXmjAB9eSaNBMD8wDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUlllBymQBup6ldKGojZVpZtWG5tQwCgYIKoZIzj0EAwMDZwAwZAIwEFsoSON9cIBqA5d9vsGI2jSjDlZxHokDvJ4yBmayvigrDbdhMYe3hw3HyQbO2B/FAjBXSVNbYR6Wg2TVzL9BhCla+tewRDGcs6vnetJ4i3VRtya1+ejt+vRjWnb/RUyo0Uw="
}
}
Generische Informationen
Diese finden sich im Header-Bereich der fiscalResponse.
Bitte beachten Sie:
- Inhalt des Feldes "fiscalisationDocumentNumber" muss am Beleg angedruckt werden (DE).
- Inhalt des Feldes "printMessage" muss am Beleg angedruckt werden.
Landesspezifische Informationen
Landesspezifische Informationen werden im Bereich "AdditionalFields" bereitgestellt und beinhalten Informationen, welche am Beleg angedruckt werden müssen. (z.B. QR-Code oder alternativ TSE-Daten in Deutschland)
Beachten Sie dazu die Belegbeispiele des jeweiligen Landes.
Hinweis: wird in der fiscalResponse von cancelDocument im Feld
"fiscalDocumentNumber": -1,
der Wert "-1" zurückgegeben, so hat der Client das entsprechende Dokument als nicht-fiskal erkannt.
Antwort
Mögliche Antworten:
Code | Beschreibung | Beispiel |
200 |
Der Transaktionsabbruch wurde erfolgreich und fehlerfrei übermittelt und im documentStore gespeichert |
fiscalResponse |
404 |
Deutschland: die angegebene fiscalDocumentNumber konnte nicht gefunden werden. Die Transaktion mit der angegebenen fiscalDocumentNumber wurde noch nicht erzeugt (gestartet). Fehlerbehebung:
|
- |
406 |
Der übermittelte Dokumententyp wird nicht unterstütz Fehlerbehebung:
|
- |
422 |
Der Dokumenteninhalt ist leer oder fehlerhaft Fehlerbehebung:
|
- |
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.