From 50a32848212043e1e098f2cf25a9f744df44dc1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=BCnther?= Date: Thu, 16 Oct 2025 11:45:58 +0200 Subject: [PATCH] - Only create synthetic asset profiles for MANUAL data sources that are NOT FEE/INTEREST/LIABILITY - Skip asset profile validation for FEE/INTEREST/LIABILITY transaction types - Made dataSource optional in the DTO to allow CSV imports without DataSource column --- apps/api/src/app/import/import.service.ts | 11 +++++++++++ apps/api/src/app/order/create-order.dto.ts | 3 ++- .../src/app/services/import-activities.service.ts | 9 +++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 69ec781c3..9e24b8638 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -743,6 +743,17 @@ export class ImportService { } if (!assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })]) { + // Skip asset profile validation for FEE, INTEREST, and LIABILITY + // as these transaction types don't require asset profiles + if (['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { + assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })] = { + currency, + dataSource, + symbol + }; + continue; + } + const assetProfile = { currency, ...( diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts index ba7a1d868..af87fd93e 100644 --- a/apps/api/src/app/order/create-order.dto.ts +++ b/apps/api/src/app/order/create-order.dto.ts @@ -44,7 +44,8 @@ export class CreateOrderDto { customCurrency?: string; @IsEnum(DataSource) - dataSource: DataSource; + @IsOptional() + dataSource?: DataSource; @IsISO8601() @Validate(IsAfter1970Constraint) diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index e70c7b2c7..e0e8a2cb3 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -60,23 +60,28 @@ export class ImportActivitiesService { const dataSource = this.parseDataSource({ item }); const symbol = this.parseSymbol({ content, index, item }); const currency = this.parseCurrency({ content, index, item }); + const type = this.parseType({ content, index, item }); activities.push({ currency, dataSource, symbol, + type, accountId: this.parseAccount({ item, userAccounts }), comment: this.parseComment({ item }), date: this.parseDate({ content, index, item }), fee: this.parseFee({ content, index, item }), quantity: this.parseQuantity({ content, index, item }), - type: this.parseType({ content, index, item }), unitPrice: this.parseUnitPrice({ content, index, item }), updateAccountBalance: false }); - if (dataSource === DataSource.MANUAL) { + if ( + dataSource === DataSource.MANUAL && + !['FEE', 'INTEREST', 'LIABILITY'].includes(type) + ) { // Create synthetic asset profile for MANUAL data source + // (except for FEE, INTEREST, and LIABILITY which don't require asset profiles) assetProfiles.push({ currency, symbol,