Skip to main content

Finance Test Data: A Field Set and Sample Schema for Payment and Banking Systems

A finance test dataset that passes a real validator needs more than plausible numbers. It needs check-digit-valid routing numbers, the correct NACHA entry-detail field positions, and ISO 20022 message identifiers that follow the immutability rules across interbank hops. This page names all 16 required fields, shows a 3-table sample schema, and lists 5 test scenarios.

Field set (16) for payment and banking systems

Cover ACH batch and entry-detail fields (including check-digit-valid routing/account illustrations), card authorization fields using processor-published test PANs only, and ISO 20022 EndToEndId as an immutable correlation key. Every value is synthetic or sandbox-published; none are live PANs.

Finance field set (16)
#FieldTypeFormat / constraintCheck digit / membership / parent
1msg_idstringMax35Text, 1 to 35 chars, mandatory in GrpHdrNew per message at each hop
2instr_idstringMax35Text, optional, PmtId/InstrIdMay change per hop
3end_to_end_idstringMax35Text, mandatory; NOTPROVIDED when none suppliedImmutable across the whole chain
4tx_idstringMax35Text, mandatory, PmtId/TxIdConstant in interbank space
5uetruuidUUID v4, optional in PmtIdUnchanged across all legs
6debtor_ibanstringISO 13616; max 34MOD 97-10 check digits (pos 3 to 4)
7creditor_ibanstringsame as debtor_ibansame
8rdfi_routing_numberstring(9)9 digits; pos 9 check digitABA 3-7-1 mod 10 = 0
9dfi_account_numberstring(17)NACHA entry detail pos 13 to 29Parent: receiving institution (field 8)
10ach_transaction_codestring(2)Positions 02 to 0322/27/32/37; prenotes 23/28/33/38
11amount_centsintegerPositions 30 to 39; zero for prenotesUnsigned, zero-padded, no decimal
12trace_numberstring(15)Positions 80 to 94Must ascend within a batch
13card_panstringMax 19 digitsLuhn modulus-10 (sandbox PANs only)
14card_expirystringMM/YYCardholder data with full PAN
15cardholder_namestringfree textCardholder data with full PAN
16charge_bearerenumDEBT, CRED, SHAR, SLEVpacs.008 ChrgBr membership

Compliance framing (PCI DSS 6.5.5)

PCI DSS v4.0.1 Requirement 6.5.5 addresses live PANs in pre-production: they are not used unless the environment is inside the CDE with full applicable controls (Cloudaware / WithPCI indexes of the standard, retrieval date 2026-08-01). This is a general industry framing, not a Generate-Data compliance guarantee. Prefer processor sandbox card numbers and synthetic ACH values.

Sample schema: ACH batch, entry detail, and card authorization

Model ach_batch as parent, ach_entry_detail as child keyed by batch_id, and card_authorization as an independent table that uses only processor-published test PANs. Keep EndToEndId stable across retries.

ach_batch

ach_batch sample
batch_idodfi_routing_numbercompany_nameeffective_entry_date
1123456780ACME SYNTH CO2026-08-03
2098765438ACME SYNTH CO2026-08-04

ach_entry_detail

Row 3 is a prenote (code 23) with zero amount. Trace numbers ascend within each batch.

ach_entry_detail sample
trace_numberbatch_idtransaction_coderdfi_routing_numberdfi_account_numberamount_centsindividual_name
1234567800000011222223334450001000023450000125000AVERY SYNTHFIELD
1234567800000021272223334450001000023460000004999BRIN TESTWORTHY
1234567800000031230987654380001000090010000000000CASS NULLINGTON
0987654380000012321234567800001000077770000250000DEV PLACEHOLDER

card_authorization (sandbox PANs)

Rows 1 to 2 are Stripe published test Visa numbers; rows 3 to 4 are Authorize.net sandbox numbers (docs retrieved 2026-08-01). Not issued cards.

card_authorization sample
auth_idcard_pancard_expirycardholder_nameamount_centscharge_bearer
1424242424242424212/30AVERY SYNTHFIELD125000SHAR
2400000000000000212/30BRIN TESTWORTHY4999DEBT
337000000000000212/30CASS NULLINGTON250000CRED
4542400000000001512/30DEV PLACEHOLDER899SLEV

Fixed-position record layout and EndToEndId immutability

NACHA files are fixed-position. A single off-by-one shift corrupts every downstream field. pacs.008 EndToEndId must remain immutable for the life of the payment so reconciliations and duplicate detection stay honest.

NACHA entry-detail offsets
PositionsFieldNote
02 to 03ach_transaction_codeMandatory 2-digit code
13 to 29dfi_account_numberLeft justified, space padded, leftmost 17
30 to 39amount_cents10 digits; must be zero for prenote codes
80 to 94trace_numberODFI routing 8 + 7-digit ascending sequence

Worked ABA 3-7-1 for illustrative routing 123456780: 3(1+4+7) + 7(2+5+8) + (3+6+0) = 36 + 105 + 9 = 150; 150 mod 10 = 0 (check passes). Shape-valid only; not claimed as an assigned institution. Luhn on Stripe sandbox PAN 4242424242424242 is the published success card (docs.stripe.com/testing, retrieved 2026-08-01).

Test scenarios

  1. End-to-end reconciliation: msg_id/instr_id change per hop; end_to_end_id/tx_id/uetr stay byte-identical (assert join finds one payment).
  2. Prenote amount invariant: codes 23/28/33/38 with non-zero amount_cents must fail (row 3 pattern).
  3. Check-digit rejection: transpose one digit in rdfi_routing_number; ABA 3-7-1 rejects before submit.
  4. Trace-number ordering: insert a descending trace inside a batch; batch validator flags it.
  5. Replay with the same EndToEndId (pass) vs minting a new EndToEndId on retry (immutability fail).

Generate a larger version

Open the free generator, define the ACH and card fields your stack needs, and export. Anonymous use is capped at 100 rows, 6 fields, 3 exports, and CSV only. Signed-in formats: csv, json, xml, parquet, xlsx, jsonl, hf-datasets. Keep PANs on published sandbox lists only. No live PANs.

Frequently asked questions

Can production data be used in testing?

PCI DSS v4.0.1 Requirement 6.5.5 states that live PANs are not used in pre-production environments, except where those environments are included in the CDE and protected in accordance with all applicable PCI DSS requirements ([Cloudaware PCI DSS v4.0.1 index](https://ce.prod.cloudaware.com/frameworks/pci-dss-v4.0.1/06/05/05/), retrieval date 2026-08-01). In practice, payment testing uses processor-published test card numbers that work only in sandbox environments and are not issued cards. For ACH testing, production routing numbers and account numbers are replaced with illustrative values that satisfy the check-digit formula without belonging to any real institution or account.

How do you verify that production data is not used in test environments?

Common approaches include confirming that card values are drawn from a processor's published sandbox list and that the test environment has no network path to the production CDE. Synthetic payment records generated from a schema rather than extracted from production contain no real customer account data and address this separation at the data layer. The obligation to scope, assess, and document the control set belongs to each organisation; this is a general industry framing, not compliance guidance.

How should development and production environments be separated?

PCI DSS Requirement 6.5.5 addresses this at the data layer: live PANs are not used in pre-production environments unless those environments sit inside the CDE and carry the same controls ([Cloudaware PCI DSS v4.0.1 index](https://ce.prod.cloudaware.com/frameworks/pci-dss-v4.0.1/06/05/05/), retrieval date 2026-08-01; [WithPCI 6.5 summary](https://withpci.com/requirements/6/6.5), retrieval date 2026-08-01). Both are third-party indexes of the standard; the requirement text was not read from a PCI Security Standards Council document, so quote the requirement number rather than presenting wording as verbatim standard text. Synthetic records are generated rather than copied, so no real PAN, expiry date, or cardholder name moves between environments. Each organisation is responsible for its own scope and control set; this page provides a general framing only, and Generate-Data makes no compliance guarantee.

Generate a custom dataset · Back to all guides