'use client' import { useTranslations } from 'next-intl' import { useState } from 'react' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Checkbox } from '@/components/ui/checkbox' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import type { CompanySettings } from '@/types' interface TaxSettingsFormProps { settings: CompanySettings /** Ledger-derived signal: EU sales postings exist (3108/3308/3107). */ euSalesDetected?: boolean /** Ledger-derived signal: utdelning/ägarlån postings exist (2898/2393/2893). */ kuSignalDetected?: boolean /** Invoice-derived signal: invoices with ROT/RUT deductions exist. */ rotRutSignalDetected?: boolean } export function TaxSettingsForm({ settings, euSalesDetected = false, kuSignalDetected = false, rotRutSignalDetected = false, }: TaxSettingsFormProps) { const t = useTranslations('settings_tax_form') const [vatRegistered, setVatRegistered] = useState(settings.vat_registered ?? false) const [fSkatt, setFSkatt] = useState(settings.f_skatt ?? true) const [paysSalaries, setPaysSalaries] = useState(settings.pays_salaries ?? false) // Fall back to pays_salaries for rows saved before the registration flag // existed; saving attests the shown value. const [employerRegistered, setEmployerRegistered] = useState( settings.employer_registered ?? settings.pays_salaries ?? false, ) const [employerSeasonal, setEmployerSeasonal] = useState(settings.employer_seasonal ?? false) const [momsPeriod, setMomsPeriod] = useState(settings.moms_period || '') const [vatTaxableBaseOver40m, setVatTaxableBaseOver40m] = useState( settings.vat_taxable_base_over_40m ?? false, ) const [hasEuTrade, setHasEuTrade] = useState(settings.vat_has_eu_trade ?? false) const [psEnabled, setPsEnabled] = useState(settings.periodisk_sammanstallning_enabled ?? false) const [kuEnabled, setKuEnabled] = useState(settings.kontrolluppgifter_enabled ?? false) const [rotRutEnabled, setRotRutEnabled] = useState(settings.rot_rut_enabled ?? false) const [ossEnabled, setOssEnabled] = useState(settings.oss_enabled ?? false) const [iossEnabled, setIossEnabled] = useState(settings.ioss_enabled ?? false) const [intrastatEnabled, setIntrastatEnabled] = useState(settings.intrastat_enabled ?? false) const [punktskattEnabled, setPunktskattEnabled] = useState(settings.punktskatt_enabled ?? false) const [fyllnadEnabled, setFyllnadEnabled] = useState( settings.fyllnadsinbetalning_enabled ?? false, ) const isEnskildFirma = settings.entity_type === 'enskild_firma' const months = [ t('month_jan'), t('month_feb'), t('month_mar'), t('month_apr'), t('month_may'), t('month_jun'), t('month_jul'), t('month_aug'), t('month_sep'), t('month_oct'), t('month_nov'), t('month_dec'), ] return (
{/* Entity type: read-only */}

{t('entity_form_heading')}

{settings.entity_type === 'aktiebolag' ? t('entity_aktiebolag') : t('entity_enskild_firma')}

{t('entity_form_help')}

{/* F-skatt */}

{t('tax_vat_heading')}

setFSkatt(v === true)} />

{t('f_skatt_help')}

{ const checked = value === true setVatRegistered(checked) if (checked && vatTaxableBaseOver40m) setMomsPeriod('monthly') }} />

{t('vat_registered_help')}

{euSalesDetected && vatRegistered && (!hasEuTrade || !psEnabled) && (

{t('eu_trade_suggestion_title')}

{t('eu_trade_suggestion_help')}

)} {vatRegistered && (

{t('vat_number_help')}

{t('moms_period_help')}

{ const checked = value === true setVatTaxableBaseOver40m(checked) if (checked) setMomsPeriod('monthly') }} />

{t('vat_taxable_base_over_40m_help')}

{ const checked = value === true setHasEuTrade(checked) if (!checked) setPsEnabled(false) }} />

{t('vat_has_eu_trade_help')}

{momsPeriod === 'yearly' && !hasEuTrade && !isEnskildFirma && (

{t('vat_filing_method_help')}

)} {hasEuTrade && (
setPsEnabled(value === true)} />

{t('periodisk_enabled_help')}

{psEnabled && (

{t('periodisk_help')}

{t('periodisk_filing_method_help')}

)}
)}
)}
{/* Tax contact: required for SKV-filings */}

{t('tax_contact_heading')}

{t('tax_contact_help')}

{/* Fiscal year & salaries */}

{t('fiscal_year_salaries_heading')}

{isEnskildFirma ? ( <>

{t('fiscal_year_ef_help')}

) : ( <>

{t('fiscal_year_change_help')}

)}
{ const checked = v === true setPaysSalaries(checked) // Paying out salary obliges employer registration (SFL 7 kap. 1 §). if (checked) setEmployerRegistered(true) }} />

{t('pays_salaries_help')}

{ const checked = v === true setEmployerRegistered(checked) if (!checked) setEmployerSeasonal(false) }} />

{t('employer_registered_help')}

{employerRegistered && (
setEmployerSeasonal(v === true)} />

{t('employer_seasonal_help')}

)}
{/* Kontrolluppgifter (KU) */}

{t('kontrolluppgifter_heading')}

{kuSignalDetected && !kuEnabled && (

{t('ku_suggestion_title')}

{t('ku_suggestion_help')}

)}
setKuEnabled(v === true)} />

{t('kontrolluppgifter_help')}

{/* ROT/RUT */}

{t('rot_rut_heading')}

{rotRutSignalDetected && !rotRutEnabled && (

{t('rot_rut_suggestion_title')}

{t('rot_rut_suggestion_help')}

)}
setRotRutEnabled(v === true)} />

{t('rot_rut_help')}

{/* Preliminary tax */}

{t('preliminary_tax_heading')}

{t('preliminary_tax_monthly_help')}

{/* Long-tail deadlines: explicit opt-in only */}

{t('more_deadlines_heading')}

{t('more_deadlines_help')}

{vatRegistered && ( <>
setOssEnabled(v === true)} />

{t('oss_help')}

setIossEnabled(v === true)} />

{t('ioss_help')}

setIntrastatEnabled(v === true)} />

{t('intrastat_help')}

)}
setPunktskattEnabled(v === true)} />

{t('punktskatt_help')}

setFyllnadEnabled(v === true)} />

{t('fyllnadsinbetalning_help')}

) }