camt.052 vs MT942: The Intraday Report, Field by Field

camt.052 and MT942 side by side: what each intraday report carries, the balances camt.052 may omit, MT942's floor limit and totals, and where banks diverge.

·Published ·10 min read·#treasury#bank-connectivity#integration

Connectivity 6 of 17 see the reading order →

Reviewed and fact-checked

On this page

camt.052 is the ISO 20022 BankToCustomerAccountReport and MT942 is the SWIFT Interim Transaction Report — the two intraday messages a bank sends between statements — and the whole difference between them and their end-of-day siblings is that neither is a statement: MT942 carries no balances, camt.052 may carry none, and camt.052 may include pending items as well as booked ones. The end-of-day trio is covered elsewhere — the camt.053 field walkthrough, the MT940 tag walkthrough, the BAI2 record walkthrough — and the camt.054 notification is the third member of the camt family. This post is for the day an intraday feed is on the table: what each message actually holds, where the two are structurally different, and the places two banks' published guides show them diverging from the standard.

The usual reason to care is an intraday cash position or same-day reconciliation. Both messages exist so the treasury does not wait for the statement; both are routinely fed into the same importer as the statement; and both are wrong to treat as one. The MT940 vs camt.053 vs BAI2 comparison explains the family choice; here the question is what the intraday message is.

What ISO says camt.052 is for

The Message Definition Report is unusually direct. The BankToCustomerAccountReport "is sent by the account servicer to an account owner or to a party authorised by the account owner to receive the message. It can be used to inform the account owner, or authorised party, of the entries reported to the account, and/or to provide the owner with balance information on the account at a given point in time." The usage section lists what it can be used for — "report pending and booked items; provide balance information" — and closes with the sentence that decides most design arguments: "For a statement, the Bank-to-Customer Account Statement message should be used."

Three things in that scope drive everything below. Reported entries, not booked ones. And/or balance information — a report is allowed to be one or the other. And pending items are in scope, which no statement carries.

Payments Canada's usage guideline for camt.052.001.08 restates the same scope and usage text verbatim and restricts the base message for its own community — which is what a usage guideline is, and what your bank's version of it will do too.

The skeleton, and where it differs from camt.053

camt.052 has three building blocks — GroupHeader, Report, SupplementaryData — mirroring camt.053's GroupHeader, Statement, SupplementaryData. Inside <Rpt> the shape is the one a camt.053 reader already knows: identification, an optional pagination block, sequence numbers, a creation timestamp, an optional from-to period, the account, then balances and entries.

Elementcamt.052 <Rpt>camt.053 <Stmt>Why it matters
<RptPgntn> / <StmtPgntn>[0..1][0..1]A long report can be paged; message-level and report-level pagination may not both be present (rule C16 in the MDR)
<ElctrncSeqNb>[0..1][0..1]Gap check between reports — but intraday sequences reset per bank policy, so the check needs the bank's guide
<LglSeqNb>[0..1][0..1]The legal sequence belongs to the statement; on a report it is rarely populated
<FrToDt>[0..1][0..1]The period the report covers — on an intraday report, the window since the last one
<CpyDplctInd>[0..1][0..1]Whether this is a copy or a duplicate; an importer that ignores it books the same report twice
<Bal>[0..*][1..*]The structural difference. A statement must carry at least one balance; a report may carry none
<Ntry>[0..*][0..*]Same entry type; on a report the status may be pending

The multiplicities come straight from the MDR's element tables for camt.052.001.08 and camt.053.001.08. The one worth writing on the wall is the balance: [0..*] on the report, [1..*] on the statement. Every camt.053 importer I have seen assumes a balance exists. Point it at a camt.052 feed and the first report with movements and no <Bal> block is a null reference in the cash position at 11:20.

Entry status: the field that makes it a report

Each <Ntry> carries a mandatory <Sts>, and in the .08 message it is an external code set (ExternalEntryStatus1Code) rather than an enumeration baked into the schema. The published list distinguishes booked from pending from information-only, and an intraday report is where the non-booked values actually appear — a statement contains booked entries only, so a camt.053 parser can get away with never reading the status. A camt.052 parser cannot: a pending entry applied to the position and then booked in the next report is a double count, and a pending entry that is later rejected never becomes a booking at all.

Two rules that survive contact with real feeds:

  • Position from booked, exposure from pending. Apply booked entries to the running balance; show pending ones as expected movements, never as cash.
  • Key on the bank's entry reference, not on amount and date. The same booking can appear as pending in one report, booked in a later one, and again in the statement. The reference is what lets you recognise it; amount-and-date matching will happily count it three times.

Balances on an intraday report

When a bank does send balances on a camt.052, the types come from the same external code set the statement uses (ExternalBalanceType1Code). A statement leans on the opening and closing booked and available types; an intraday report typically leans on the interim types — ITBD, interim booked, and ITAV, interim available — which say "this is where the account stands at the time in <CreDtTm>, not at end of day". Which of these your bank populates, and whether the interim balance includes or excludes pending items, is not in the standard; it is in the bank's guide, and it is the first question to ask before building anything on it.

Neither intraday message is a statement. MT942 has no balances; camt.052 is allowed to have none. Design the position as movements applied to the last statement, not as a reading of the report.

MT942: the whole message in ten tags

MT942 predates all of this and is correspondingly compact. HSBC's usage guideline describes the message as eleven building blocks; Rabobank's format description says what it is for in one sentence — the report "reports debits or credits to the account since the last account statement was made available. Only intraday transactions are reported." The chain, with the multiplicities both guides give:

TagNameMult.FormatWhat it holds
:20:Transaction Reference Number[1..1]16xThe sender's reference for this message
:21:Related Reference[0..1]16xRarely used; Rabobank never provides it
:25:Account Identification[1..1]35xThe account reported
:28C:Statement Number/Sequence Number[1..1]5n[/5n]Report number and optional page — see the deviations below
:34F:Debit/(Debit and Credit) Floor Limit Indicator[1..1]3!a[1!a]15dCurrency, optional D/C mark, amount: the threshold below which entries are not reported individually
:34F:Credit Floor Limit Indicator[0..1]3!a[1!a]15dA separate credit floor, when the bank reports one
:13D:Date/Time Indication[1..1]YYMMDDHHMM±HHMMWhen the report was produced, with a UTC offset — the intraday timestamp the position is "as of"
:61:Statement Line[0..n]as in MT940One booked movement, same nine subfields as the MT940 :61: line
:86:Information to Account Owner[0..1]6*65xUnder its :61:, bank-specific like the MT940's — HSBC states it carries unstructured transaction description
:90D:Number and Sum of Entries (debits)[0..1]5n3!a15dCount, currency and total of the debit entries in the report
:90C:Number and Sum of Entries (credits)[0..1]5n3!a15dCount, currency and total of the credit entries in the report

What is absent is the point: there is no :60a: opening balance and no :62a: closing balance. The :90D:/:90C: totals are the only arithmetic the message offers, and they check the report against itself — the count and sum of the :61: lines above them — not against a balance. An MT942 importer therefore has exactly one integrity test, and it is worth running: if the sum of debit :61: lines does not equal :90D:, the file is truncated or the parser is wrong.

:13D: deserves a sentence. It is the only timestamp in the message and it carries a sign and offset, so two banks reporting "as of 14:30" can mean different instants. A position that merges intraday reports from several banks needs to normalise this field to one clock before comparing anything.

Where the two banks diverge from the standard

This is the part no standard tells you and both guides do.

Rabobank's format description is explicit that its MT942 export "is not completely according to SWIFT format", and lists the deviations: :28C: is a fixed 1/1; :34F: is present twice with fixed values <currency>C0,00 and <currency>D0,00; :90C: and :90D: omit the number of entries between the tag and the currency, "deviating from the SWIFT standard"; the transaction type code in :61: is a fixed NMSC for Rabo accounts; and the whole message can exceed 2,000 characters. Every one of those breaks a parser written from the field formats above.

HSBC's guideline keeps the standard formats but states its own conventions: :28C: is always padded to five digits (:28C:00235/0001), the account in :25: is reported without hyphens, and :86: is "populated with unstructured information of transaction description downloaded from the bank", with content that "depends on the nature of the underlying transaction/practice of the country".

Two banks, two different things done to the same tag. The lesson is the one every post in this cluster ends on: the bank's guide is the contract, and an intraday feed needs one parser profile per bank exactly as the statement does.

camt.052 or MT942: which one to ask for

If the bank offers both, the answer is usually the ISO message, for three reasons that are about the data rather than the format war.

  • Structure. camt.052 carries the entry status, typed balances, the bank transaction code and structured references. MT942 carries a :61: line and whatever the bank put in :86:.
  • Pending items. camt.052 can say an item is pending. MT942 has no status at all — everything in it is presented as booked.
  • Pagination and duplicates. camt.052 has <RptPgntn> and <CpyDplctInd>; MT942 has :28C: and the bank's discipline.

Ask for MT942 when the receiving system only parses FIN, when the bank's camt.052 is a thin wrapper that carries no more than its MT942 does (compare the two guides — it happens), or when the intraday feed is a stopgap on the way to a migration that is already scheduled.

What usually goes wrong

  • Feeding the intraday message into the statement importer. It parses — the shapes are similar enough — and then a report with no balance, or a pending entry, silently corrupts the position. Route intraday messages to a path that expects both.
  • Anchoring on the report. The position is the last statement's closing balance plus booked intraday movements, reset when the next statement lands. An interim balance in a camt.052 is a cross-check, not the anchor.
  • Matching on amount and date. Pending, then booked, then on the statement: the same movement three times. Key on the bank's entry reference.
  • Ignoring :34F:. A non-zero floor limit means small movements are deliberately missing from the report. It is a one-line check and it prevents a week of "why does intraday never reconcile".
  • Assuming one :28C: convention. One bank pads, one bank fixes it at 1/1, a third increments it. Sequence checks on MT942 have to be configured per bank, not written once.

Once the intraday feed is in, the same statement data meets the same matching problem the end-of-day one does — and that matching step is where a redesign pays off. The bank reconciliation teardown splits it into what stays deterministic (amount, date, reference within tolerance), what an AI step can read (the free text in :86: or <AddtlNtryInf>), and what stays with a named human.


See also the camt.053 field walkthrough, the camt.054 notification and the MT940 tags line by line.

Primary sources

camt.052 scope, usage, building blocks and element multiplicities verified against ISO's Message Definition Report Part 2 for the 2018–2019 maintenance (camt.052.001.08) and Payments Canada's camt.052.001.08 usage guideline; MT942 tags, formats and multiplicities against HSBC's MT942 usage guideline and Rabobank's MT942 format description (v2.3). SWIFT's own MT942 specification sits behind the user handbook and is not reproduced. Bank deviations are named where the two guides state them — your bank's guide is the contract.

Frequently asked questions

(5)

What is the difference between camt.052 and camt.053?

camt.052 is the BankToCustomerAccountReport and camt.053 is the BankToCustomerStatement. Structurally they are near-twins — one GroupHeader, then a repeating per-account block, then entries — but the ISO definition draws two lines between them. camt.053 contains booked entries only and its Balance block is mandatory (one or more), because a statement is the balance-anchored record of the day. camt.052 may report pending as well as booked items, and its Balance block is optional (zero or more), so an intraday report can legitimately arrive with movements and no balance at all. ISO's own usage note says it plainly: for a statement, use the statement message.

What is an MT942?

MT942 is the SWIFT Interim Transaction Report: the FIN message a bank sends during the day with the debits and credits booked since the last statement or the last interim report. Its tag chain is short — :20: reference, :25: account, :28C: statement/sequence number, :34F: floor limit (once for debits, optionally again for credits), :13D: the date and time the report was produced, then :61: statement lines with optional :86: detail, and :90D:/:90C: with the number and sum of debit and credit entries. It carries no opening or closing balance; those belong to the MT940.

What does field :34F: mean in an MT942?

Field :34F: is the floor limit indicator: a currency, an optional D or C mark, and an amount, stating the threshold below which individual entries are not reported in the message. The first :34F: is mandatory and applies to debits (or to both sides when no second :34F: follows); a second, optional :34F: gives a separate credit floor. In practice many banks set it to zero so every movement is reported — Rabobank's export, for example, fixes both at 0,00 — which makes the field boilerplate to parse and still worth reading, because a non-zero limit means the report is deliberately incomplete.

Which balances does a camt.052 intraday report carry?

Whatever the bank chooses to send, including none. In camt.052 the Balance block is optional and repeating, unlike camt.053 where at least one balance is mandatory. When a bank does include balances on an intraday report it typically uses the interim balance types from the ISO external code set — ITBD for interim booked and ITAV for interim available — alongside or instead of the opening and closing types a statement carries. A cash position built on camt.052 therefore has to be explicit about which balance type it trusts, and about what it does when the report arrives with entries and no balance.

Can I build an intraday cash position on MT942 or camt.052 alone?

Only as a running calculation on top of the last statement, and only if you keep the two apart. Neither message is a statement: MT942 has no balance tags at all, and camt.052 may omit balances and may include pending items. The robust pattern is the previous camt.053 or MT940 closing balance as the anchor, the intraday movements applied on top — booked entries only, unless you have decided how to treat pending ones — and a reset when the next end-of-day statement lands. Treating an interim report as a statement is how an intraday position ends up double-counting a booking that the statement then reports again.