Sevvies for Craft CMS

For Craft Commerce 5 · $99

Orders into sevDesk, under the right VAT rule

One German checkout produces four legally different invoices: a domestic sale at 19%, a reverse-charged supply to an EU business, an export outside the EU, and an OSS sale at the destination rate. sevDesk files whichever one you tell it to and never complains — you find out at the Umsatzsteuervoranmeldung. Sevvies works out which one it is.

Sevvies

Every invoice explains itself

The VAT rule is derived from the billing country and the customer's VAT ID, and the reason is stored on the order. When an accountant asks why a particular invoice is zero-rated, the answer is on the invoice — not in the source.

twig
$ php craft sevvies/sync/preview 15841

VAT rule: Innergemeinschaftliche Lieferungen (taxRule 3)
Reason:   EU business customer in AT with VAT ID
          ATU12345678 — intra-community supply, reverse charge.
Commerce: 238.00 EUR
sevDesk:  238.00 EUR

# Printed on the document:
# Steuerfreie innergemeinschaftliche Lieferung — Reverse Charge,
# Steuerschuldnerschaft des Leistungsempfängers

Features

A VAT rule engine, a reconciliation guard and a duplicate index — not a POST request with your order stuffed into it.

The right VAT rule, per order

Domestic sales, exports outside the EU, intra-community supplies with reverse charge, §19 Kleinunternehmer and One Stop Shop — each derived from the billing country and the customer's VAT ID.

  • The reason is recorded on the invoice, not just the rule
  • The sentence German law requires is printed on the document
  • VAT ID format checked against its own country's pattern

It will not file the wrong number

Every invoice is totalled before it is sent and checked against sevDesk's own total afterwards. A mismatch blocks the order rather than leaving a wrong document standing in your books.

  • Disagrees before sending? Nothing is sent
  • Disagrees after? Marked, with the sevDesk id kept so you can find it
  • When the difference is exactly VAT, it names the setting to change

Never the same order twice

A unique database index on the order id, not a check that could lose a race with a queue retry or a status change.

  • Status flips, retries and double webhooks are all safe
  • Refunds are mirrored exactly once, as credit notes
  • Nothing in sevDesk is ever deleted or altered

Dry run before it counts

Build every invoice exactly as it would for real, write the complete payload to the log, and send nothing. Check your VAT settings against your own orders before a single document reaches your books.

  • The preview is the literal request, byte for byte
  • From the CP, the Commerce order screen, or the console
  • Backfill years of orders the same way

Contacts that stay one contact

Customers are matched to sevDesk contacts and the mapping is stored, so a repeat customer never produces a second contact — the thing that makes a sevDesk account unusable after a year of orders.

  • Matched by email, with the result verified before it is used
  • Customer numbers assigned by sevDesk itself
  • Billing addresses kept in step when a customer moves

Payments, refunds and the archive

Book the payment when Commerce marks the order paid, mirror refunds as credit notes, and keep sevDesk's PDF as a Craft asset so the archive outlives the subscription.

  • Full refunds reverse the invoice; partial ones get their own credit note
  • Works with both sevDesk bookkeeping systems, 1.0 and 2.0
  • A connection log with every request, decision and skip

Frequently Asked Questions

The questions worth answering before you install it.

Stop filing invoices you have not checked

$99 per installation, one edition, everything included. Install it, turn on dry run, and see exactly what would be filed for your last hundred orders before any of it counts.