ISO 20022 Payment Message Quality
ISO_20022free17 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.
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.