Skip to main content

Fiscal Requirements

Features of EFR

The EFR serves as system interface for certified fiscal printers. It does NOT replace a fiscal printer, which is still needed to fulfill the requirements of Italian fiscal law.

EFR keeps secure journals, as it does for other fiscal countries.

Sales transactions have to be printed using the fiscal functions of the printer. For this to be successful, two elements have to be in place:

  1. A transaction which contains sales data, sent via REST web request to the EFR
  2. A formatting file, which defines formal representation of this data

VAT Handling

As in other countries transaction data is normalized upon registration (details see TaxG Tax Group Assignment). Tax rates are controlled via ESR.TaxA, Tax.Prc is matched against the printer configuration, which is loaded with rates valid at startup system date (and after each closure).

Current rates are:

PrcTaxGEpson FP IndexDescription
22%A01difetto
10%B02prodotti turistici
5%C03prestazioni sociali
4%D04prima necessità
0%ES00Esente
0%EE10Esclusa
0%NS11Non soggetta
0%NI12Non imponibile
0%RM13Regime del margine
0%AL14Operazione non IVA

In RT mode for 0% the appropriate tax group has to be used in Field TaxG to distinguish between the different groups, otherwise ES is used by default.

Payment Types

It is possible to define different payment types in the Pay element with Pay.PayG. If no Pay.PayG field is present, Pay.Dsc is used to check for valid payment type values. If Pay.Dsc is different from the possible types, cash is used.

Following payment types are possible:

General

Following efsta PayG-values will be mapped to the corresponding printer payment type:

PayGEpson_FPCustom
cash, change, refund, atm, foreign, resto0-0001
check, cheque, assegno1-0002
credit, open2-0007
creditcard, ec, carta2-0103
ticket4-0105-01
rounding6-0053
voucher6-0153

Lottery Handling

Deferred Lottery

With the new receipt lottery, there is an option to send information relating to the amount on the receipt to a particular lottery Server, which will convert the amount into a virtual lottery ticket. Periodically, this virtual ticket will be sent for participation to the lottery and the result will be available on the lottery web portal.

  • During transmission of the lottery receipt to the tax authority, it is required to define the company name of the location where the printer RT has been installed. This is done by setting the corresponding header line number (Ragione Sociale Esercente). Please ensure this is taken care of by your fiscal partner on printer update or installation. By default the first header line is used as company name.
  • The request to participate in the lottery game is done from the customers, providing a lottery code released from the lottery web portal.
  • The printer will accumulate the request to participate in the lottery in a special memory and when the number of requests is equal to 100, as well as when a Z-report is created, the accumulated requests are sent to the lottery server.
  • In case of refund or void of a receipt issued on a different printer, the lottery code has to be sent again.
  • Checkdigit generation can be set in EFR profile.
  • To participate in the lottery, the field IT_CodiceLotteria needs to be included in the transaction

To add the lottery code of a customer to a request, the field ESR.Ctm.IT_CodiceLotteria is used:

<Tra>
<ESR>
<Ctm IT_CodiceLotteria="ABCDEFGH" />

Instant Lottery

With the new instant lottery active the printer will automatically print a lottery data matrix on the receipt if the payment was > 1€ and exclusively electronic. With EFR version >= 2.3.1.1 the response includes the field IT_CodiceLotteria if the receipt participated in the lottery:

<Fis D="10-12-18 15:52" FN="0039 0002 10122018 99MEX030623" DN="0002" ZI="39" ID="99MEX030623" IT_CodiceLotteria="AAAAAAAA" />

For this to work, the printer needs to download lottery codes from Agenzia delle Entrate. The status of the connection and downloaded codes can be checked using the corresponding printer manual.

Instant Lottery refunds/voids

note

Currently only on Epson_FP, Custom unknown

The printer requires the fixed lottery code sequence AAAAAAAA on refunds/voids, if they are issued on a different printer than the original sales. EFR automatically transmits this code to the printer on all refunds and voids if the printer serial in the field RFN is different. This behavior can be disabled with the profile attribute IT_disableLotteryRefundCode. If you are using this attribute the POS needs to send the code in these cases like this:

<Tra>
<ESR>
<Ctm IT_CodiceLotteria="AAAAAAAA" />

The field IT_CodiceLotteria="AAAAAAAA" is ignored on refunds with the same printer serial as the original sale, so it can be sent on all instant lottery refunds.

Printer State

State varies between different printer models, fields ModuleName, ErrorCode, Warning, ID and SimpleState are unified across different printers and countries.

ElementDescription
URL/peri/print/state
MethodGET
QueryRN

Epson FP State

{
"ModuleName": "Epson_FP",
"ID": "99MEY022311",
"Info": "",
"Drawer": "",
"PaymentRounding": 0,
"CPU": "11.02",
"MF_STAT": "0",
"MF_REL": "04.0",
"MF_STATO": "00110",
"LastStateUpdate": 1643814294263,
"ZI": 21,
"LastZIUpdate": 1643814275251,
"RT_TYPE": "M",
"RT_MAIN": "02",
"RT_SUB": "08",
"RT_DAY": "1",
"RT_NWP": "0",
"RT_SEND": "0000",
"RT_OLD": "0000",
"RT_REJ": "0059",
"RT_EXPCD": "051021",
"RT_EXPCA": "110138",
"RT_BUILD": "0255",
"RT_DGFE": "2",
"RT_TRAIN": "1",
"LT_SEND": 0,
"LT_OLD": 0,
"LT_REJ": 0,
"LT_ACC": 0,
"SimpleState": {
"DayOpen": true,
"ZRequired": false,
"DrawerOpen": false,
"PaperNearEnd": false,
"PaperEnd": false,
"CoverOpen": false,
"MemAlmostFull": false,
"MemFull": false,
"CertExpires": "2021-10-05T00:00:00"
}
}

or with request header accept=text/xml

<PrintState>
<ModuleName>Epson_FP</ModuleName>
<ID>99MEY022311</ID>
<Info/>
<Drawer/>
<PaymentRounding>0</PaymentRounding>
<CPU>11.02</CPU>
<MF_STAT>0</MF_STAT>
<MF_REL>04.0</MF_REL>
<MF_STATO>00110</MF_STATO>
<LastStateUpdate>1643814330345</LastStateUpdate>
<ZI>21</ZI>
<LastZIUpdate>1643814306309</LastZIUpdate>
<RT_TYPE>M</RT_TYPE>
<RT_MAIN>02</RT_MAIN>
<RT_SUB>08</RT_SUB>
<RT_DAY>1</RT_DAY>
<RT_NWP>0</RT_NWP>
<RT_SEND>0000</RT_SEND>
<RT_OLD>0000</RT_OLD>
<RT_REJ>0059</RT_REJ>
<RT_EXPCD>051021</RT_EXPCD>
<RT_EXPCA>110138</RT_EXPCA>
<RT_BUILD>0255</RT_BUILD>
<RT_DGFE>2</RT_DGFE>
<RT_TRAIN>1</RT_TRAIN>
<LT_SEND>0</LT_SEND>
<LT_OLD>0</LT_OLD>
<LT_REJ>0</LT_REJ>
<LT_ACC>0</LT_ACC>
<SimpleState>
<DrawerOpen>false</DrawerOpen>
<PaperNearEnd>false</PaperNearEnd>
<PaperEnd>false</PaperEnd>
<CoverOpen>false</CoverOpen>
<MemAlmostFull>false</MemAlmostFull>
<MemFull>false</MemFull>
<CertExpires>2021-10-05T00:00:00</CertExpires>
</SimpleState>
</PrintState>
  • ModuleName Name of the printer module
  • ID printer ID
  • ZI Z-report index
  • CPU Fiscal firmware version
  • MF_STAT Fiscal memory status
    • 0 OK
    • 1 Error
    • 2 Full
    • 3 Overflow
  • MF_REL Fiscal memory firmware version
  • MF_STATO 5 bytes
    • First byte: Printer State
      • 0 OK
      • 2 paper nearly empty
      • 3 No paper or cover open
    • Second byte: Electronic Journal
      • 0 OK
      • 1 nearly full
      • 2 Unformatted
      • 3 Previous
      • 4 From another fiscal printer
      • 5 Full
    • Third byte: Cash drawer state
      • 0 open
      • 1 closed
    • Fourth byte: Receipt / Credit Note / Invoice
      • 0 Fiscal receipt, credit note or direct invoice open
      • 1 Fiscal/Non-fiscal Closed
      • 2 Non-fiscal receipt open
      • 3 Payment in progress (Fiscal receipt or direct invoice open)
      • 4 Fiscal receipt – Error whilst transmitting ESC/POS commands (at receipt ending phase)
      • 5 Negative fiscal receipt, credit note or direct invoice
      • 6 Non-fiscal receipt – Error whilst transmitting ESC/POS commands
      • 7 JavaPOS-UPOS mode – Awaiting closure command (Fiscal receipt, credit note or direct invoice)
      • 8 Free or direct invoice open
      • 9 Credit note opened via the fiscal protocol or web service
      • A Box office ticket open
      • B Box office ticket closed
    • Fifth byte: Operative
      • 0 Stato Registrazione (MONITOR)
      • 1 X State
      • 2 Z State
      • 3 S State
      • 4 Box office
      • 5 Keyboard opened credit note
  • RT_TYPE RT Type
    • I Internal (fixed premises)
    • E External (market, street, door-to-door and seasonal traders)
    • P Palmtop
    • M MF type non telematics fiscal printer converted to RT
    • S RT server
  • RT_MAIN Main status
    • 1 Not in service
    • 2 In service
  • RT_SUB Sub Status
    • 5 Da Censire
    • 6 Censito
    • 7 Attivato
    • 8 Programmato RT
  • RT_DAY Daily Open
    • 0 Daily Open FALSE
    • 1 Daily Open TRUE
  • RT_NWP Non working period
    • 0 ready for transactions
    • 1 Z report must be performed
  • RT_SEND Number of files to send
  • RT_OLD Number of files considered old
  • RT_REJ Number of rejected files
  • RT_BUILD Firmware build number
  • RT_DGFE Type of DGFE file system
    • 0 NO RT
    • 1 RT_TypeA
    • 2 RT_typeB
  • RT_TRAIN Training mode (1... enabled)
  • RT_EXPCD Date of expired Device Certificate
  • RT_EXPCA Date of expired Communication Authority certificate
  • LT_SEND Number of Lottery receipt in the folder TO SEND
  • LT_OLD Number of daily files waiting to be sent to the tax authority older than a configurable number of days
  • LT_REJ Number of Lottery Receipt rejected from TA
  • LT_ACC Number of Lottery Receipt accepted from TA
  • SimpleState Unified printer state across different printers and countries
    • DrawerOpen Boolean
    • PaperNearEnd Boolean
    • PaperEnd Boolean
    • CoverOpen Boolean
    • MemAlmostFull Boolean
    • MemFull Boolean
    • CertExpires Datetime in format 2021-10-05T00:00:00

Epson FP Lottery State

ElementDescription
URL/peri/print/state/lottery
MethodGET
QueryZI Z-index (required)
D Date DDMMYY (required)
DN Receipt number
RN

If receipt number is omitted, the request returns all lottery files of the current day/ZI that received an error when sending to authority.

Response:

[
{
"Code": "01",
"ErrorCode": "FFFFF",
"AnswerId": "",
"DN": "0216-0027",
"ErrorCode": "To Send"
}
]

Custom

{
"ModuleName": "Custom",
"ID": "STITE350043",
"ZI": 11,
"LastZ": "2024-03-26T09:34:44",
"Info": "",
"Drawer": "",
"Warning": [],
"LastStateUpdate": 1711719455463,
"SimpleState": {
"DayOpen": true,
"ZRequired": false,
"NextZRequired": null,
"DrawerOpen": false,
"PaperNearEnd": false,
"PaperEnd": false,
"CoverOpen": false,
"MemAlmostFull": false,
"MemFull": false,
"CertExpires": "2032-03-18TT00:00:00"
},
"RT_STATE": "1",
"RT_KEY": "1",
"RT_CENSUS": "1",
"RT_ACTIVATION": "1",
"RT_MAIN": "1",
"RT_MAIN_DATE": "000000",
"RT_SIMULATION": "0",
"RT_DEMO": "0",
"RT_VAT_SPLIT": "0",
"RT_LOTT": "2",
"RT_LOTT_CERT": "1",
"RT_EXPCD": "180332",
"RT_OUTOFSERVICE": "0",
"RT_LOTT_NEXT": "1",
"RT_LOTT_TIME_SYNC": "0",
"RT_LOTT_DATE": "1",
"RT_UPG_PENDING": "0",
"RT_Z_SERVICE": "1",
"RT_SSN": "0",
"RT_LOTT_INST_NEXT": "1",
"RT_LOTT_INST_DATE": "000000",
"EJpresent": true,
"DateTimeRequired": false,
"FiscalMemoryOk": true,
"InitRequired": false,
"InitJumper": false,
"Serialization": true,
"Printing": false,
"PrinterOk": true,
"Training": false,
"AutocutterOk": true,
"PaymentRounding": 0
}

or with request header accept=text/xml

<PrintState>
<ModuleName>Custom</ModuleName>
<ID>STITE350043</ID>
<ZI>11</ZI>
<LastZ>2024-03-26T09:34:44</LastZ>
<Info/>
<Drawer/>
<Warning/>
<LastStateUpdate>1711719513726</LastStateUpdate>
<SimpleState>
<DayOpen>true</DayOpen>
<ZRequired>false</ZRequired>
<NextZRequired/>
<DrawerOpen>false</DrawerOpen>
<PaperNearEnd>false</PaperNearEnd>
<PaperEnd>false</PaperEnd>
<CoverOpen>false</CoverOpen>
<MemAlmostFull>false</MemAlmostFull>
<MemFull>false</MemFull>
<CertExpires>2032-03-18TT00:00:00</CertExpires>
</SimpleState>
<RT_STATE>1</RT_STATE>
<RT_KEY>1</RT_KEY>
<RT_CENSUS>1</RT_CENSUS>
<RT_ACTIVATION>1</RT_ACTIVATION>
<RT_MAIN>1</RT_MAIN>
<RT_MAIN_DATE>000000</RT_MAIN_DATE>
<RT_SIMULATION>0</RT_SIMULATION>
<RT_DEMO>0</RT_DEMO>
<RT_VAT_SPLIT>0</RT_VAT_SPLIT>
<RT_LOTT>2</RT_LOTT>
<RT_LOTT_CERT>1</RT_LOTT_CERT>
<RT_EXPCD>180332</RT_EXPCD>
<RT_OUTOFSERVICE>0</RT_OUTOFSERVICE>
<RT_LOTT_NEXT>1</RT_LOTT_NEXT>
<RT_LOTT_TIME_SYNC>0</RT_LOTT_TIME_SYNC>
<RT_LOTT_DATE>1</RT_LOTT_DATE>
<RT_UPG_PENDING>0</RT_UPG_PENDING>
<RT_Z_SERVICE>1</RT_Z_SERVICE>
<RT_SSN>0</RT_SSN>
<RT_LOTT_INST_NEXT>1</RT_LOTT_INST_NEXT>
<RT_LOTT_INST_DATE>000000</RT_LOTT_INST_DATE>
<EJpresent>true</EJpresent>
<DateTimeRequired>false</DateTimeRequired>
<FiscalMemoryOk>true</FiscalMemoryOk>
<InitRequired>false</InitRequired>
<InitJumper>false</InitJumper>
<Serialization>true</Serialization>
<Printing>false</Printing>
<PrinterOk>true</PrinterOk>
<Training>false</Training>
<AutocutterOk>true</AutocutterOk>
<PaymentRounding>0</PaymentRounding>
</PrintState>
  • ModuleName Name of the printer module
  • ID Printer ID
  • ZI Z-report index
  • LastZ Date of last Z report
  • RT_STATE 0/1
    • 0 Native 1983 fiscal law
    • 1 RT
  • RT_KEY Key generated 0/1
  • RT_CENSUS Census performed 0/1
  • RT_ACTIVATION Activated 0/1
  • RT_MAIN Main status 0/1
    • 0 Not in service
    • 1 In service
  • RT_MAIN_DATE In service date
  • RT_SIMULATION Simulation active 0/1
  • RT_DEMO Demo active 0/1
  • RT_VAT_SPLIT VAT split activated 0/1
  • RT_LOTT Lottery status
    • 0 Disabled
    • 1 Deferred lottery enabled
    • 2 Deferred lottery & instant lottery enabled
  • RT_LOTT_CERT Lottery certificate present 0/1
  • RT_EXPCD Certificate expiration date
  • RT_OUTOFSERVICE Out of service 0/1
  • RT_LOTT_NEXT Active lottery service in the next document 0/1
  • RT_LOTT_TIME_SYNC Replay time for lottery transmissions
  • RT_LOTT_DATE Deferred lottery activation date
  • RT_UPG_PENDING Availability of new firmware upgrade 0/1
  • RT_Z_SERVICE Z http service availability 0/1
  • RT_SSN National health service 0/1
  • RT_LOTT_INST_NEXT Active instant lottery service in the next document 0/1
  • RT_LOTT_INST_DATE Instant lottery activation date
  • EJpresent Boolean
  • DateTimeRequired Boolean
  • FiscalMemoryOk Boolean
  • InitRequired Boolean
  • InitJumper Boolean
  • Serialization Boolean
  • Printing Boolean
  • PrinterOk Boolean
  • Training Boolean
  • AutocutterOk Boolean
  • PaymentRounding Automatic printer rounding active 0/1
  • SimpleState Unified printer state across different printers and countries
    • DayOpen Boolean
    • ZRequired Boolean
    • DrawerOpen Boolean
    • PaperNearEnd Boolean
    • PaperEnd Boolean
    • CoverOpen Boolean
    • MemAlmostFull Boolean
    • MemFull Boolean
    • CertExpires Datetime in format 2021-10-05T00:00:00

Other Printing Functions

Codice Fiscale

note

Currently not supported on Custom printers

Codice Fiscale can be transmitted to the printer by sending the code in the field ESR.Ctm.IT_CodiceFiscale:

<Tra>
<ESR>
<Ctm IT_CodiceFiscale="..........." />

Reprint Fiscal Transaction

note

Currently not supported on Custom printers

ElementDescription
URL/peri/print/reprint
MethodPOST
Bodyempty
QueryRN

This function invokes the reprint of the last fiscal receipt on the fiscal printer. No data can be provided with this call, which is furthermore not journalized.

Direct Printing

Other non-fiscal prints can be sent directly to the EFR print function, no journaling or logging is performed:

ElementDescription
URL/peri/print
MethodPOST
Bodyplain text (plain/text)
QueryRN, lay

If JSON or XML data is sent in the request body, you can request format transformation by specifying a pug layout name:
/peri/print?lay=report2

Therefore you have to set the content type to application/json or application/xml.

In a multi-client configuration you may have to specify ?RN=[clientId] to address the correct printer.

Line Display

During position and payment entry the cash register application should send referring description and price/amount information immediately to the customer display:

ElementDescription
URL/peri/display
MethodPOST
Bodytext
QueryRN

The first two text lines are sent to the standard customer display, capacity is 20 characters per line. Like with all other requests UTF-8 encoding is expected by default.

Example Body:

Arrotondato 30,00 €
Totale 30,01 €

Alternatively the following call may be used: /peri/display?text=This+is+test+line+1+Line+2

Cash Drawer

By default the cash drawer should be managed by the cash register application. Drawer pin, pulse on time and pulse off time can be set with the attribute “Drawer_Pin=PIN:ON:OFF”. Default value is “2:15:15”.

Open Drawer and Wait

ElementDescription
URL/peri/drawer/wait
MethodPOST
QueryRN

The cash drawer is opened immediately, after closing the response is sent. As the drawer might be left open for a longer time, an intermediate HTTP status 102 Processing is sent after 30 seconds. Usually the application shows a message CASSETTO APERTO and locks further operator actions while the drawer is open.

Open Drawer and Poll

Opens and responds immediately.

ElementDescription
URL/peri/drawer
MethodPOST
QueryRN

Afterwards you can poll the drawer state using request:

ElementDescription
URL/peri/drawer
MethodGET
QueryRN

(e.g. once per second), which will signal

{"PeriDrawer":"[ModuleName]:open"}

or when request header accept=text/xml is set

<DrawerState>
<PeriDrawer>[ModuleName]</PeriDrawer>
</DrawerState>

until final closing

{"PeriDrawer":"[ModuleName]"}

Manual Drawer Open

Manual drawer open (with key) and close events are logged in the transaction journal.

Drawer Parameters

Some cash drawers do not work with the standard configuration. Therefore you can use the profile attribute Drawer_Pin. e.g.: Drawer_Pin=2:15:15
First parameter: DRW PIN
Second parameter: PULSE ON Time
Third parameter: PULSE OFF Time

Specifics

Return / Void Transactions

A „DOCUMENTO COMMERCIALE emesso per RESO MERCE“ (Return) or „DOCUMENTO COMMERCIALE emesso per ANNULLAMENTO“ (Void) is printed. Important for a return/void is the FN (Fiscal Number) in the response of the original sale. So first make a normal transaction, and use the value of Fis.FN as ESR.RFN (Reference Fiscal Number). If no FN is available, "POS", "VR", or "ND" instead of the printer serial can be used along with ESR.RD and ESR.RTN. A void transaction is issued if ESR.Void="1" is set, otherwise a return transaction is issued.

The following error codes may occur during return/void transactions:

Error
#input parameters out of range
(Explanation: wrong format of RFN or incorrect date)
#receipt already refund
#receipt already void
#this is a refund receipt
#this is a void receipt

Void special option

If voiding the transaction on the same device as the original sale, it is possible to omit PosA, PayA and TaxA:

<Tra>
<ESR TL="001" TT="1" T="-11.44" RFN="0269 0013 18082020 99MEX030623" Void="1"/>
</Tra>

Rounding

Rounding can be done by either POS, EFR or Printer on receipts with cash payment only. Amounts on receipt total and items must not be rounded, only payments can be rounded.

POS Rounding

The rounded amount must be printed in the receipt footer, e.g.:

di cui Arrot. DL N.50/2017          0.02 €

In case of rounding down an additional payment with payment group "6-00 Sconto a pagare" needs to be registered to prevent underpayment errors on the printer.

POS Rounding Down
  • Receipt total: 2.72 €
  • Cash Payment: 2.70 €
<Tra>
<ESR T="2.72">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.72" />
</PosA>
<PayA>
<Pay Dsc="Sconto a pagare" PayG="6-00" Amt="0.02"/>
<Pay Dsc="Cash" PayG="0" Amt="3.00"/>
<Pay Dsc="Resto" PayG="0" Amt="-0.30"/>
</PayA>
<Foot>
<Txt>di cui Arrot. DL N.50/2017 0.02 €</Txt>
</Foot>
</ESR>
</Tra>
POS Rounding Up
  • Receipt total: 2.73 €
  • Cash Payment: 2.75 €
<Tra>
<ESR T="2.73">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.73" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="3.00"/>
<Pay Dsc="Resto" PayG="0" Amt="-0.25"/>
</PayA>
<Foot>
<Txt>di cui Arrot. DL N.50/2017 0.02 €</Txt>
</Foot>
</ESR>
</Tra>

EFR Rounding

Automatic EFR rounding can be enabled with attribute Fiscal_Rounding. If enabled EFR automatically inserts additional rounding payments and the corresponding footer text.

EFR Rounding Down
  • Receipt total: 2.72 €
  • Cash Payment: 2.70 €
<Tra>
<ESR T="2.72">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.72" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="3.00"/>
<Pay Dsc="Resto" PayG="0" Amt="-0.30"/>
</PayA>
</ESR>
</Tra>

Missing 0.02 € payment with payment group "Sconto a pagare" and footer line di cui Arrot. DL N.50/2017 0.02 € is inserted by EFR.

EFR Rounding Up
  • Receipt total: 2.73 €
  • Cash Payment: 2.75 €
<Tra>
<ESR T="2.73">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.73" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="3.00"/>
<Pay Dsc="Resto" PayG="0" Amt="-0.25"/>
</PayA>
</ESR>
</Tra>

Footer line di cui Arrot. DL N.50/2017 0.02 € is inserted by EFR.

EFR No Rounding
  • Receipt total: 2.73 €
  • Cash Payment: 2.73 €
<Tra>
<ESR T="2.73">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.73" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="3.00"/>
<Pay Dsc="Resto" PayG="0" Amt="-0.27"/>
</PayA>
</ESR>
</Tra>

EFR will not apply rounding because the payment was exactly 2.73 €.

Printer Automatic Rounding

Epson Rounding Information

Setting automatic rounding on the printer is not recommended due to problems related to refunds. Automatic Rounding behavior of the printer can be set to

  • 0 - Rounding disabled (printer default)
  • 1 - Full Rounding
  • 2 - Only Rounding down
  • 3 - Only Rounding up Check with your tax counselor which option you have to choose. Keep in mind only cash payments have to be rounded! Only round in the Pay element. Split payments or payments with e.g: credit cards have to be accurate.
Printer Rounding Down
Rounded Payment
  • Receipt total: 2.72 €
  • Cash Payment: 2.70 €
<Tra>
<ESR T="2.72">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.72" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="2.70"/>
</PayA>
</ESR>
</Tra>

Printout:

TOTALE COMPLESSIVO            2.72
di cui IVA 0.49
PAGAMENTO CONTANTE 2.70
SCONTO A PAGARE 0.02
IMPORTO PAGATO 2.70
...
Arro. DL N.50/2017 -0.02
note

Printout will look the same if automatic rounding is enabled and the payment is sent exact, e.g.: 2.72

warning

Epson printer will decline the transaction if automatic rounding is disabled.

Printer Rounding Up
  • Receipt total: 2.78 €
  • Cash Payment: 2.80 €
<Tra>
<ESR T="2.78">
<PosA>
<Pos PN="1" Dsc="Snack" TaxG="A" Amt="2.78" />
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="2.80"/>
</PayA>
</ESR>
</Tra>

Printout:

TOTALE COMPLESSIVO            2.78
di cui IVA 0.50
PAGAMENTO CONTANTE 2.80
IMPORTO PAGATO 2.80
...
Arro. DL N.50/2017 0.02
note

Printout will look the same if automatic rounding is enabled and the payment is sent exact, e.g.: 2.78

Free of Charge

note

Currently not supported on Custom printers

Free of Charge lines are negative Pos with PTY="FoC", RPN=[PN of item] and TaxG 0%.

<Tra>
<ESR TL="001" TT="1" T="2000.00">
<PosA>
<Pos PN="1" Dsc="Item 1" TaxG="A" Amt="2500.00"/>
<Pos PTY="FoC" RPN="1" PN="2" Dsc="Free of Charge" TaxG="ES" Amt="-500.00"/>
</PosA>
...
</ESR>
</Tra>

Sale of Services

Service items are Pos-elements with PTY="Svc". see business case Sale of Services

Lottery Code

note

This section is about the "deferred" lottery, not the instant lottery

To add a customer's lottery code to the receipt, specify Ctm.IT_CodiceLotteria:

<Tra>
<ESR TL="001" TT="1">
<Ctm IT_CodiceLotteria="ABCDEFGH" />
<PosA>
<Pos PN="1" Dsc="Menu1" Qty="2" Pri="25.00" TaxG="A" Amt="50.00"/>
</PosA>
<PayA>
<Pay Dsc="Cash" PayG="0" Amt="50.00"/>
</PayA>
</ESR>
</Tra>

Invoice

note

Currently not supported on Custom printers

To print a fiscal invoice tag the transaction with Document Type ("Invoice") and – if available – Document Number (range 1-99999): On fiscal invoices, quantity and price are printed for every position.

see business case Invoice

Daily Closure / Chiusura / Z-report

The fiscal printer's closure function ("CHIUSURA FISCALE") is invoked by sending a non-fiscal signed transaction "Z Report".

see business case Z-Report / End of Day

Response for Italy

ElementDescription
TDaily Total
CAmtDaily Refund Amount
(compatibility with MF)
RAmtDaily Refund Amount
VAmtDaily Void Amount

ZTax elements are given per TaxI, the index in the printer's tax accumulators. ZTax elements are omitted if Amt is 0.