DEV Community

iCustoms
iCustoms

Posted on

Modelling the Irish Customs Declaration Lifecycle in AIS

An Irish customs declaration moves through a defined set of statuses in Revenue's AIS (imports) and AES (exports). Once submitted, it is registered, then accepted after automated checks. Revenue risk-scores it, and it is either released or selected for a documentary or physical control. Treating that lifecycle as a state model helps forwarders build reliable, alert-driven workflows.

The Status Model

Each status tells you who has to act next. Here is a simple reference table you can drop into a tracking tool:

STATUS                  MEANING                                        WHO ACTS
REGISTERED              Declaration received by Revenue                Wait
ACCEPTED                Passed initial automated checks                Wait
UNDER_CONTROL           Selected for documentary or physical checks    Monitor closely
AWAITING_SUPPLEMENTARY  More information or documents needed           You
RELEASED                Cleared, goods can be released                 Move the goods
NOT_RELEASED            Not cleared, goods cannot be released          Investigate
Enter fullscreen mode Exit fullscreen mode

A control is not automatically a problem. It does need to be understood rather than ignored, so route UNDER_CONTROL and AWAITING_SUPPLEMENTARY straight to a person.

Validate Before You Submit

Most rejections and checks trace back to data that was wrong before submission. The AIS and AES filing guide for Irish freight forwarders lists the common causes, and they translate neatly into pre-submission checks:

def pre_submission_checks(dec):
    issues = []
    if dec.eori != dec.registered_eori:
        issues.append("EORI does not match registration")
    if dec.claims_preference and not dec.has_origin_proof:
        issues.append("Preference claimed without proof of origin")
    if dec.wants_pva and not dec.pva_elected:
        issues.append("Postponed VAT Accounting not elected")
    if dec.direction == "export" and not dec.lodged_before_departure:
        issues.append("AES declaration must be lodged before departure")
    for auth in dec.authorisations:  # AEO, special procedures, PVA
        if not auth.referenced:
            issues.append(f"{auth.type} authorisation not referenced")
    return issues
Enter fullscreen mode Exit fullscreen mode

This is illustrative logic, not Revenue's rule set, but it mirrors the mistakes the source guide flags.

Set Realistic Timing Alerts

Most declarations that are not flagged clear within minutes to hours. A documentary or physical control can add days. Alert on anything sitting in ACCEPTED longer than your normal window.

Plan for AIS V2

AIS V2 introduces Centralised Clearance for Import and a revised Annex B data structure. If you map data into AIS, plan for that structural change now.

Want to see pre-submission validation running on real AIS and AES workflows? Watch a demo of iAIS and iAES.

Top comments (0)