---
title: "ICP Declaration"
space: "ERPNext"
url: "https://www.prilk.com/docs/erpnext/localization/europe/icp-declaration"
updated: "2026-05-15"
---

# ICP Declaration

The *Opgaaf Intracommunautaire Prestaties* (ICP, or "ICP declaration")
is the quarterly summary of supplies you've made to VAT-registered
businesses in other EU countries. Every NL company that delivers
intra-community is required to file it — separately from the BTW
return, but the two must reconcile.

## What's reportable

A line lands in your ICP declaration when **all** of these are true:

- The Customer has a Tax Category that matches one of the ICP triggers
  configured in EU Intracommunity Settings (default: `EU-B2B`).
- The Customer's Country is an EU member state (other than yours).
- The Customer has a valid EU VAT number on their `tax_id` field.
- The Sales Invoice (or credit note) has a posting date inside the
  declared period.

ICP splits supplies into:

- **Rubriek 3a — Goods** (intracommunautaire leveringen van goederen)
- **Rubriek 3b — Services** (intracommunautaire diensten)
- **Rubriek 3a + 3b combined** for ABC-triangulation transactions where
  you act as the middle party.

The split is driven by the Item Group of each invoice line — Items in a
group whose `is_stock_item` is checked count as goods; others count as
services. ABC triangulation requires explicit marking on the Sales
Invoice.

## Creating a declaration

Search **ICP Declaration** in the awesomebar → **New**.

1. **Company** — pick the company filing.
2. **From Date / To Date** — typically a calendar quarter
   (2026-01-01 to 2026-03-31 for Q1 2026).
3. **Save**. The app walks every Sales Invoice in the period, filters
   to those matching the ICP triggers, and produces a per-customer
   summary plus a per-invoice drill-down.

The form lists:

- **Customer** (party name)
- **Customer VAT number** (their tax_id)
- **Country** (their country)
- **Total Supplies** (sum of net amounts for the period)
- **Rubriek** (3a goods, 3b services, or both for ABC)

## Reconciliation against the BTW return

This is the critical check: **the ICP total must equal BTW return Box
3b for the same period.** If they don't, the Belastingdienst will spot
it and ask questions.

The app doesn't automatically reconcile — that's a deliberate choice;
if there's a discrepancy you want to investigate it manually rather than
let the system paper over it. Run both reports side-by-side and the
totals should match to the cent. If they don't, common causes:

- A Sales Invoice posted in the period but with a Customer whose Tax
  Category was changed *after* the BTW return was generated.
- A credit note for a previous period being included in this period.
- ABC-triangulation rows counted differently in BTW (Box 3b) vs ICP
  (3a + 3b).

## Refreshing data

Late-arriving invoices are the rule, not the exception. After creating
the declaration, the form's menu has **Refresh Declaration Data** which
re-walks the source invoices and updates the totals.

## Filing

Submission is done outside this module — print the *ICP Declaration
Official* print format, log into Mijn Belastingdienst Zakelijk, type the
per-customer values into the official form, submit.

Direct electronic filing via Digipoort isn't supported yet — on the
roadmap.

## Reports for audit

Two reports back the declaration:

- **ICP Declaration Summary** — by customer, the official filing layout.
  Print and use as input to the Belastingdienst form.
- **ICP Declaration Details** — transaction-level drill-down. Use this
  to investigate any unexpected total or to answer questions from your
  accountant.
