Germany

Fiscalisation for Germany

Helps POS software vendors comply with fiscalization laws and VAT reporting for B2C, B2B and B2G sales across Europe via a single, lightweight app.

Overview

Viva Fiscal API is designed to help businesses comply with fiscalization laws, especially in countries with strict regulations on tax reporting and cash register security. It acts as an intermediary between a company’s point-of-sale (POS) system and government tax authorities, ensuring that all transactions are accurately recorded, securely signed, and transmitted in compliance with legal requirements.

Benefits

POS Integrations

Viva offers Auto Fiscalization functionality within its POS integrations, providing an electronic fiscalization service that allows businesses to record, process, and store transactions digitally. This ensures transparency, accuracy, and compliance without complex procedures.

Fiscalization is available through:

Merchants and ISV partners do not need to allocate resources for fiscalization integration, as all transactions are automatically fiscalized during payments.

Partners working with other PSPs can also use Viva’s standalone Fiscal API to transmit data to regulators and receive valid receipt information.

The fiscalisation feature is currently available exclusively on our SoftPOS for Android. Please use this link to download the demo version of the Viva Terminal app with fiscalisation enabled and try it out in demo environment.

How to Fiscalize POS Payments

Ensuring that a payment is tax-compliant is quite straightforward. Your integration remains the same, with just one additional object added to your sale requests. This object(fiscalisationData) contains essential data, including the items sold, the payment amount for each item, and the corresponding VAT details. You can find the object structure and its parameters here.

The fiscalisationData is same across all types of POS integrations. By understanding what to include in your requests, you can seamlessly integrate fiscalisation into Viva’s any POS integration. Viva Fiscalisation handles the compliance process by signing the transaction with the relevant authorities. It then returns the receipt details, including the required signature for tax authorities. This information must be printed on the receipt and provided to the customer.

Fiscalisation Data Object

The table below presents the parameter details for the fiscalization data. The fiscalization data object comprises three main components.

  1. Fiscalisation Data Parameters: Contains the core details required for tax compliance.

  2. LineItems Array: An array of objects, each representing an individual item sold, including details such as description, quantity, price, and VAT.

  3. Payment Array: An array of objects specifying the payment details, including payment method, amount, and references.

The fiscalisationData object consists of the below parts:

Fiscalisation Data Parameters

The fiscalisationData object contains the below parameters.

Value
Description
Example
Max Length
Required
processingIndicator
You can find all possible values of the Receipt Processing Indicator under each country’s Receipt Processing Indicator section
5139205309155246081
50 characters
customerVatNumber
The Vat Number to which the invoice is linked to
EL036098541
50 characters

Required only if the receipt is about B2B services/items
customerName
The customer’s name
Professional Services LTD
50 characters

Required only if the receipt is about B2B services/items
customerCountryCode
The country code of where the Vat Number is registered to.
GR
50 characters

Required only if the receipt is about B2B services/items
customerStreet
The customer’s street.
Amarousiou Chalandriou 18-20
50 characters

Required only if the receipt is about B2B services/items
customerCity
The customer’s city
Athens
50 characters

Required only if the receipt is about B2B services/items
customerZip
The customer’s zip code
15125
50 characters

Required only if the receipt is about B2B services/items
receiptDateTime
The receipt’s date & time
2025-02-03T09:32:41.604Z
The value of this constant is equivalent to 23:59:59.9999999 UTC, December 31, 9999 in the Gregorian calendar
receiptUniqueReference
A reference identification key for this specific receipt
fiscal-12345678
100 characters
lineItems
Array of Objects. Please see the next sections for more details.
payments
Array of Objects. Please see the next sections for more details.
Example

The order includes two products, one Coffee Latte and two Coffee Cappuccino, with grand total amount of 20 euro (1 item Coffee Latte x 10 euro + 2 Coffees Cappuccino x 5 euro). The payments array, will be the below:

{
   "processingIndicator":"5139205309155246081",
   "customerVatNumber":"EL036098541",
   "customerName":"Professional Services LTD",
   "customerCountryCode":"GR",
   "customerStreet":"Amarousiou Chalandriou 18-20",
   "customerCity":"Athens",
   "customerZip":"15125",
   "receiptDateTime":"2025-02-03T09:32:41.604Z",
   "receiptUniqueReference":"fiscal-12345678",
   "lineItems": [{...}],  //array of objects
   "payments": [{...}]   //array of objects
}

LineItems Array

Inside the fiscalisationData object, the LineItems array holds the product/item details that the invoice includes.

Value
Description
Example
Max Length
Required
amount
The amount with VAT of each item/product
1000 = 10 euro
4 integers where tha last two linked with the decimals
description
The description of the item/product
Coffee Latte
100 characters
position
The position on the receipt
1
An integer
productBarcode
The product barcode content passed through from the cashier system
1234567890123
50 characters
productNumber
The product number passed through from the cashier system
15709
50 characters
quantity
The quantity of this specific product item
2
An integer
vatAmount
The VAT amount that applied to this specific product
240
100 characters
vatRate
The VAT rate that applied to this specific product
2400 (as value, not 24% in percentange)
4 characters
processingIndicator
You can find all possible values of the LineItem Processing Indicator under each country’s LineItem Processing Indicator section
5139205309125846083
50 characters
Example

The order includes two products, one Coffee Latte and two Coffee Cappuccino, with grand total amount of 20 euro (1 item Coffee Latte x 10 euro + 2 Coffees Cappuccino x 5 euro). The line item array, will be the below:

"lineItems":[
      {
         "amount":1000,
         "description":"Coffee Latte",
         "position":1,
         "productBarcode":"1234567890123",
         "productNumber":15709,
         "quantity":1,
         "vatAmount":240,
         "vatRate":2400,
         "processingIndicator":"5139205309155246083"
      },
      {
         "amount":500,
         "description":"Coffee Cappuccino",
         "position":2,
         "productBarcode":"1234567890200",
         "productNumber":15710,
         "quantity":2,
         "vatAmount":120,
         "vatRate":2400,
         "processingIndicator":"5139205309125846083"
      }
   ]

Payments Array

Inside the fiscalisationData object, the payments array holds the payment details for the items in the order.

Value
Description
Example
Max Length
Required
amount
The grand total amount of the payment
2000 = 20 euro
4 integers where tha last two linked with the decimals
dateTime
The payment’s date and time
2025-02-03T09:32:41.604Z
The value of this constant is equivalent to 23:59:59.9999999 UTC, December 31, 9999 in the Gregorian calendar
description
A short description for this receipt
Order XXXX, Cashier 1, Central Store
50 characters
position
The position on the receipt for details
1
An integer
processingIndicator
You can find all possible values of the Payments Processing Indicator under each country’s Payments Processing Indicator section
5139205309155246083
50 characters
Example

The order includes two products, one Coffee Latte and two Coffee Cappuccino, with grand total amount of 20 euro (1 item Coffee Latte x 10 euro + 2 Coffees Cappuccino x 5 euro). The payments array, will be the below:

"payments":[
  {
      "amount":2000,
      "dateTime":"2025-02-03T09:32:41.604Z",
      "description":"Payment via card",
      "position":1,
      "processingIndicator":"5139205309155246083"
  }
]

Understanding processingIndicators for Germany

As you might have already noticed, the FiscalisationData object contains a parameter called processingIndicator. This parameter exists in the main object, inside lineItems object, and payments object.

Receipt processingIndicator: The ProcessingIndicator in the ‘main body’ indicates the receipt type and defines how it should be processed by the Viva Fiscalisation. The data type is Int64 and contains the country specific code, which is a value following the ISO-3166-1-ALPHA-2 standard converted from ASCII into hex and used as byte 8 and 7. For definitions regarding national laws, please refer to each country seperately.

LineItems processingIndicator: The ProcessingIndicator in the ‘lineItems’ object defines the type of service or item in the line item block and thus how Viva processes the individual receipts with regards to receipt generation. The data type is Int64 and contains a country specific code which is a value following the ISO-3166-1-ALPHA-2 standard, converted from ASCII into hex and used as byte 8 and 7.

Payments processingIndicator: The ProcessingIndicator in the ‘payments’ object indicates the type of payment within the pay items block and defines how the Viva Fiscalisation processes the individual payment in terms of the receipt. The data type is Int64 and contains a country specific code which is a value following the ISO-3166-1-ALPHA-2 standard, converted from ASCII into hex and used as byte 8 and 7.

Receipt ProcessingIndicator for Germany

For Germany (DE), the country code is 4445. Thus, the value of an unknown processing indicator in Germany is 4445000000000000.

Example for POS receipt : 4445000000000001

The value 4445000000000001 is in hexadecimal format and needs to be converted to its decimal equivalent, which is 4919338167972134913. Therefore, the value to be included in the request body should be 4919338167972134913.

A helpful online tool for your converting tests is [this](https://www.rapidtables.com/convert/number/hex-to-decimal.html).

Value Description BON_TYP (DSFinV-K)
processType (TSE)
4445000000000000 Unknown type for country-code "DE"

This receipt case is handled like a "pos-receipt" (4445000000000001). See below:
Beleg
Kassenbeleg-V1
4445000000000001 Pos-receipt

Represents the main kind of receipt processed by a POS-System. Creates a turnover and/or change in the amount of cash in the till or similar operations.

Use the lineItems.processingIndicator and payments.processingIndicator to hand over details for processing. The lineItems.processingIndicator and payments.processingIndicator should contain the full final state of the receipt. Turnover and cash amount is increased by the final pos-receipt content, intermediate start-transaction, update-transaction and delta-transaction content doesn't influence turnover and cash amount. The pos-receipt case can be used with implicit and explicit flow.

The duration of the represented action is calculated using the minimum (start time) and maximum (end time) of datetimes over receipt.processingIndicator/lineItems.processingIndicator/payments.processingIndicator

The BON_TYP (Beleg) of DSFinV-K can be overwritten by an ftReceiptCaseFlag.
Beleg
Kassenbeleg-V1
4445000000000002 Zero-receipt

Used for communication test and functional test of the Viva Fiscalisation. In addition, the response also contains a detailed status information about the used TSE-Device. TSE data is herefore loaded and that may cause a long running request.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow. Using it without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.

If you want to end an ongoing transaction without turnover (e.g. all items on a receipt are voided) then please use a regular ftReceiptCase.

Informations returned in the response are:
  • List of cbReceiptReferece <-> Transaction-ID relations.
  • Statusdata of TSE, serialnumber, available/free memory, available number of signatures left, ...
[none]
SonstigerVorgang
4445000000000003 Initial operation receipt / start-receipt

The request is only valid with the same property requirements as a zero-receipt. It initialises a new Viva Fiscalisation including the used TSE in the background. Depending on the TSE-Type used, this includes different actions.

On successful initialisation, a notification is created which includes the queue-id, scu-id, certificate/public-key, tse-serialnumber=hash(public-key). This notification needs to be reported to the tax administration.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow. calling without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
SonstigerVorgang
4445000000000004 Out of operation receipt / stop-receipt

The request is only valid with the same property requirements as a zero-receipt. It is disabling the Viva Fiscalisation including the deactivation of the client ID used in the TSE for the current queue.
This request also permanently disables the connected TSE, which is an irreversible action on production TSEs. Optionally, one can avoid deactivating the TSE using the ftReceiptCaseFlag 0x0000000001000000 (see below).

On successful deactivation, a notification is created which includes the queue-id, scu-id, certificate/public-key, tse-serialnumber=hash(public-key). This notification needs to be reported to tax administration.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow. Calling without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
SonstigerVorgang
4445000000000005 Monthly-closing

This receipt case works only with implicit flow. Calling without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception. This is a zero-receipt. It is recommended to send this receipt at the end of each month to define the time of the accounting closure.
[none]
SonstigerVorgang
4445000000000006 Yearly-closing

This receipt case works only with implicit flow. Calling without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
SonstigerVorgang
4445000000000007 Daily-closing

This receipt case works only with implicit flow. Calling without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception. This is a zero-receipt. It is required to send this receipt at the end of each day to define the time of the accounting closure.
[none]
SonstigerVorgang
4445000000000008 Start-transaction-receipt

Starts a new, unfinished action. Use lineItems.processingIndicator and payments.processingIndicator to hand over already known details for the final receipt. Using the same cbReceiptReferece in further calls connects the action items.

This receipt case works only with explicit flow. Calling with the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
[empty]
4445000000000009 Update-transaction-receipt

Updates an ongoing action. Use lineItems.processingIndicator and payments.processingIndicator to hand over all details for the final receipt. Using the same cbReceiptReferece in further calls connects the action items.

This receipt case works only with explicit flow. Calling with the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
[empty]
444500000000000A Delta-transaction-receipt

Updates an ongoing action. Use lineItems.processingIndicator and payments.processingIndicator to hand over changes for the final receipt. Using the same cbReceiptReferece in further calls connects the action items.

This receipt case works only on explicit flow. Calling with the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
[empty]
444500000000000B Fail-transaction-receipt

Fails an ongoing transaction. It tries to finish either one or multiple open transaction (accepts fail, continue on fail) and clears the cbReceiptReferece <-> Transaction-ID relations.

To close single open transactions, an explicit fail-transaction receipt needs to be used. The open transaction needs to be referenced via cbReceiptReference. If this value is not provided or no open transaction exists, the Viva Fiscalisation will throw an exception and the call will fail.

To close multiple open transactions, an implicit fail-transaction receipt needs to be sent. This can also be used to close transactions that were not opened by the Viva Fiscalisation (e.g. manually during testing). The transaction numbers that should be closed need to be passed via JSON in ftReceiptCaseData, using the array property CurrentStartedTransactionNumbers (e.g.: ftReceiptCaseData: "{\"CurrentStartedTransactionNumbers\": [1, 2, 3]}"). cbReceiptReference must be empty in this case, otherwise the Viva Fiscalisation will throw an exception and return an error.
AVBelegabbruch
Kassenbeleg-V1
444500000000000C B2B-invoice

The BON_TYP (Beleg) of DSFinV-K can be overwritten by an ftReceiptCaseFlag.
Beleg
Kassenbeleg-V1
444500000000000D B2C-invoice

The BON_TYP (Beleg) of DSFinV-K can be overwritten by an ftReceiptCaseFlag.
Beleg
Kassenbeleg-V1
444500000000000E Info-invoice

AVRechnung
Kassenbeleg-V1
444500000000000F Info-delivery-note

AVTransfer
Kassenbeleg-V1
4445000000000010 Info-order

To be used when goods are already delivered to customer and the payments.processingIndicator array of the request is filled. Usually, this is filled by using ftPayItemCase material consumption ('444500000000000A').
(ReceiptRequest.PayItems != [])
AVBestellung
Kassenbeleg-V1
4445000000000010 Info-order

To be used when recording an ongoing order and the payments.processingIndicator array of the request is empty. This request must contain at least one lineItems.processingIndicator entry, empty lineItems.processingIndicator array is not allowed.
(ReceiptRequest.PayItems == [] and ReceiptRequest.ChargeItems != [])
[none]
Bestellung-V1
4445000000000011 Cash deposit / cash pay-in / cash pay-out / exchange

The BON_TYP (Beleg) of DSFinV-K can be overwritten by an ftReceiptCaseFlag.
Beleg
Kassenbeleg-V1
4445000000000012 Material consumption

AVSachbezug
Kassenbeleg-V1
4445000000000013 Info-internal

First case: "charge items and pay items exist"
(ReceiptRequest.ChargePayItems != [] && ReceiptRequest.PayItems != [])
AVSonstige
Kassenbeleg-V1
4445000000000013 Info-internal

Second case: "no charge items or no pay items"
(ReceiptRequest.ChargePayItems == [] \|\| ReceiptRequest.PayItems == [])
[none]
SonstigerVorgang
4445000000000014 Protocol

[none]
SonstigerVorgang
4445000000000015 Foreign sales

To be used in case of a sale in a country where there is no need to fiscalize. For example you have a German foodtruck and goes to Hungary and sell food there.
Kassenbeleg-V1
4445000000000016 Cancel/void a receipt

Please note that according to the DSFinV-K, this receipt type can only be used on systems without a TSE. For "regular" cancellations, please use the respective ftReceiptCaseFlag.
AVBelegstorno
Kassenbeleg-V1
4445000000000017 Initiate SCU switch

This request is only valid with the same property requirements as a zero-receipt and can only be used after the SCU switch process was initiated in the Viva Fiscal API. It disconnects the Queue from the currently used, "old" SCU, hence preparing it for connecting another SCU. To finish this process, a finish SCU switch receipt has to be called (see below).

On successful execution, a notification is created which includes relevant data for financial authority notifications.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow.
[none]
SonstigerVorgang
4445000000000018 Finish SCU switch

This request is only valid with the same property requirements as a zero-receipt and can only be used after the SCU switch process was initiated in the Viva Fiscal API.
On successful execution, a notification is created which includes relevant data for financial authority notifications.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow. Calling it without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
SonstigerVorgang
4445000000000019 Prepare Queue for (cloud) migration

This request is only valid with the same property requirements as a zero-receipt. It permanently sets the currently installed instance of this Queue (on the current machine) to readonly-mode to prepare it for the migration to another runtime environment, e.g. to the CloudCashbox. This is required to prevent concurrent signatures on different instances; the migration wizard in the fiscalisation Portal will verify that the last receipt sent to the Queue is of this type before performing the actual migration.
Please note that this receipt will prevent any further sign operations in the current installed version of the Queue, and signing will only be again possible after the Queue was migrated to e.g. the CloudCashbox.

The request is only valid when the charge items block (lineItems.processingIndicator) and the pay items block (payments.processingIndicator) in the ftReceiptRequest are empty arrays.

This receipt case works only with implicit flow. Calling it without the ftReceiptCaseFlag 0x0000000100000000 ends up in an exception.
[none]
SonstigerVorgang

Linetems ProcessingIndicator for Germany

Format

The format of the `processingIndicator` parameter on line item level, should be as below.

Example for lineItem processingIndicator : 4919338167972134913

Calculation: After you identify the type of service value (Eg: The value 4445000000000001 in hexadecimal format in the below table) you should convert it to its decimal equivalent(Eg: 4919338167972134913) and then include it in the request data.

A helpful online tool for your converting tests is [this](https://www.rapidtables.com/convert/number/hex-to-decimal.html).

Value Description UST_SCHLUESSEL (DSFinV-K) GV_TYP (DSFinV-K)
4445000000000000 Unknown type of service for DE 7 Umsatz
4445000000000001 Undefined type of service for DE normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Umsatz
4445000000000002 Undefined type of service for DE discounted-1
1.1.2019: 7% (DE: Ermäßigter Steuersatz)
2 Umsatz
4445000000000003 Undefined type of service for DE special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Umsatz
4445000000000004 Undefined type of service for DE special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Umsatz
4445000000000005 Undefined type of service for DE not taxable 5 Umsatz
4445000000000006 Undefined type of service for DE zero 6 Umsatz
4445000000000007 Undefined type of service for DE unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Umsatz
4445000000000011 Delivery normal. For processing, see (4445000000000001) 1 Umsatz
4445000000000012 Delivery discounted-1. For processing, see (4445000000000002) 2 Umsatz
4445000000000013 Delivery special-1. For processing, see (4445000000000003) 3 Umsatz
4445000000000014 Delivery special-2. For processing, see (4445000000000004) 4 Umsatz
4445000000000015 Delivery not taxable. For processing, see (4445000000000005) 5 Umsatz
4445000000000016 Delivery zero. For processing, see (4445000000000005) 6 Umsatz
4445000000000017 Delivery unknown vat. For processing, see (4445000000000007) 7 or > 1000 Umsatz
4445000000000019 Other services normal. For processing, see (4445000000000003) 1 Umsatz
444500000000001A Other services discounted-1.For processing, see (4445000000000001) 2 Umsatz
444500000000001B Other services special-1. For processing, see (4445000000000004) 3 Umsatz
444500000000001C Other services special-2. For processing, see (4445000000000002) 4 Umsatz
444500000000001D Other services not taxable. For processing, see (4445000000000005) 5 Umsatz
444500000000001E Other services zero. For processing, see (4445000000000005) 6 Umsatz
444500000000001F Other services unknown vat. For processing, see (4445000000000007) 7 or > 1000 Umsatz
4445000000000021 Returnable normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Pfand
4445000000000022 Returnable discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Pfand
4445000000000023 Returnable special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Pfand
4445000000000024 Returnable special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Pfand
4445000000000025 Returnable not taxable 5 Pfand
4445000000000026 returnable zero 6 Pfand
4445000000000027 Returnable vat unknown.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Pfand
4445000000000029 Returnable reverse normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 PfandRueckzahlung
444500000000002A Returnable reverse discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 PfandRueckzahlung
444500000000002B Returnable reverse special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 PfandRueckzahlung
444500000000002C Returnable reverse special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 PfandRueckzahlung
444500000000002D Returnable reverse not taxable 5 PfandRueckzahlung
444500000000002E Returnable reverse zero 6 PfandRueckzahlung
444500000000002F Returnable reverse vat unknown.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 PfandRueckzahlung
4445000000000031 Discount normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Rabatt
4445000000000032 Discount discounted-1 . 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Rabatt
4445000000000033 Discount special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Rabatt
4445000000000034 Discount special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Rabatt
4445000000000035 Discount not taxable 5 Rabatt
4445000000000036 Discount zero 6 Rabatt
4445000000000037 Discount unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Rabatt
4445000000000039 Extra charge normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Aufschlag
444500000000003A Extra charge discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Aufschlag
444500000000003B Extra charge special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Aufschlag
444500000000003C Extra charge special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Aufschlag
444500000000003D Extra charge not taxable 5 Aufschlag
444500000000003E Extra charge zero 6 Aufschlag
444500000000003F Extra charge unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Aufschlag
4445000000000041 Unreal grant normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 ZuschussUnecht
4445000000000042 Unreal grant discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 ZuschussUnecht
4445000000000043 Unreal grant special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 ZuschussUnecht
4445000000000044 Unreal grant special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 ZuschussUnecht
4445000000000045 Unreal grant not taxable 5 ZuschussUnecht
4445000000000046 Unreal grant zero 6 ZuschussUnecht
4445000000000047 Unreal grant unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 ZuschussUnecht
4445000000000049 Real grant not taxable 5 ZuschussEcht
4445000000000051 Tip to owner normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 TrinkgeldAG
4445000000000052 Tip to owner discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 TrinkgeldAG
4445000000000053 Tip to owner special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 TrinkgeldAG
4445000000000054 Tip to owner special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 TrinkgeldAG
4445000000000055 Tip to owner not taxable 5 TrinkgeldAG
4445000000000056 Tip to owner zero 6 TrinkgeldAG
4445000000000057 Tip to owner unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 TrinkgeldAG
4445000000000059 Tip to employee no vat 5 TrinkgeldAN
4445000000000060 Voucher sale not taxable 5 MehrzweckgutscheinKauf
4445000000000061 Coupon sales normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 EinzweckgutscheinKauf
4445000000000062 Coupon sales discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 EinzweckgutscheinKauf
4445000000000063 Coupon sales special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 EinzweckgutscheinKauf
4445000000000064 Coupon sales special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 EinzweckgutscheinKauf
4445000000000065 Coupon sales not taxable 5 EinzweckgutscheinKauf
4445000000000066 Coupon sales zero 6 EinzweckgutscheinKauf
4445000000000067 Coupon sales unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 EinzweckgutscheinKauf
4445000000000068 Voucher redeem not taxable 5 MehrzweckgutscheinEinloesung
4445000000000069 Coupon redeem normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 EinzweckgutscheinEinloesung
444500000000006A Coupon redeem discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 EinzweckgutscheinEinloesung
444500000000006B Coupon redeem special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 EinzweckgutscheinEinloesung
444500000000006C Coupon redeem special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 EinzweckgutscheinEinloesung
444500000000006D Coupon redeem not taxable 5 EinzweckgutscheinEinloesung
444500000000006E Coupon redeem zero 6 EinzweckgutscheinEinloesung
444500000000006F Coupon redeem unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 EinzweckgutscheinEinloesung
4445000000000071 Receivable creation normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Forderungsentstehung
4445000000000072 Receivable creation discounted-1 . 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Forderungsentstehung
4445000000000073 Receivable creation special-1. 1.1.2019: 10,70% (DE: Durchschnittssatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Forderungsentstehung
4445000000000074 Receivable creation special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Forderungsentstehung
4445000000000075 Receivable creation not taxable 5 Forderungsentstehung
4445000000000076 Receivable creation zero 6 Forderungsentstehung
4445000000000077 Receivable creation unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Forderungsentstehung
4445000000000079 Receivable reduction normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Forderungsaufloesung
444500000000007A Receivable reduction discounted-1 . 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Forderungsaufloesung
444500000000007B Receivable reduction special-1 . 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Forderungsaufloesung
444500000000007C Receivable reduction special-2 . 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Forderungsaufloesung
444500000000007D Receivable reduction not taxable 5 Forderungsaufloesung
444500000000007E Receivable reduction zero 6 Forderungsaufloesung
444500000000007F Receivable reduction unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Forderungsaufloesung
4445000000000081 Down payment creation normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Anzahlungseinstellung
4445000000000082 Down payment creation discounted-1. 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Anzahlungseinstellung
4445000000000083 Down payment creation special-1. 1.1.2019: 10,70% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Anzahlungseinstellung
4445000000000084 Down payment creation special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Anzahlungseinstellung
4445000000000085 Down payment creation not taxable 5 Anzahlungseinstellung
4445000000000086 Down payment creation zero 6 Anzahlungseinstellung
4445000000000087 Down payment creation unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Anzahlungseinstellung
4445000000000089 Down payment reduction normal. 1.1.2019: 19,00% (DE: Regelsteuersatz) 1 Anzahlungsaufloesung
444500000000008A Down payment reduction discounted-1 . 1.1.2019: 7% (DE: Ermäßigter Steuersatz) 2 Anzahlungsaufloesung
444500000000008B Down payment reduction special-1 . 1.1.2019: 10,70% (DE: Durchschnittssatz (§ 24 Abs. 1 Nr. 3 UStG) übrige Fälle) 3 Anzahlungsaufloesung
444500000000008C Down payment reduction special-2. 1.1.2019: 5,50% (DE: Durchschnittsatz (§ 24 Abs. 1 Nr. 1 UStG)) 4 Anzahlungsaufloesung
444500000000008D Down payment reduction not taxable 5 Anzahlungsaufloesung
444500000000008E Down payment reduction zero 6 Anzahlungsaufloesung
444500000000008F Down payment reduction unknown vat.

chargeItem.VATRate == 0.0 ? UST_SCHLUESSEL = 7 : UST_SCHLUESSEL = (chargeItem.VATRate * 100) + 1000
7 or > 1000 Anzahlungsaufloesung
4445000000000090 Cash transfer to empty till not taxable 5 Anfangsbestand
4445000000000091 Cash transfer from till to owner not taxable 5 Privatentnahme
4445000000000092 Cash transfer from owner to till not taxable 5 Privateinlage
4445000000000093 Cash transfer from/to till not taxable 5 Geldtransit
4445000000000094 Cash transfer from till to employee not taxable 5 Lohnzahlung
4445000000000095 Cash transfer to cash book not taxable 5 Einzahlung
4445000000000096 Cash transfer from cash book not taxable 5 Auszahlung
4445000000000097 Cash amount difference from/to till not taxable 5 DifferenzSollIst
44450000000000A1 Reverse charge 5 Umsatz
44450000000000A2 Not own sales 5 Umsatz

Payments ProcessingIndicator for Germany

Format

The format of the `processingIndicator` parameter on payments itemn level, should be as below.

Example for payments processingIndicator : 4919338167972134913

Calculation: After you identify the type of payment value (Eg: The value 4445000000000001 in hexadecimal format in the below table) you should convert it to its decimal equivalent(Eg: 4919338167972134913) and then include it in the request data.

A helpful online tool for your converting tests is [this](https://www.rapidtables.com/convert/number/hex-to-decimal.html).

Value Description ZAHLART_TYP (DSFinV-K)
4445000000000000 Unknown payment type for DE
This is handled like a cash payment in national currency.
Bar
4445000000000001 Cash payment in national currency Bar
4445000000000002 Cash payment in foreign currency Bar
4445000000000003 Crossed cheque Unbar
4445000000000004 Debit card payment ECKarte
4445000000000005 Credit card payment Kreditkarte
4445000000000006 Online payment ElZahlungsdienstleister
4445000000000007 Customer card payment Guthabenkarte
4445000000000008 SEPA transfer Unbar
4445000000000009 Other Bank transfer Unbar
444500000000000A Internal / material consumption Keine
444500000000000B Change in national currency Bar
444500000000000C Change in foreign curreny Bar
444500000000000D Voucher
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount gets converted to GV_TYP=MehrzweckgutscheinKauf. Positive amount gets converted to TYP_GV=MehrzweckgutscheinEinlösung. amount=-amount. In case of void-receipt everything is returned.
Keine
444500000000000E Receivable
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount gets converted to GV_TYP=Forderungsauflösung. Positive amount gets converted to GV_TYP=Forderungsentstehung. amount=-amount. In case of cancellation-receipt the +/- sign has to be returned.
Keine
444500000000000F Down payment
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount gets converted to GV_TYP=Anzahlungseinstellung. Positive amount gets converted to GV_TYP=Anzahlungsaufloesung. amount=-amount. In case of void-receipt everything is returned. Not valid for taxable down payments, where it is clearly defined what the service is for.
Keine
4445000000000010 Tip to employee
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount required, get converted to GV_TYP=TrinkgeldAN. amount=-amount. In case of void-receipt everything returned.
Keine
4445000000000011 (real) Grant
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Positive amount required, get converted to GV_TYP=ZuschussEcht. amount=-amount. In case of void-receipt everything is returned.
Keine
4445000000000012 Cash transfer to empty till
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount required, get converted to GV_TYP=Anfangsbestand. amount=-amount. In case of void-receipt everything is returned.
Keine
4445000000000013 Cash transfer from/to owner
not taxable
DSFinV-K transformation required. UST_Schluessel=5. Negative amount gets converted to GV_TYP=Privateinlage. Positive amount gets converted to GV_TYP=Privatentnahme. amount=-amount. In case of void-receipt everything is returned
Keine
4445000000000014 Cash transfer from/to till
not taxable
DSFinV-K transformation required. UST_Schluessel=5. GV_TYP=Geldtransit. amount=-amount. Cash transfer from till is positive amount, cash transfer to till is negative amount.
Keine
4445000000000015 Cash transfer to employee
not taxable
DSFinV-K transformation required. Positive amount required, get converted to UST_Schluessel=5.GV_TYP=Lohnzahlung. amount=-amount.
Keine
4445000000000016 Cash transfer from/to cash book
not taxable
DSFinV-K transformation required. Negative amount gets converted to GV_TYP=Einzahlung. Positive amount gets converted to GV_TYP=Auszahlung. amount=-amount. In case of void-receipt everything is returned
Keine
4445000000000017 Cash amount difference from/to till
not taxable
DSFinV-K transformation required. UST_Schluessel=5. GV_TYP=DifferenzSollIst. amount=-amount. Cash transfer from till is positive amount, cash transfer to till is negative amount.
Keine

Examples of Usage

fiscalisationData for Cloud REST API and Local Terminal API integrations

For Cloud REST API and P2P(LOCAL Terminal API) integrations, please add fiscalisationData JSON object to the request body. This aproach is valid for both standard and ISV integrations.

"fiscalisationData":{
   "lineItems":[
      {
         "amount":1000,
         "description":"Coffee Latte",
         "position":1,
         "productBarcode":"1234567890123",
         "productNumber":15709,
         "quantity":1,
         "vatAmount":240,
         "vatRate":2400,
         "processingIndicator":"5139205309155246083"
      },
      {
         "amount":500,
         "description":"Coffee Cappuccino",
         "position":2,
         "productBarcode":"1234567890200",
         "productNumber":15710,
         "quantity":2,
         "vatAmount":120,
         "vatRate":2400,
         "processingIndicator":"5139205309125846083"
      }
   ],
   "payments":[
      {
         "amount":2000,
         "dateTime":"2025-02-03T09:32:41.604Z",
         "description":"Payment via card",
         "position":1,
         "processingIndicator":"5139205309155246083"
      }
   ],
   "processingIndicator":"5139205309155246081",
   "customerVatNumber":"EL036098541",
   "customerName":"Professional Services LTD",
   "customerCountryCode":"GR",
   "customerStreet":"Amarousiou Chalandriou 18-20",
   "customerCity":"Athens",
   "customerZip":"15125",
   "receiptDateTime":"2025-02-03T09:32:41.604Z",
   "receiptUniqueReference":"fiscal-12345678"
}

fiscalisationData for Interapp(app2app) Integration

For Interapp(app2app) integration, you should encode fiscalisationData JSON object as base64 format and pass it as uri parameter

ewogICAibGluZUl0ZW1zIjpbCiAgICAgIHsKICAgICAgICAgImFtb3VudCI6MTAwMCwKICAgICAgICAgImRlc2NyaXB0aW9uIjoiQ29mZmVlIExhdHRlIiwKICAgICAgICAgInBvc2l0aW9uIjoxLAogICAgICAgICAicHJvZHVjdEJhcmNvZGUiOiIxMjM0NTY3ODkwMTIzIiwKICAgICAgICA
gInByb2R1Y3ROdW1iZXIiOjE1NzA5LAogICAgICAgICAicXVhbnRpdHkiOjEsCiAgICAgICAgICJ2YXRBbW91bnQiOjI0MCwKICAgICAgICAgInZhdFJhdGUiOjI0MDAsCiAgICAgICAgICJwcm9jZXNzaW5nSW5kaWNhdG9yIjoiNTEzOTIwNTMwOTE1NTI0NjA4MyIKICAgICAgfSwKICAgIC
AgewogICAgICAgICAiYW1vdW50Ijo1MDAsCiAgICAgICAgICJkZXNjcmlwdGlvbiI6IkNvZmZlZSBDYXBwdWNjaW5vIiwKICAgICAgICAgInBvc2l0aW9uIjoyLAogICAgICAgICAicHJvZHVjdEJhcmNvZGUiOiIxMjM0NTY3ODkwMjAwIiwKICAgICAgICAgInByb2R1Y3ROdW1iZXIiOjE1N
zEwLAogICAgICAgICAicXVhbnRpdHkiOjIsCiAgICAgICAgICJ2YXRBbW91bnQiOjEyMCwKICAgICAgICAgInZhdFJhdGUiOjI0MDAsCiAgICAgICAgICJwcm9jZXNzaW5nSW5kaWNhdG9yIjoiNTEzOTIwNTMwOTEyNTg0NjA4MyIKICAgICAgfQogICBdLAogICAicGF5bWVudHMiOlsKICAg
ICAgewogICAgICAgICAiYW1vdW50IjoyMDAwLAogICAgICAgICAiZGF0ZVRpbWUiOiIyMDI1LTAyLTAzVDA5OjMyOjQxLjYwNFoiLAogICAgICAgICAiZGVzY3JpcHRpb24iOiJQYXltZW50IHZpYSBjYXJkIiwKICAgICAgICAgInBvc2l0aW9uIjoxLAogICAgICAgICAicHJvY2Vzc2luZ0l
uZGljYXRvciI6IjUxMzkyMDUzMDkxNTUyNDYwODMiCiAgICAgIH0KICAgXSwKICAgInByb2Nlc3NpbmdJbmRpY2F0b3IiOiI1MTM5MjA1MzA5MTU1MjQ2MDgxIiwKICAgImN1c3RvbWVyVmF0TnVtYmVyIjoiRUwwMzYwOTg1NDEiLAogICAiY3VzdG9tZXJOYW1lIjoiUHJvZmVzc2lvbmFsIF
NlcnZpY2VzIExURCIsCiAgICJjdXN0b21lckNvdW50cnlDb2RlIjoiR1IiLAogICAiY3VzdG9tZXJTdHJlZXQiOiJBbWFyb3VzaW91IENoYWxhbmRyaW91IDE4LTIwIiwKICAgImN1c3RvbWVyQ2l0eSI6IkF0aGVucyIsCiAgICJjdXN0b21lclppcCI6IjE1MTI1IiwKICAgInJlY2VpcHREY
XRlVGltZSI6IjIwMjUtMDItMDNUMDk6MzI6NDEuNjA0WiIsCiAgICJyZWNlaXB0VW5pcXVlUmVmZXJlbmNlIjoiZmlzY2FsLTEyMzQ1Njc4Igp9

E-commerce

While the Fiscal API is not yet available for web payments, it will be launching soon.

Account Setup

To activate fiscalization for your integration, please contact your sales representative.

Get Support

If you would like to integrate with Viva, or if you have any queries about our products and solutions, please see our Contact & Support page to see how we can help!