Skip to content
puluno

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:

  1. Verifies VAT ID in VIES (EU), if provided
  2. Calculates VAT by country and customer type
  3. Issues invoice (Fakturoid / email)
  4. 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).

SituationWhat we doWhy
Individual (natural person)Always VAT (CZ 21% / OSS rate)No company ID/VAT ID, no reverse charge
Company / sole trader in CZ21% domesticARES (company ID) + VAT ID comparison + VIES
Company SK / EU0% RC with VIESVAT ID format + VIES; VAT ID country = invoicing
EU company without VIESBlock checkoutCannot RC without certainty
Rest of worldPaid sales disabledFree 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 registrationBlock B2C outside CZDon't collect foreign VAT blindly
Outside EUPaid sales disabledUK VAT, US sales tax… separately
Marketing / freeNo VAT documentfree

CNB exchange rates

  • Admin → Download CNB rates or cron POST /api/cron/cnb-rates (Bearer secret)
  • fx_rates table — 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

  1. Monitor OSS B2C limits in Admin and VAT/CNB panel.
  2. Before reaching €10,000, file for OSS (EU scheme).
  3. After approval: VAT_OSS_ENABLED=true → consumer country rates.
  4. 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

  1. Pricing — billing details + site URL
  2. VAT preview (/api/vat/preview)
  3. Bank transfer / Stripe
  4. Email: license + invoice

Checklist before live sales

  • [ ] Supplier VAT ID on invoices = VAT payer
  • [ ] VIES works (Admin → recent checks)
  • [ ] VAT_OSS_ENABLED false 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

Pro licenses & payments | Puluno