Does ComOps check a VAT number against VIES?
Yes. The number is validated against VIES, the status that comes back is recorded on the counterparty, and that status is what the engine reads when it decides whether a supply is reverse charged.
A VAT rate is not a setting in ComOps. The engine decides it for every line of every document, from the schedule in force on that document's own tax point and for the country the supply belongs to. What follows is how that decision is made and what comes out of it at the end of the period.
Every rate sits in a schedule with a start date and an optional end date, held per country. When a document is priced, the engine asks for the rate in force on that date, so a change that takes effect on 1 July applies from 1 July while a document dated 30 June still takes the old rate. Nobody has to reconfigure the system on the morning a change lands, and re-issuing an older document does not quietly pull today's rate onto it. Rates are held per supply type as well, goods, services or both, with a services row winning over the general one for the same country and date, and each rate carries its own type: standard, reduced, super-reduced, zero or exempt.
A zero or exempt rate cannot exist without the text that justifies it: the engine refuses to save one that has no legal basis in Bulgarian and in English. When a document uses such a rate, the basis is printed as a footnote, once per distinct text, so an invoice with three exempt lines under the same article carries one footnote rather than three. The Bulgarian texts cite the articles they come from, among them the VAT Act (ЗДДС) art. 28, art. 21(2), art. 86(3) and art. 113(9), with art. 114(1)(12) and art. 66(2) in the seeded schedule.
Whether VAT is charged at all is decided from the counterparty, not typed by whoever is writing the invoice. A business customer in another EU member state with a usable VAT number moves the document to reverse charge, and the e-invoice carries that as category AE with the VATEX-EU-AE exemption reason, which is what a receiving system expects to read. A customer outside the EU makes the supply a zero-rated export, with the Bulgarian basis citing ЗДДС art. 28. The VAT number itself is validated against VIES, and the status that comes back, valid, invalid or expired, is what the engine reads when it decides. EU business supplies run through reverse charge in both directions; there is no separate named treatment for them.
Bulgarian law dates the obligation from the tax point under ЗДДС art. 25, and that is not always the day the invoice is written. ComOps keeps the two apart. It derives the tax point from the payment, the shipment or the document itself, records which of the three it used, measures the distance to the issue date against the five-day window in ЗДДС art. 113(4), and stores that number on the invoice. The rate lookup then runs on the tax point, so a document raised late still takes the rate that applied when the supply happened.
The engine runs at a single point, when tax is applied to a document. It computes per line, groups the lines by rate and rate type, and applies the rounding policy you configured, per line or per invoice, rounding up, down or to nearest. The result is written onto the document, the rate on each line and the treatment on the header, and everything downstream reads that stored decision instead of computing its own. The PDF, the totals, the period figures and the Peppol export all describe the same decision, which is why an exported e-invoice cannot disagree with the document it came from. See how that export is built on the e-invoicing page.
For any period you choose, a month, a quarter or a range you set yourself, ComOps reports the VAT collected, the VAT paid and the difference due. The sales and purchase VAT journals for the period come out of the same documents that produced the invoices. Purchase VAT is classified per tax class as deductible or not, and those figures are what the VAT return is built from. The books export as SAF-T for the tax authority. An annulled invoice reaches the journals in the period it was annulled, at zero when that is the same period and reversed with the opposite sign when it is a later one.
Rates are data; the behaviour that varies by country is a pack. Standard rates for the 27 EU member states and the UK are seeded; Bulgaria ships with its full reduced, zero and exempt schedule and a pack of its own rules and legal texts; every other country resolves against the neutral pack, which reads the same dated schedules. Adding a country is therefore a schedule of dated rates and a set of local texts, both entered through the admin screens rather than written into the code. Sales to consumers in other member states are counted against the union distance-selling threshold, and once it is crossed the destination country's rate applies.
ComOps implements these rules; it does not replace advice on them. Check how they apply to your own company with your accountant.
Yes. The number is validated against VIES, the status that comes back is recorded on the counterparty, and that status is what the engine reads when it decides whether a supply is reverse charged.
Standard rates for the 27 EU member states and the UK are seeded, and Bulgaria has the full reduced, zero and exempt schedule with a rules pack of its own. Every other country resolves against the neutral pack, and the detail for one of them is entered as a schedule through the admin screens.
Want to watch the engine pick a rate on a back-dated document?