Back to packs

ISO 20022 Payment Message Quality

ISO_20022free

17 data-quality rules for ISO 20022 payment initiation and interbank clearing messages (pain.001, pacs.008, pacs.009, camt.053). Covers BIC format, IBAN mod-97 validity, ISO 4217 currency codes, amount decimal precision per currency, end-to-end and message identifier presence and uniqueness, control-sum footing, charge-bearer and payment-method enums, settlement/requested-execution date logic, structured remittance limits, debtor/creditor completeness, LEI format, and purpose-code validation. Malformed messages are rejected by CSMs (T2, RTP, CHIPS, FedNow) at intake.

17 rules 2863 downloads4.4 avg (227)
iso-20022swiftbicibanpaymentsbankingiso20022pain001pacs008sepa
4.4(227 ratings)

Sign in to rate this pack

Test this pack with your data

Download the template, fill in your data, and see quality results instantly.

Test This Pack

Download & Install

Choose your tool — get a ready-to-run file

Run this on your data? Upload your CSV — we'll auto-map the columns, validate, and report the bad rows.Test my dataWant this certified on your data? Book a 30-min demo.Book a demo
Or use the CLI
$ npx dqhub install iso20022-payments --format soda --table YOUR_TABLE

Reference data required

This contract's checks join against 1 reference table. Load them into your warehouse — DQHub ships the public ones, the rest link to their source. All reference data →

Bundled — download

About this pack

Data quality rules for ISO 20022 financial messaging compliance. Covers: - BIC/SWIFT code format (8 or 11 characters, ISO 9362) - IBAN format with mod-97 check digit validation - Monetary amount format (up to 18 integer + 5 decimal digits) - Currency code validation (ISO 4217) Based on ISO 20022 message definitions and SWIFT standards.

Sources & References

BCBS_239 — Principle 2

Data architecture and infrastructure must use standardized reference data

GDPR — Article 44-49

Cross-border transfer validation requires valid country identification

BCBS_239 — Principle 3

Accuracy of financial reference data including account identifiers

What's included

12format rules
5completeness rules
3consistency rules
2referential integrity rules
2range rules
2uniqueness rules

Checks included (26)

BIC/SWIFT Code Format(bic_code)

Validates that BIC (Business Identifier Code) / SWIFT codes conform to the ISO 9362 standard format. A BIC is either 8 or 11 characters: 4 letters (bank code) + 2 letters (country code per ISO 3166-1) + 2 alphanumeric (location code) + optional 3 alphanumeric (branch code). An 8-character BIC implicitly refers to the primary office.

BIC / BICFI Format Valid

Agent BICs (DbtrAgt/CdtrAgt) must match the ISO 9362 BIC pattern: 4 letters (institution), 2 letters (ISO country), 2 alphanumerics (location), optional 3 alphanumerics (branch).

IBAN Passes Mod-97 Check

Debtor/Creditor IBANs must satisfy the ISO 13616 / ISO 7064 mod-97 checksum (remainder of 1). Invalid IBANs cause payment rejection or misrouting.

IBAN Format and Mod-97 Check(iban)

Validates that International Bank Account Numbers (IBANs) conform to the ISO 13616 format: 2 uppercase letters (country code) followed by 2 check digits and up to 30 alphanumeric characters (the Basic Bank Account Number). The check digits are validated using the mod-97 algorithm per ISO 7064. This rule validates the format structure; full mod-97 computation requires engine-specific implementation.

ISO 20022 Monetary Amount Format(transaction_amount)

Validates that monetary amount values conform to the ISO 20022 ActiveCurrencyAndAmount format. Amounts must be positive numeric values with up to 18 integer digits and up to 5 decimal places. The value must not contain currency symbols, commas, or negative signs. This format is used across ISO 20022 payment messages (pacs, pain, camt).

Amount Decimals Match Currency Exponent

The number of decimal places on an amount must equal the ISO 4217 minor unit for its currency (e.g., 2 for EUR/USD, 0 for JPY, 3 for BHD). Extra or missing decimals violate the schema fractionDigits facet.

ISO Currency Code Validation(currency_code)

Validates that values are valid ISO 4217 currency codes (e.g., USD, EUR, GBP, JPY)

ISO Country Code Validation(country_code)

Validates that values are valid ISO 3166-1 alpha-2 country codes (e.g., US, GB, DE, FR)

IBAN Format Validation(iban)

Validates International Bank Account Number format — 2-letter country code, 2 check digits, and up to 30 alphanumeric characters

Charge Bearer Code Valid

ChrgBr must be one of the ISO 20022 external charge-bearer codes: DEBT (borne by debtor), CRED (creditor), SHAR (shared), SLEV (service level).

Party LEI Format Valid

When present, an organisation identifier LEI must be a 20-character ISO 17442 code: 18 alphanumerics plus 2 check digits.

Unstructured Remittance Within Length

Each Ustrd remittance-information occurrence is capped at 140 characters by the schema. Longer strings are truncated or rejected.

Group Message Id Present

Every message must carry a GrpHdr/MsgId. A missing message identifier makes the message untraceable and is rejected at intake.

Column Not Null

Asserts that a specified column contains no null values. This is the most fundamental completeness check — every row must have a value present in the target column.

End-To-End Id Present

Each transaction must carry PmtId/EndToEndId (or the literal "NOTPROVIDED"). A null value breaks reconciliation between debtor and creditor.

Column Completeness Threshold

Asserts that a column meets a minimum completeness threshold, measured as the percentage of non-null values. Useful when some nulls are acceptable but the overall population rate must stay above a defined level (e.g., 95%).

Debtor And Creditor Names Present

Both Dbtr/Nm and Cdtr/Nm must be populated so the payment can be screened and delivered.

Control Sum Equals Sum Of Transactions

GrpHdr/CtrlSum (and NbOfTxs) must equal the sum (and count) of the contained transaction amounts. A mismatch indicates a truncated or tampered message.

Settlement Date On Or After Creation

In pacs.008, the interbank settlement date (IntrBkSttlmDt) must be on or after the message creation date/time (CreDtTm). Settlement before creation is impossible.

IBAN Country Matches Agent BIC Country

The two-letter country code embedded in the creditor IBAN (positions 1-2) should match the country in the creditor agent BIC (positions 5-6) for domestic instruments; a mismatch flags a routing or data-entry error.

Currency Is ISO 4217 Alpha-3

The instructed-amount currency attribute (Ccy) must be a valid, active ISO 4217 three-letter code present in the reference currency table.

Purpose Code In External Code Set

When Purp/Cd is supplied it must exist in the ISO 20022 External Purpose Code set (e.g., SALA, SUPP, TAXS, INTC). Unknown codes are stripped or rejected by CSMs.

Instructed Amount Positive

The instructed amount must be strictly greater than zero; ISO 20022 payment amounts cannot be zero or negative.

Requested Execution Date Not In Past

pain.001 ReqdExctnDt must be today or a future business date; a back-dated execution date is invalid for initiation.

Transaction / Instruction Id Unique

Within a message, TxId/InstrId must be unique. Duplicate transaction identifiers cause double-processing or rejection.

Column Unique

Validates that all non-null values in a specified column are unique. Useful for natural keys, email addresses, identifiers, and any column where duplicates indicate a data quality issue.