Files
accounted/components/bookkeeping/AccountVatTreatmentSelect.tsx
T
Mattsson 86f0b70fdd fix(vat): complete account treatment enforcement (#1593)
* fix(vat): complete account treatment enforcement

* docs(api): refresh account endpoint skill

* fix(mcp): preserve ruta 05 compatibility

* test(vat): seed migration constraint fixtures

* docs(vat): clarify treatment precedence

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 23:45:04 +02:00

53 lines
1.7 KiB
TypeScript

'use client'
import { useTranslations } from 'next-intl'
import { Label } from '@/components/ui/label'
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'
import {
vatTreatmentsForAccountClass,
type AccountVatTreatment,
} from '@/lib/vat/account-vat-treatment'
interface AccountVatTreatmentSelectProps {
value: AccountVatTreatment | 'none'
onValueChange: (value: AccountVatTreatment | 'none') => void
accountClass: number | null
}
export function AccountVatTreatmentSelect({
value,
onValueChange,
accountClass,
}: AccountVatTreatmentSelectProps) {
const t = useTranslations('chart_of_accounts')
const isRelevant = accountClass === 3 ||
(accountClass !== null && accountClass >= 4 && accountClass <= 6)
const treatments = vatTreatmentsForAccountClass(accountClass)
return (
<div className="space-y-2">
<Label>{t('vat_treatment_label')}</Label>
<Select
value={value}
onValueChange={(next) => onValueChange(next as AccountVatTreatment | 'none')}
disabled={!isRelevant}
>
<SelectTrigger aria-label={t('vat_treatment_label')}>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="none">{t('vat_treatment_none')}</SelectItem>
{treatments.map((treatment) => (
<SelectItem key={treatment} value={treatment}>
{t(`vat_treatment_${treatment}`)}
</SelectItem>
))}
</SelectContent>
</Select>
<p className="text-xs text-muted-foreground">
{isRelevant ? t('vat_treatment_help') : t('vat_treatment_not_applicable')}
</p>
</div>
)
}