| 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 | 10006 |
| Technical Name |
eh_log_l10n_kw_customs |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Logistics Kuwait Customs
Submit Kuwait customs declarations and read their status from inside Odoo, on the same adapter engine the rest of the logistics suite runs on.
Why this module
Logistics Kuwait Customs
Real submit and status calls
A Kuwait Customs subclass of the suite base adapter serialises a declaration into the documented General Administration of Customs JSON envelope, POSTs it over HTTPS with a bearer key, parses the response, and surfaces the regulator-issued declaration number, status, and any field-level rejection errors.
Kuwait types and HS overlay
Six country-scoped declaration types (import, export, transit, re-export, temporary admission, GCC inter-state movement) append to the shared catalogue, plus a starter set of Kuwait HS subheadings carrying GCC Common Customs Tariff default duty rates. VAT stays at zero on the 2026 baseline.
Resilience you do not re-code
Submission rides the suite call orchestrator: correlation ids, exponential-backoff retry, a per-profile circuit breaker, and dead-letter capture on persistent failure. This pack ships the Kuwait profile (3 retries, 5-failure breaker, 120s cooldown) and the request and response shapes; the engine does the rest.
Day in the life
A broker files a Kuwait import on a compact vehicle
A clearing agent opens a customs declaration in Odoo, picks the Kuwait import type, and adds a line for HS 870321. The line inherits the 5 percent GCC tariff duty rate from the Kuwait HS overlay and computes the duty (no VAT in Kuwait). On submit, the adapter serialises the parties, totals, and lines into the General Administration of Customs JSON envelope and dispatches it. The regulator returns an ACCEPTED status and a reference like KWC-2026-456789012, which lands back on the declaration. A later status call reads the assessment back. If the importer is not registered, the rejection error code and field come back instead of a silent failure, so the agent fixes and resubmits.
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 response is parsed into structured errors with code, message, and offending field (for example IMPORTER_NOT_REGISTERED), not swallowed, so the broker knows exactly what to correct.
A non-JSON or truncated submit response raises a clear validation error rather than corrupting the declaration; the status and health-check parsers degrade to a safe unknown or OK marker instead of throwing.
When a line omits a duty or VAT rate, it inherits the rate from the matched Kuwait HS subheading, so a vehicle line picks up 5 percent and most consumer electronics correctly compute zero duty and zero VAT.
After repeated failures the inherited circuit breaker opens for the configured cooldown and the message is dead-lettered with its correlation id, so a regulator outage does not hammer the endpoint or lose the request.
The Kuwait import type carries the deferment flag from the shared catalogue, so duty-deferment handling in the customs module applies to Kuwait imports without extra setup.
The shipped profile runs in mock mode against captured fixtures, so installation and CI exercise the exact production code path with zero network until you switch the environment and add credentials.
What is inside
Built to do the job, end to end.
- Kuwait Customs adapter. A concrete BaseAdapter subclass (provider code kw_customs) that serialises declaration submit and status messages into the General Administration of Customs JSON contract, parses regulator replies, and registers itself in the suite adapter registry at import time.
- Default adapter profile. An eh.log.adapter.profile data record for Kuwait Customs with the sandbox endpoint, API-key auth, a 60s timeout, 3 retry attempts, and a 5-failure circuit breaker on a 120s cooldown. Environment defaults to mock.
- Six Kuwait declaration types. Country-scoped variants appended to the shared declaration-type catalogue: import (deferment-enabled), export, transit, re-export, temporary admission, and GCC inter-state movement, each ordered by direction and sequence.
- Kuwait HS overlay. A small starter set of Kuwait-scoped HS subheadings (smartphones, portable computers, small passenger vehicles, cigarettes, medicaments) with GCC Common Customs Tariff default duty rates and zero VAT.
- Offline test suite. Fixture-backed tests cover registry registration, profile seeding, JSON serialisation, success and rejection parsing, and a full mock-mode round trip. Live sandbox tests are written and skipped unless the sandbox env var and credentials are set.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a country add-on, not a standalone app. It requires eh_log_base, eh_log_customs, and the Kuwait localization, and auto-installs only when the customs module and Kuwait pack are both present.
- Out of the box the profile runs in mock mode against bundled fixtures. Live submission needs the environment switched off mock, a real General Administration of Customs endpoint, and an API key supplied via credentials, environment variable, or system parameter.
- The adapter is implemented to documented Kuwait Customs contract patterns. Offline fixture tests are green; live sandbox round trips are not yet verified against the real regulator and are gated behind an opt-in env flag.
- Only declaration submit, declaration status, and health-check message types are implemented. Other message flows raise a clear unsupported-type error.
- The HS overlay is a starter set of a few subheadings, not a complete Kuwait tariff schedule. Extend or import the full HS catalogue for production coverage.
- Kuwait applies no VAT on the 2026 baseline, so all shipped VAT rates are zero. Excise and any future tax changes must be maintained by you.
- Duty and VAT line maths, deferment accounts, and the declaration workflow live in the shared customs module, not here. This pack supplies the Kuwait wiring on top.
Odoo Kuwait customs, Kuwait customs declaration Odoo, General Administration of Customs Kuwait, GCC Common Customs Tariff Odoo, Kuwait HS code duty rate, customs declaration adapter Odoo 19, freight forwarding Kuwait Odoo, import export transit declaration, re-export temporary admission Kuwait, GCC inter-state movement customs, logistics customs integration Odoo, broker reference declaration number, 3PL customs clearance Kuwait, Odoo 19 Community logistics, customs duty calculation Odoo
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 19 Community
Real-time fiscalisation of customer invoices and credit notes with the Mauritius Revenue Authority e-Invoicing (E...
The Canada country pack for the ERP Heritage Employment Hero integration
Imports finalised pay run journals from the Employment Hero payroll platform (KeyPay) into Odoo Community account...
Please log in to comment on this module