BkToCstmrStmt/GrpHdr| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| GrpHdr/MsgId | "GBITS" + currency + fromDt + Date.now() | Auto-generated unique message ID, truncated to 35 chars. e.g. GBITSCHF20250301... |
| GrpHdr/CreDtTm | new Date() | ISO 8601 datetime at moment of generation. |
| GrpHdr/MsgPgntn/PgNb | 1 | Always single page (no pagination). |
| GrpHdr/MsgPgntn/LastPgInd | true | Always true — single report per currency. |
| GrpHdr/AddtlInf | SPS/1.7/PROD | Swiss Payment Standards version identifier. |
BkToCstmrStmt/Stmt| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| Stmt/Id | "GBITS-STMT-" + currency + "-" + fromDt + "-" + ts | Unique statement ID per currency & date range. Max 35 chars. |
| Stmt/ElctrncSeqNb | 1 | Always 1 — single statement per generation run. |
| Stmt/CreDtTm | new Date() | Same as GrpHdr/CreDtTm. |
| Stmt/FrToDt/FrDtTm | #date-start | User-selected start date + T00:00:00.000+01:00 |
| Stmt/FrToDt/ToDtTm | #date-end | User-selected end date + T23:59:59.999+01:00 |
Stmt/Acct| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| Acct/Id/IBAN | #iban | User-entered IBAN (whitespace stripped). Links camt.053 to Bexio bank account. If empty, falls back to Acct/Id/Othr/Id = Solana wallet address (34 chars). |
| Acct/Ccy | currency ← STABLECOIN_CONFIG[].currency | Determined by stablecoin: USDC/USDT/PYUSD → USD, EURC/EUROe → EUR, VCHF → CHF |
| Acct/Ownr/Nm | #owner-name | User-entered account owner name. Falls back to Solana wallet address if empty. e.g. Felix Muster or Muster AG |
| Acct/Ownr/PstlAdr | #owner-street, #owner-bldg, #owner-zip, #owner-town, #owner-country | Optional CBPR+ structured postal address. Includes StrtNm, BldgNb, PstCd, TwnNm, Ctry. Only generated if at least one address field is filled.e.g. Hugo street 12, 8050 Zürich, CH |
| Acct/Svcr/FinInstnId/BICFI | SOLNCHZZXXX | Synthetic BIC for "Solana Network, Zurich". Not a real SWIFT code — placeholder for accounting software compatibility. |
Stmt/Bal| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| Bal[OPBD]/Amt | 0.00 | Opening booked balance — always zero (no carried-forward state from previous statements). |
| Bal[OPBD]/CdtDbtInd | CRDT | Always credit. |
| Bal[OPBD]/Dt | #date-start | Statement start date. |
| Bal[CLBD]/Amt | |totalCredit − totalDebit| | Closing booked balance = absolute net of all entries. Computed from tokenTransfer.tokenAmount sums. |
| Bal[CLBD]/CdtDbtInd | net ≥ 0 ? CRDT : DBIT | Direction derived from net balance sign. |
| Bal[CLBD]/Dt | #date-end | Statement end date. |
Stmt/TxsSummry| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| TtlNtries/NbOfNtries | entries.length | Total count of all SPL token transfers in selected currency & date range. |
| TtlNetNtry/Amt | |totalCredit − totalDebit| | Same as CLBD balance amount. |
| TtlCdtNtries/NbOfNtries | count(direction === 'CRDT') | Number of incoming transfers (to wallet). |
| TtlCdtNtries/Sum | Σ amount where direction === 'CRDT' | Sum of all incoming tokenAmount values. |
| TtlDbtNtries/NbOfNtries | count(direction === 'DBIT') | Number of outgoing transfers (from wallet). |
| TtlDbtNtries/Sum | Σ amount where direction === 'DBIT' | Sum of all outgoing tokenAmount values. |
Stmt/Ntry| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| Ntry/NtryRef | loop index + 1 | Sequential 1-based entry number. |
| Ntry/Amt @Ccy | tokenTransfer.tokenAmount + currency | Absolute transfer amount (2 decimal places). Currency code from stablecoin mapping. |
| Ntry/CdtDbtInd | toUserAccount === wallet ? | CRDT if wallet is the receiver, DBIT if sender. Determined by comparing toUserAccount / toTokenAccount to connected wallet address. |
| Ntry/RvslInd | false | No reversal support. Solana transactions are final. |
| Ntry/Sts | BOOK | Always booked — only confirmed on-chain transactions are fetched. |
| Ntry/BookgDt/Dt | tx.timestamp | Block timestamp → YYYY-MM-DD. Same value used for ValDt. |
| Ntry/ValDt/Dt | tx.timestamp | Same as BookgDt — Solana has instant settlement, no value-date distinction. |
| Ntry/AcctSvcrRef | tx.signature | Solana transaction signature, truncated to 35 chars. The unique on-chain transaction ID. |
| Ntry/BkTxCd/Domn/Cd | PMNT | Domain: Payment. |
| Ntry/BkTxCd/Domn/Fmly/Cd | CRDT → RCDT | DBIT → ICDT | Family code: RCDT (Received Credit Transfer) for incoming, ICDT (Issued Credit Transfer) for outgoing. |
| Ntry/BkTxCd/Domn/Fmly/SubFmlyCd | ESCT | Sub-family: European SEPA Credit Transfer. Used for Swiss accounting software compatibility. |
| Ntry/AddtlNtryInf | conditional | If QR reference present: "Gutschrift/Belastung QRR: {qrRef}". Otherwise: "Solana {tokenLabel} via SPL Token". Max 140 chars. |
Ntry/NtryDtls/TxDtls| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
| Refs/AcctSvcrRef | tx.signature | Same as entry-level AcctSvcrRef. Truncated to 35 chars. |
| Refs/EndToEndId | tx.signature | Solana signature reused as end-to-end identifier (35 chars). |
| TxDtls/Amt @Ccy | tokenTransfer.tokenAmount | Repeated at detail level (same as Ntry/Amt). |
| TxDtls/CdtDbtInd | same as Ntry/CdtDbtInd | Repeated at detail level. |
| RltdPties/Dbtr/Nm (when CRDT) |
fromUserAccount | For incoming transfers: sender's Solana wallet address as debtor name. Truncated to 70 chars. |
| RltdPties/Cdtr/Nm (when DBIT) |
toUserAccount | For outgoing transfers: receiver's Solana wallet address as creditor name. Truncated to 70 chars. |
| CdtrAcct/Id/Othr/Id (when DBIT) |
toUserAccount | Creditor account ID — counterparty wallet (34 chars). Only present for outgoing (DBIT) entries. |
TxDtls/RmtInf| camt.053 XPath | Source | Transformation & Notes |
|---|---|---|
Path A — QR Reference present: tx.memo starts with "QRR:"
|
||
| Strd/CdtrRefInf/Tp/CdOrPrtry/Prtry | QRR | Proprietary reference type: Swiss QR-Reference. |
| Strd/CdtrRefInf/Ref | tx.memo | QR reference extracted from memo (strip "QRR:" prefix). Standard 27-digit Swiss QR reference. |
| Strd/AddtlRmtInf | "SOL-" + tokenLabel + " " + signature | Concatenated provenance string. Max 140 chars. |
| Path B — No QR Reference: plain memo or no memo | ||
| Ustrd | "SOL-" + tokenLabel + " " + signature | Unstructured remittance: stablecoin label + tx signature. Max 140 chars. e.g. SOL-USDC 4sGjMW1sU... |
| Token Label | SPL Mint Address | Decimals | ISO 4217 Ccy | Report Grouping |
|---|---|---|---|---|
| USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | 6 | USD | One camt.053 per currency |
| USDT | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB | 6 | USD | Merged with USDC into USD report |
| PYUSD | 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo | 6 | USD | Merged with USDC into USD report |
| EURC | HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr | 6 | EUR | One camt.053 per currency |
| EUROe | 2VhjJ9WxaGC3EZFwJG9BDUs9KxKCAjQY4vgd1qxgYWVg | 6 | EUR | Merged with EURC into EUR report |
| VCHF | AhhdRu5YZdjVkKR3wbnUDaymVQL2ucjMQ63sZ3LFHsch | 6 | CHF | Sole CHF stablecoin |