Upload files to ''
This commit is contained in:
parent
e43aca3ce3
commit
16d57c39a1
166
scratch.html
Normal file
166
scratch.html
Normal file
@ -0,0 +1,166 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Bootstrap demo</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h1>Hello, world!</h1>
|
||||
<form class="row">
|
||||
<div class="mb-3 col-sm-6 col-md-4">
|
||||
<label for="idBruttoInput" class="form-label text-bold">Brutto salary*:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">€</span>
|
||||
<input type="number" class="form-control" id="idBruttoInput" placeholder="700" min="700"
|
||||
step="1">
|
||||
<span class="input-group-text">.00</span>
|
||||
</div>
|
||||
|
||||
<label for="idDependentsInput" class="form-label text-bold">Dependents:</label>
|
||||
<select id="idDependentsInput" class="form-select">
|
||||
<option value="0" selected>0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
</select>
|
||||
<label><input type="checkbox" id="idTaxBookSubmitted" checked> Salary tax book has been submitted to
|
||||
the employer</label>
|
||||
|
||||
<label for="idExtraTaxDiscount" class="form-label text-bold">Extra tax-free amount:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">€</span>
|
||||
<input type="number" class="form-control" id="idExtraTaxDiscount" placeholder="0" min="0"
|
||||
step="0.01">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col col-md-5">
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Brutto salary</div>
|
||||
</div>
|
||||
<span id="idBruttoSalaryDisplay">1300,00€</span>
|
||||
</li>
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Social security tax</div>
|
||||
</div>
|
||||
<span id="idSocialSecurityTaxDisplay" class="text-danger">969,26€</span>
|
||||
</li>
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Income tax</div>
|
||||
</div>
|
||||
<span id="idIncomeTaxDisplay" class="text-danger">969,26€</span>
|
||||
</li>
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Net salary</div>
|
||||
</div>
|
||||
<span id="idNetSalaryDisplay" class="text-primary">969,26€</span>
|
||||
</li>
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Employer tax</div>
|
||||
</div>
|
||||
<span id="idEmployerTaxDisplay" class="text-warning">306.67€</span>
|
||||
</li>
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto">
|
||||
<div class="fw-bold">Employer total cost</div>
|
||||
</div>
|
||||
<span id="idEmployerTotalCostDisplay">1606,67€</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
|
||||
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
|
||||
crossorigin="anonymous"></script>
|
||||
<script>
|
||||
// document.addEventListener("load", _ => {
|
||||
const yearlySalaryLimit_1 = 20004,
|
||||
yearlySalaryLimit_2 = 78100,
|
||||
minTaxable = 500,
|
||||
maxTaxable = 1800,
|
||||
diffTaxable = minTaxable - maxTaxable,
|
||||
minTaxFree = 0,
|
||||
maxTaxFree = 500,
|
||||
diffTaxFree = minTaxFree - maxTaxFree,
|
||||
dependentsDiscount = 250,
|
||||
halfPercent = 5 / 1000,
|
||||
socialInsurancePercent = 105 / 1000;
|
||||
const bruttoInput = document.getElementById("idBruttoInput"),
|
||||
dependentInput = document.getElementById("idDependentsInput"),
|
||||
taxBookSubmittedInput = document.getElementById("idTaxBookSubmitted"),
|
||||
extraTaxDiscountInput = document.getElementById("idExtraTaxDiscount");
|
||||
const displayEuro = amount => `${parseFloat(amount).toFixed(2)} €`.replace(".", ",")
|
||||
const updateCalculatedNetSalary = _ => {
|
||||
const bruttoSalary = parseFloat(bruttoInput.value),
|
||||
dependentCount = parseInt(dependentInput.value),
|
||||
taxDiscount = parseFloat(extraTaxDiscountInput.value),
|
||||
taxBookSubmitted = !!taxBookSubmittedInput.checked,
|
||||
socialSecurityTax = calculateSocialInsuranceAmount(bruttoSalary),
|
||||
incomeTax = calculateIncomeTax(bruttoSalary, socialSecurityTax, taxDiscount, dependentCount, taxBookSubmitted),
|
||||
netSalary = calculateNetSalary(bruttoSalary, socialSecurityTax, incomeTax),
|
||||
employersSocialTax = calculateEmployersSocialInsuranceAmount(bruttoSalary),
|
||||
employersTotalCost = bruttoSalary + employersSocialTax,
|
||||
bruttoDisplay = document.getElementById("idBruttoSalaryDisplay"),
|
||||
socialSecurityDisplay = document.getElementById("idSocialSecurityTaxDisplay"),
|
||||
incomeTaxDisplay = document.getElementById("idIncomeTaxDisplay"),
|
||||
netSalaryDisplay = document.getElementById("idNetSalaryDisplay"),
|
||||
employerTaxDisplay = document.getElementById("idEmployerTaxDisplay"),
|
||||
employerTotalCostDisplay = document.getElementById("idEmployerTotalCostDisplay");
|
||||
bruttoDisplay.textContent = displayEuro(bruttoSalary);
|
||||
socialSecurityDisplay.textContent = displayEuro(socialSecurityTax);
|
||||
incomeTaxDisplay.textContent = displayEuro(incomeTax);
|
||||
netSalaryDisplay.textContent = displayEuro(netSalary);
|
||||
employerTaxDisplay.textContent = displayEuro(employersSocialTax);
|
||||
employerTotalCostDisplay.textContent = displayEuro(employersTotalCost);
|
||||
}
|
||||
const calculateSocialInsuranceAmount = (bruttoSalary) => {
|
||||
if (isNaN(bruttoSalary))
|
||||
return 0.00;
|
||||
return Math.min(bruttoSalary * socialInsurancePercent, yearlySalaryLimit_2 / 12 * (socialInsurancePercent - halfPercent) + (bruttoSalary * halfPercent))
|
||||
}
|
||||
const calculateIncomeTax = (bruttoSalary, socialInsuranceAmount, extraDiscount = 0, dependentCount = 0, taxBookSubmitted = true) => {
|
||||
const taxRelief = taxBookSubmitted ? dependentCount * dependentsDiscount : 0,
|
||||
actualTaxFreeAmount = (!taxBookSubmitted ? 0 : (bruttoSalary > maxTaxable ? minTaxFree : (bruttoSalary <= minTaxable ? maxTaxFree : (maxTaxFree - ((diffTaxFree / diffTaxable) * (bruttoSalary - minTaxable)))))),
|
||||
incomeTaxBaseLow = Math.min(yearlySalaryLimit_1 / 12, bruttoSalary),
|
||||
incomeTaxBaseMid = Math.max(Math.min(bruttoSalary - incomeTaxBaseLow, yearlySalaryLimit_2 / 12 - incomeTaxBaseLow), 0),
|
||||
incomeTaxBaseTop = Math.max(bruttoSalary - incomeTaxBaseLow - incomeTaxBaseMid, 0),
|
||||
incomeTaxLow = (incomeTaxBaseLow - socialInsuranceAmount - extraDiscount - actualTaxFreeAmount - taxRelief) * (20 / 100),
|
||||
incomeTaxMid = incomeTaxBaseMid * (23 / 100),
|
||||
incomeTaxTop = incomeTaxBaseTop * (31 / 100);
|
||||
return Math.max(incomeTaxLow + incomeTaxMid + incomeTaxTop, 0)
|
||||
}
|
||||
const calculateNetSalary = (bruttoSalary, socialInsuranceAmount, incomeTax) => {
|
||||
if (isNaN(bruttoSalary))
|
||||
return 0.00;
|
||||
return bruttoSalary - socialInsuranceAmount - incomeTax;
|
||||
}
|
||||
const calculateEmployersSocialInsuranceAmount = (bruttoSalary) => (bruttoSalary * 2359 / 10000)
|
||||
|
||||
bruttoInput.addEventListener("change", updateCalculatedNetSalary);
|
||||
dependentInput.addEventListener("change", updateCalculatedNetSalary);
|
||||
taxBookSubmittedInput.addEventListener("change", updateCalculatedNetSalary);
|
||||
extraTaxDiscountInput.addEventListener("change", updateCalculatedNetSalary);
|
||||
|
||||
// })
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user