From fb6af7264fa97a147013c66151068e4a6248804e Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:32:46 +0100 Subject: [PATCH] fix: Allow EUR invoice generation without KYC Level 50 (#3041) Add forInvoice parameter to getBankInfo() to bypass vIBAN requirement for invoice generation. This allows users without KYC Level 50 to generate invoice PDFs for EUR transactions. - buy.service.ts: Add optional forInvoice parameter to getBankInfo() - buy.controller.ts: Pass forInvoice=true for invoice endpoint - transaction.controller.ts: Pass forInvoice=true for invoice endpoint - transaction-helper.ts: Pass forInvoice=true for statement generation --- src/subdomains/core/buy-crypto/routes/buy/buy.controller.ts | 1 + src/subdomains/core/buy-crypto/routes/buy/buy.service.ts | 5 +++-- .../core/history/controllers/transaction.controller.ts | 1 + .../supporting/payment/services/transaction-helper.ts | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/subdomains/core/buy-crypto/routes/buy/buy.controller.ts b/src/subdomains/core/buy-crypto/routes/buy/buy.controller.ts index f48058be40..599d1e8afa 100644 --- a/src/subdomains/core/buy-crypto/routes/buy/buy.controller.ts +++ b/src/subdomains/core/buy-crypto/routes/buy/buy.controller.ts @@ -178,6 +178,7 @@ export class BuyController { buy, buy.asset, user.wallet, + true, ); if (!Config.invoice.currencies.includes(currency.name)) { diff --git a/src/subdomains/core/buy-crypto/routes/buy/buy.service.ts b/src/subdomains/core/buy-crypto/routes/buy/buy.service.ts index ead87290f8..ac3cd4d617 100644 --- a/src/subdomains/core/buy-crypto/routes/buy/buy.service.ts +++ b/src/subdomains/core/buy-crypto/routes/buy/buy.service.ts @@ -355,6 +355,7 @@ export class BuyService { buy?: Buy, asset?: Asset, wallet?: Wallet, + forInvoice?: boolean, ): Promise { // asset-specific personal IBAN if ( @@ -390,8 +391,8 @@ export class BuyService { return this.buildVirtualIbanResponse(virtualIban, selector.userData, buy?.bankUsage); } - // EUR: vIBAN is mandatory - if (selector.currency === 'EUR') { + // EUR: vIBAN is mandatory (except for invoice generation) + if (selector.currency === 'EUR' && !forInvoice) { throw new BadRequestException('KycRequired'); } diff --git a/src/subdomains/core/history/controllers/transaction.controller.ts b/src/subdomains/core/history/controllers/transaction.controller.ts index 5e0eecb5f8..1c677ad7ad 100644 --- a/src/subdomains/core/history/controllers/transaction.controller.ts +++ b/src/subdomains/core/history/controllers/transaction.controller.ts @@ -467,6 +467,7 @@ export class TransactionController { buy, buy?.asset, buy?.user?.wallet, + true, ); return { diff --git a/src/subdomains/supporting/payment/services/transaction-helper.ts b/src/subdomains/supporting/payment/services/transaction-helper.ts index eb2de7212e..04273b6d90 100644 --- a/src/subdomains/supporting/payment/services/transaction-helper.ts +++ b/src/subdomains/supporting/payment/services/transaction-helper.ts @@ -540,6 +540,7 @@ export class TransactionHelper implements OnModuleInit { buy, buy?.asset, buy?.user?.wallet, + true, )); return { @@ -601,6 +602,7 @@ export class TransactionHelper implements OnModuleInit { buy, buy?.asset, buy?.user?.wallet, + true, ); return {