Belegsignatur über asello Cloud
Bei dieser Variante werden die Rechnungsdaten zuerst an die asello Cloud übertragen. Diese erstellt und signiert den Beleg anschließend automatisch und sendet die gültigen QR-Code-Daten an die externe Software zurück. Die Belegnummer, Kassennummer und der Qr-Code müssen danach auf den Beleg gedruckt werden.
Vorteile
Einfache Integration über eine Rest-Schnittstelle
Wartung der Kasse (Nullbelege, Export, etc.) direkt aus der asello App (Webinterface) möglich
Nachteile
Beleg-Druck muss selbst implementiert werden
Hardware (Bon-Drucker, Scanner, etc.) muss implementiert werden
TSE-Signatur (Deutschland): Eigene Implementierung notwendig
Ablauf
Die externe Software sendet die Belegdaten an die asello Cloud. Dies geschieht über die asello Rest-Schnittstelle.
Mittels HSM signiert asello die Rechnung, wodurch diese Ihre rechtliche Gültigkeit erhält (RKSV/Österreich)
Aus den übertragenen Daten wird auf der asello Cloud automatisch ein Beleg erstellt und in der Datenbank gespeichert. Dieser Schritt kann nicht rückgängig gemacht werden. (Fiskal-Journal)
Nachdem die Rechnung signiert und erstellt wurde, werden die Qr-Code-Daten generiert, welcher die rechtliche Gültigkeit des Beleges bestätigt. Dieser QR-Code und weitere Daten über den Beleg werden anschließend an die externe Software zurück übertragen.
Der QR-Code und die Beleg-Daten müssen anschließend auf den dazu gehörigen Beleg gedruckt und dem Kunden übergeben werden (Belegerteilungspflicht).
Technische Implementierung
Die Umsetzung erfolgt über einen Aufruf der asello Rest-API. Um einen Beleg erstellen zu können, müssen Daten über die Rechnung und deren Produkte mitgegeben werden. Wie ein Aufruf mit einem Produkt aussieht sehen Sie im folgenden Beispiel.
URL
https://kassa.asello.at/api/v2/receipts/create
Beispiel-Body
{
"paymentType": "Cash",
"cashRegisterId": 34950,
"items": [
{
"name": "Blumentopf",
"description": "Großer Blumentopf für den Gartenbereich",
"netPrice": 33.61,
"grossPrice": 39.99,
"productId": 597349,
"quantity": 1
}
]
}
Nachdem Sie den Befehl geschickt haben, antwortet der Server mit den Rechnungsdaten.
Beispiel-Response
{
"paymentType": "Cash",
"cashRegisterId": 1,
"cashRegisterNumber": "1",
"qrData": "_R1-AT1_1_R20211000239_2021-10-22T14:36:51_40,33_0,00_0,00_0,00_0,00_HoKaNku8JrE=_5936548E_YShPgCQ86mc=_9dg0KqW4ZIywwQgUPD092wom6HD3kAcW/Fyo2Du4dwgALcipsZSE/17WFwzNr7WF3YytpqDgly9DPw3CGWUTLQ==",
"signature": {
"header": "{\"alg\":\"ES256\"}",
"payload": "_R1-AT1_1_R20211000239_2021-10-22T14:36:51_40,33_0,00_0,00_0,00_0,00_HoKaNku8JrE=_5936548E_YShPgCQ86mc=",
"signature": "9dg0KqW4ZIywwQgUPD092wom6HD3kAcW/Fyo2Du4dwgALcipsZSE/17WFwzNr7WF3YytpqDgly9DPw3CGWUTLQ==",
"signatureFailed": false
},
"paymentItems": [
{
"id": 37111308,
"type": "Cash",
"amount": 40.33
},
{
"id": 37111309,
"type": "CashGiven",
"amount": 40.33
}
],
"items": [
{
"id": 47887099,
"name": "Blumentopf",
"description": "Grosser Blumentopf für den Gartenbereich",
"netPrice": 33.610000,
"grossPrice": 40.330000,
"vatRate": 20.00000,
"quantity": 1.000000,
"type": "Simple",
"notCapableContributionMargin": false,
"state": "New",
"childItems": []
}
],
"discount": 0.00000,
"number": "R20211000239",
"id": 20552943,
"state": "Open",
"timeStamp": "2021-10-22T14:36:51.5403308+02:00",
"type": "Receipt",
"sumGross": 40.33,
"sumNet": 33.61,
"userId": 0
}
Auf den Beleg muss die Belegnummer (number) sowie der Qr-Code mit dem Inhalt (qrData) gedruckt werden.