Skip to main content

๐Ÿ‡ฎ๐Ÿ‡น Italy

This document describes all necessary configuration for a compliant setup in Italy.

Local mode support

Local mode is currently not supported. Activating local mode is done at your discretion and risk. We strongly recommend conducting thorough testing of local mode before going live to ensure it aligns with your expectations.

If you require support for local mode in compliance countries, please submit a JIRA development ticket, namely a request for change.

Attestation required before go-live in Italy

An attestation by a person (e.g. Auditing firm) duly registered in the Register of Auditors kept by the Ministry of Economy and Finance is required before go live in Italy. We recommend Deloitte for this (fees apply). The attestation process usually takes 3 months.

For more information regarding the attestation please check the following attachments:

Introductionโ€‹

Here are some concepts you need to familiarize yourself with before we go deeper into Italy's fiscalization:

  • Server RT: Server RT is a hardware device that registers all transactions conducted and reports it to local fiscal authorities. Therefore, all in store transactions are tracked by what we call Server RT, and accordingly each station is synced to that server. More about server RT can be found below.
  • Sistema Di Interscambio (SDI): Invoices are issued by the e-invoicing portal of Italy called SDI. This applies to all orders whether performed in-store or online.
  • Lottery: A feature introduced by Italian authorities to combat money laundry and create an incentive for use of a digital payment type.

Here is an overview of what the architecture and setup in Italy looks like:


About Server RTโ€‹

The Server RT records all the sales in the POS and transmits the sales data to the Italian Tax Authorities. There is one Server RT per store.

Every fiscal station that is created in EVA for that store transmits the sales data to the server RT. The receipt however are printed on non-fiscal printers, which often are the EPSON TM-30.

After day closing, the server RT prepares the file and submits the information to tax authorities. Worth mentioning that there is a grace period of 12 days in case of any errors during transmission from Server RT to tax authorities. In other words, this means that sales have to be reported to the tax authorities within 12 days of it being registered. In severe instances a manual option to copy the information from Server RT (sealed) on an external memory drive and then further upload it on the Invoices and Fees portal of the Italian tax authorities is always there.

Lastly, the Server RT is reachable via itโ€™s IP-address at any moment. When accessing the Server RT via the IP-address the following web interface example is shown. Within you'll be able to spot receipts, logs and transmitted files.


About SDIโ€‹

The Sistema Di Interscambio (SDI) is the electronic invoicing portal of Italy. It is mandatory to send all B2B invoices to the SDI. This is optional for consumer invoices.

The SDI instance is owned and maintained by us i.e. only accessible by New Black.

However, since our registered SDI is used by multiple customers, we've set up an SDI router that uses SDI transmitter codes. Those codes are unique and correspond with your VAT number. This eventually allows for a multi customer set up and therefore attainable via a setting for each customer. With this in-place any notifications from the SDI will be sent to the corresponding EVA customer environment.

However, for this to work out, we require a couple of things to be done on your side:

  • An API token (refer to the configurations section for steps to follow);
  • The VAT number of your Italian organization unit in the value of the Auditing:Italy:SDIService:TransmitterVatCode setting (more information on settings can be found here).

SDI invoicesโ€‹

  • An SDI reference is added on all PDF invoices.
  • Invoices are emailed to the customer whether the underlying transaction was performed in-store or online. Make sure the setting AutoSendCertifiedInvoice is set with a value true.
  • A receipt is automatically printed on endless aisle orders.
  • The "Documento Commerciale" (receipt) print is mandatory for carry out orders (POS print receipts behave accordingly regardless of what action the user takes on the print function prompt).
Configuration required

An extra step of configuration is required to activate the lottery feature. More on this can be found here.

About Lottery featureโ€‹

Italian residents can participate in the Italian Lottery with their personal tax code. The lottery applies only to digital payments and are for orders above 1 euro.

When the Auditing:Provider setting is set with a value ITALY a field where the user can input a lottery number would be made available on our apps (applies to card payments only).

We have 2 services pertaining to the lottery feature:

  • GetLotteryNumber

    • Accepts an OrderID and will return the current lottery number (if any).
  • SetLotteryNumber

    • Accepts both OrderID and a LotteryNumber
    • This service will also validate your input. The service will โ€œfailโ€ with an error based on applied validation rules (example: lottery numbers in Italy are a maximum of 8 characters long, this will be validated.)
Configuration required

An extra step of configuration is required to activate the lottery feature. More on this can be found here.

Configurationโ€‹

In order to configure your store in Italy to be compliant, the following SDI API configurations are required:

SDI API KEYโ€‹

This is with regard to the explanation provided in the About SDI section.

The following steps will help you create the required API key:

Step 1โ€‹

Add a role and give it the functionalities Login and ExternalLogin only. Call the role whatever you want.

Step 2โ€‹

Head over to the API users chapter and Create API user with the same role name (recommended). Then under Permissions, assign the role you've just created in Step 1, and tag the Italian Organization unit(s).

Step 3โ€‹

Create API key, and once again select the Italian Organization unit(s), slide the Permanent key radio button On, then Save. Once that's done, a notification will be prompted stating 'Generated API key copied to the clipboard. Please store it in a safe location, as it cannot be retrieved later on.' i.e. don't go around doing something else now since the key cannot be retrieved later unless you repeat step 3 again.

Step 4โ€‹

Submit a ticket (Help & implementation) to support with that API key for us to do our part of updating the SDI router.

Settingsโ€‹

All settings below should be set on the most convenient level possible. In other words, if your organization structure has a country organization which houses all Italian stores, then that's where they should go.

SettingValueOrganization unitDescription
Auditing:ProviderITALYITALY - On Country levelSets the certified aspects
UseInvoiceOutputFacadetrueRoot level or container levelAttaches the Certified Invoice PDF when emailing the Invoice from POS &/or Companion App. This setting enables the use of the CertifiedInvoice stencil with destination Mail
Auditing:UseInvoiceCloningtrueRoot level or container levelUsed to toggle automatic creation of clones, for unique sequence numbers, on and off (experimental)
Auditing:DailyConsolidation:MailToYour email address input hereContainer or store levelThe email address where the consolidation report is to be sent to.
Auditing:Italy:SDIService:CertificateBlobIDThis will be provided by usContainer level (Italy)-
Auditing:Italy:SDIService:CertificatePasswordThis will be provided by usContainer level (Italy)-
Auditing:Italy:SDIService:TransmitterCountryCodeITContainer level (Italy)The country code that will be transmitted to the SDI.
Auditing:Italy:SDIService:TransmitterVatCodeYour organizations VAT number (Example: 09599600963)Container level (Italy)The VAT code of the company which submits the invoice data to the SDI. This is the VAT number of your organization.
Auditing:Italy:SDIService:UrlInsert URL of the SDIContainer level (Italy)The URL of the SDI.
Auditing:Italy:SDIService:ErrorHandlerEmailAddressxContainer level (Italy)The email address that will receive errors from the SDI if errors occur.
Auditing:Italy:RtServer:Urlhttps:// (insert IP address)Store levelThe IP Address of the in store server RT. Please include https://
Auditing:Italy:RtServer:UsernameYour server RT username hereStore levelThe username of the server RT. *Most of the time this would be Epson.
Auditing:Italy:RtServer:PasswordYour server RT password hereStore levelThe password of the in store Server RT
Auditing:Italy:UseSentineltrueStore levelThis is Live Guard specific. More about Live Guard here
Auditing:EnforceTransactionValidationtrueContainer level (Italy)Make sure that the auditing configuration is correctly setup before allowing transactions.
Auditing:InvoiceDeliveryInStoreDirectlytrue-This will prompt all orders with at least one delivery line to directly send the customer an invoice after the payment has been done. The invoice will then be sent to the RT server and exported to the SDI directly afterwards.
Checking missed configuration(s)

Once you're done with all configuration steps. Make sure to use the Validate audit configuration button to check if any compliance-related configurations or data is missing or successfully configured.

Settings for e-commerceโ€‹

For e-commerce in Italy, we adopt a Default auditing provider.

This approach allows for fully customizable invoice templates according to customer preferences. Moreover, the sequencing of documents will adhere to a specific format: OU ID - Sequential Number.

Please configure the following settings:

  • Auditing:Provider - DEFAULT
  • Auditing:UseOrganizationUnitSequence - true

Note that you must also have the stencil template for the non-certified invoice configured.

E-commerce integration with SDIโ€‹

When an SDI E-com integration is required, please use the following setting instead:

  • Auditing:Provider - ITALY
  • Auditing:UseOrganizationUnitSequence - true

This will lead to having predefined logic for the following:

  • Output documents
  • Document number sequencing
  • Certified Invoice Stencils
  • EVA is able to connect E-com to the SDI by setting the necessary SDI settings > โ€œsend request ticket to supportโ€
  • EVA facilitates the integration of E-commerce platforms with the SDI by configuring the required settings for you.
    • To initiate this process, please submit a request ticket to support
Required fields

You must ensure that the E-commerce front end includes fields for the VAT number, recipient code, and email to meet integration requirements.

Async Signingโ€‹

Backgroundโ€‹

Based upon feedback of Epson and to be less dependent on the availability of the RT server we have developed an integration with the RT server called Async.

This integration will fetch the ZrepNumber and RecNumber from the RT server and store this position in EVA. This will allow EVA to determine the correct Zrep and Rec positions and complete transactions and issue receipts without having an active connection to the RT server. This gives EVA a 100% guaranteed sales flow even when the RT is unreachable.

Turning on the Async functionalityโ€‹

To start your configuration please make sure the financial period of the store is closed. This feature can not be enabled when the Financial period is opened.

When the financial period is closed, the setting Auditing:Italy:RtServer:Async can be set to true for the specific store - please note that the setting UseAsyncSigning needs to be removed or not set. After that setting has been set and the financial period is still closed:

  • head over to the Scheduled tasks chapter in Admin Suite;
  • click Add options and Execute once;
  • enter the task EVA.Auditing.Italy.RtServer.RtServerPositionTask ,add the OU ID of your store and Save.

This task will check the current position of the ZrepNumber and RecNumber from the RT server and store its position in EVA. This way EVA knows which numbers to use on the transactions.

After this task has run, the financial period can be opened and the sales can start as usual.

Syncing transactions to the RT serverโ€‹

The transactions within the store are no longer dependent on direct availability of the RT server. EVA knows the current positions of the ZrepNumber and RecNumber and prints it on the sales receipt. By default EVA will sync all un-sycned transactions to the Server RT in an interval of 15 minutes. If at that moment the RT server is not available, EVA will sync all un-synced transactions next time. It will continue to retry until the transactions are synced with the RT server.

You can also trigger a synchronisation manually from the Admin suite. To do so:

  • head over to the Scheduled tasks chapter in Admin Suite;
  • click Add options and Execute once;
  • enter the task EVA.Auditing.Italy.RtServer.RtServerFinancialPeriodScheduler and Save.

Please note that this task cannot be scheduled and can only be executed manually.

After every successful synced transaction with the Server RT, EVA will update the ZrepNumber and RecNumber positions, making sure EVA is always up to date with the latest information from the RT server.

Daily consolidation reportsโ€‹

As EVA holds the position of the ZrepNumber, there is no dependency on the RT server for the closure of the day. If at moment of closure of the financial period the Server RT is not reachable the Z report command for the RT server is also retried with a 15 minute interval until it succeeds. If at the moment the new financial period is opened EVA was still unable to reach the RT server, the sales day can still start as normal.

When the DailyConsolidation report is made - based on the task EVA.Auditing.Tasks.DailyConsolidationReportTask - and the RT server fails to close the Financial period for that day, the Daily Consolidation report will not be generated as there is no data to compare the EVA registered totals. During the next DailyConsolidation task, the report will be attempted again for the days when it was unable to generate.

Defective RT Serverโ€‹

When the RT server is defective and needs to be replaced, EVA will keep retrying the transactions until the new Server RT is installed. EVA will automatically retry the transactions on the new RT server. Itโ€™s important that current stations in EVA will stay the same and the stations are created in the RT server with the same FiscalSystemID as the stations in EVA.

In this case the printed receipts from EVA do not match the data from the new RT server, this is because the device has a new serial number and potential new positions for the ZrepNumber and RecNumber. EVA will adjust to these new numbers as soon as the first transaction is successfully synced.

Companyโ€‹

When configuring your Italian organization unit(s), a company needs to be attached. If there isnโ€™t an Italian company present yet, a new one can be created within Admin Suite under the Companies chapter. The following fields need be filled:

  • Name
  • VatNumber - Don't add the "IT" prefix
  • RegistrationNumber
  • Address (VisitorAddress)
    • Street
    • HouseNumber
    • ZipCode
    • City
    • CountryID

Organization unitโ€‹

Once a company is in place, you need to attach it to an organization unit(s).

Make sure the following fields are filled when creating an organization unit:

  • Name
  • BackendID (store number)
  • Address
    • Street
    • ZipCode
    • City
    • CountryID
  • CompanyID
note

It is crucial that you have the CompanyID field filled when creating the organization unit. You can retrieve this ID from the Italian company you created/have. This is the legal entity under which this OU/store is operating and will be referred to when filling in the details on the invoices and receipts.

Setting up stationsโ€‹

Requirements prior to setting up stations in EVA
  • Ensure that your Server RT setup is already in place otherwsie, any created stations will not be synced to the Server RT.
  • Ensure that your Watchtower is up and running and that all auditing settings are configured otherwise, your stations would not be synced to the Server RT.

You can find steps on adding a new station here.

When creating a station, make sure the following fields are filled in:

  • Station name.
  • The checkmark This station is a fiscal station and will be used for transactions needs to be checked.
  • FiscalSystemID
    • This needs to be exactly 8 characters where the last 4 characters need to be numbers.
    • Donโ€™t use any special characters in the FiscalSystemID.
mandatory configs
  • All payment types must have a category, otherwise the payment can't be correctly mapped, and Ship Orders would fail.
  • In Italy printing receipts is mandatory hence, please ensure that a thermal printer station is configured and properly functioning to avoid any downtime.

Further, stations are known as Tills in the Server RT, and Tills can only be created or deleted from the Server RT. Once created, updating is not possible. Therefore, if any changes need to be made on an existing Till, please delete it and re-add it with the desired changes.

Tasksโ€‹

Reconciliation report (Daily)โ€‹


This is a daily reconciliation report, in order to create a reconciliation report and spot any differences between the reported server RT turnover and EVA's reported turnover at the daily financial period closure, the following task can be set up from the Scudeled tasks:

The task is called EVA.Auditing.Tasks.DailyConsolidationReportTask, once set up, the task will run every day at 23:55. It will consolidate all ledgers of DailyTotalsConsolidation and place them in an Excel called report.xslx and email that file to you.

The report will fetch all the information from the store and split that information into three types of transactions that are known to Server RT. Those are: Sales, Refunds, and Void.

Reports are attached to the Financial period in Admin Suite for the sake of historical reference. As soon as EVA detects a difference between EVA's reported turnover and the Server RT, a record of that would be included in the emailed report.

The email will be sent to the address specified in the setting called Auditing:DailyConsolidation:MailTo. You will also need SMTP settings, and a Stencil with the following configuration:

  • Type: Template
  • Organization: Leave empty
  • Name: DailyConsilidation
  • Country: None
  • Language: Empty
  • Layout: None
  • Destination: Mail
  • Content: As you wish

Reconciliation report (Monthly)โ€‹


Next to the daily consolidation report, a monthly consolidation report is also possible to set up. The monthly consolidation reports coexists with the daily one however, this one will contain the totals of the entire month rather than the (daily) financial period closure ones. The monthly can also be used to spot any differences between the reported server RT turnover and EVA's reported turnover on a monthly level.

Steps to configure the monthly report:

  • Step 1: Schedule the task EVA.Auditing.Tasks.MonthlyConsolidationReportTask

    • The task can either be scheduled to run on the first day of every month by setting the cron to 0 2 1 * * (2 am on the first day of every month for example or it can be manually triggered once via the Admin Suite by inputting a from and to (for example, from 2024-01-01 to 2024-01-31).
  • Step 2: Set up the email template MonthlyConsolidationReport in the Stencil, as follows:

    • Type: Template
    • Organization: Leave empty
    • Name: MonthlyConsolidationReport
    • Country: None
    • Language: Empty
    • Layout: None
    • Destination: Mail
    • Content: As you wish
Expand to see a sample stencil
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="x-apple-disable-message-reformatting">
<title>Email Subject</title>
<!--[if mso]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<style>
table {
border-collapse: collapse;
}

.spacer, .divider {
mso-line-height-rule: exactly;
}

td, th, div, p, a {
font-size: 13px;
line-height: 22px;
}

td, th, div, p, a, h1, h2, h3, h4, h5, h6 {
font-family: "Segoe UI", Helvetica, Arial, sans-serif;
}
</style>
<![endif]-->

<style type="text/css">

@import url('https://fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans');

@media only screen {
.col, td, th, div, p {
font-family: "Open Sans", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
}

.webfont {
font-family: "Lato", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
}
}

img {
border: 0;
line-height: 100%;
vertical-align: middle;
}

#outlook a, .links-inherit-color a {
padding: 0;
color: inherit;
}

.col {
font-size: 13px;
line-height: 22px;
vertical-align: top;
}

.hover-scale:hover {
transform: scale(1.2);
}

.star:hover a, .star:hover ~ .star a {
color: #000000 !important;
}

@media only screen and (max-width: 600px) {
u ~ div .wrapper {
min-width: 100vw;
}

.container {
width: 100% !important;
-webkit-text-size-adjust: 100%;
}
}

@media only screen and (max-width: 480px) {
.col {
box-sizing: border-box;
display: inline-block !important;
line-height: 20px;
width: 100% !important;
}

.col-sm-1 {
max-width: 25%;
}

.col-sm-2 {
max-width: 50%;
}

.col-sm-3 {
max-width: 75%;
}

.col-sm-third {
max-width: 33.33333%;
}

.col-sm-auto {
width: auto !important;
}

.col-sm-push-1 {
margin-left: 25%;
}

.col-sm-push-2 {
margin-left: 50%;
}

.col-sm-push-3 {
margin-left: 75%;
}

.col-sm-push-third {
margin-left: 33.33333%;
}

.full-width-sm {
display: table !important;
width: 100% !important;
}

.stack-sm-first {
display: table-header-group !important;
}

.stack-sm-last {
display: table-footer-group !important;
}

.stack-sm-top {
display: table-caption !important;
max-width: 100%;
padding-left: 0 !important;
}

.toggle-content {
max-height: 0;
overflow: auto;
transition: max-height .4s linear;
-webkit-transition: max-height .4s linear;
}

.toggle-trigger:hover + .toggle-content,
.toggle-content:hover {
max-height: 999px !important;
}

.show-sm {
display: inherit !important;
font-size: inherit !important;
line-height: inherit !important;
max-height: none !important;
}

.hide-sm {
display: none !important;
}

.align-sm-center {
display: table !important;
float: none;
margin-left: auto !important;
margin-right: auto !important;
}

.align-sm-left {
float: left;
}

.align-sm-right {
float: right;
}

.text-sm-center {
text-align: center !important;
}

.text-sm-left {
text-align: left !important;
}

.text-sm-right {
text-align: right !important;
}

.nav-sm-vertical .nav-item {
display: block !important;
}

.nav-sm-vertical .nav-item a {
display: inline-block;
padding: 5px 0 !important;
}

.h1 {
font-size: 32px !important;
}

.h2 {
font-size: 24px !important;
}

.h3 {
font-size: 16px !important;
}

.borderless-sm {
border: none !important;
}

.height-sm-auto {
height: auto !important;
}

.line-height-sm-0 {
line-height: 0 !important;
}

.overlay-sm-bg {
background: #232323;
background: rgba(0, 0, 0, 0.4);
}

.p-sm-0 {
padding: 0 !important;
}

.p-sm-8 {
padding: 8px !important;
}

.p-sm-16 {
padding: 16px !important;
}

.p-sm-24 {
padding: 24px !important;
}

.pt-sm-0 {
padding-top: 0 !important;
}

.pt-sm-8 {
padding-top: 8px !important;
}

.pt-sm-16 {
padding-top: 16px !important;
}

.pt-sm-24 {
padding-top: 24px !important;
}

.pr-sm-0 {
padding-right: 0 !important;
}

.pr-sm-8 {
padding-right: 8px !important;
}

.pr-sm-16 {
padding-right: 16px !important;
}

.pr-sm-24 {
padding-right: 24px !important;
}

.pb-sm-0 {
padding-bottom: 0 !important;
}

.pb-sm-8 {
padding-bottom: 8px !important;
}

.pb-sm-16 {
padding-bottom: 16px !important;
}

.pb-sm-24 {
padding-bottom: 24px !important;
}

.pl-sm-0 {
padding-left: 0 !important;
}

.pl-sm-8 {
padding-left: 8px !important;
}

.pl-sm-16 {
padding-left: 16px !important;
}

.pl-sm-24 {
padding-left: 24px !important;
}

.px-sm-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}

.px-sm-8 {
padding-right: 8px !important;
padding-left: 8px !important;
}

.px-sm-16 {
padding-right: 16px !important;
padding-left: 16px !important;
}

.px-sm-24 {
padding-right: 24px !important;
padding-left: 24px !important;
}

.py-sm-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}

.py-sm-8 {
padding-top: 8px !important;
padding-bottom: 8px !important;
}

.py-sm-16 {
padding-top: 16px !important;
padding-bottom: 16px !important;
}

.py-sm-24 {
padding-top: 24px !important;
padding-bottom: 24px !important;
}
}
</style>
<script src="RtServerFiscalMemoryStatus.js"></script>
<script src="../CertifiedInvoice_PDF/PT.js"></script>
<script src="../CertifiedInvoice_PDF/PL.js"></script>
<script src="../CertifiedInvoice_PDF/FR.js"></script>
</head>
<body style="box-sizing:border-box;margin:0;padding:0;width:100%;word-break:break-word;-webkit-font-smoothing:antialiased;">

<div style="display:none;font-size:0;line-height:0;">Add your inbox preview text here</div>

<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="px-sm-16" align="center" bgcolor="#EEEEEE">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td class="px-sm-8" align="left" bgcolor="#EEEEEE">
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
<table cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="col" align="center" width="100%">
<a href="https://newblack.io">
<img src="https://www.newblack.io/images/mail/eva-logo-mail.png" alt="EVA Logo"
width="80">
</a>
</td>
</tr>
</table>
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td align="center" bgcolor="#EEEEEE" class="px-sm-16">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td bgcolor="#111111" style="background: linear-gradient(to right, #333333, #111111);">
<!--[if gte mso 9]>
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:600px;">
<v:fill type="gradient" color="#111111" color2="#333333" angle="90"/>
<v:textbox style="mso-fit-shape-to-text:true" inset="0,0,0,0">
<div><![endif]-->
<div class="spacer line-height-sm-0 py-sm-16" style="line-height: 32px;">&zwnj;</div>
<table cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td align="center" class="px-sm-16" style="padding: 0 96px;">
<h1 class="webfont h1"
style="color: #FFFFFF; font-size: 36px; font-weight: 300; line-height: 100%; margin: 0;">
Action Required</h1>
</td>
</tr>
</table>
<div class="spacer line-height-sm-0 py-sm-16" style="line-height: 40px;">&zwnj;</div>
<!--[if gte mso 9]></div></v:textbox></v:rect><![endif]-->
</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="px-sm-16" align="center" bgcolor="#EEEEEE">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td class="px-sm-8" align="left" bgcolor="#FFFFFF" style="padding: 0 24px;">
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
<table cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="col px-sm-16" align="center" width="100%" style="padding: 0 64px;">
<h2 style="color: #000; font-size: 20px; font-weight: 300; line-height: 28px; margin: 0 0 24px;">Monthly Consolidation Report</h2>
<p style="color: #888888; font-size: 16px; line-height: 24px; margin: 0;">You can find the report attached as part of this email.</p>
{{if ~isShopListPopulated(OrganizationUnitsWithAmountDifferences)}}
<p><i>Shop(s) with different station amounts: {{:~formatShopData(OrganizationUnitsWithAmountDifferences)}}</i> </p>
{{/if}}
<div class="spacer" style="line-height: 32px;">&zwnj;</div>
</td>
</tr>
</table>
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
</td>
</tr>
</table>
</td>
</tr>
</table>

<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="px-sm-16" align="center" bgcolor="#EEEEEE">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td class="divider py-sm-16 px-sm-16" bgcolor="#FFFFFF" style="padding: 24px 32px;">
<div style="background: #EEEEEE; height: 1px; line-height: 1px;">&zwnj;</div>
</td>
</tr>
</table>
</td>
</tr>
</table>

<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="px-sm-16" align="center" bgcolor="#EEEEEE">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td class="px-sm-8" bgcolor="#FFFFFF" style="padding: 0 24px;">
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
<table cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="col" align="center" width="100%" style="padding: 0 8px;">
<div>
<img src="https://www.newblack.io/images/mail/nb-logo-mail.png"
alt="NewBlack logo" width="120">
</div>
<div class="spacer" style="line-height: 12px;">&zwnj;</div>
<p class="links-inherit-color" style="color: #888888; margin: 0;">
Questions? Contact us at <a href="mailto:support@newblack.io"
style="color: #888888; text-decoration: underline;">support@newblack.io</a>
</p>
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
<div class="spacer" style="line-height: 16px;">&zwnj;</div>
</td>
</tr>
</table>
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
</td>
</tr>
<tr>
<td class="px-sm-8" bgcolor="#EEEEEE" style="padding: 0 24px;">
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
<table cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="col" align="center" width="100%" style="padding: 0 8px;">
<p style="color: #888888; margin: 0;">
This is an automated message please do not reply.
</p>
</td>
</tr>
</table>
<div class="spacer line-height-sm-0 py-sm-8" style="line-height: 24px;">&zwnj;</div>
</td>
</tr>
</table>
</td>
</tr>
</table>

<table class="wrapper" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<tr>
<td class="px-sm-16" align="center" bgcolor="#EEEEEE">
<table class="container" cellpadding="0" cellspacing="0" role="presentation" width="600">
<tr>
<td class="spacer height-sm-auto py-sm-8" bgcolor="#EEEEEE" height="24"></td>
</tr>
</table>
</td>
</tr>
</table>

</body>
</html>
  • Step 3: The email will be sent to the address specified in the setting called Auditing:MonthlyConsolidationMailTo:MailTo. You will also need SMTP settings.
multiple email receivers

The value of the setting can contain multiple receivers. Simply place a comma between the different email addresses.

  • Result: When the task is run, the report will be sent to the email of the receiver(s) specified in step 3 or it can be found on Admin Suite on every Financial period for that month. The name of the report will be ConsolidationReport for period FromDate - ToDate.

Reading the report

The report consists of almost the same columns as the daily report. Below a brief description of each column:

  • Organization Unit ID: The Italian OU ID
  • Organization unit Name: The Name of the organziation unit
  • Station Fiscal System ID: The Fiscal System ID of the station. This can be used to identify the station.
  • Financial period ID's: Here are the Financial Period ID that were included in the report and in turn attached to. The report can also be found on the Financial period in Admin Suite.
  • Report Creation date: The date of which the report was created
  • Start Date: Start date of the monthly report period
  • End Date: End date of the monthly report period
  • Amount description: The types of amounts that are registered. EVA distinguish three types, Sales, Void, and Return.
  • External Total: The total registered on the Server RT
  • Expected Total: The total that was registered in EVA.
  • Difference: This is the difference between the "External Total" and the "Expected total".
  • Totals Details:
    • This is only filled in when there are differences between the "External Total" and the "Expected total".
    • It contains a description about the mis match. For example:
      - "2024-03-18 - [Sale amount mismatch details]: RT Server DailySaleAmount: 0.00 | EVA Station Daily Amount: 45.0000 | Difference: 45.0000 
      - 2024-03-19 - [Sale amount mismatch details]: RT Server DailySaleAmount: 45.00 | EVA Station Daily Amount: 0 | Difference: -45.00 "
      Based on this example you see the RT server didn't register 45 on the 18th, and did register 45 more than EVA on the 19th. Therefore the resulting consolidated total in this case is 0 hence, no action is needed.
  • Report description: A generic description about the difference detected.

Reboot RT server taskโ€‹


Recommendation

Configuring this task is recommended if you are using a server RT farm. The reboot is a recommendation from Epson to overcome a memory issue that could cause in-operable RT servers.

The task is called: EVA.Auditing.Tasks.DailyRtServerRebootTask and since the Server RT does not transmit data between 3am and 5am, it is recommended to schedule the task to run via a Cron job between those hours. For example at 4 am with the corresponding cron job: 0 3 * * *

The task is scheduled using an organization unit ID. This could be either the ID of the container OU or the individual store OU. If a container is chosen, the reboot will be done for each individual OU store within. Further, if for some reason one stores fails to reboot, the reboot task for other OU's will not be impacted.

Starting task manually

It is possible to start the task manually if needed. This can be done by navigating to the Scheduled tasks chapter and clicking the Execute button of the task itself.

Checkout optionsโ€‹

When it comes to lottery and SDI invoices, a checkout configuration is required in order to have your frontend App(s) display the respective tiles during checkout.

In the Checkout options chapter of Admin Suite, a default checkout option called Italy needs to be activated.


Click the Italy checkout option, edit the field Organization unit set by specifying your Italian container OU or a single OU. The choice here is based on your organization structure setup for Italy.


After clicking Update, you'll now see two new tiles on your frontend App(s) namely, Lottery number and Electronic invoice.

Here is how it looks like on POS:

IPad Pro screen

Auditing Validate Configuration error(s)

Not performing this checkout option configuration will result in a thrown error when running the AuditingValidateConfiguration service.


Instant lottery code featureโ€‹

Server RT firmware update required

In order to use this feature, the server RT firmware must first be updated to version 5 or higher. The transaction flow will break if this lottery feature is turned on without being on the specified minimum version requirement.

To encourage the lottery initiative, the Italian authorities have launched a feature where an instant lottery code is generated to the beneficiary/customer without the prerequisite requirement of providing one at time of purchase. In such instance, the lottery code is generated in the form of a QR-code and is printed on the customer receipt itself. The customer can then use the App provided by the Italian tax authorities to scan the QR-code and check the draw results.

To start using this feature set the setting Auditing:Italy:RtServer:UseNewLotterySystem to true (default value is false) on organization unit or container level (as applicable to your setup).

Eligibility

The lottery initiative applies only to orders above 1 euro, paid using a digital payment method i.e. no changes to the existing eligibility terms.

Stencil for Certified invoicesโ€‹

For configuration and more details about Certified Invoices please refer to the general concepts section under Certified invoice stencil for thermal &/or PDF . A separate stencil is required to set up the email in which a certified invoice would be attached to. Configurations for such stencil can be found under Email invoice stencil.

Endless Aisleโ€‹

Endless Aisle transactions conducted via EVA are compliant in Italy. The flow is slightly different depending on whether the underlying Endless Aisle transaction being performed is B2C or B2B.

Invoice chainsโ€‹

With Italian compliancy configurations, EVA will always issue a receipt. Next to that, an invoice PDF will also be issued, but only in certain cases. Those cases are as follows:

Further, to ensure having separate invoice chains, the issued receipts and invoices (if applicable) will have a dedicated chronological invoice number, one that is on store level.

B2C Customer (No Fiscal ID)โ€‹


When a B2C customer is added to the order and the transaction is Endless Aisle, a Documento Commerciale (thermal receipt) is issued from the thermal printer and the transaction is registered on the stores Server RT.

If the products cannot be fulfilled by the warehouse, a credit note will be issued. This will be in PDF format and will be emailed to the customer. The credit note will then be registered on the same server RT as the one where the Endless Aisle sales was made from. The Server RT reference will be displayed at the bottom of the credit note.

B2C Customer (with Fiscal ID)โ€‹


When a B2C customer with a Fiscal ID is added to the order and the transaction is Endless Aisle, a Documento Commerciale (thermal receipt) is issued from the thermal printer and the transaction is registered on the stores Server RT. Next to the thermal receipt an invoice is issued to the SDI. The SDI invoice will contain a reference to the thermal receipt to avoid any double invoicing instances.

If the products can't be fulfilled by the warehouse, a credit note will be issued. This will be in PDF format and will be emailed to the customer. The credit note will then be registered on the same server RT as the one where the Endless Aisle sales was made from. The Server RT reference will be displayed at the bottom of the credit note.

The credit note will also be sent to the SDI to credit the original invoice, and once again will contain the same reference to the receipt to avoid any double invoicing instances.

B2B customer (with VAT)โ€‹


When a B2B customer (with VAT) is added to the order, and the transaction is Endless Aisle, a Documento Commerciale (thermal receipt) is issued from the thermal printer and the transaction is registered on the stores Server RT. Next to the thermal receipt an invoice is issued to the SDI. The SDI invoice will contain a reference to the thermal receipt to avoid any double invoicing instances.

If the products can't be fulfilled by the warehouse, a credit note will be issued. This will be in PDF format and will be emailed to the customer. The credit note will then be registered on the same server RT as the one where the Endless Aisle sales was made from. The Server RT reference will be displayed at the bottom of the credit note.

The credit note will also be sent to the SDI to credit the original invoice, and once again will contain the same reference to the receipt to avoid any double invoicing instances.