| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Sales (sale_management) • Purchase (purchase) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 10047 |
| Technical Name |
eh_log_l10n_qa_customs |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Logistics Qatar Customs (Al Nadeeb)
The Qatar customs pack for the ERP Heritage logistics suite: an Al Nadeeb single window adapter, country-scoped declaration types, and a starter HS and tariff overlay, ready to dispatch in mock mode the moment it installs.
Why this module
Logistics Qatar Customs (Al Nadeeb)
Speaks the Al Nadeeb XML contract
A concrete adapter for the Qatar General Authority of Customs single window. It serialises declaration submissions into the documented namespaced envelope (broker reference, parties with TRN, totals, and per-line HS, origin, duty and value), then parses back the regulator reference, status, and any structured field-level errors.
Runs in mock mode from the first install
A default profile is seeded pointing at the sandbox endpoint in mock mode, so a Qatar declaration round-trips against captured fixtures with zero network and zero credentials. Flip the environment to live and supply an API key when you are ready, the same code path runs in both.
Qatar declaration types and tariff overlay
Six country-scoped declaration types (import, export, transit, re-export, temporary admission, GCC inter-state) and a starter set of Qatar HS subheadings with GCC Common Customs Tariff duty rates. VAT is set to zero per the 2026 Qatar baseline, with excise reflected on tobacco and sweetened beverages.
Day in the life
From declaration to regulator reference, without leaving Odoo
A broker builds a Qatar import declaration on the customs core: parties, line items, HS codes, customs value, and duty. They route it to the seeded Al Nadeeb profile and submit. The adapter renders the namespaced XML envelope, the suite orchestrator wraps the send with retry, a circuit breaker, and an audit row, and the parsed response surfaces the regulator-issued reference and status straight on the record. In mock mode the whole flow replays from a fixture, so the team can rehearse the rejection path (a missing country of origin comes back as a structured COO error) before a single live call.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
A rejected submission is not a blob. The parser walks every Error node and returns code, field, and message, so a missing country of origin surfaces as COO_MISSING against the offending field rather than a generic failure.
If Al Nadeeb returns XML the parser cannot read, a submit response raises a validation error with the parse detail, while a status response degrades gracefully to an unknown status with the raw body retained instead of throwing.
Element lookups try the Al Nadeeb namespace first and fall back to the bare tag, so a response that drops or shifts the namespace prefix is still read correctly instead of silently returning empty fields.
The Bearer token is resolved per company through the suite credentials helper, checking environment variables then an encrypted system parameter. If no key is found the request still builds, so mock-mode runs never block on missing secrets.
The adapter pins schema version 1.0 and refuses to dispatch against a profile whose api_version does not match, turning a silent contract drift into an explicit configuration error you fix on purpose.
The Qatar overlay encodes the 2026 reality: no VAT, but excise-bearing categories like cigarettes and sweetened carbonated drinks carry their elevated rate in the seeded HS data rather than being treated as ordinary duty.
What is inside
Built to do the job, end to end.
- Al Nadeeb adapter. A concrete subclass of the suite BaseAdapter, registered at import under the al_nadeeb provider code. It implements three message types, declaration submit, declaration status, and health check, with serialise and parse for each over the http://www.customs.gov.qa/nadeeb/v1 namespace.
- Declaration submission envelope. Submission XML carries the broker reference, declaration type and date, importer and exporter parties with TRN, currency and totals (customs value, duty, VAT, payable), and a line block with HS code, description, country of origin, quantity, unit value, duty and VAT rates and amounts.
- Response parsing. Submit responses are parsed into regulator reference, status, message, and a list of structured errors. Status responses return the regulator reference, status, and assessment amount. Health check returns a normalised status.
- HTTP routing. Per-message endpoint suffixes (/declarations, /declarations/status, /health), POST for submit and GET for status and health, plus XML content and accept headers and a per-company Bearer token. Actual dispatch, retry, and the circuit breaker are inherited from the suite orchestrator.
- Seeded Qatar profile. One eh.log.adapter.profile for Al Nadeeb is shipped at install, in mock environment, with retry, circuit breaker threshold, and cooldown defaults, so the module is operational the moment its dependencies are present.
- Qatar declaration types. Six country-scoped declaration type records bound to Qatar: import, export, transit, re-export, temporary admission, and GCC inter-state movement, with the import variant flagged as deferment-eligible.
- HS and tariff overlay. A starter set of Qatar-scoped HS subheadings (mobile phones, portable computers, passenger vehicles, cigarettes, carbonated beverages) with GCC Common Customs Tariff duty rates, zero VAT, and excise reflected on the relevant categories. These append to the universal master without replacing it.
- Mock-mode fixtures and tests. Captured success and rejection submission fixtures and a health check fixture drive a test suite covering registry binding, the seeded profile, well-formed serialisation, success and rejection parsing, and a full mock-mode call round-trip.
Honest about the edges
What this does not do, so nothing surprises you.
- This is an integration add-on, not a standalone app. It depends on and auto-installs on top of the logistics base, the customs core, and the Qatar localisation, which provide the declaration records, master data, and orchestration this pack plugs into.
- The adapter implements three message types only: declaration submit, declaration status, and health check. It does not ship a separate amendment or cancellation message, despite earlier listing copy that referenced one.
- It ships in mock mode by default and round-trips against captured fixtures. Live dispatch requires switching the profile environment and supplying a valid Al Nadeeb API key and endpoint; live regulator behaviour is the authority's, not ours.
- XML is built and parsed against the documented Al Nadeeb field shape, but no XSD schema file is bundled and no schema validation step is performed inside this module.
- The seeded HS and tariff data is a deliberate starter overlay covering a handful of subheadings, not a complete Qatar tariff book. Treat it as a seed to extend, and confirm current rates against the official tariff.
- This module ships no own views, menus, or scheduled jobs. Screens, search, and any status-polling automation come from the customs core and base, not from this pack.
Qatar customs Odoo, Al Nadeeb adapter, Qatar single window customs, GCC customs declaration Odoo, customs declaration submission, HS code tariff Odoo, freight forwarding customs clearance, Qatar import export declaration, GCC Common Customs Tariff, customs broker Odoo 19, logistics localisation Qatar, General Authority of Customs Qatar, re-export transit declaration, Odoo 19 logistics suite, 3PL customs integration
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Please log in to comment on this module