File size: 1,761 Bytes
73c78bc 95bad29 73c78bc 95bad29 73c78bc 95bad29 73c78bc 95bad29 73c78bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
from typing import Optional
import typer
import pandas as pd
from constants import Constants
from functions import Functions
app = typer.Typer()
tax_brackets_df = pd.DataFrame(
Constants.DEFAULT_TAX_BRACKETS, columns=["Lower Limit", "Upper Limit", "Tax Rate"]
)
@app.command()
def calculate_salary(
current_salary: int = typer.Argument(..., help="Current monthly salary in PKR"),
desired_increment_percentage: Optional[float] = typer.Option(
0.3, help="Desired salary increment as a decimal (e.g., 0.3 for 30%)"
),
daily_cost_of_travel: Optional[int] = typer.Option(
1500, help="Daily cost of travel in PKR"
),
physical_days_per_week: Optional[int] = typer.Option(
5, help="Number of physical days per week"
),
):
"""
Calculate the additional amount needed for desired salary after tax adjustment.
"""
initial_desired_net = Functions.calculated_initial_desired_net(
current_salary,
desired_increment_percentage,
daily_cost_of_travel,
physical_days_per_week,
)
result = Functions.calculate_additional_amount(initial_desired_net, tax_brackets_df)
typer.echo("Salary Calculation Results")
typer.echo("--------------------------")
typer.echo(
f"{'Initial Desired Net Salary':<30} PKR {result['initial_desired_net']:>13,.2f}"
)
typer.echo(
f"{'Gross Salary Needed':<30} PKR {result['gross_salary_needed']:>13,.2f}"
)
typer.echo(
f"{'Additional Amount Needed':<30} PKR {result['additional_amount']:>13,.2f}"
)
typer.echo(f"{'Tax':<30} PKR {result['tax']:>13,.2f}")
typer.echo(f"{'Final Net Salary':<30} PKR {result['final_net_salary']:>13,.2f}")
if __name__ == "__main__":
app()
|