ESL & Intrastat Helper
Build EC Sales List & Intrastat data files for NI-EU trade (Windsor/NI Protocol)
Under the Windsor Framework / NI Protocol, Northern Ireland businesses still trade goods with the EU and must file EC Sales Lists and Intrastat declarations, work that otherwise means hand-keying invoice data into spreadsheets and risking VAT-format errors. NI traders, their accountants and VAT teams carry this monthly burden under penalty of non-compliance. This module assembles ESL and Intrastat declarations directly from posted invoices on gb.esl.declaration and gb.intrastat.declaration, validates EU VAT numbers and CN8 commodity codes, checks exemption thresholds, and exports submission-ready CSV files. It never submits on your behalf: it is format generation for your own BYOK upload.
Key Features
Invoice-Driven ESL Declarations
action_pull_from_invoices on gb.esl.declaration scans posted out_invoice and out_refund moves in the period and aggregates net value per customer VAT, country and indicator into gb.esl.line rows. Refunds subtract, so the EC Sales List is built straight from your ledger with no re-keying.
EU VAT Validation
The gb.eu.member.state helper normalises VAT numbers, derives the member-state code (handling the EL/GR Greek prefix) and structurally validates the format against the EU-27 prefix set. Lines flag invalid VAT before export, and action_validate blocks a declaration carrying any malformed number.
Goods vs Services Indicators
Each ESL line is stamped with an indicator from _indicator_for_line: 0 for B2B goods and 4 for B2B services based on the product type, with triangulation indicators available. Non-EU customers are excluded automatically, keeping the list to genuine intra-EU B2B trade.
Intrastat Arrivals & Dispatches
gb.intrastat.declaration pulls dispatches from customer invoices or arrivals from vendor invoices, building goods-only lines with commodity code, partner country, quantity, net mass (from product weight), value and default transaction and delivery terms. Services are skipped since Intrastat covers goods only.
CN8 Commodity Register
A gb.commodity.code register holds eight-digit CN8 codes with descriptions and supplementary units (kg, number, litres and more), enforced by an 8-digit constraint. Intrastat lines auto-match a commodity by product default_code, and supplementary-unit-required flags surface where extra quantities are needed.
Exemption Threshold Checks
Each Intrastat declaration compares its total value against the configured 2024 UK arrivals and dispatches thresholds, computing an above_threshold flag. Traders see immediately whether a flow exceeds the exemption limit and therefore requires a declaration for the period.
Period-Build Wizard
The gb.esl.pull.wizard creates and populates an ESL, arrivals or dispatches declaration for a chosen month and year in one step, optionally validating it. It turns a monthly compliance chore into a single guided action over the right invoice period.
BYOK File Export
Validated declarations export a CSV (and fixed-record ESL layout) capturing country, VAT, indicator, commodity, mass and value, with state moving draft, ready and submitted. The module never contacts HMRC or any authority: you upload the generated file yourself using your own credentials.
Use Cases
Screenshots
Commodity Codes
Ec Sales Lists
Build Declaration
Intrastat
Why Choose This Module
Under the Windsor Framework / NI Protocol, Northern Ireland still trades goods with the EU — so businesses must file EC Sales Lists (ESL) and Intrastat declarations. This module assembles those declarations from your posted invoices and produces submission-ready files (CSV plus an HMRC-style fixed record) for upload with your own credentials. We never submit on your behalf — it's format generation for your BYOK transport.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: account
- Support: support@pokutsoft.com
Update date: 2026-07-02