EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… ·...
Transcript of EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… ·...
EFSTA Programming Interface
Schnittstelle zur Fiskal-Middleware (Version Österreich)
Autor: EXT2
Datum: 06. Juni 2016
Revision: 1.04
Copyright: © efsta 2016
EUROPEAN FISCAL STANDARDS ASSOCIATION
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2
Inhalt Inhalt ..................................................................................................................................... 2
1. Einleitung ....................................................................................................................... 4
1.1 Das EFSTA System ................................................................................................ 4
1.2 Systemvoraussetzungen ......................................................................................... 4
2. Erste Schritte .................................................................................................................. 5
2.1 Installation ............................................................................................................... 5
2.2 Smartcard aktivieren ............................................................................................... 5
2.3 Test-Transaktion ..................................................................................................... 6
2.4 Filestruktur im Ordner EFR ...................................................................................... 8
3. Umsetzung der RKSV .................................................................................................... 8
3.1 Mindestanforderungen an die Kassen-Applikation ................................................... 8
3.2 Optionale Buchungen .............................................................................................. 9
3.3 Welche Aufgaben übernimmt das EFR .................................................................... 9
3.4 Signaturerstellung und –Ausweisung .....................................................................10
3.5 Umsatzzuweisung zu Umsatzsteuer-Klassen .........................................................10
4. Beispiels-Transaktionen ................................................................................................11
4.1 Normaler Verkaufsbeleg .........................................................................................11
4.2 Minimale Belegdaten ..............................................................................................11
4.3 Automatische Wertezuweisung D und TN ..............................................................11
4.4 Automatische Umsatzsteuer-Summenrechnung .....................................................11
4.5 Sicherheitseinrichtung ausgefallen .........................................................................12
4.6 Fehler bei Registrierung .........................................................................................12
4.7 Nullbelege ..............................................................................................................13
4.8 Nonfiskale Belege ..................................................................................................13
4.9 Trainings-Belege ....................................................................................................13
4.10 Warenrückgabe-Positionen, Storno-Belege ............................................................14
4.11 Gutschein-Verkauf..................................................................................................14
4.12 Gutschein-Einlösung ..............................................................................................14
4.13 Verkauf auf Ziel / Offene Rechnung / Kredit ...........................................................14
4.14 Auswahl / Leihschein / Reservierung ......................................................................15
4.15 Lieferschein ............................................................................................................15
5. Kommunikation mit dem EFR ........................................................................................16
5.1 Result-Code RC .....................................................................................................16
5.2 ErrorCode ..............................................................................................................17
5.3 UserMessage .........................................................................................................17
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 3
5.4 Warning ..................................................................................................................17
5.5 Wiederanlauf-Verfahren .........................................................................................17
5.6 Codebeispiel C# .....................................................................................................17
5.7 Codebeispiel VBA ..................................................................................................18
6. XML-Referenz ...............................................................................................................20
6.1 Request Tra (Transaction) ......................................................................................20
6.2 Response TraC (Tra Completion) ...........................................................................23
6.3 Beispielsbeleg im XML-Format ...............................................................................24
6.4 Beispielsbeleg im JSON-Format .............................................................................24
7. Lizenz ESR ...................................................................................................................25
8. Anhang ..........................................................................................................................26
8.1 Glossar und Abkürzungen ......................................................................................26
8.2 ErrorCode-Liste ......................................................................................................26
8.3 Revisionen .............................................................................................................27
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 4
1. Einleitung
1.1 Das EFSTA System
dient dazu, die gesetzlichen Vorschriften zur Aufzeichnung von Kassentransaktionen zu
erfüllen – als Fiskal-Middleware übernimmt es die landesspezifische Implementation. Für die
Kommunikation mit der Kassen-Software gibt es eine einheitliche Schnittstelle, die in diesem
Dokument beschrieben ist.
Die Kassen-Applikation übergibt dazu die Daten eines abgeschlossenen Kassiervorganges
einem an der Kasse laufenden Dienst EFR (EFSTA Fiscal Register) und erhält als Antwort
die am Kassenbeleg auszudruckende Signatur. Das EFR steuert zur Signaturerstellung
lokale Hardware (z.B. Smartcard) oder externe Systeme an, und zeichnet die Transaktionen
rechtskonform auf.
Weiters erfüllt das EFR die Gateway-Funktion zur EFSTA-Cloud. Hier erfolgt die
Archivierung der Transaktionen, aber auch die Kommunikation zum Kunden (Digitaler
Kassenbeleg) und die Bereitstellung von Daten bei Prüfung durch die Finanz. Über die
Cloud-Komponente erfolgt aber auch die Wartung (Update) und Verwaltung des Systems.
1.2 Systemvoraussetzungen
EFR sollte auf dem System installiert sein, auf dem auch die Kassenapplikation läuft
damit ist das EFR als Dienst immer auch für das Kassenprogramm verfügbar
Windows XP SP3, Windows 7, 8, 10, Linux (verfügbare Plattformen auf Anfrage)
Basis-Framework node.js, dadurch geringstmöglicher Footprint
typisch 1 GB Festplattenspeicher, Minimum 100 MB
Administrator-Rechte bei Installation
Internet-Zugang, wenn Archivierung in der Cloud erfolgen soll
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 5
2. Erste Schritte
2.1 Installation
1. Download und Installation node.js von https://nodejs.org/en/download/
2. Installation des MSI-Paketes "EFR Installer.msi"
3. Prüfung der Installation: in Systemsteuerung / Verwaltung / Dienste muss der Dienst
EFR2 aufscheinen
Jetzt ist das EFR bereits funktionsfähig. Die Aktivierung der Kommunikation mit der Cloud ist
ein gesonderter Schritt (siehe Doku EFSTA Cloud).
Tipp:
Während der Entwicklungsarbeit empfiehlt sich, das Register nicht als Dienst auszuführen,
sondern direkt zu starten:
C:\ProgramData\EFR\app> node app
EFR im Konsolen-Fenster
Hier können die Verarbeitungsschritte über ein Konsolen-Fenster mitverfolgt werden.
Beenden Sie vor Programmstart den Dienst, da es sonst zu Zugriffs-Konflikten (TCP-Port,
Hardware) kommt.
2.2 Smartcard aktivieren
Verbinden Sie die Smartcard mit dem Computer (Reader anschließen und Smartcard
einlegen bzw. USB-Smartcard anschließen).
Einstellungen am EFR werden über einen Browser durchgeführt, rufen Sie für die Smartcard-
Konfiguration folgende Adresse auf: http://localhost:5618/config
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 6
EFR-Konfiguration über Browser
Geben Sie den PIN an und testen Sie die Verbindung über [Test]. Bei OK [Speichern] Sie die
Konfiguration.
2.3 Test-Transaktion
Die Kassensoftware kommuniziert mit dem EFR über REST Webservice.
Sie können diesen Vorgang über den Browser simulieren, noch bevor Sie mit der
Schnittstellen-Programmierung beginnen. Installieren Sie dazu z.B. z.B. den "Advanced
REST client" für Google Chrome.
Hier die Parameter für den Webrequest:
URL: http://localhost:5618/register Method: POST Headers: Content-Type: application/vnd.efsta.efr.v1+xml Payload: Transaktionsdaten als XML, z.B:
<Tra> <ESR D="2016-02-01T09:28:00" TT="01/1" TN="2053" T="12.35"> <TaxA> <Tax TaxG="A" Amt="3.49" /> <Tax TaxG="B" Amt="6.63" /> <Tax TaxG="C" Amt="2.23" /> </TaxA> </ESR> </Tra>
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 7
Test-Registrierung über die "Advanced Rest Client Application"
Klicken Sie auf [Send]: die Transaktion wird registriert, in der Rückantwort erhalten sie
(neben dem http-Status) den ResultCode RC:
<TraC SQ="2345"> <Result RC="OK"/> <Fis> <Code>_R1-AT2_01/1_2053_2016-02-01T09:28:00_3,49_6,63_2,23_...==</Code> <Link>EFSTA.NET#354246550907863859058475</Link> </Fis> </TraC>
Die Registrierung war erfolgreich ist "OK", im Tag <Code> steht die Fiskal-Signatur.
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 8
2.4 Filestruktur im Ordner EFR
Ab Version 0.6.1 existiert folgende Filestruktur im Ordner EFR:
Verzeichnis
app Applikations-Verzeichnis
cer Zertifikats-Container
(Zertifikate der Smartcards)
gbl Globale Einstellungen
log Protokollierungen (für Support)
rn Register-Hauptverzeichnis (RN = Register Number)
rn/def Register Number = def (Default)
rn/def/cfg Einstellungen je Register
rn/def/dat Summendateien
rn/def/jou Transaktions-Journale
rn/def/log Protokollierungen (für Support)
Dabei entsprechen die Ordner in „rn“ den Mandanten bzw.Client Nummern. Jeder Client
bzw. Mandant verfügt über eine eigenständige Konfiguration bzw. Logfiles.
Für jeden Mandanten bzw. Client wird idR. Ein eigenes Journal geführt, das in
rn/<Mandantennummer>/jou gespreichert ist.
Besondere Sorgfalt ist bei der Konfiguration in Umgebungen mit mehreren Unternehmen
angebracht, da hier nicht mit dem Default Mandanten signiert werden darf, sondern die
Registrierung eines Belegs zurückgewiesen werden muss, um die verbotene Signatur mit
einem unternehmensfremden Zertifikat jedenfalls zu unterbinden.
Der Aufruf der mandantenspezifischen Konfiguration erfolgt über einen Webaufruf mit dem
Parameter register?RN=
http://localhost:5618/register?RN=<exampleregisternumber>
Erfolgt ein Aufruf ohne diesen Parameter, so wird die standardmäßig vorhandene Default-
Konfiguration bzw. das entsprechende Verzeichnis angesprochen.
3. Umsetzung der RKSV
3.1 Mindestanforderungen an die Kassen-Applikation
Die Kassen-Applikation übergibt nach Abschluss der Positions- und
Zahlungserfassung die Transaktionsdaten zur Signatur an das EFR und druckt
danach den Beleg mit Signatur als QR-Code oder den signaturabhängigen Link.
Storno-Belege sind mit dem Tag AT_Storno="1" zu versehen.
Gemäß Verordnung sind auch Trainingsbelege zu signieren und auszudrucken, die
Kennzeichnung erfolgt durch das Attribut NFS="TRAINING" (Nonfiscal Signed):
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 9
<Tra>
<ESR D="2016-02-01T19:03:16" TT="01/1" TN="2158" T="12.00" NFS="TRAINING">
<PosA>
<Pos Dsc="Nudelsieb" TaxG="A" Amt="12.00"/>
</PosA>
</ESR>
</Tra>
Ein Zugang zu den Konfigurations- und Steuerungsfunktionen des EFR über Browser
ist vorzusehen (lokal oder von einem Backoffice-PC aus):
http://localhost:5618/config bzw.
http://localhost:5618/control
3.2 Optionale Buchungen
Neben Umsatz- und Trainingsbuchungen können optional alle anderen nonfiskalen
Kassenbuchungen (z.B. Bediener-An/Abmeldungen, Ein/Auszahlungen …) über das
EFR registriert werden (Kennzeichnung z.B. mit NF="Anmeldung"). Damit erfüllt das
geführte Belegprotokoll in Kombination mit der Cloud-Speicherung neben der RKSV
auch vollinhaltlich die Anforderungen des BAO §131 (lückenlose inhaltsgleiche
Archivierung).
Die Belegdarstellung als XML ist formfrei, es empfiehlt sich aber die Nutzung
vordefinierter Tags (z.B. <Pay> für Ein/Auszahlung).
Es wird empfohlen, Kassenabschlüsse "Nonfiskal Signiert" zu registrieren, der
Ausdruck dieser Belege erfüllt die RKSV-Vorschrift als Startbeleg, Monats- bzw.
Jahresbeleg.
Beispiel:
<Tra>
<ESR D="2016-02-01T19:03:16" TT="01/1" TN="2158" NFS="TagesEnde">
<PayA>
<Pay Dsc="Bar" KassenSoll="1251.66" KassenIst="1251.16"/>
</PayA>
</ESR>
</Tra>
Tags "Beleg", "KassenSoll" usw. sind hier zur inhaltlichen Darstellung eingefügt
worden, die Benennung ist formfrei.
3.3 Welche Aufgaben übernimmt das EFR
Signaturerstellung
Verkettung der Belege
Summenverwaltung und –Verschlüsselung
Autom. Erstellung der Status-Belege (Startbeleg, Monatsbeleg, Jahresbeleg,
Schlussbeleg)
DEP-Export gem. RKSV direkt an der Kasse bzw. per Datenticket aus dem in der
Cloud geführten Belegprotokoll
Meldepflichtige Belege an Finanz (Inbetriebnahme, Jahresbeleg, Schlussbeleg)
Manipulationssichere Archivierung
(verschlüsselt in der Cloud, nur der Unternehmer hat den Schlüssel)
Erfüllung Archivierungspflicht gem. §131 ff
(10-jährige Speicherung)
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 10
3.4 Signaturerstellung und –Ausweisung
lokal über Smartcard
am Standort über Sign-Server (z.B. Smartcard im LAN an Raspberry PI)
zentraler Sign-Server mit Smartcard(s)
HSM in der EFSTA-Cloud
HSM beim Zertifizierungsdienstanbieter (dzt. A-Trust, Global-Trust)
Die Verordnung sieht den Aufdruck der Signatur am Kassenbeleg als QR-Code vor
("maschinenlesbarer Code" im Tag <Code> im Ergebnis-XML <TraC>).
Alternativ kann darf ein "signaturabhängiger Link" angeführt werden, über den die gesamte
Signatur abgerufen werden kann. Dieser wird im Tag <Link> geliefert, benötigt nur eine
Druckzeile, die Belegnummer kann als Code128 dargestellt werden. Beispiele:
EFSTA.NET#123456789012345678901234
EFSTA.NET#
Bei Aufruf des Links im Browser wird der Signatur-QR-Code angezeigt.
3.5 Umsatzzuweisung zu Umsatzsteuer-Klassen
Für der Signatur sind die Beleg-/Steuerpositionen den Klassen
Steuerklasse TaxG Steuersatz
Normal A 20%
Ermässigt-1 B 10%
Ermässigt-2 C 13%
Null D 0%
Besonders E 19%
zuzuweisen. Dies erfolgt entweder über direkte Angabe TaxG="A" (A-E) oder – wenn der
Prozentsatz angegeben ist – über Matching des Prozentsatzes (hier ist TaxG irrelevant).
Beispiele: <Tax TaxG="B" Amt="11.00" /> geht in Klasse "Ermässigt-1"
<Tax Prc="20%" Amt="12.00" /> geht in Klasse "Normal", unabhängig von einer
etwaigen TaxG-Angabe
Umsätze, die in keine der vorgegebenen Steuerklassen passen (z.B. Prc="15%" oder
TaxG="N") werden gemäß RKSV der Klasse "Null" (TaxG="D") zugerechnet.
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 11
4. Beispiels-Transaktionen
4.1 Normaler Verkaufsbeleg
Die Kassen-Applikation übergibt nach Abschluss der Positions- und Zahlungsinformationen: <Tra> <ESR D="2016-03-01T09:28:00" TT="01/1" TN="2073" T="1.99"> <PosA> <Pos PN="1" IN="4012345678901" Dsc="Hesp.-Essig" TaxG="B" Amt="1.99"/> </PosA> <PayA> <Pay Dsc="Bar" Amt="1.99"/> </PayA> <TaxA> <Tax TaxG="A" Amt="1.99"/> </TaxA> </ESR> </Tra>
4.2 Minimale Belegdaten <Tra> <ESR D="2016-03-01T09:32:17" TT="01/1" TN="2076" T="3.49"> <TaxA> <Tax TaxG="A" Amt="3.49"/> </TaxA> </ESR> </Tra>
Bei Lieferung minimaler Belegdaten werden alle Anforderungen der RKSV erfüllt, nicht
jedoch die inhaltsgleiche Archivierung der Belegdaten gem. BAO § 131.
Damit hat die Kassen-Applikation diese Aufgabe zu übernehmen, die Beleg-Signatur ist im
Transaktionslog zu speichern und es ist für die manipulationssichere Archivierung zu sorgen.
4.3 Automatische Wertezuweisung D und TN <Tra> <ESR T="1.49"> <PosA> <Pos PN="1" IN="4012345678901" Dsc="Hesp.-Essig" TaxG="B" Amt="1.99"/> <Mod PN="1" Dsc="Aktionsnachlass" Amt="-0.50"/> </PosA> <TaxA> <Tax TaxG="B" Prc="10" Net="1.35" TAmt="0.14" Amt="1.49"/> </TaxA> </ESR> </Tra>
Datum D (Systemzeit) und Belegnummer TN (laufende Nummer, jährlich beginnend mit 1) werden automatisch im EFR vergeben und in der Rückantwort geliefert: <TraC SQ="1234"> <Result RC="OK"/> <ESR D="2016-03-01T14:46:43" TN="39"/> …
4.4 Automatische Umsatzsteuer-Summenrechnung
Wenn keine Steuersummen in <TaxA> geliefert werden, werden die Steuerbasis-Beträge
aus den Positionen ermittelt.
<Tra> <ESR D="2016-03-01T09:28:00" TT="01/1" TN="2071"> <PosA> <Pos PN="1" IN="4012345678901" Dsc="Hesp.-Essig" TaxG="B" Amt="1.99"/> <Mod PN="1" Dsc="Aktionsnachlass" Amt="-0.50"/> <Pos PN="2" IN="9023456789001" Dsc="Katzenfein" TaxG="C" Amt="1.49"/> <Pos PN="3" IN="9023456789001" Dsc="Katzenfein" TaxG="C" Amt="1.49"/> <Pos PN="4" IN="4198765432109" Dsc="Glasreiniger" TaxG="A" Amt="3.49"/>
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 12
<Pos PN="5" Dsc="Emmentaler" TaxG="B" Amt="5.14" Qty="0.252" QtyU="kg" Pri="21.90"/> <Lin LAmt="----------"/> <Lin Dsc="Zwischensumme" LAmt="13.10"/> <Mod PN="2 3" Dsc="-25% Tiernahrung" Amt="-0.75"/> </PosA> <PayA> <Pay Dsc="Bar" Amt="15.00"/> <Pay Dsc="Rückgeld" Amt="-2.65"/> </PayA> </ESR> </Tra>
Der TaxA-Block kommt in der Rückantwort: <TraC SQ="2345"> <Result RC="OK"/> <ESR T="12.35"> <TaxA> <Tax TaxG="A" Prc="20" Net="2.91" TAmt="0.58" Amt="3.49"/> <Tax TaxG="B" Prc="10" Net="6.03" TAmt="0.60" Amt="6.63"/> <Tax TaxG="C" Prc="13" Net="1.97" TAmt="0.26" Amt="2.23"/> </TaxA> …
4.5 Sicherheitseinrichtung ausgefallen <Tra> <ESR D="2016-03-01T17:36:27" TT="01/1" TN="2264" T="12.35"> …
Rückantwort: <TraC SQ="2345"> <Result RC="OK"> <ErrorCode>#SIGNDEV_BROKEN</ErrorCode> <UserMessage>Sicherheitseinrichtung ausgefallen</UserMessage> </Result> <Fis> <Code>_R1-AT2_01/1_2264_2016-03-01T17:36:27_3,49_6,63_2,23_0,00_0,00_V8WmZ6Bt_126998300223988602076447748182_btEC7xqxak0=_U2ljaGVyaGVpdHNlaW5yaWNodHVuZyBhdXNnZWZhbGxlbg==</Code> <Link>EFSTA.NET#337003840039381797881019</Link> <Tag Name="Info" Value="Sicherheitseinrichtung ausgefallen" Label=""/> </Fis> </TraC>
RC="OK"
Die Transaktion wurde ordnungsgemäß übernommen und gem. RKSV mit einer Ersatz-Signatur versehen. Der Beobachtungszeitraum ist gestartet, ist die Signatureinheit nicht binnen 48 Stunden wiederhergestellt, erfolgt autom. eine Meldung an die Finanz.
<ErrorCode>#SIGNDEV_BROKEN</ErrorCode>
Nur Info, die Registrierung war ja erfolgreich (RC="OK").
<UserMessage>Sicherheitseinrichtung ausgefallen</UserMessage>
Die Usermessage ist dem Kassenbediener anzuzeigen (Message-Box). Solange der Ausfall dauert, erfolgt jeden Tag beim ersten Beleg eine Meldung.
<Code>…_U2ljaGVyaGVpdHNlaW5yaWNodHVuZyBhdXNnZWZhbGxlbg==</Code> In der Signatur erfolgt vorschriftsgemäß ein Hinweis (base64-codiert).
<Tag Name="Info" Value="Sicherheitseinrichtung ausgefallen" Label=""/> Am Beleg sind <Tag>-Elemente auszudrucken, in diesem Fall die Zeile
"Sicherheitseinrichtung ausgefallen".
4.6 Fehler bei Registrierung <Tra> <XXXXXXXXXXXXXX/> </Tra>
Rückantwort: <TraC>
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 13
<Result RC="BAD"> <ErrorCode>ERROR</ErrorCode> <Warning>e-TypeError: Cannot read property "D" of undefined ESR ESR/Normalize</Warning> </Result> </TraC>
http-Status: 400 = Bad Request
RC="BAD"
Die Transaktion wurde konnte nicht registriert werden, der Beleg ist zu verwerfen.
<Warning>e-TypeError:… Warning-Elemente liefern weitere Hinweise über die Art des Fehlers.
4.7 Nullbelege
Neben Verkaufstransaktionen können auch nonfiskale Belege (z.B. Tagesende) signiert
werden, es wird nur der Belegkopf übergeben (keine Betragsangabe T=, kein TaxA-
Element):
<Tra> <ESR D="2016-03-01T19:03:48" TT="01/1" TN="2303" /> </Tra>
Aber: Die in der RKSV geforderten Nullbelege (Startbeleg, Monatsbelege, Jahresbeleg, Schlussbeleg, Summenbeleg nach Ausfall Sicherheitseinrichtung) werden vom EFR automatisch erstellt und gespeichert bzw. soweit erforderlich 'geprüft'. Sie können jederzeit über Browser unter http://localhost:5618/control eingesehen werden.
4.8 Nonfiskale Belege
In einer Kassenapplikation gibt es üblicherweise Belege, die für die Kassenführung benötigt
werden, aber nicht umsatzrelevant sind: Ein/Auszahlungen, Kassenabschluss, Bediener-
An/Abmeldung. Nicht für die RKSV, aber für die in der BAO geforderte vollständige,
lückenlose Aufzeichnung sind diese zu registrieren, die Kennzeichnung als nonfiskal erfolgt
über das NF= bzw. über das NFS=-Attribut.
<Tra> <ESR D="2016-03-01T11:12:43" TT="01/1" TN="2089" NF="Auszahlung"> <PosA>
<Lin Dsc="Postgebühren" LAmt="5.30"/>
</PosA>
<PayA> <Pay Dsc="Bar" Amt="-5.30"/> </PayA> </ESR> </Tra>
Rückantwort: <TraC SQ="2345"> <Result RC="OK"/> <Fis> <Tag Name="NF" Value="Auszahlung" Label="Nicht fiskal"/> </Fis> </TraC>
4.9 Trainings-Belege
Wenn an einem Kassensystem Trainings-Belege erstellt und ausgedruckt werden sollen, so
sind diese nach RKSV zu signieren und zu speichern. Die Kennzeichnung von Trainings-
Belegen erfolgt über das Attribut NFS="TRAINING".
Beispiel Trainings-Beleg: <ESR D="2015-07-01T13:45:38" TT="01/1" TN="2073" T="1.99" NFS="TRAINING"> …
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 14
4.10 Warenrückgabe-Positionen, Storno-Belege
Ein registrierter Beleg kann nicht geändert werden, das ist ein Grundprinzip buchhalterischer
Aufzeichnungen.
Wenn eine Belegposition storniert werden soll (z.B. wegen Warenrückgabe), so ist dafür ein
neuer Beleg mit einer Storno-Position (Minus-Vorzeichen für Menge, Beträge) zu erstellen.
Alternativ kann der gesamte Ursprungsbeleg storniert und ein neuer, korrigierter Beleg
ausgestellt werden. Alle Vorgänge sind zu registrieren.
Der Verweis auf die Urposition (RD=, RTT=, …) kann unterbleiben, wenn diese Daten nicht
verfügbar sind.
Beispiel Storno einer Position: <ESR D="2016-03-01T15:03:17" TT="01/1" TN="2093" T="-3.49"> … <PosA> <Pos PN="1" IN="4198765432109" Dsc="Glasreiniger" TaxG="A" Amt="-3.49" Qty="-1" RD="2016-02-15" RTT="01/1" RTN="2071" RPN="4"/> </PosA> <PayA> <Pay Dsc="Bar" Amt="-3.49"/> </PayA> <TaxA> <Tax TaxG="A" Prc="20" Net="-2.91" TAmt="-0.58" Amt="-3.49"/> </TaxA> … </ESR>
4.11 Gutschein-Verkauf
Gutscheine-Verkäufe sind (soferne sie nicht zum Bezug eines bestimmten Artikels/Leistung berechtigen), nicht umsatzsteuerpflichtig – sie sind der Steuerklasse "Null" zuzuordnen: <ESR D="2016-03-01T16:16:22" TT="01/1" TN="2101" T="50.00"> <PosA> <Pos PN="1" Dsc="Gutschein" TaxG="D" Amt="50.00"/> </PosA> <PayA> <Pay Dsc="Bar" Amt="50.00"/> </PayA> <TaxA> <Tax TaxG="D" Prc="0" Net="50.00" TAmt="0.00" Amt="50.00"/> </TaxA> </ESR>
4.12 Gutschein-Einlösung
Die Steuerpflicht entsteht bei Einlösung des Gutscheines: <ESR D="2016-03-04T09:55:02" TT="01/1" TN="2851" T="79.90"> <PosA> <Pos PN="1" Dsc="Brieftasche schwarz" TaxG="A" Amt="79.90"/> </PosA> <PayA> <Pay Dsc="Gutschein" Amt="50.00"/> <Pay Dsc="Bar" Amt="30.00"/> <Pay Dsc="Rückgeld" Amt="-0.10"/> </PayA> <TaxA> <Tax TaxG="A" Prc="20" Net="66.58" TAmt="13.32" Amt="79.90"/> </TaxA> </ESR>
4.13 Verkauf auf Ziel / Offene Rechnung / Kredit
Die Steuerpflicht entsteht durch Rechnungslegung über die Kassen-Applikation unabhängig von (sofortiger oder späterer) Barzahlung (Umsatzgrenzen siehe "Barumsatzverordnung 2015").
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 15
<ESR D="2016-03-04T09:56:42" TT="01/1" TN="2852" T="79.90"> <PosA> <Pos PN="1" Dsc="Brieftasche schwarz" TaxG="A" Amt="79.90"/> </PosA> <PayA> <Pay Dsc="Kredit" Konto="25112" Amt="79.90"/> </PayA> <TaxA> <Tax TaxG="A" Prc="20" Net="66.58" TAmt="13.32" Amt="79.90"/> </TaxA> </ESR>
4.14 Auswahl / Leihschein / Reservierung
Wenn Artikel dem Kunden 'zur Auswahl' mitgegeben werden, dann ist das kein umsatzsteuerpflichtiger Vorgang. Nachdem aber ein Kassenbeleg erstellt wird, ist dieser im Sinne der BAO (nicht jedoch der RKSV) 'nonfiskal' aufzuzeichnen, es erfolgt keine Signatur: <ESR D="2016-03-05T16:03:16" TT="01/1" TN="2902" T="248.00" NF="Auswahl"> <Head> <Txt>Auswahl KdNr. 52144 …</Txt> </Head> <PosA> <Pos PN="1" Dsc="Sommerkleid grün" TaxG="A" Amt="149.00"/> <Pos PN="2" Dsc="Damenrock Sybille" TaxG="A" Amt="99.00"/> </PosA> </ESR>
In einem weiteren Schritt kann der Kunde die mitgenommenen Artikel zurückgeben, der Kauf
von Artikeln ist dann umsatzsteuerpflichtig zu registrieren.
Reservierungen können ebenso behandelt werden. Nachdem hier keine Lieferung (Leistung)
erfolgt, gibt es nach RKSV keine Belegerteilungspflicht. Wird aber eine Anzahlung
vereinnahmt, so ist diese umsatzsteuerpflichtig (Zahlung bezieht sich auf bestimmte Artikel)
zu registrieren.
4.15 Lieferschein
Wenn über die Kasse ein Lieferschein ausgestellt wird, kann die Abwicklung nonfiskal (wie
Auswahl) erfolgen, wenn die Daten in ein rechnungslegendes System (ERP) fließen und die
Zahlung per Überweisung erfolgt.
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 16
5. Kommunikation mit dem EFR
Sign
RegisterRequest Checkin
Normalize
Fiscal
Checkout
Sch
edu
le
RegisterResponse
CashRegister
Application
Record
TrustCenter
.. ..
Signature
pri
nt
EFR
Funktionsschema EFR
5.1 Result-Code RC
Die Kassen-Applikation übergibt nach Abschluss der Positionserfassung und Zahlung die
Transaktionsdaten dem EFR zur Signatur, diese wird auf dem Kassenbeleg aufgedruckt.
Der Erfolg der Registrierung wird im Tag <Result> gemeldet. Die entscheidende
Steuerungsinformation ist der ResultCode RC:
Result- Code RC
HTTP-Statuscode
Ursache Aktion in der Kassen-Applikation
OK 200 OK Transaktion erfolgreich verarbeitet, keine weiteren Maßnahmen notwendig
Beleg drucken
BAD 400 Bad Request
Transaktion nicht akzeptiert, jedoch könnte ein späterer, weiterer Versuch, funktionieren.
Transaktion abbrechen
NO 406 Not Acceptable
Fehler in den übermittelten Daten oder ein nicht vorhersehbarer Fehler ist aufgetreten.
Retry Y/N Bei "N" ist die Transaktion abzubrechen
BAD 500 Internal Server Error
Unerwarteter Laufzeitfehler Kassen-Support rufen
Transaktion ist abzubrechen
Die EFR-Software ist so aufgebaut, dass nach erfolgreicher Installation bei Einhaltung der
Formalparameter (z.B. XML-Struktur) und funktionaler Infrastruktur (Festplatte) im laufenden
Betrieb immer eine erfolgreiche Registrierung gegeben ist. Das ist möglich, weil auch die
RKSV entsprechende Ausfall-Szenarien (z.B. "Sicherheitseinrichtung ausgefallen") vorsieht.
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 17
5.2 ErrorCode
Bei Fehler in der Registrierung (RC="BAD" oder RC="NO") wird im Feld ErrorCode die
Fehlerursache gemeldet. Siehe Liste im Anhang.
5.3 UserMessage
Unabhängig vom Erfolg der Transaktion kann vom EFR in <UserMessage> eine Meldung an
den Kassen-Bediener geliefert werden: Bitte anzeigen (z.B. MessageBox).
User Message
Ursache Aktion
Sicherheitseinrichtung ausgefallen
Hardwaredefekt, Kontaktfehler
Transaktion wurde erfolgreich registriert Kasse kann im Modus "Sicherheitseinrichtung ausgefallen" weiter betrieben werden Prüfung Reader und Smartcard Bei Defekt nach Möglichkeit Wechsel auf Kasse mit funktionierender Signaturerstellungseinheit Reparatur/Ersatz defekter Komponenten
Sicherheitseinrichtung fehlt
System war noch nie mit einer Smartcard verbunden
Startbeleg kann nicht erstellt werden Installation Smartcard oder Einrichtung Remote Signature erforderlich
5.4 Warning
<Warning>-Elemente liefern Informationen für die Schnittstellen-Programmierung bzw. den
Kassen-Support. Diese haben rein informativen Charakter, der Erfolg der Registrierung wird
ausschließlich im ResultCode RC gemeldet.
5.5 Wiederanlauf-Verfahren
Sollte das Kassensystem nach Absetzen des Webrequest und vor Empfang der Response
abstürzen (z.B. Stromausfall), so ist die Transaktion deckungsgleich nochmals zu
registrieren (achten Sie bitte auch auf D Datum/Uhrzeit).
Wenn die Transaktion im EFR bereits erfolgreich registriert war, so wird das Ergebnis der Registrierung mit dem Hinweis "Duplicate" geliefert: <TraC SQ="2345"> <Result RC="OK"> <ErrorCode>#DUPLICATE</ErrorCode> <Warning>w-#DUPLICATE TN:2073 check duplicate ESR/Normalize</Warning> </Result> <Fis> …
5.6 Codebeispiel C#
Mit dem folgenden Beispiel können sie eine einfache Anfrage (XML) an das Register
schicken und erhalten als Ausgabe auf der Console die Rückmeldung.
string data = ""; //Testdaten aus XML-Datei als Text auslesen if (File.Exists("testdaten.xml"))
data = File.ReadAllText("testdaten.xml"); //Text in Bytes konvertieren byte[] bytes = Encoding.UTF8.GetBytes(data); //Webrequest zum lokalen Register erstellen
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 18
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:5618/register"); //ContentType, Länge und Methode für POST-Request setzen request.ContentType = "application/xml; encoding='utf-8'"; request.ContentLength = bytes.Length; request.Method = "POST"; //Über den Requeststream die Daten in den Request schreiben Stream requestStream = request.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close(); try {
//Request senden und auf Antwort warten HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK) {
//Daten aus der Antwort auslesen und auf der Console ausgeben Stream responseStream = response.GetResponseStream(); string responseStr = new StreamReader(responseStream).ReadToEnd(); Console.WriteLine(responseStr);
} else {
//Wenn Statuscode nicht OK ist, Statuscode auf Console ausgeben Console.WriteLine("Statuscode: " + response.StatusCode);
} } catch (Exception e) {
//Im Fehlerfall (zB Register nicht erreichbar), Fehler auf der Console ausgeben Console.WriteLine(e.Message);
} Console.ReadLine();
5.7 Codebeispiel VBA Dim http ' As Object
XML = "<Tra><ESR>"
XML = XML & "<PosA>"
XML = XML & "<Pos IN=""52"" Dsc=""Schnitzel klein"" TaxG=""20%"" Amt=""8.90""/>"
XML = XML & "</PosA>"
XML = XML & "<PayA>"
XML = XML & "<Pay Dsc=""Bar"" Amt=""8.90""/>"
XML = XML & "</PayA>"
XML = XML & "</ESR></Tra>"
Lines = Register(XML)
MsgBox Lines
Function Register(XML)
' setup HTTP communication object
If HTTP Is Nothing Then Set HTTP = CreateObject("Msxml2.ServerXMLHTTP")
' POST request
HTTP.Open "POST", "http://localhost:5618/register", True
HTTP.send XML
Do While HTTP.readyState <> 4
HTTP.waitForResponse 10
Loop
If HTTP.Status <> 200 Then Err.Raise 1, "Register", "Status=" & HTTP.Status
' parse response
HTTP.ResponseXML.Load HTTP.responseBody
Set Node = HTTP.ResponseXML.selectSingleNode("//Result")
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 19
RC = Node.selectSingleNode("@RC").Text
If RC <> "OK" Then Err.Raise 1, "Register", "RC=" & RC
Set UserMessage = Node.selectSingleNode("/UserMessage")
If Not UserMessage Is Nothing Then MsgBox UserMessage.Text
' receipt lines
Lines = ""
For Each Node In HTTP.ResponseXML.selectNodes("//Fis/Tag")
Lines = Lines & Node.selectSingleNode("@Label").Text & ": " & _
Node.selectSingleNode("@Value").Text & vbNewLine
Next
' print 'signaturabhängiger Link' (EFR online mode) ...
Lines = Lines & HTTP.ResponseXML.selectSingleNode("//Fis/Link").Text
' ... or QR code (EFR offline mode)
' Lines = Lines & "QR=" & HTTP.ResponseXML.selectSingleNode("//Fis/Code").Text
Register = Lines
End Function
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 20
6. XML-Referenz In diesem Abschnitt sind die Standard-Elemente beschrieben. Darüber hinaus kann das
XML-Dokument unternehmensspezifisch Zusatzelemente und –felder enthalten. Beachten
Sie, dass die Liste der standardisierten Tags erweitert werden kann, hier werden aber
ausschließlich 1- bis 4-stellige Tag-Namen genutzt. Verwenden Sie daher für Zusatz-Tags
zumindest 5-stellige Namen oder eigene XML-Namensräume.
Alle Betragsangaben (Datatype=Currency) in den Datensätzen in Landeswährung am
Betriebs-Standort (=Euro).
6.1 Request Tra (Transaction)
Buchung einer Verkaufstransaktion.
Element Attri-
but
Name O=
optional Beschreibung Datatype Beispiel
ESR EFSTA
Simple
Receipt
M Receipt Body
D Date Time O Datum/Uhrzeit
wenn leer, wird D vom Register
vergeben
DateTime "2016-03-
01T13:28:00"
TT Transaction
Terminal
O Kassennummer
Eindeutig im Unternehmen!
Besteht üblicherweise aus
Filialnummer und
Kassennummer
Text "4012/07"
TN Transaction
Number
O fortlaufende Belegnummer
wenn leer, wird TN vom Register
vergeben (jedes Jahr ab "1")
Wenn nur nur fiskalpflichtige
Transaktionen registriert werden,
so ist die Lückenlosigkeit der
Belegnummer über den TLOG
des Kassensystems
nachzuweisen.
Text "450023"
T Total O Total-Betrag
Summe der vereinnahmten
Zahlungsmittel.
Keine Angabe für nonfiskale
Transaktionen (z.B.
Kassenabschluss, Kassier-
Anmeldung, Auszahlung).
Currency "12.35"
Opr Operator ID O Kassier-ID Text
OprN Operator
Name
O Kassier-Name Text
TaxN Net Tax Flag O Positionen excl. Steuer
Im Einzelhandel werden
Positionen üblicherweise brutto
(inkl. Steuer) ausgewiesen.
Mit TaxN="1" werden
Transaktionen gekennzeichnet,
in denen die Positionen netto
ausgewiesen sind.
0,1 "1"
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 21
TaxN="0" ist Standard und muss
nicht angegeben werden.
Net Net Total O Nettosumme
Nur bei TaxN="1" benötigt.
Currency "10.96"
NF Nonfiscal
Transaction
Type
O Mit dieser Angabe sind
nonfiskale Transaktionen zu
kennzeichnen. Diese werden im
Belegprotokoll registriert (damit
ist die Folge der Belegnummern
TN lückenlos), aber nicht signiert
und gehen nicht in den
Summenspeicher.
Text "EINZAHLUNG"
NFS Nonfiscal
Signed
O Entspricht dem Attribut NF, nur
dass für den Beleg eine Signatur
(Summe=0) erstellt wird. Das ist
Vorschrift für Trainingsbelege
und ist empfohlen für
"Kassenabschluss"/"Tagesende"
Text "TRAINING"
"TAGESENDE"
AT_
Storno
Void
Transaction
O Kennzeichnung von Storno-
Belegen gem. RKSV
Text "1"
Head Header O Fließtext Kopf
Txt Text O Textblock Text
PosA Position
Array
O Array Positionszeilen
Pos Position O Positionszeile
PN Position
Number
O Positionsnummer Text PN="1"
IN Item
Number
O Öffentliche Artikelnummer
(GTIN, EAN, UPC)
Text
ID Item ID O Identität
(Charge, Seriennummer)
Text[]
Dsc Description O Bezeichnung
Handelsübliche Bezeichnung der
Ware oder Dienstleistung.
Text
TaxG Tax Group O Steuergruppe
Üblicherweise werden
Steuergruppen mit Buchstaben
oder Ziffern gekennzeichnet.
Wenn der Artikel neben der
Mehrwertsteuer-Gruppe auch
anderen Steuergruppen
zuzuordnen ist, können diese als
Array angegeben werden
(Trennzeichen Space).
Text[] "B"
"B N"
Amt Position
Amount
O Positionswert
(Qty*Pri)
Currency "1.99"
Qty Quantity O Menge
Qty="1" kann bei QtyU="Stk"
oder bei Pauschalbeträgen
entfallen.
Decimal
QtyU Quantity
Unit
O Mengeneinheit
QtyU="Stk" kann entfallen.
Text
Pri Unit Price O Preis je Mengeneinheit Currency
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 22
kann bei Qty="1" oder
Qty="-1" und QtyU="Stk"
entfallen.
RD Reference
Date Time
O nur bei Storno oder
Warenrückgabe-Position:
Referenz auf die ursprüngliche
Transaktion
Date "2016-02-15"
RTT Reference
Transaction
Terminal
O Text "4012/07"
RTN Reference
Transaction
Number
O Text "38524"
RPN Reference
Position
Number
O Text "2"
Mod Modifier O Modifikator zum Positionswert
PN Position Number
O Bezug auf Pos/PN Keine Angabe: letzte Position "*": alle Positionen Mehrere Positionsnummern können als Bereich (VonPN-BisPN) oder als Array angegeben werden (Trennzeichen Space).
Text[] "1" "1 2 7" "1-49 50-100"
Dsc Description O Bezeichnung Text
Amt Modifier Amount
O Betrag negativ: Rabatt oder Nachlass positiv: Aufschlag
Currency "-0.50"
Lin Print Line O Textzeile
PN Position
Number
O die Textzeile kann einer Position
zugeordnet werden,
üblicherweise gehört die
Textzeile zur letzten Positions-
oder Zahlungszeile
Integer "1"
Dsc Description O Text in der Beschreibungs-Spalte Text
LAmt Line Amount O Text in der Summen-Spalte Text
PayA Payment Array
O Array Zahlungszeilen
Pay Payment Zahlungszeile
Dsc Description O Bezeichnung des Zahlungsmittels
Text "Bar" "Rückgeld" "Kredit"
Amt Payment Amount
O Zahlungsbetrag Currency "7.35"
UID Unique Identifier
O eindeutige Transaktionsnummer (bei elektronischer Zahlung)
Text
PayG Payment type group
O Art des Zahlungsmittels In manchen Fiskalländern sind Summen je Kategorie zu melden
Text
TaxA Tax Array O Array Steuerzeilen
Tax Tax Line O Steuerzeile
TaxG Tax Group M Steuergruppe Text "B"
Prc Tax Percent O Steuer-Prozentsatz Decimal "10" "0"
Net Excluding Tax
O Netto exkl. Steuer Currency "8.05"
TAmt Tax Amount O Steuerbetrag Currency "0.81"
Amt Including Tax
O Brutto inkl. Steuer Currency "8.86"
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 23
Foot Footer O Fließtext Fuß
Txt Text O Textblock Text
6.2 Response TraC (Tra Completion)
Antwort auf eine Verkaufs-Transaktion.
Element Element Name O=
optional Beschreibung Datatype Beispiel
TraC Transaction
Completion
M Rückantwort auf einen Tra-
Befehl
SQ (Attribut) Sequence
Number
M eine laufende Sequenznummer
wird für jede erfolgreiche
Registrierung vergeben
Integer 1
Result Registration
Result
M Ergebnis der Registrierung
RC
(Attribut)
Result Code M Code zur Programmsteuerung
"OK": registriert
"NO": nicht registriert –
behebbarer Fehler
"BAD": nicht registriert – Abbruch
OK,BAD,
NO
"OK"
ErrorCode Error Code O Fehlercode lt. Liste zur
Programmsteuerung.
In Kombination mit RC="OK" als
Warnung zu verstehen (z.B.
"#DUPLICATE" bei
Wiederholung einer
Registrierung)
Text "#SIGDEV_MIS
S"
UserMessa
ge
User
Message
O Information an den Benutzer
(landessprachlich); anzuzeigen
wenn vorhanden, auch bei
RC="OK".
Text "Sicherheitseinri
chtung
ausgefallen"
Warning Debug
Message
O Fehler-Zusatzinformation
(englisch)
Text[]
ESR Augmented
Data
O Wenn durch das EFR Werte zu
ergänzen sind (z.B. D=aktuelle
Zeit, TN=autom. Belegnummer
oder TaxA aus den
Positionsdaten), so werden diese
Felder in der Rückantwort
geliefert
Fis Fiscal Data O Fiskalsignatur
Code Signature
Code
O am Kassenbeleg als QR bzw.
Barcode auszudruckender
Datenstrom
Text
Link Signature
Reference
O alternativ am Kassenbeleg
auszudruckender Link
Text "EFSTA.NET#
…"
Tag Fiscal Tag O Fiskalfeld lt. Fiskalvorschrift auszudrucken am Kassenbon
Text
Name Field Name M Feldname für Verarbeitung in der Kassen-Applikation (zur optionalen Speicherung in der Kassen-Applikation)
Text "Info"
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 24
Value Field Value M Feldwert Text
Label Field Label M Bezeichnung des Feldes am Ausdruck (landessprachlich, kann leer sein)
Text "EOR" (=Fiskal-Signatur in SI Slowenien)
6.3 Beispielsbeleg im XML-Format <Tra>
<ESR D="2015-07-01T09:28:00" TT="01/1" TN="2071" T="12.35">
<Head>
<Txt>Es bediente Sie Frau Gabriele</Txt>
</Head>
<PosA>
<Pos PN="1" IN="4012345678901" Dsc="Hesp.-Essig" TaxG="B" Amt="1.99"/>
<Mod PN="1" Dsc="Aktionsnachlass" Amt="-0.50"/>
<Pos PN="2" IN="9023456789001" Dsc="Katzenfein" TaxG="C" Amt="1.49"/>
<Pos PN="3" IN="9023456789001" Dsc="Katzenfein" TaxG="C" Amt="1.49"/>
<Pos PN="4" IN="4198765432109" Dsc="Glasreiniger" TaxG="A" Amt="3.49"/>
<Pos PN="5" Dsc="Emmentaler" TaxG="B" Amt="5.14" Qty="0.252" QtyU="kg" Pri="21.90"/>
<Lin LAmt="----------"/>
<Lin Dsc="Zwischensumme" LAmt="13.10"/>
<Mod PN="2 3" Dsc="-25% Tiernahrung" Amt="-0.75"/>
</PosA>
<PayA>
<Pay Dsc="Bar" Amt="5.00"/>
<Pay Dsc="Bankomat" Amt="7.35" UID="17075378 004704 004518"/>
<Lin Dsc="Maestro"/>
<Lin Dsc="B E Z A H L T EUR 7,35"/>
</PayA>
<TaxA>
<Tax TaxG="A" Prc="20" Net="2.91" TAmt="0.58" Amt="3.49" />
<Tax TaxG="B" Prc="10" Net="6.03" TAmt="0.60" Amt="6.63" />
<Tax TaxG="C" Prc="13" Net="1.97" TAmt="0.26" Amt="2.23" />
</TaxA>
<Foot>
<Txt>
Danke für Ihren Einkauf<br/>www.markt.at
</Txt>
</Foot>
</ESR>
</Tra>
6.4 Beispielsbeleg im JSON-Format
Anstelle im XML-Format können die Belegdaten im JSON-Format registriert werden (auch
XML-Daten werden für die interne Protokollierung und die Darstellung als Digitaler Beleg in
JSON umgewandelt). Bei Meldung im JSON-Format wird auch die Response als JSON
geliefert.
{"Tra":
{"ESR":{"D":"2016-02-01T09:28:00","TT":"01/1","TN":"2071","T":"12.35",
"Head":{
"Txt":["Es bediente Sie Frau Gabriele"]
},
"PosA":[
{"_":"Pos","PN":"1","IN":"4012345678901","Dsc":"Hesp.-Essig","TaxG":"B","Amt":"1.99"},
{"_":"Mod","PN":"1","Dsc":"Aktionsnachlass","Amt":"-0.50"},
{"_":"Pos","PN":"2","IN":"9023456789001","Dsc":"Katzenfein","TaxG":"B","Amt":"1.49"},
{"_":"Pos","PN":"3","IN":"9023456789001","Dsc":"Katzenfein","TaxG":"B","Amt":"1.49"},
{"_":"Pos","PN":"4","IN":"4198765432109","Dsc":"Glasreiniger","TaxG":"C","Amt":"3.49"},
{"_":"Pos","PN":"5","Dsc":"Emmentaler","TaxG":"B","Amt":"5.14","Qty":"0.252","QtyU":"kg","Pri":"21.90"}
,
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 25
{"_":"Lin","LAmt":"----------"},
{"_":"Lin","Dsc":"Zwischensumme","LAmt":"13.10"},
{"_":"Mod","PN":"2 3","Dsc":"-25% Tiernahrung","Amt":"-0.75"}
],
"PayA":[
{"_":"Pay","Dsc":"Bar","Amt":"5.00"},
{"_":"Pay","Dsc":"Bankomat","Amt":"7.35","UID":"17075378 004704 004518"},
{"_":"Lin","Dsc":"Maestro"},
{"_":"Lin","Dsc":"B E Z A H L T EUR 7,35"}
],
"TaxA":[
{"_":"Tax","TaxG":"A","Prc":"20","Net":"2.91","TAmt":"0.58","Amt":"3.49"},
{"_":"Tax","TaxG":"B","Prc":"10","Net":"6.03","TAmt":"0.60","Amt":"6.63"},
{"_":"Tax","TaxG":"C","Prc":"13","Net":"1.97","TAmt":"0.26","Amt":"2.23"}]},
],
"Foot": {
"Txt":["Danke für Ihren Einkauf<br/>www.markt.at"]
}
}
}
}
7. Lizenz ESR Das Format "EFSTA Simple Receipt" ist geistiges Eigentum von EFSTA und unterliegt der
GNU General Public License (GPL).
Es kann frei genutzt werden, unter Einhaltung folgender Regeln:
1. Bezeichnung des Formates als ESR "EFSTA Simple Receipt"
2. Individuelle Erweiterungen des Formats unterliegen den formalen Regeln des ESR
(Tag-Names mindestens 5 Zeichen lang)
3. Öffentlich zugängliche Speichersysteme (Internet) müssen eine
Zugriffsbeschränkung auf persönliche Belege gewährleisten
4. Die Erteilung des Leserechts für Belege an Dritte obliegt dem Belegempfänger
(Opt-In)
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 26
8. Anhang
8.1 Glossar und Abkürzungen
Abkürzung Bedeutung
BAO Bundes-Abgabenordnung
EFR EFSTA Fiscal Register = lokaler Registrierungsdienst
EFSTA European Fiscal Standards Association (siehe www.efsta.org)
HSM Hardware Security Module Sichere Signaturerstellungseinheit lt. Signaturgesetz 2008
HTML Hypertext Markup Language Auszeichnungssprache zur Strukturierung digitaler Dokumente
JSON JavaScript Object Notation Datenformat für Datenaustausch; siehe auch: XML
RKSV Registrierkassensicherheits-Verordnung 2015
UID Umsatzsteuer-Identifikationsnummer, für Österreich im Format AT-U99999999
XML eXtended Markup Language weit verbreiteter Formatierungs-Standard für Datenaustausch siehe auch: JSON
XSL Definition von Layouts für XML-Dokumente
XSLT XSL Transformation Programmiersprache zur Transformation von XML-Dokumenten
8.2 ErrorCode-Liste ErrorCode RC Ursache Aktion
#DUPLICATE OK Transaktion wurde im Wiederanlauf-
Verfahren (s.o.) registriert
Prüfen, ob tatsächlich ein
Wiederanlauf vorliegt.
Identische Transaktionsdaten dürfen
nicht mehrfach registriert werden
(zumindest TN muss erhöht werden).
#SIGNDEV_BROKEN OK "Sicherheitseinrichtung ausgefallen" Fehler Smartcard oder Remote
Signature beheben
#SIGNDEV_MISS OK Signatur nicht initialisiert Umgehend Smartcard anschließen
bzw. Remote Signature einrichten.
Startbeleg kann nicht erstellt werden!
#SIGNDEV_MISMATCH OK Signatur abgelehnt (falsche Smartcard) Smartcard (für korrekte UID) einsetzen
Alternativ muss das
Datenerfassungsprotokoll neu
eingerichtet werden.
Fiskalbehandlung wie
"Sicherheitseinrichtung ausgefallen"
#POS_PN_NV ÔK ungültiges Format <Pos PN= Kassenschnittstelle prüfen
#AMT_SPACE_NV OK unerwartete Leerzeichen in
Betragsangabe
Kassenschnittstelle prüfen
#AMT_MISS OK erwarteter Betrag fehlt keine (wird als "0.00" interpretiert)
#AMT_DECIMALS OK Betrag mit mehr als 2 Nachkommastellen keine (wird gerundet)
#AMT_WARNING OK unerwartet hoher Betrag > "10000000.00" Kassendaten prüfen
#PRC_SPACE_NV OK unerwartete Leerzeichen in
Prozentangabe
Kassenschnittstelle prüfen
#PRC_MISS OK erwartete Prozentangabe fehlt keine (wird als "0%" interpretiert)
#PRC_NV OK ungültiges Format <Tax Prc= Kassenschnittstelle prüfen
(wird als "0%" interpretiert)
#PRC_DECIMALS OK Prozent mit mehr als 2 Nachkommastellen keine (wird gerundet)
#PARAM_OVERFLOW BAD ungültiger Wert in Request Kassenschnittstelle prüfen #REQ_NOT_SUPPORTED BAD erlaubte Tags in /register:
<Tra> und <Log> Kassenschnittstelle prüfen
#AMT_NV BAD ungültiges Betrags-Format Kassenschnittstelle prüfen #DATE_NV BAD ungültiges Datums-Format Kassenschnittstelle prüfen
EFSTA Programming Interface 06. Juni 2016 Revision 1.04 27
#LOCKED NO Ressource besetzt
(File, externe Hardware) Support
#ERROR BAD unerwarteter Fehler Support
8.3 Revisionen
Revision Datum Änderung
1.00 03.03.2016 Erste Version EXT2
1.01 10.03.2016 Vorläufige Freigabe EXT2
1.02 26.04.2016 Ergänzung ESR.Pos.ID EXT2
1.03 02.06.2016 Ergänzung ErrorCode-Liste EXT2
1.04 06.06.2016 neue Attribute ESR.NFS, TraC.SQ
Codebeispiel VBA
EXT2