import React, { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Alert, AlertDescription } from "@/components/ui/alert"; const UKCompanyCalculator = () => { const [inputs, setInputs] = useState({ companyProfit: 0, salary: 0, dividends: 0, previousLoanBalance: 0, currentLoanBalance: 0, investmentPL: 0, childMaintenanceIncome: 0 }); const [results, setResults] = useState({ corporationTax: 0, incomeTax: 0, section455: 0, payrollCharges: 0, childMaintenance: 0, allowancesLost: false, totalTakeHome: 0 }); // Tax brackets for 2024/25 const TAX_BRACKETS = { PERSONAL_ALLOWANCE: 12570, BASIC_RATE_END: 50270, HIGHER_RATE_END: 125140, BASIC_RATE: 0.20, HIGHER_RATE: 0.40, ADDITIONAL_RATE: 0.45 }; // Constants const CORPORATION_TAX_RATE = 0.25; const SECTION_455_RATE = 0.33; const NI_EMPLOYER_RATE = 0.138; // Employer's NI rate const DIVIDEND_TAX_RATES = { BASIC: 0.0875, HIGHER: 0.3375, ADDITIONAL: 0.3935 }; const calculateTaxes = () => { // Calculate Corporation Tax const corporationTax = Math.max(0, inputs.companyProfit * CORPORATION_TAX_RATE); // Calculate Section 455 charge on increased loan balance const loanIncrease = inputs.currentLoanBalance - inputs.previousLoanBalance; const section455 = Math.max(0, loanIncrease * SECTION_455_RATE); // Calculate Employer's NI const employerNI = Math.max(0, (inputs.salary - 9100) * NI_EMPLOYER_RATE); // Calculate Income Tax let taxableIncome = inputs.salary + inputs.dividends; let incomeTax = 0; let allowancesLost = false; // Reduce personal allowance for high earners let personalAllowance = TAX_BRACKETS.PERSONAL_ALLOWANCE; if (taxableIncome > 100000) { const reduction = Math.min(personalAllowance, (taxableIncome - 100000) / 2); personalAllowance -= reduction; if (personalAllowance === 0) allowancesLost = true; } // Calculate tax on salary first let remainingSalary = inputs.salary; let remainingDividends = inputs.dividends; // Tax on salary if (remainingSalary > personalAllowance) { const basicRateSalary = Math.min( TAX_BRACKETS.BASIC_RATE_END - personalAllowance, remainingSalary - personalAllowance ); incomeTax += basicRateSalary * TAX_BRACKETS.BASIC_RATE; remainingSalary -= basicRateSalary + personalAllowance; if (remainingSalary > 0) { const higherRateSalary = Math.min( TAX_BRACKETS.HIGHER_RATE_END - TAX_BRACKETS.BASIC_RATE_END, remainingSalary ); incomeTax += higherRateSalary * TAX_BRACKETS.HIGHER_RATE; remainingSalary -= higherRateSalary; if (remainingSalary > 0) { incomeTax += remainingSalary * TAX_BRACKETS.ADDITIONAL_RATE; } } } // Tax on dividends (using different rates) const dividendAllowance = 1000; // 2024/25 dividend allowance if (remainingDividends > dividendAllowance) { remainingDividends -= dividendAllowance; const basicRateDividends = Math.min( TAX_BRACKETS.BASIC_RATE_END - inputs.salary - dividendAllowance, remainingDividends ); incomeTax += basicRateDividends * DIVIDEND_TAX_RATES.BASIC; remainingDividends -= basicRateDividends; if (remainingDividends > 0) { const higherRateDividends = Math.min( TAX_BRACKETS.HIGHER_RATE_END - TAX_BRACKETS.BASIC_RATE_END, remainingDividends ); incomeTax += higherRateDividends * DIVIDEND_TAX_RATES.HIGHER; remainingDividends -= higherRateDividends; if (remainingDividends > 0) { incomeTax += remainingDividends * DIVIDEND_TAX_RATES.ADDITIONAL; } } } // Calculate Child Maintenance // Note: Dividends ARE included in Child Maintenance calculations as per CMS rules const weeklyIncome = (inputs.salary + inputs.dividends) / 52; let maintenanceRate; if (weeklyIncome <= 200) { maintenanceRate = 0; } else if (weeklyIncome <= 800) { maintenanceRate = 0.17; // 17% for 2 children } else if (weeklyIncome <= 3000) { maintenanceRate = 0.16; // 16% for 2 children } else { maintenanceRate = 0.15; // 15% for 2 children } const childMaintenance = weeklyIncome * maintenanceRate * 52; // Calculate total take-home const totalTakeHome = inputs.salary + inputs.dividends - incomeTax; setResults({ corporationTax, incomeTax, section455, payrollCharges: employerNI, childMaintenance, allowancesLost, totalTakeHome }); }; useEffect(() => { calculateTaxes(); }, [inputs]); const handleInputChange = (e) => { const { name, value } = e.target; setInputs(prev => ({ ...prev, [name]: parseFloat(value) || 0 })); }; const formatCurrency = (amount) => { return new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP' }).format(amount); }; return (
UK Company Withdrawal Calculator {/* Input Section */}
{/* Results Section */}

Results

Corporation Tax:

{formatCurrency(results.corporationTax)}

Income Tax:

{formatCurrency(results.incomeTax)}

Section 455 Charge:

{formatCurrency(results.section455)}

Employer's NI:

{formatCurrency(results.payrollCharges)}

Child Maintenance (Monthly):

{formatCurrency(results.childMaintenance / 12)}

Total Take-Home:

{formatCurrency(results.totalTakeHome)}

{results.allowancesLost && ( Warning: Personal allowances have been reduced or lost due to high income )}

Key Notes:

  • Dividends are included in Child Maintenance calculations
  • Dividend tax rates differ from salary tax rates
  • Personal allowance reduces by £1 for every £2 earned over £100,000
  • Section 455 tax applies to director's loan account increases
); }; export default UKCompanyCalculator;