import React, { useState } from 'react';
import { Calculator, Copy, Check } from 'lucide-react';
export const VatCalculator = () => {
const [mode, setMode] = useState('haric'); // 'haric' (net to gross) or 'dahil' (gross to net)
const [amount, setAmount] = useState(100000);
const [vatRate, setVatRate] = useState(20); // 1, 10, 20
const [tevkifatRate, setTevkifatRate] = useState(0); // 0, 50 (5/10), 70 (7/10), 90 (9/10)
const [copied, setCopied] = useState(false);
// Calculations
let netAmount = 0;
let vatAmount = 0;
let grossAmount = 0;
let tevkifatAmount = 0;
let payableVat = 0;
if (mode === 'haric') {
netAmount = Number(amount) || 0;
vatAmount = netAmount * (vatRate / 100);
grossAmount = netAmount + vatAmount;
} else {
grossAmount = Number(amount) || 0;
netAmount = grossAmount / (1 + vatRate / 100);
vatAmount = grossAmount - netAmount;
}
if (tevkifatRate > 0) {
tevkifatAmount = vatAmount * (tevkifatRate / 100);
payableVat = vatAmount - tevkifatAmount;
} else {
payableVat = vatAmount;
}
const handleCopy = () => {
const summary = `Matrah: ₺${netAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })} | KDV (%${vatRate}): ₺${vatAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })} | Genel Toplam: ₺${grossAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}`;
navigator.clipboard.writeText(summary);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
return (
İhale KDV & Tevkifat Hesaplayıcı
Teklif matrahından KDV dahil tutarı veya KDV dahilden net matrahı hesaplayın.
{/* Mode Selector */}
{/* Inputs */}
{[1, 10, 20].map(rate => (
))}
{/* Results Card */}
Hesaplama Sonucu
Net Matrah (KDV Hariç)
₺{netAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}
Hesaplanan KDV (%{vatRate})
₺{vatAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}
Genel Toplam (KDV Dahil)
₺{grossAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}
{tevkifatRate > 0 && (
Tevkifat Tutarı: ₺{tevkifatAmount.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}
Ödenecek KDV: ₺{payableVat.toLocaleString('tr-TR', { maximumFractionDigits: 2 })}
)}
);
};