- Expand BAS reference from ~180 to ~1,276 accounts (full BAS Kontoplan 2026) with K2 exclusion flags, per-class data files, and computed SRU codes - Evolve invoice inbox into unified document inbox handling invoices, receipts, and government letters with AI-powered classification (Claude Haiku Vision) - Add multi-pass document-to-transaction matching engine with greedy assignment for both supplier invoices (reference/amount/date/name) and receipts (weighted amount/merchant/date scoring) - Add supplier invoice matching in transaction ingest pipeline - Inject booking template suggestions into AI extraction prompts - Surface matched documents in swipe categorization UI with one-tap booking - Auto-activate missing BAS accounts during SIE import against full reference - Add K2 filter toggle in Chart of Accounts manager - Add receipt confirmation route with BFNAR representation fields - Add database migrations for K2 support and document matching columns - Remove obsolete extension migration scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
3.1 KiB
TypeScript
50 lines
3.1 KiB
TypeScript
import dynamic from 'next/dynamic'
|
|
import type { ComponentType } from 'react'
|
|
|
|
export interface WorkspaceComponentProps {
|
|
userId: string
|
|
}
|
|
|
|
type WorkspaceKey = `${string}/${string}`
|
|
|
|
const WORKSPACES: Record<WorkspaceKey, ComponentType<WorkspaceComponentProps>> = {
|
|
// General
|
|
'general/receipt-ocr': dynamic(() => import('@/components/extensions/general/ReceiptOcrWorkspace')),
|
|
'general/ai-categorization': dynamic(() => import('@/components/extensions/general/AiCategorizationWorkspace')),
|
|
'general/ai-chat': dynamic(() => import('@/components/extensions/general/AiChatWorkspace')),
|
|
'general/push-notifications': dynamic(() => import('@/components/extensions/general/PushNotificationsWorkspace')),
|
|
'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')),
|
|
// Restaurant
|
|
'restaurant/food-cost': dynamic(() => import('@/components/extensions/restaurant/FoodCostWorkspace')),
|
|
'restaurant/earnings-per-liter': dynamic(() => import('@/components/extensions/restaurant/EarningsPerLiterWorkspace')),
|
|
'restaurant/pos-import': dynamic(() => import('@/components/extensions/restaurant/PosImportWorkspace')),
|
|
'restaurant/tip-tracking': dynamic(() => import('@/components/extensions/restaurant/TipTrackingWorkspace')),
|
|
// Construction
|
|
'construction/rot-calculator': dynamic(() => import('@/components/extensions/construction/RotCalculatorWorkspace')),
|
|
'construction/project-cost': dynamic(() => import('@/components/extensions/construction/ProjectCostWorkspace')),
|
|
// Hotel
|
|
'hotel/revpar': dynamic(() => import('@/components/extensions/hotel/RevparWorkspace')),
|
|
'hotel/occupancy': dynamic(() => import('@/components/extensions/hotel/OccupancyWorkspace')),
|
|
// Tech
|
|
'tech/billable-hours': dynamic(() => import('@/components/extensions/tech/BillableHoursWorkspace')),
|
|
'tech/project-billing': dynamic(() => import('@/components/extensions/tech/ProjectBillingWorkspace')),
|
|
// E-commerce
|
|
'ecommerce/shopify-import': dynamic(() => import('@/components/extensions/ecommerce/ShopifyImportWorkspace')),
|
|
'ecommerce/multichannel-revenue': dynamic(() => import('@/components/extensions/ecommerce/MultichannelRevenueWorkspace')),
|
|
// Export
|
|
'export/eu-sales-list': dynamic(() => import('@/components/extensions/export/EuSalesListWorkspace')),
|
|
'export/vat-monitor': dynamic(() => import('@/components/extensions/export/VatMonitorWorkspace')),
|
|
'export/intrastat': dynamic(() => import('@/components/extensions/export/IntrastatWorkspace')),
|
|
'export/currency-receivables': dynamic(() => import('@/components/extensions/export/CurrencyReceivablesWorkspace')),
|
|
}
|
|
|
|
export function getWorkspaceComponent(
|
|
sector: string,
|
|
slug: string
|
|
): ComponentType<WorkspaceComponentProps> | null {
|
|
return WORKSPACES[`${sector}/${slug}` as WorkspaceKey] ?? null
|
|
}
|