Pro licenses, invoicing, and VAT
Operational rules for a Czech s.r.o. VAT payer. Not tax advice — verify final setup with your accountant / tax advisor.
Product = electronically supplied service (ESS)
Plugin licenses, cloud audit (Explorer), credits = digital / electronically supplied services. Place of supply and VAT are governed by Directive 2006/112/EC + Act No. 235/2004 Coll. (Czech VAT Act).
Automatic invoicing
After Stripe payment or bank transfer / admin fulfill:
- Verifies VAT ID in VIES (EU), if provided
- Calculates VAT by country and customer type
- Issues invoice (Fakturoid / email)
- Sends document + license
Recommended policy (Puluno)
The system has a country registry (country-rules): rate, paid sales, reverse charge, invoice language.
EUR/CZK rate from Czech National Bank (daily sync + rate as of Jan 1 for OSS €10,000 threshold).
| Situation | What we do | Why |
|---|---|---|
| Individual (natural person) | Always VAT (CZ 21% / OSS rate) | No company ID/VAT ID, no reverse charge |
| Company / sole trader in CZ | 21% domestic | ARES (company ID) + VAT ID comparison + VIES |
| Company SK / EU | 0% RC with VIES | VAT ID format + VIES; VAT ID country = invoicing |
| EU company without VIES | Block checkout | Cannot RC without certainty |
| Rest of world | Paid sales disabled | Free tools only |
Automatic registry check
- CZ: ARES API by company ID → name, address, VAT ID, VAT payer status; compare entered VAT ID
- SK / EU: national VAT ID format + VIES
- Rest of world: reject paid sales
- Checkout: check automatically on entry of VAT ID or company ID (debounce); Registry button optional; entry takes precedence over registry fill; API
POST /api/vat/company
| EU B2C under €10,000/year (and previous year) | 21% CZ (eu_b2c_home) | Domestic rate until threshold |
|---|---|---|
| Over threshold without OSS registration | Block B2C outside CZ | Don't collect foreign VAT blindly |
| Outside EU | Paid sales disabled | UK VAT, US sales tax… separately |
| Marketing / free | No VAT document | free |
CNB exchange rates
- Admin → Download CNB rates or cron
POST /api/cron/cnb-rates(Bearer secret) fx_ratestable — daily board- OSS threshold in CZK = €10,000 × EUR rate as of Jan 1 (or first business day)
- Optional override:
OSS_THRESHOLD_CZK_MINOR/OSS_EUR_CZK_RATE
Pricing is for CZ B2C incl. VAT. For EU reverse charge, invoice net + reverse charge note.
Invoices: CS (CZ/SK), EN (others).
Slovakia
SK is in the EU — B2B reverse charge, B2C under threshold 21% CZ; after OSS 23% (SK standard rate from 2025).
Rest of world (outside EU)
Paid licenses intentionally not sold. Free plugin + Explorer free. When you want UK/US/CH: separate registration (UK VAT, US nexus…) — don't treat "export 0%" as universal solution for consumers.
OSS — what to do with tax office
- Monitor OSS B2C limits in Admin and VAT/CNB panel.
- Before reaching €10,000, file for OSS (EU scheme).
- After approval:
VAT_OSS_ENABLED=true→ consumer country rates. - Quarterly OSS returns — accountant, not the app.
Configuration (.env)
FAKTUROID_EMAIL=
FAKTUROID_API_KEY=
FAKTUROID_ACCOUNT_SLUG=
# VAT
VAT_OSS_ENABLED=false
# OSS_THRESHOLD_CZK_MINOR= # optional override; otherwise CNB × €10k
# OSS_EUR_CZK_RATE=24.12 # optional fixed rate
PRO_GROSS_PRICE_CZK=149000
INVOICE_NUMBER_PREFIX=2026
SUPPLIER_ICO=…
SUPPLIER_DIC=CZ…
SUPPLIER_COUNTRY=CZ
Online purchase
- Pricing — billing details + site URL
- VAT preview (
/api/vat/preview) - Bank transfer / Stripe
- Email: license + invoice
Checklist before live sales
- [ ] Supplier VAT ID on invoices = VAT payer
- [ ] VIES works (Admin → recent checks)
- [ ]
VAT_OSS_ENABLEDfalse until OSS is registered - [ ] Accountant knows reverse charge text on invoices
- [ ] After first foreign B2C: check limit in Admin
Activation in the plugin
Puluno → Settings → License → ISC-…
Support
- Email: info@puluno.io
- Terms of service · Privacy