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:
- A transaction which contains sales data, sent via REST web request to the EFR
- 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:
| Prc | TaxG | Epson FP Index | Description |
|---|---|---|---|
| 22% | A | 01 | difetto |
| 10% | B | 02 | prodotti turistici |
| 5% | C | 03 | prestazioni sociali |
| 4% | D | 04 | prima necessità |
| 0% | ES | 00 | Esente |
| 0% | EE | 10 | Esclusa |
| 0% | NS | 11 | Non soggetta |
| 0% | NI | 12 | Non imponibile |
| 0% | RM | 13 | Regime del margine |
| 0% | AL | 14 | Operazione 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 Groups
It is possible to define different payment groups in the Pay element with Pay.PayG.
If no Pay.PayG field is present, Pay.Dsc is used to check for valid payment group values.
If Pay.Dsc is different from the possible types, cash is used.
Following payment groups are possible:
General
Following efsta PayG-values will be mapped to the corresponding printer payment type:
| PayG | Epson_FP | Custom |
|---|---|---|
cash, change, refund, atm, foreign, resto | 0-00 | 01 |
check, cheque, assegno | 1-00 | 02 |
credit, open | 2-00 | 07 |
creditcard, ec, carta | 2-01 | 03 |
ticket | 4-01 | 05-01 |
rounding | 6-00 | 53 |
voucher | 6-01 | 53 |
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_CodiceLotterianeeds 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
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.
| Element | Description |
|---|---|
| URL | /peri/print/state |
| Method | GET |
| Query | RN |
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>
ModuleNameName of the printer moduleIDprinter IDZIZ-report indexCPUFiscal firmware versionMF_STATFiscal memory status0OK1Error2Full3Overflow
MF_RELFiscal memory firmware versionMF_STATO5 bytes- First byte: Printer State
0OK2paper nearly empty3No paper or cover open
- Second byte: Electronic Journal
0OK1nearly full2Unformatted3Previous4From another fiscal printer5Full
- Third byte: Cash drawer state
0open1closed
- Fourth byte: Receipt / Credit Note / Invoice
0Fiscal receipt, credit note or direct invoice open1Fiscal/Non-fiscal Closed2Non-fiscal receipt open3Payment in progress (Fiscal receipt or direct invoice open)4Fiscal receipt – Error whilst transmitting ESC/POS commands (at receipt ending phase)5Negative fiscal receipt, credit note or direct invoice6Non-fiscal receipt – Error whilst transmitting ESC/POS commands7JavaPOS-UPOS mode – Awaiting closure command (Fiscal receipt, credit note or direct invoice)8Free or direct invoice open9Credit note opened via the fiscal protocol or web serviceABox office ticket openBBox office ticket closed
- Fifth byte: Operative
0Stato Registrazione (MONITOR)1X State2Z State3S State4Box office5Keyboard opened credit note
- First byte: Printer State
RT_TYPERT TypeIInternal (fixed premises)EExternal (market, street, door-to-door and seasonal traders)PPalmtopMMF type non telematics fiscal printer converted to RTSRT server
RT_MAINMain status1Not in service2In service
RT_SUBSub Status5Da Censire6Censito7Attivato8Programmato RT
RT_DAYDaily Open0Daily Open FALSE1Daily Open TRUE
RT_NWPNon working period0ready for transactions1Z report must be performed
RT_SENDNumber of files to sendRT_OLDNumber of files considered oldRT_REJNumber of rejected filesRT_BUILDFirmware build numberRT_DGFEType of DGFE file system0NO RT1RT_TypeA2RT_typeB
RT_TRAINTraining mode (1... enabled)RT_EXPCDDate of expired Device CertificateRT_EXPCADate of expired Communication Authority certificateLT_SENDNumber of Lottery receipt in the folder TO SENDLT_OLDNumber of daily files waiting to be sent to the tax authority older than a configurable number of daysLT_REJNumber of Lottery Receipt rejected from TALT_ACCNumber of Lottery Receipt accepted from TASimpleStateUnified printer state across different printers and countriesDrawerOpenBooleanPaperNearEndBooleanPaperEndBooleanCoverOpenBooleanMemAlmostFullBooleanMemFullBooleanCertExpiresDatetime in format2021-10-05T00:00:00
Epson FP Lottery State
| Element | Description |
|---|---|
| URL | /peri/print/state/lottery |
| Method | GET |
| Query | ZI 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>
ModuleNameName of the printer moduleIDPrinter IDZIZ-report indexLastZDate of last Z reportRT_STATE0/10Native 1983 fiscal law1RT
RT_KEYKey generated 0/1RT_CENSUSCensus performed 0/1RT_ACTIVATIONActivated 0/1RT_MAINMain status 0/10Not in service1In service
RT_MAIN_DATEIn service dateRT_SIMULATIONSimulation active 0/1RT_DEMODemo active 0/1RT_VAT_SPLITVAT split activated 0/1RT_LOTTLottery status0Disabled1Deferred lottery enabled2Deferred lottery & instant lottery enabled
RT_LOTT_CERTLottery certificate present 0/1RT_EXPCDCertificate expiration dateRT_OUTOFSERVICEOut of service 0/1RT_LOTT_NEXTActive lottery service in the next document 0/1RT_LOTT_TIME_SYNCReplay time for lottery transmissionsRT_LOTT_DATEDeferred lottery activation dateRT_UPG_PENDINGAvailability of new firmware upgrade 0/1RT_Z_SERVICEZ http service availability 0/1RT_SSNNational health service 0/1RT_LOTT_INST_NEXTActive instant lottery service in the next document 0/1RT_LOTT_INST_DATEInstant lottery activation dateEJpresentBooleanDateTimeRequiredBooleanFiscalMemoryOkBooleanInitRequiredBooleanInitJumperBooleanSerializationBooleanPrintingBooleanPrinterOkBooleanTrainingBooleanAutocutterOkBooleanPaymentRoundingAutomatic printer rounding active 0/1SimpleStateUnified printer state across different printers and countriesDayOpenBooleanZRequiredBooleanDrawerOpenBooleanPaperNearEndBooleanPaperEndBooleanCoverOpenBooleanMemAlmostFullBooleanMemFullBooleanCertExpiresDatetime in format2021-10-05T00:00:00
Other Printing Functions
Codice Fiscale
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
Currently not supported on Custom printers
| Element | Description |
|---|---|
| URL | /peri/print/reprint |
| Method | POST |
| Body | empty |
| Query | RN |
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:
| Element | Description |
|---|---|
| URL | /peri/print |
| Method | POST |
| Body | plain text (plain/text) |
| Query | RN, 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:
| Element | Description |
|---|---|
| URL | /peri/display |
| Method | POST |
| Body | text |
| Query | RN |
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
| Element | Description |
|---|---|
| URL | /peri/drawer/wait |
| Method | POST |
| Query | RN |
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.
| Element | Description |
|---|---|
| URL | /peri/drawer |
| Method | POST |
| Query | RN |
Afterwards you can poll the drawer state using request:
| Element | Description |
|---|---|
| URL | /peri/drawer |
| Method | GET |
| Query | RN |
(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
Printout will look the same if automatic rounding is enabled and the payment is sent exact, e.g.: 2.72
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
Printout will look the same if automatic rounding is enabled and the payment is sent exact, e.g.: 2.78
Free of Charge
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
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
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
| Element | Description |
|---|---|
| T | Daily Total |
| CAmt | Daily Refund Amount (compatibility with MF) |
| RAmt | Daily Refund Amount |
| VAmt | Daily Void Amount |
ZTax elements are given per TaxI, the index in the printer's tax accumulators. ZTax elements are omitted if Amt is 0.