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 lithuanian 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 | Description |
---|---|---|
21% | A | normal |
9% | B | reduced 1 |
5% | C | reduced 2 |
0% | D | zero |
- | E | excempt |
Payment Types
Please make sure that the payment types are correctly configured in the Strongpoint library (details see Installation Strongpoint library).
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 |
Strongpoint fmNVB State
{
"ModuleName": "fmNVB",
"ID": "CR-000008758",
"ErrorCode": "",
"Warning": [
"Drawer:open"
],
"ZI": 6,
"HWVersion": "240",
"LastStateUpdate": 1726840960183,
"SimpleState": {
"DayOpen": null,
"ZRequired": false,
"NextZRequired": null,
"DrawerOpen": true,
"PaperNearEnd": false,
"PaperEnd": false,
"CoverOpen": null,
"MemAlmostFull": null,
"MemFull": false,
"CertExpires": null
},
"TT": "1234"
}
or with request header accept=text/xml
<PrintState>
<ModuleName>fmNVB</ModuleName>
<ID>CR-000008758</ID>
<ErrorCode/>
<Warning>Drawer:open</Warning>
<ZI>6</ZI>
<HWVersion>240</HWVersion>
<LastStateUpdate>1726841016979</LastStateUpdate>
<SimpleState>
<DayOpen/>
<ZRequired>false</ZRequired>
<NextZRequired/>
<DrawerOpen>true</DrawerOpen>
<PaperNearEnd>false</PaperNearEnd>
<PaperEnd>false</PaperEnd>
<CoverOpen/>
<MemAlmostFull/>
<MemFull>false</MemFull>
<CertExpires/>
</SimpleState>
<TT>1234</TT>
</PrintState>
ModuleName
Name of the printer moduleID
fmNVB CR IDZI
Z-report indexHWVersion
Fiscal firmware versionSimpleState
Unified printer state across different printers and countriesDayOpen
Boolean | nullZRequired
Boolean | nullNextZRequired
Boolean | nullDrawerOpen
Boolean | nullPaperNearEnd
Boolean | nullPaperEnd
Boolean | nullCoverOpen
Boolean | nullMemAlmostFull
Boolean | nullMemFull
Boolean | null
Other Printing Functions
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:
Example Item 30,00 €
Total 30,00 €
Alternatively the following call may be used: /peri/display?text=This+is+test+line+1+Line+2
Cash Drawer
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 Cash drawer open
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":"0"}
or when request header accept=text/xml
is set
<DrawerState>
<PeriDrawer>0</PeriDrawer>
</DrawerState>
until final closing
{"PeriDrawer":"1"}
Manual Drawer Open
Manual drawer open (with key) and close events are logged in the transaction journal.
Specifics
Return / Void Transactions
Return/Void transactions have to refer to the original document by giving FN
of the original receipt as ESR.RFN
. If no FN
is available, a free-form invoice number can be used.