efsta programming interfaceefsta.org/wp-content/uploads/2016/06/efsta-programming-interface_… ·...

27
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

Upload: buibao

Post on 19-Jul-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 2: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 3: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 4: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 5: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 6: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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>

Page 7: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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.

Page 8: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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):

Page 9: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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)

Page 10: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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.

Page 11: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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"/>

Page 12: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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>

Page 13: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

EFSTA Programming Interface 06. Juni 2016 Revision 1.04 13

<Result RC="BAD"> <ErrorCode>ERROR</ErrorCode> <Warning>e-TypeError: Cannot read property &quot;D&quot; 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"> …

Page 14: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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").

Page 15: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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.

Page 16: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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.

Page 17: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 18: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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")

Page 19: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 20: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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"

Page 21: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 22: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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"

Page 23: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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"

Page 24: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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"}

,

Page 25: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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)

Page 26: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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

Page 27: EFSTA Programming Interfaceefsta.org/wp-content/uploads/2016/06/EFSTA-Programming-Interface_… · EFSTA Programming Interface 06. Juni 2016 Revision 1.04 2 Inhalt ... Verbinden Sie

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