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()