public void GetAnnualTaxInBand_OverBand()
        {
            var     target = new AnnualSalary(90000m);
            decimal result = target.GetAnnualTaxInBand(37000, 87000);

            Assert.Equal(50000, result);
        }
        public void GetMonthlyIncome_RoundUp()
        {
            var target = new AnnualSalary(80014m);
            int result = target.GetMonthlyIncome();

            Assert.Equal(6668, result);
        }
        public void GetAnnualTaxOverBand_UnderBand()
        {
            var     target = new AnnualSalary(90000m);
            decimal result = target.GetAnnualTaxOverBand(180000);

            Assert.Equal(0, result);
        }
        public void GetMonthlyIncome_RoundDown()
        {
            var target = new AnnualSalary(60050m);
            int result = target.GetMonthlyIncome();

            Assert.Equal(5004, result);
        }
Exemplo n.º 5
0
        public void MustHaveAnAnnualSalary()
        {
            AnnualSalary asal = new AnnualSalary();
            TaxStatement stmt = new TaxStatement(asal, null);

            Assert.AreSame(asal, stmt.AnnualSalary);
        }
Exemplo n.º 6
0
        public void MustCalculateNetPayableTaxWithAnnualSalaryOtherIncomesAndChapter6Investments()
        {
            var taxPayer = new User(50000, true, Gender.Female);


            TaxSlabs     ts   = TaxSlabs.GetInstance();
            AnnualSalary asal = new AnnualSalary
            {
                Basic            = 810000.50,
                Hra              = 1000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            OtherIncomes otherIncomes = new OtherIncomes();

            otherIncomes.Add(new OtherIncomeItem("Income from Interest", 4000.0));
            otherIncomes.Add(new OtherIncomeItem("Income from House Rent", 8000.0));

            Chapter6Investments investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(50000));
            investments.Add(new Elss(60000));

            TaxStatement stmt = new TaxStatement(asal, taxPayer);

            stmt.HousingLoanInterest = new HousingLoanInterest(10000);
            stmt.OtherIncomes        = otherIncomes;
            stmt.Chapter6Investments = investments;

            Assert.AreEqual(120473,
                            stmt.CalculateNetPayableTax(), 2);
        }
        public void GetAnnualTaxOverBand_InBand()
        {
            var     target = new AnnualSalary(192223m);
            decimal result = target.GetAnnualTaxOverBand(180000);

            Assert.Equal(12223, result);
        }
Exemplo n.º 8
0
        public void ShouldReturnNoDeductionIfEpfIsNotAvailableAndNoOtherInvestmentIsMade()
        {
            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null);

            Assert.AreEqual(0, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 9
0
        private void button2_Click(object sender, EventArgs e)
        {
            //Clear Textbox & label.
            AnnualSalary.Text = "";
            textBox2.Text     = "";
            label4.Text       = "";

            //Reset Focus
            AnnualSalary.Focus();
        }
Exemplo n.º 10
0
        public void ShouldBeAbleToGetHra()
        {
            var annualSalary = new AnnualSalary
            {
                Basic            = 10000.50,
                Hra              = 1000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            Assert.AreEqual(1000, annualSalary.Hra);
        }
Exemplo n.º 11
0
        public void ShouldReturnRemtPaidAdjustedToBasicAsHraExemptionWhenItIsMinimumOfAllTaxComponents()
        {
            var taxPayer     = new User(30000, true, Gender.Male);
            var annualSalary = new AnnualSalary
            {
                Basic            = 100000,
                Hra              = 60000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            Assert.AreEqual(20000, annualSalary.CalculateHraExemption(taxPayer.FromMetro, taxPayer.RentPaid));
        }
Exemplo n.º 12
0
        public void ShouldCalculateHraExemption()
        {
            var taxPayer     = new User(50000, true, Gender.Male);
            var annualSalary = new AnnualSalary
            {
                Basic            = 100000,
                Hra              = 40000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            Assert.AreEqual(40000, annualSalary.CalculateHraExemption(taxPayer.FromMetro, taxPayer.RentPaid));
        }
Exemplo n.º 13
0
        public void ShouldReturnEpfAsDeductionIfNoOtherInvestmentIsMade()
        {
            const int epfContribution = 100;
            var       salary          = new AnnualSalary {
                Epf = epfContribution
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = null
            };

            Assert.AreEqual(epfContribution, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 14
0
        public void ShouldNotCalculateHraExemptionIfHraComponentIsNotAvailable()
        {
            var taxPayer     = new User(30000, true, Gender.Male);
            var annualSalary = new AnnualSalary
            {
                Basic            = 100000,
                Hra              = 0,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            Assert.Throws <Exception>(() => annualSalary.CalculateHraExemption(taxPayer.FromMetro, taxPayer.RentPaid));
        }
Exemplo n.º 15
0
        public void ShouldReturnFiftyPercentageOfBasicAsHraExemptionWhenItIsMinimumOfAllTaxComponentsAndPayerIsFromMetro
            ()
        {
            var taxPayer     = new User(65000, true, Gender.Male);
            var annualSalary = new AnnualSalary
            {
                Basic            = 100000,
                Hra              = 60000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };

            Assert.AreEqual(50000, annualSalary.CalculateHraExemption(taxPayer.FromMetro, taxPayer.RentPaid));
        }
Exemplo n.º 16
0
        public void MustCalculateNetPayableTaxWithOnlyAnnualSalary()
        {
            var          taxPayer = new User(50000, true, Gender.Female);
            TaxSlabs     ts       = TaxSlabs.GetInstance();
            AnnualSalary asal     = new AnnualSalary
            {
                Basic            = 200000.50,
                Hra              = 1000,
                ProfessionalTax  = 100,
                SpecialAllowance = 10
            };
            TaxStatement stmt = new TaxStatement(asal, taxPayer);

            Assert.AreEqual(1891.05d, stmt.CalculateNetPayableTax());
        }
Exemplo n.º 17
0
        public void ShouldReturnLifeInsuranceInvestmentAsDeductionIfNoOtherInvestmentIsMadeAndEpfIsZero()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(30000));
            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(30000.0, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 18
0
        public void MustCalculateNetPayableTaxWithAnnualSalaryAndDeductions()
        {
            var          taxPayer = new User(0, true, Gender.Female);
            TaxSlabs     ts       = TaxSlabs.GetInstance();
            AnnualSalary asal     = new AnnualSalary
            {
                Basic = 600000,
                Hra   = 100000
            };
            TaxStatement      stmt = new TaxStatement(asal, taxPayer);
            DonationsUnder80G donationsUnder80G = new DonationsUnder80G();

            donationsUnder80G.AddDonation(new FullyExemptDonation(1000));
            stmt.DonationsUnder80G = donationsUnder80G;
            Assert.AreEqual(116700.0, stmt.CalculateNetPayableTax(), 0.01);
        }
Exemplo n.º 19
0
        public void ShouldReturnDeductionCapAsDeductionWhenOnlyHousingLoanPrincipalAsInvestementWithEpfAndExceedsTheCap()
        {
            var investments = new Chapter6Investments();

            investments.Add(new HousingLoanPrincipal(90001));
            var salary = new AnnualSalary {
                Epf = 10000
            };

            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(Chapter6Investments.Cap, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 20
0
        public void ShouldReturnTotalDeductionsAsDeductionWhenOnlyHousingLoanPrincipalAsInvestementWithEpfAsZeroAndUnderTheCap()
        {
            var investments = new Chapter6Investments();

            investments.Add(new HousingLoanPrincipal(60001));
            var salary = new AnnualSalary {
                Epf = 0
            };

            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(60001, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 21
0
        public void ComputeTaxShouldDeductTDSValueFromTheNetTaxPayableValue()
        {
            var          taxPayer = new User(50000, true, Gender.Female);
            TaxSlabs     ts       = TaxSlabs.GetInstance();
            AnnualSalary asal     = new AnnualSalary
            {
                Basic                = 200000.50,
                Hra                  = 1000,
                ProfessionalTax      = 100,
                SpecialAllowance     = 10,
                TaxDedeuctedAtSource = 1000
            };
            TaxStatement stmt = new TaxStatement(asal, taxPayer);

            Assert.AreEqual(891.04, stmt.CalculateNetPayableTax(), 2);
        }
Exemplo n.º 22
0
        public void ShouldReturnZeroDeductionIfInvestmentIsNotAvailableAndEpfIsZero()
        {
            var salary = new AnnualSalary {
                Epf = 0.0
            };
            TaxStatement ts = new TaxStatement(salary, null);

            Assert.AreEqual(0.0, ts.GetChapter6Deductions(), 0.01);

            salary = new AnnualSalary();
            ts     = new TaxStatement(salary, null)
            {
                Chapter6Investments = new Chapter6Investments()
            };
            Assert.AreEqual(0.0, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 23
0
        public void ShouldSaveAndLoadTaxStatementWithHousingLoanInterest()
        {
            IRepository repository = new Repository();

            AnnualSalary salary = new AnnualSalary()
            {
                Basic = 10000, Epf = 2000, Hra = 6000, Id = "salary", ProfessionalTax = 200, SpecialAllowance = 5000, TaxDedeuctedAtSource = 5000
            };
            TaxStatement taxStatement = new TaxStatement(salary, null);

            DonationsUnder80G donationsUnder80G = new DonationsUnder80G();

            donationsUnder80G.AddDonation(new HalfExemptDonation(20000));
            donationsUnder80G.AddDonation(new FullyExemptDonation(10000));

            OtherIncomes            ois   = new OtherIncomes();
            IList <OtherIncomeItem> items = new List <OtherIncomeItem>()
            {
                new OtherIncomeItem("Income from House Rent", 16000.0), new OtherIncomeItem("Income from Bank Account Interest", 6000.0)
            };

            foreach (OtherIncomeItem otherIncomeItem in items)
            {
                ois.Add(otherIncomeItem);
            }

            taxStatement.OtherIncomes = ois;

            taxStatement.DonationsUnder80G   = donationsUnder80G;
            taxStatement.HousingLoanInterest = new HousingLoanInterest(10000);
            repository.Save(taxStatement);


            List <TaxStatement> taxStatements = repository.LoadAll <TaxStatement>();
            var loadedTaxStatement            = taxStatements.FirstOrDefault(stmt => stmt.Id == taxStatement.Id);

            Assert.IsNotNull(loadedTaxStatement);
            Assert.IsNotNull(loadedTaxStatement.OtherIncomes);
            Assert.IsTrue(loadedTaxStatement.OtherIncomes.HasItems);
            Assert.AreEqual(2, loadedTaxStatement.OtherIncomes.Count);

            foreach (OtherIncomeItem otherIncomeItem in loadedTaxStatement.OtherIncomes.GetItems())
            {
                Assert.IsTrue(items.Contains(otherIncomeItem));
            }
            Assert.AreEqual(10000, loadedTaxStatement.HousingLoanInterest.Amount);
        }
Exemplo n.º 24
0
        public void ShouldReturnSumOfLifeInsuranceAndElssIfBothAreWithinCapAndOtherInvestmentAreZero()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(30000));
            investments.Add(new Elss(60000));

            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(90000.0, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 25
0
        ShouldReturnCapValueAsDeductionIfLifeInsuranceAndElssInvestmentsExceedsTheCapAndOtherInvestmentAreZero()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(50000));
            investments.Add(new Elss(60000));

            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(Chapter6Investments.Cap, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 26
0
        public void ShouldReturnTotalPpfInvestmentAsDeductionIfPpfInvestmentIsWithinPpfCapAndNoOtherInvestmentIsMade()
        {
            var          investments     = new Chapter6Investments();
            const double ppfContribution = 69999.99;

            investments.Add(new PublicProvidentFund(ppfContribution));

            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(ppfContribution, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 27
0
        ShouldReturnTotalInvestmentAsDeductionIfLicElssAndPpfInvestmentsAreWithinTheInvestmantCapAndEpfIsZero()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(50000.09));
            investments.Add(new Elss(30000));
            investments.Add(new PublicProvidentFund(19999.9));

            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(99999.99, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 28
0
        public void ShouldReturnTotalInvestmentCapAsDeductionIfLicElssAndPpfInvestmentsExceedsTheCapAndEpfIsZero()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(50000));
            investments.Add(new Elss(30000));
            investments.Add(new PublicProvidentFund(20000.01));

            var salary = new AnnualSalary {
                Epf = 0
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(Chapter6Investments.Cap, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 29
0
        public void ShouldReturnDeductionCapAsDeductionWhenTotalOfAllInvestmetIsAboveDeductionCap()
        {
            var investments = new Chapter6Investments();

            investments.Add(new LifeInsurance(50000));
            investments.Add(new Elss(30000));
            investments.Add(new PublicProvidentFund(10000));

            var salary = new AnnualSalary {
                Epf = 500000
            };
            TaxStatement ts = new TaxStatement(salary, null)
            {
                Chapter6Investments = investments
            };

            Assert.AreEqual(Chapter6Investments.Cap, ts.GetChapter6Deductions(), 0.01);
        }
Exemplo n.º 30
0
        private void button2_Click(object sender, EventArgs e)
        {
            //Clears Textbox & label.
            AnnualSalary.Text     = "";
            textBox2.Text         = "";
            label4.Text           = "";
            lastNametextBox1.Text = "";
            firstNametextBox.Text = "";
            MItextBox.Text        = "";
            agecomboBox1.Text     = "";
            SSNtextBox.Text       = "";
            NumbertextBox.Text    = "";
            streettextBox.Text    = "";
            CitytextBox.Text      = "";
            employertextBox.Text  = "";

            //Reset Focus
            AnnualSalary.Focus();
        }