...
Flow description: Flöde autogiro i ProBill.xlsx
Old file layout according to: https://www.bankgirot.se/globalassets/dokument/tekniska-manualer/autogiro_tekniskmanual_sv.pdf
Camt.054:
...
Requirements Specification – CAMT.054 Payments in ProBill
**Date:** 2026-03-04
**| Scope:** Incoming payments and CAMT.054 outgoing payments. Pain.002 handling is **not** covered by this specification .
---
## above in this page.
1. Purpose and Scope
This requirements specification describes how ProBill interprets and stores payments from CAMT.054 files (ISO 20022 standard, message type
...
BkToCstmrDbtCdtNtfctn, version
...
camt.054.001.
...
02).
...
Included:
...
...
- Identification of incoming and outgoing payment files
...
- Which XML tags are read
...
- Logic for calculating key variables (incoming payments)
...
- Mapping to
...
-
dbo.
...
Payment(incoming payments)
...
- Mapping to
...
-
dbo.
...
LedgerPayoutResult(outgoing payments)
...
- Error handling and status assignment (incoming
...
- payments)
...
...
2. Identification of File Type
A file is identified as CAMT.054 if the XML content contains the element name
...
BkToCstmrDbtCdtNtfctn.
...
XML namespace:
...
urn:iso:std:iso:20022:tech:xsd:camt.054.001.
...
02
The file type is then determined by
...
GrpHdr/
...
AddtlInf:
...
| Condition |
|---|
...
| File type |
|---|
...
| Target table |
|---|
...
GrpHdr/AddtlInf |
...
| does not contain |
...
DEBT | Incoming payment |
...
dbo.Payment | ||
GrpHdr/AddtlInf contains DEBT | Outgoing payment | dbo.LedgerPayoutResult |
3. XML Structure and Tags Read
The CAMT.054 file has a hierarchical structure with three levels that are read:
...
Document/BkToCstmrDbtCdtNtfctn...
├──
...
GrpHdr ← Message header (one per file)
└── Ntfctn ← Notification / account (one or more per file)
├── Id
├── CreDtTm
├── Acct ← Receiver account
└── Ntry ← Transaction / entry (one or more per Ntfctn)
├── BookgDt/Dt
├── ValDt/Dt
└── NtryDtls/TxDtls ← Transaction details
├── Refs
├── AmtDtls
├── RltdPties ← Involved parties
├── Purp
├── RltdDts
└── RmtInf ← Remittance information
├── Ustrd
└── Strd ← Structured remittance (one or more)...
3.1 Message Header – GrpHdr
Read once per file from
...
/Document/
...
BkToCstmrDbtCdtNtfctn.
...
| XML tag |
|---|
...
| Description | |
|---|---|
GrpHdr/MsgId |
| Unique message ID |
...
...
GrpHdr/CreDtTm | Message creation date and time |
...
...
GrpHdr/AddtlInf | Additional information. Used to distinguish incoming payments (no |
...
DEBT) from outgoing payments ( |
...
DEBT present). |
...
...
3.2 Account Information – Ntfctn
Read per
...
Ntfctn node. Represents the receiving account (seller's account).
...
| XML tag |
|---|
...
| Description |
|---|
...
Ntfctn/Id | Unique notification ID. Mandatory per standard |
...
| . |
...
...
Ntfctn/CreDtTm | Notification creation date and time |
...
...
Ntfctn/Acct/Id/ |
...
IBAN |
| Receiver account IBAN number |
...
...
Ntfctn/Acct/Id/Othr/ |
...
Id |
| Receiver account BBAN (e.g. bankgiro number) |
...
...
Ntfctn/Acct/Id/Othr/SchmeNm/ |
...
Cd |
| Account scheme code (e.g. |
...
BBAN) |
...
...
Ntfctn/Acct/Ownr/Id/OrgId/Othr/ |
...
Id |
| Account owner organisation ID |
...
>**Note:** A CAMT.054 file may contain multiple`Ntfctn` Ntfctn nodes. Each`Ntfctn` Ntfctn has a unique`Id` Id used to ensure each transaction is linked to the correct account.###
3.3 Transaction Details – Ntry / TxDtls / Strd
Read per transaction. An
...
Ntfctn can have multiple
...
Ntry nodes, and each
...
Ntry can have multiple
...
TxDtls and/or
...
Strd nodes.
...
Transactions without a
...
Strd element are still included (e.g. Swish payments).
...
| XML tag |
|---|
...
| Description |
|---|
...
Ntfctn/Ntry/BookgDt/ |
...
Dt | Booking date |
...
...
Ntfctn/Ntry/ValDt/ |
...
Dt | Value date |
...
...
TxDtls/Refs/ |
...
AcctSvcrRef | Bank's internal transaction ID |
...
...
TxDtls/Refs/ |
...
EndToEndId |
| End-to-end reference. Used for Swish to identify the mobile number. |
...
...
TxDtls/AmtDtls/TxAmt/ |
...
Amt | Transaction amount |
...
...
TxDtls/AmtDtls/TxAmt/Amt/ |
...
@Ccy |
| Currency code for the transaction amount (XML attribute) |
...
...
TxDtls/RltdPties/Dbtr/ |
...
Nm | Payer name |
...
...
TxDtls/RltdPties/Dbtr/PstlAdr/ |
...
StrtNm | Payer street address |
...
...
TxDtls/RltdPties/Dbtr/PstlAdr/ |
...
PstCd | Payer postal code |
...
...
TxDtls/RltdPties/Dbtr/PstlAdr/ |
...
TwnNm |
| Payer city |
...
...
TxDtls/RltdPties/Dbtr/Id/OrgId/Othr/ |
...
Id |
| Payer organisation number |
...
...
TxDtls/RltdPties/DbtrAcct/Id/ |
...
IBAN |
| Payer account number (IBAN) |
...
...
TxDtls/RltdPties/DbtrAcct/Id/Othr/ |
...
Id | Payer account number (BBAN or other). Also used as Swish mobile number. |
...
...
TxDtls/RltdPties/DbtrAcct/Id/Othr/SchmeNm/ |
...
Prtry | Account scheme name for payer's account |
...
...
TxDtls/RltdPties/UltmtDbtr/ |
...
Nm | Ultimate debtor name (if different from Dbtr) |
...
...
TxDtls/RltdPties/UltmtDbtr/PstlAdr/ |
...
StrtNm | Ultimate debtor street address |
...
...
TxDtls/RltdPties/UltmtDbtr/PstlAdr/ |
...
PstCd | Ultimate debtor postal code |
...
...
TxDtls/RltdPties/UltmtDbtr/PstlAdr/ |
...
TwnNm | Ultimate debtor city |
...
...
TxDtls/RltdPties/UltmtDbtr/Id/OrgId/Othr/ |
...
Id |
| Ultimate debtor organisation number |
...
...
TxDtls/RltdPties/Cdtr/ |
...
Nm |
| Payee (creditor) name |
...
...
TxDtls/RltdPties/CdtrAcct/Id/ |
...
IBAN | Payee IBAN |
...
...
TxDtls/RltdPties/CdtrAcct/Id/Othr/ |
...
Id |
| Payee BBAN (bankgiro) |
...
...
TxDtls/Purp/ |
...
Cd |
| Payment purpose code. |
...
Swish: WEBI, SUPP or REFU. |
TxDtls/RltdDts/ |
...
AccptncDtTm |
| Acceptance date/time |
...
...
TxDtls/RmtInf/ |
...
Ustrd |
| Unstructured remittance message (free text) |
...
...
RmtInf/Strd/RfrdDocInf/ |
...
Nb |
| Invoice number |
...
...
RmtInf/Strd/RfrdDocAmt/ |
...
CdtNoteAmt |
| Credit note amount |
...
...
RmtInf/Strd/RfrdDocAmt/CdtNoteAmt/ |
...
@Ccy |
| Currency for credit note amount (XML attribute) |
...
...
RmtInf/Strd/RfrdDocAmt/ |
...
RmtdAmt |
| Remitted amount (actual amount paid) |
...
...
RmtInf/Strd/RfrdDocAmt/RmtdAmt/ |
...
@Ccy | Currency for remitted amount (XML attribute) |
...
...
RmtInf/Strd/CdtrRefInf/ |
...
Ref | OCR reference |
RmtInf/Strd/ |
...
AddtlRmtInf | Additional remittance information. May appear |
...
| multiple times |
...
| – all repetitions are concatenated |
...
| . Used |
...
| for Swish payments (contains |
...
OrderID: |
...
| ). |
...
...
4. Logic for Key Variables
...
4.1 Swish Identification (IsSwish)
A payment is classified as Swish
...
(IsSwish = 1) if both of the following conditions are met:
Condition 1 – Prerequisite: TxDtls/Refs/EndToEndId is NOT NULL
Condition 2 – At least one of:
| Check | XML source | Condition |
|---|---|---|
| Free text contains order ID | RmtInf/Strd/AddtlRmtInf | Contains the string 'OrderID:' |
| Purpose code is a Swish code | TxDtls/Purp/Cd | Is one of: WEBI, SUPP, REFU |
If EndToEndId is NULL, IsSwish = 0 is always returned.
4.2 ReferenceID
| Priority | Source | Comment |
|---|---|---|
| 1 | RmtInf/Strd/CdtrRefInf/Ref | OCR reference |
| 2 | RmtInf/Strd/RfrdDocInf/Nb | Invoice number |
| 3 | Extracted from RmtInf/Strd/AddtlRmtInf | Only if IsSwish = 1: text between 'OrderID: ' and '-' |
| 4 | RmtInf/Strd/AddtlRmtInf (if not Swish) | Used as reference if none of the above are present |
...
...
| 5 |
...
RmtInf/Ustrd | Unstructured message as last resort |
...
...
4.3 Amount
...
| Priority | Source | Comment |
|---|---|---|
| 1 | RmtInf |
...
/Strd/RfrdDocAmt/ |
...
RmtdAmt | Remitted amount – actual payment |
...
...
| 2 |
...
- |
...
| + |
...
RmtInf/Strd/RfrdDocAmt/ |
...
CdtNoteAmt | Credit note |
...
| stored with |
...
| negative sign |
...
...
| 3 |
...
TxDtls |
...
/AmtDtls/TxAmt/ |
...
Amt | Transaction amount |
...
...
| 4 | 0 | Fallback |
...
4.4 EntryDate
...
EntryDate = Ntfctn/Ntry/BookgDt/Dt (NULL if empty)
...
4.5 PaymentDate
...
| Priority | Source |
|---|---|
| 1 | TxDtls |
...
/RltdDts/ |
...
AccptncDtTm |
...
| 2 |
...
Ntfctn |
...
/Ntry/ValDt/ |
...
Dt |
...
| 3 |
...
Ntfctn |
...
/Ntry/BookgDt/ |
...
Dt |
5. Incoming Payments – Mapping to dbo.Payment
...
| Column | XML source / Logic |
|---|
...
FileID |
| File ID (link to source file) |
...
Created | Ntfctn/CreDtTm |
...
| – converted to DATETIME2. |
...
| Fallback: |
...
1900-01- |
...
01. |
...
SellerReference | Ntfctn |
...
/Acct/Ownr/Id/OrgId/Othr/ |
...
Id | |
SellerAccount | IBAN prefixed with |
...
[IBAN] |
...
| , otherwise BBAN prefixed with |
...
| scheme code |
...
EntryDate |
| See §4.4. Fallback: |
...
1900-01- |
...
01. | |
PaymentDate | See §4.5. Fallback: |
...
1900-01- |
...
01. | |
ArchiveID | TxDtls/Refs/AcctSvcrRef |
ReferenceID |
| See §4.2. |
...
| Only if |
...
| numeric |
...
| – otherwise NULL |
...
| . | |
Comment | (1) Non-numeric reference value, (2) |
...
Swish: 'Swish från mobilnummer 0' |
...
| + mobile number, (3) otherwise |
...
| NULL |
...
OCRMessage | RmtInf |
...
/Strd/ |
...
AddtlRmtInf – raw additional |
...
| info. NULL if empty. |
...
PayeeName | UltmtDbtr/Nm |
...
| if present, otherwise |
...
Dbtr/Nm | |
PayeeAddress | UltmtDbtr |
...
/PstlAdr/ |
...
StrtNm if present, otherwise |
...
Dbtr/PstlAdr/ |
...
StrtNm | |
PayeeZipCode | UltmtDbtr |
...
/PstlAdr/ |
...
PstCd if present, otherwise |
...
Dbtr/PstlAdr/ |
...
PstCd. |
...
| Spaces |
...
| removed. |
...
PayeeCity | UltmtDbtr |
...
/PstlAdr/ |
...
TwnNm if present, otherwise |
...
Dbtr/PstlAdr/ |
...
TwnNm | |
PayeeOrgNumber | UltmtDbtr/Id/OrgId/Othr/ |
...
Id if present, otherwise |
...
Dbtr/Id/OrgId/Othr/ |
...
Id | |
PaymentAccount | (1) |
...
CdtrAcct/Id/ |
...
IBAN, (2) |
...
CdtrAcct/Id/Othr/ |
...
Id, (3) fallback to SellerAccount |
...
PayeeAccount | (1) |
...
[IBAN] |
...
| + |
...
DbtrAcct/Id/ |
...
IBAN, (2) scheme |
...
| + |
...
DbtrAcct/Id/Othr/ |
...
Id, (3) |
...
DbtrAcct/Id/Othr/ |
...
Id | |
Amount | See §4.3. NOT NULL. |
...
...
Currency | RmtdAmt/@Ccy → CdtNoteAmt/@Ccy → TxAmt/@Ccy |
CurrencyID | Lookup on currency code |
ReturnMaterialCode | NULL |
RecordCode | 6 if IsSwish = 1, otherwise 3 |
CorrectionCode | 0 (fixed) |
SourceID | 1 if debt collection/post-watch account, otherwise |
...
0 | |
ErrorID | See §6.1 |
...
StatusID |
...
| See §6.2 |
...
Handled |
...
| See §6.3 |
...
...
6. Incoming Payments – Error Handling and Status Assignment
...
6.1 ErrorID – Error
...
Code
...
| Priority | Condition | ErrorID | Description |
|---|---|---|---|
| 1 |
| ReferenceID missing/non-numeric |
...
| and |
...
| Amount = 0 |
...
1 | Invoice not found |
...
...
| 2 |
...
| ReferenceID missing or non-numeric |
...
6 |
| Incorrect reference number |
...
...
| 3 |
...
| Amount = 0 |
...
38 | Unreasonable amount |
...
...
| 4 |
...
| SellerAccount is a post-watch account |
...
8 |
| Post-watch |
...
...
| 5 |
...
| EntryDate missing |
...
43 |
| Booking date missing |
...
...
| 6 |
...
| PaymentDate missing |
...
44 |
| Payment date missing |
...
...
| 7 |
...
| No errors |
...
NULL | – |
...
6.2 StatusID – Status
...
| Condition |
|---|
...
| StatusID |
|---|
...
| Status |
|---|
...
...
| ReferenceID missing/non-numeric, |
...
| or |
...
| Amount = 0, |
...
| or |
...
| EntryDate missing, |
...
| or |
...
| PaymentDate missing |
...
2 | Error |
| None of the above |
...
0 | New |
...
6.3 Handled – Direct Flagging
Records with an identified error are marked as handled immediately upon import (Handled = current timestamp)
...
.
...
Records are flagged immediately if:
...
ReferenceID is missing/non-numeric, Amount = 0, EntryDate is missing, or PaymentDate is missing.
...
All other records are left unflagged (Handled = NULL)
...
.
...
...
7. Outgoing Payments – Mapping to dbo.LedgerPayoutResult
...
7.1 Identification
A record is treated as an outgoing payment if
...
GrpHdr/
...
AddtlInf contains the string
...
DEBT.
...
7.2 Link to LedgerPayout
The outgoing payment is linked
...
via TxDtls/Refs/
...
EndToEndId cast as integer → matched against
...
LedgerPayout.ID. CustomerID is retrieved from the matching
...
record.
...
7.3 Mapping
...
| Column | XML source / Logic |
|---|
...
FileID | File ID (link to source file) |
...
Inserted |
...
| Current timestamp at import |
...
Handled |
...
| NULL on INSERT |
...
StatusID | 2 |
...
| (= Payout executed) |
...
FileDate | Ntfctn/CreDtTm |
...
| – converted to DATETIME |
...
PayerAccount | Ntfctn |
...
/Acct/Id/ |
...
IBAN if present, otherwise |
...
Ntfctn/Acct/Id/Othr/ |
...
Id | |
Reason | NULL |
Amount | (1) RmtdAmt |
...
| , (2) |
...
-CdtNoteAmt, (3 |
...
) TxAmt/ |
...
Amt | |
PayoutDate | ValDt/Dt |
...
| if present, otherwise |
...
BookgDt/ |
...
Dt | |
Name | TxDtls |
...
/RltdPties/Cdtr/ |
...
Nm |
PayeeAccount |
CdtrAcct/Id/ |
...
IBAN if present, otherwise |
...
CdtrAcct/Id/Othr/ |
...
Id | |
PayoutID | TxDtls |
...
/Refs/ |
...
EndToEndId cast as integer |
...
CustomerID |
| Retrieved from |
...
| matching |
...
LedgerPayout record via |
...
PayoutID |
...
7.4 Post-processing
After INSERT, each outgoing payment record is marked as handled (Handled = current timestamp). If outgoing payment records were inserted, a subsequent process for result handling is triggered.
...
...
*Based on existing implementation in ProBill version: 2.0.4833.0. XML standard: ISO 20022 camt.054.001.02.*
---