Excise is not a tax that sits on an invoice. It is an obligation that arises at a specific moment: when the goods leave the suspension regime and enter free circulation.
For an operator with a tax warehouse, that moment is a stock event, not a commercial one. And if it is not marked in the system, the excise is computed afterwards — by a person, from documents, on the basis of a file. That is where the discrepancies come from, and that is where the time lost preparing the D120 return goes.
1. The framework: categories and rates
Everything starts from the ANAF classification. The module brings:
- the excise categories, one for each line of the D120 return — beer, wine, cigarettes and the rest — each with the unit of measure the return asks for in its column;
- the yearly rate tables, half-yearly or quarterly, preloaded for the current years.
On the product you configure the category, the conversion ratio to the ANAF unit (because goods are sold in a different unit from the one they are declared in), the strength — Plato for beer, pure alcohol for spirits — and the current rate, which is derived on its own from the period you are in.
This means a rate change on 1 January does not require rewriting the products: you add the row to the table.
2. The authorizations
Every customs channel through which goods reach you is an authorization: registered consignee, certified consignee, importer, domestic supplier.
Each one carries the ANAF code, the SEED number, the e-AD reference, the guarantee lodged and the validity period. The registered-consignee rule — excise due the following day — is handled by a checkbox on the authorization, not by a procedure someone has to remember.
The authorization set on the purchase order propagates by itself to the receipt, and from the receipt to every lot received. Nobody writes it three times, and nobody forgets to write it the third time.
3. The location regime: where the obligation arises
Every stock location gets a regime: tax warehouse (suspension) or free circulation (duty paid).
The border between the two is where the obligation arises. When a stock move crosses it — an import receipt, an intra-Community one, or a release from suspension into free circulation — the system automatically builds the 635 = 446 entry, in draft, and optionally a landed cost that folds the excise into the stock valuation.
The entry stays in draft deliberately: excise is an amount you check before recording, not one that gets posted quietly.
4. Per-lot traceability
Every lot carries three pieces of information: the authorization it came in on, the excise entry that matched it and the amount paid on it.
This answers the question that otherwise requires an investigation: for these goods on the shelf, how much excise was paid and on which authorization did they enter the country?
On top of it, the sales per authorization report gives the breakdown you need when preparing the D120, instead of having it assembled from exports.
5. Excise bands
For products that must be marked, the order of bands from the authority is tied to the authorization: what was requested, on which authorization, how much was received.
The actual consumption of bands on the goods is handled by the marking family of modules: a marking is a storable product, ordered and received normally, and when the goods are received a consumption transfer is generated, in draft, with the quantity computed on the units received. Its cost is capitalized into the goods.
The two meet exactly where they should: the authorization says how many bands you are allowed, the markings say how many you used.
What to check on first setup
- One product from each category: the category, the unit conversion, the strength and the resulting rate. A wrong conversion only shows up in the return.
- One import receipt, end to end: which entry was generated, with what amount, and whether the value entered the cost of the goods.
- One release from suspension, separately. It is the most frequent event and the easiest to configure wrongly, because it depends on the regime of both locations.
- The lots: after the receipt, check that they carry the authorization and the amount.
- The per-authorization report, on a closed month, compared against what you declared.
Why it is worth doing in the system
Because excise means large amounts, short deadlines and an audit that checks traceability, not just the total. A calculation done in a spreadsheet can produce the same figure — but it cannot show, for a given lot, where it came from and how much was paid on it.
The module is on Odoo Apps, for Odoo 19 and 20: Romania - Excise Management.
If you have a tax warehouse or operate as a registered consignee and want to see how your flow fits: nexterp.ro/contactus.