Slovenia FURS fiscalization
Full support for Slovenian fiscalization requirements (FURS).
FURS is separate from Slovenia e-invoicing. Use this guide for real-time fiscalization with the Slovenian tax authority. Use e-SLOG and UJP for Slovenian electronic invoice XML validation and UJP package downloads.
Prerequisites
| Requirement | Description |
|---|---|
| Tax number | Entity with Slovenian tax number |
| Certificate | Digital certificate (.p12) from FURS |
Setup
1. Upload Certificate
import SpaceInvoices from "@spaceinvoices/js-sdk/sdk";
const sdk = new SpaceInvoices("YOUR_API_KEY");
await sdk.fursSettings.uploadFursCertificate({
certificate: fs.readFileSync("certificate.p12").toString("base64"),
passphrase: "cert-password",
});2. Register Business Premise
Register your business location (e.g., P1, OFFICE). This creates the premise and registers it with FURS.
const _premise = await sdk.fursPremises.registerFursRealEstatePremise({
business_premise_name: "PREMISE1",
real_estate: {
cadastral_number: "1234",
building_number: "1",
building_section: "1",
community: "Ljubljana",
city: "Ljubljana",
street: "Main Street",
house_number: "1",
postal_code: "1000",
},
});If your FURS numbering strategy is centralized (C), you can pass starting_number when registering the premise. The first fiscal invoice for that premise-level sequence uses that value.
3. Register Electronic Device
Register a device for the premise (e.g., D1, POS1). Each device gets its own invoice counter.
await sdk.fursDevices.registerFursElectronicDevice("prm_123", { name: "DEVICE1" });If your FURS numbering strategy is device-level (B), you can pass starting_number when registering the device. You can also update or clear a premise or device starting number with the PATCH endpoints, but only before any fiscal document counter has been created for that sequence.
4. Enable FURS
await sdk.fursSettings.update({ enabled: true });Fiscalized Invoices
Invoices are automatically fiscalized when FURS is enabled:
const _invoice = await sdk.invoices.create({
items: [{ name: "Service", quantity: 1, price: 100 }],
furs: {
business_premise_name: "PREMISE1",
electronic_device_name: "DEVICE1",
},
});By default FURS PaymentAmount equals InvoiceAmount. To report a smaller paid amount without changing the fiscal invoice total or taxes, set furs.payment_amount on POST /invoices or POST /invoices/custom. The value is in the document currency, from 0 through total_with_tax. Space Invoices converts it to EUR the same way as InvoiceAmount and applies credit-note sign server-side. Do not derive it from payments, total_paid, or total_due.
When a full credit note is created automatically by voiding or reissuing an invoice, it reverses the originally reported PaymentAmount, including an explicit zero. For example, an invoice reporting PaymentAmount €30 creates a reversal reporting −€30, even if the full invoice total is €100.
The ZZZS copayment case is a €100 invoice with a €30 patient payment:
{ "InvoiceAmount": 100, "PaymentAmount": 30, "TaxesPerSeller": "calculated from 100"}const _invoice = await sdk.invoices.create({
items: [{ name: "Medical service", quantity: 1, price: 100 }],
payments: [{ type: "cash", amount: 30 }],
furs: {
business_premise_name: "PREMISE1",
electronic_device_name: "DEVICE1",
payment_amount: 30,
},
});FURS returns confirmation data on the invoice:
eorzoiQR Code
Fiscalized invoices include a verification QR code, embedded automatically in the PDF:
const _pdf = await sdk.invoices.renderPdf(invoice.id);