From c1c0652e77ed46d4bdffac6f12d46720ac80851d Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Sat, 28 Feb 2026 08:01:43 +0100 Subject: [PATCH] Fix AcctSvcrRef lookup for camt.053 files with Ntry-level reference (#3293) The SEPA parser only checked NtryDtls/TxDtls/Refs/AcctSvcrRef for the account service reference. In camt.053 files (e.g. from Raiffeisenbank), AcctSvcrRef is located at the Ntry level instead. When missing, the fallback CUSTOM key could collide for entries with the same booking date and description, violating the unique constraint on accountServiceRef. Add Ntry-level AcctSvcrRef as intermediate fallback before the CUSTOM pattern. --- src/subdomains/supporting/bank-tx/bank-tx/dto/sepa-entry.dto.ts | 1 + .../supporting/bank-tx/bank-tx/services/sepa-parser.service.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/subdomains/supporting/bank-tx/bank-tx/dto/sepa-entry.dto.ts b/src/subdomains/supporting/bank-tx/bank-tx/dto/sepa-entry.dto.ts index 57a92825e9..31200447ae 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx/dto/sepa-entry.dto.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx/dto/sepa-entry.dto.ts @@ -1,6 +1,7 @@ import { ChargeRecord, SepaAddress, SepaAgent, SepaAmount, SepaCdi } from './sepa.dto'; export interface SepaEntry { + AcctSvcrRef: string; BookgDt: { Dt: string; }; diff --git a/src/subdomains/supporting/bank-tx/bank-tx/services/sepa-parser.service.ts b/src/subdomains/supporting/bank-tx/bank-tx/services/sepa-parser.service.ts index 9a5ae84558..5ff1691d58 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx/services/sepa-parser.service.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx/services/sepa-parser.service.ts @@ -73,6 +73,7 @@ export class SepaParser { return Util.asyncMap(entries, async (entry) => { const accountServiceRef = entry?.NtryDtls?.TxDtls?.Refs?.AcctSvcrRef ?? + entry?.AcctSvcrRef ?? `CUSTOM/${file.BkToCstmrStmt.Stmt?.Acct?.Id?.IBAN}/${entry.BookgDt.Dt}/${entry.AddtlNtryInf}`; const creditDebitIndicator = this.toString(entry?.NtryDtls?.TxDtls?.CdtDbtInd);