DEV Community

Cover image for Pre-Submission Checks for Irish AIS Customs Declarations
iCustoms
iCustoms

Posted on

Pre-Submission Checks for Irish AIS Customs Declarations

AIS declaration validation is the most practical way to cut customs penalty risk in Ireland. Most penalties trace back to data problems a pre-submission check can catch: an inconsistent commodity code, an origin claim with no evidence attached or a declared value that doesn't reconcile with the invoice. This post outlines a validation workflow for declarations filed through Revenue's Automated Import System (AIS).

The Problem: Errors That Replicate

Revenue's Audit and Examination Programme reviews declarations after clearance and can look back across a business's history. A defect in your data pipeline, such as the wrong code mapped to a product, is not a single error. It is replicated on every filing that touches that product.

Four Checks to Run Before Submission

Each check below maps to one of the four violations behind most Irish customs penalty triggers.

1. Classification consistency

Compare the commodity code on the new declaration with the codes used for the same product in previous filings. Flag any change for human review.

2. Origin evidence

If a preferential rate is claimed, confirm that proof of origin is attached and still current.

3. Value reconciliation

Check declared values against the commercial invoice and packing list. They should reconcile every time.

4. Licence requirements

Flag restricted goods that need a licence and hold submission until one is recorded.

A Simple Validation Sketch

def validate(declaration, history, documents):
    issues = []

    prior_codes = history.codes_for(declaration.product_id)
    if prior_codes and declaration.commodity_code not in prior_codes:
        issues.append("Commodity code differs from previous filings")

    if declaration.preference_claimed and not documents.has_current_origin_proof():
        issues.append("Preferential origin claimed without proof of origin")

    if not reconciles(declaration.customs_value, documents.invoice):
        issues.append("Declared value does not reconcile with invoice")

    if declaration.requires_licence and not declaration.licence_ref:
        issues.append("Licence required but not recorded")

    return issues
Enter fullscreen mode Exit fullscreen mode

Handling a NOT_RELEASED Status

If a declaration is flagged before release and returns a NOT_RELEASED status, treat it as a priority. An unresolved NOT_RELEASED outcome is one of the most direct routes into a penalty discussion.

Log Every Correction

Keep a consistent record of every declaration and every fix. Errors you find and correct yourself are viewed very differently from errors a Revenue review finds first.

Want to see this kind of validation logic running on live AIS declarations? Watch a demo.

Top comments (0)