A B2B parcel declaration workflow for Northern Ireland is a short chain of decisions: classify the movement, test whether the goods are at risk, check UKIMS cover, then route the data to the right declaration. If you build or maintain systems that feed TSS, it helps to model this logic explicitly so every rule is easy to trace.
Step 1: Classify the Movement
Only business to business parcels enter this workflow. Consumer parcels for personal use need no customs declaration, and correspondence sits outside the rules entirely.
Step 2: Model At-Risk Status and Route
Goods can count as not at risk on duty rates alone, or move under UKIMS held by either party. Here is the logic as Python-style pseudocode, based on the published rules for declaring B2B parcels through TSS.
def not_at_risk_by_duty_rate(goods):
if goods.in_gb_free_circulation:
return goods.eu_rate == 0
if goods.from_outside_eu_uk:
# UK rate no more than 3 points below the EU rate
return goods.uk_rate + 3 >= goods.eu_rate
return False
def declaration_route(goods, sender, receiver):
ukims = sender.has_ukims or receiver.has_ukims # one side is enough
if ukims and not goods.at_risk_of_moving_to_eu \
and goods.for_uk_end_consumers:
return "IMMI" # no full declaration, no duty
return "FULL_DECLARATION" # EU-rate duty may apply
Step 3: Pick the EORI Prefix
eori_prefix = "XI" if (biz.established_in_ni or biz.fixed_place_in_ni) else "GB"
Step 4: Pass the Right Data
In TSS, goods that qualify under UKIMS go through Internal Market Movement Information (IMMI). Others need a full declaration. Either way, goods are still categorised as Standard, Category 1 or Category 2. If a carrier declares for you, pass it the UKIMS authorisation number and the associated EORI number.
Step 5: Store the Evidence
TSS does not decide UKIMS eligibility or at-risk status. Store the evidence behind each decision for five years against the movement it supports.
Edge Cases Worth Coding For
- Mixed order books: flag each parcel as B2B or consumer, because carriers handle the two differently.
- Entry summary declarations: only some parcel movements need one, so don't reuse a freight rule here.
- Declaration channel: TSS, a carrier's service or a customs intermediary can submit, and each must apply the same duty-rate, UKIMS and processing conditions.
- UKIMS-EIDR users: businesses declaring with their own software can apply the same UKIMS conditions to parcel movements. Prefer not to build this logic yourself? iCustoms runs the UKIMS eligibility and not-at-risk checks against your goods data for you. Watch a demo.
Top comments (0)