'use client' import { useMemo } from 'react' import { getAccountDescription, type AccountType } from '@/lib/bookkeeping/account-descriptions' import { useBasReference } from '@/lib/bookkeeping/use-bas-reference' import { useAccounts } from '@/lib/reference-data/hooks' import { Tooltip, TooltipTrigger, TooltipContent, } from '@/components/ui/info-tooltip' import { cn } from '@/lib/utils' const TYPE_COLORS: Record = { asset: 'bg-success', liability: 'bg-warning', equity: 'bg-primary', revenue: 'bg-muted-foreground', expense: 'bg-destructive', untaxed_reserves: 'bg-warning', } const TYPE_LABELS: Record = { asset: 'Tillgång', liability: 'Skuld', equity: 'Eget kapital', revenue: 'Intäkt', expense: 'Kostnad', untaxed_reserves: 'Obeskattade reserver', } interface AccountNumberProps { number: string name?: string showName?: boolean size?: 'sm' | 'default' className?: string } export function AccountNumber({ number, name, showName, size = 'default', className, }: AccountNumberProps) { // Loads the BAS chart chunk after mount and re-renders once names and // descriptions for non-hardcoded accounts are available. useBasReference() // Inactive accounts included: historical verifikat keep referencing them // long after they leave the active chart. const { accounts } = useAccounts(false) const companyName = useMemo( () => accounts.find((a) => a.account_number === number)?.account_name, [accounts, number], ) const desc = getAccountDescription(number) // The company's own account name wins over the BAS reference name: a chart // row is user-editable data and must never be visually overridden by our // hardcoded copy. Call sites that already know the row pass `name`; the // rest (verifikat views) fall back to the shared reference-data cache, so // off-catalog accounts (e.g. SIE-imported 1580) still get their names. // The tooltip still shows the BAS name as reference. const displayName = name || companyName || desc?.name const numberElement = ( {number} ) if (!desc) { return ( <> {numberElement} {showName && displayName && ( {displayName} )} ) } return ( {number} {showName && displayName && ( {displayName} )}
{desc.classLabel} · {TYPE_LABELS[desc.type]}
{number} {desc.name}

{desc.explanation}

) }