net-salary-calculate / functions.py
mattoofahaddcube's picture
adding file to the repo
73c78bc
raw
history blame
1.79 kB
def calculate_monthly_tax(monthly_income):
annual_income = monthly_income * 12
tax_brackets = [
(0, 600000, 0),
(600000, 1200000, 0.05),
(1200000, 2200000, 0.15),
(2200000, 3200000, 0.25),
(3200000, 4100000, 0.30),
(4100000, float("inf"), 0.35),
]
total_tax = 0
remaining_income = annual_income
for lower, upper, rate in tax_brackets:
if remaining_income <= 0:
break
taxable_amount = min(remaining_income, upper - lower)
tax = taxable_amount * rate
total_tax += tax
remaining_income -= taxable_amount
monthly_tax = total_tax / 12
return round(monthly_tax, 2)
def calculate_net_salary(gross_salary):
return gross_salary - calculate_monthly_tax(gross_salary)
def calculated_initial_desired_net(
current_salary, desired_increment, daily_cost_of_travel, physical_days_per_week
):
return (current_salary + current_salary * desired_increment) + (
daily_cost_of_travel * physical_days_per_week * 4.5
)
def calculate_additional_amount(initial_desired_net):
gross_salary = initial_desired_net
max_iterations = 100
for _ in range(max_iterations):
net_salary = calculate_net_salary(gross_salary)
if abs(net_salary - initial_desired_net) < 0.01:
break
gross_salary += initial_desired_net - net_salary
additional_amount = gross_salary - initial_desired_net
return {
"initial_desired_net": round(initial_desired_net, 2),
"gross_salary_needed": round(gross_salary, 2),
"additional_amount": round(additional_amount, 2),
"tax": round(calculate_monthly_tax(gross_salary), 2),
"final_net_salary": round(calculate_net_salary(gross_salary), 2),
}