feat: merge user-description-match into ai-categorization with AI-powered description analysis

Consolidate the standalone user-description-match extension into ai-categorization,
adding an AI description analyzer that provides account/VAT suggestions alongside
template matching. The describe transaction dialog now shows AI suggestions with
confidence scores and supports both template-based and AI-based booking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-03-01 19:22:31 +01:00
co-authored by Claude Opus 4.6
parent aabe527f68
commit 1a1c6ba40f
18 changed files with 856 additions and 280 deletions
@@ -9,5 +9,4 @@ export const ENABLED_EXTENSION_IDS: ReadonlySet<string> = new Set([
'calendar',
'enable-banking',
'email',
'user-description-match',
])
@@ -8,7 +8,6 @@ import { invoiceInboxExtension } from '@/extensions/general/invoice-inbox'
import { calendarExtension } from '@/extensions/general/calendar'
import { enableBankingExtension } from '@/extensions/general/enable-banking'
import { emailExtension } from '@/extensions/general/email'
import { userDescriptionMatchExtension } from '@/extensions/general/user-description-match'
export const FIRST_PARTY_EXTENSIONS: Extension[] = [
receiptOcrExtension,
@@ -19,5 +18,4 @@ export const FIRST_PARTY_EXTENSIONS: Extension[] = [
calendarExtension,
enableBankingExtension,
emailExtension,
userDescriptionMatchExtension,
]
@@ -136,19 +136,5 @@ export const EXTENSION_DEFINITIONS: Record<string, ExtensionDefinition[]> = {
"company_settings"
]
},
{
"slug": "user-description-match",
"name": "Beskrivningsmatchning",
"sector": "general",
"category": "operations",
"icon": "TextSearch",
"dataPattern": "core",
"description": "Matcha transaktioner med egna beskrivningar",
"longDescription": "Beskriv vad en transaktion gäller med egna ord och få smarta bokföringsförslag. Systemet lär sig av dina beskrivningar och applicerar automatiskt på framtida transaktioner från samma leverantör.",
"readsCoreTables": [
"transactions",
"mapping_rules"
]
},
],
}
@@ -11,5 +11,4 @@ export const WORKSPACES: Record<string, ComponentType<WorkspaceComponentProps>>
'general/invoice-inbox': dynamic(() => import('@/components/extensions/general/DocumentInboxWorkspace')),
'general/calendar': dynamic(() => import('@/components/extensions/general/CalendarWorkspace')),
'general/enable-banking': dynamic(() => import('@/components/extensions/general/EnableBankingWorkspace')),
'general/user-description-match': dynamic(() => import('@/components/extensions/general/UserDescriptionMatchWorkspace')),
}