tax_table_file = dirname( __FILE__ ) . '/CAPayrollDeductionTest2020.csv'; $this->company_id = PRIMARY_COMPANY_ID; TTDate::setTimeZone( 'Etc/GMT+8' ); //Force to non-DST timezone. 'PST' isnt actually valid. } public function tearDown(): void { Debug::text( 'Running tearDown(): ', __FILE__, __LINE__, __METHOD__, 10 ); } public function mf( $amount ) { return Misc::MoneyRound( $amount ); } // // January 2020 // function testCSVFile() { $this->assertEquals( true, file_exists( $this->tax_table_file ) ); $test_rows = Misc::parseCSV( $this->tax_table_file, true ); $total_rows = ( count( $test_rows ) + 1 ); $i = 2; foreach ( $test_rows as $row ) { //Debug::text('Province: '. $row['province'] .' Income: '. $row['gross_income'], __FILE__, __LINE__, __METHOD__, 10); if ( isset( $row['gross_income'] ) && isset( $row['low_income'] ) && isset( $row['high_income'] ) && $row['gross_income'] == '' && $row['low_income'] != '' && $row['high_income'] != '' ) { $row['gross_income'] = ( $row['low_income'] + ( ( $row['high_income'] - $row['low_income'] ) / 2 ) ); } if ( $row['country'] != '' && $row['gross_income'] != '' ) { //echo $i.'/'.$total_rows.'. Testing Province: '. $row['province'] .' Income: '. $row['gross_income'] ."\n"; $pd_obj = new PayrollDeduction( $row['country'], $row['province'] ); $pd_obj->setDate( strtotime( $row['date'] ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( $row['pay_periods'] ); $pd_obj->setFederalTotalClaimAmount( $row['federal_claim'] ); //Amount from 2005, Should use amount from 2007 automatically. $pd_obj->setProvincialTotalClaimAmount( $row['provincial_claim'] ); //$pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( $this->mf( $row['gross_income'] ) ); //var_dump($pd_obj->getArray()); $this->assertEquals( $this->mf( $pd_obj->getGrossPayPeriodIncome() ), $this->mf( $row['gross_income'] ) ); if ( $row['federal_deduction'] != '' ) { $this->assertEquals( $this->mf( $pd_obj->getFederalPayPeriodDeductions() ), $this->mf( $row['federal_deduction'] ) ); } if ( $row['provincial_deduction'] != '' ) { $this->assertEquals( $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ), $this->mf( $row['provincial_deduction'] ) ); } } $i++; } //Make sure all rows are tested. $this->assertEquals( $total_rows, ( $i - 1 ) ); } //Test that the tax changes from one year to the next are without a specified threshold. function testCompareWithLastYearCSVFile() { $this->assertEquals( true, file_exists( $this->tax_table_file ) ); $test_rows = Misc::parseCSV( $this->tax_table_file, true ); $total_rows = ( count( $test_rows ) + 1 ); $i = 2; foreach ( $test_rows as $row ) { //Debug::text('Province: '. $row['province'] .' Income: '. $row['gross_income'], __FILE__, __LINE__, __METHOD__, 10); if ( isset( $row['gross_income'] ) && isset( $row['low_income'] ) && isset( $row['high_income'] ) && $row['gross_income'] == '' && $row['low_income'] != '' && $row['high_income'] != '' ) { $row['gross_income'] = ( $row['low_income'] + ( ( $row['high_income'] - $row['low_income'] ) / 2 ) ); } if ( $row['country'] != '' && $row['gross_income'] != '' ) { //echo $i.'/'.$total_rows.'. Testing Province: '. $row['province'] .' Income: '. $row['gross_income'] ."\n"; $pd_obj = new PayrollDeduction( $row['country'], $row['province'] ); $pd_obj->setDate( strtotime( '-1 year', strtotime( $row['date'] ) ) ); //Get the same date only last year. $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( $row['pay_periods'] ); $pd_obj->setFederalTotalClaimAmount( $row['federal_claim'] ); //Amount from 2005, Should use amount from 2007 automatically. $pd_obj->setProvincialTotalClaimAmount( $row['provincial_claim'] ); //$pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( $this->mf( $row['gross_income'] ) ); //var_dump($pd_obj->getArray()); $this->assertEquals( $this->mf( $pd_obj->getGrossPayPeriodIncome() ), $this->mf( $row['gross_income'] ) ); if ( $row['federal_deduction'] != '' ) { //$this->assertEquals( $this->mf( $pd_obj->getFederalPayPeriodDeductions() ), $this->mf( $row['federal_deduction'] ) ); $amount_diff = 0; $amount_diff_percent = 0; if ( $row['federal_deduction'] > 0 ) { $amount_diff = abs( ( $pd_obj->getFederalPayPeriodDeductions() - $row['federal_deduction'] ) ); $amount_diff_percent = ( ( $amount_diff / $row['federal_deduction'] ) * 100 ); } //Debug::text($i.'. Amount: This Year: '. $row['federal_deduction'] .' Last Year: '. $pd_obj->getFederalPayPeriodDeductions() .' Diff Amount: '. $amount_diff .' Percent: '. $amount_diff_percent .'%', __FILE__, __LINE__, __METHOD__, 10); if ( $amount_diff > 5.5 ) { $this->assertLessThan( 15.0, $amount_diff_percent ); //Should be slightly higher than inflation. $this->assertGreaterThanOrEqual( 0, $amount_diff_percent ); } else { $this->assertLessThan( 6.0, $amount_diff_percent ); //Should be slightly higher than inflation. $this->assertGreaterThanOrEqual( 0, $amount_diff_percent ); } } if ( $row['provincial_deduction'] != '' ) { //$this->assertEquals( $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ), $this->mf( $row['provincial_deduction'] ) ); $amount_diff = 0; $amount_diff_percent = 0; if ( $row['provincial_deduction'] > 0 && $pd_obj->getProvincialPayPeriodDeductions() > 0 ) { $amount_diff = abs( ( $pd_obj->getProvincialPayPeriodDeductions() - $row['provincial_deduction'] ) ); $amount_diff_percent = ( ( $amount_diff / $row['provincial_deduction'] ) * 100 ); } Debug::text( $i . '. Amount: This Year: ' . $row['provincial_deduction'] . ' Last Year: ' . $pd_obj->getProvincialPayPeriodDeductions() . ' Diff Amount: ' . $amount_diff . ' Percent: ' . $amount_diff_percent . '%', __FILE__, __LINE__, __METHOD__, 10 ); if ( $amount_diff > 5.50 ) { $this->assertLessThan( 26, $amount_diff_percent ); //Reasonable margin of error. $this->assertGreaterThan( 0, $amount_diff_percent ); } } } $i++; } //Make sure all rows are tested. $this->assertEquals( $total_rows, ( $i - 1 ) ); } function testCA_2020a_Example() { Debug::text( 'CA - Example Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 29721.00 ); $pd_obj->setProvincialTotalClaimAmount( 17593 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1100 ); $this->assertEquals( '1100.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '74.25', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '65.68', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_Example1() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 12 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 18214 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1800 ); $this->assertEquals( '1800.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '72.93', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '7.83', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_Example2() { Debug::text( 'CA - Example2 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 18214 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 2300 ); $this->assertEquals( '2300.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '263.68', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '141.06', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_Example3() { Debug::text( 'CA - Example3 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 18214 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 2500 ); $this->assertEquals( '2500.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '443.42', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '205.53', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_Example4() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 9938 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1560 ); $this->assertEquals( '1560.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '135.57', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '52.59', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_Example5() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 9938 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 8300 ); $this->assertEquals( '8300.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '1827.78', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '932.32', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_NS_Example1() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'NS' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 0 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); //Claim amount of 0 is always considered $0 no matter what. $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 192 ); //Low income, where the full claim amount is used. $this->assertEquals( '192.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '20.71', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '16.35', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_NS_Example2() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'NS' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 0 ); $pd_obj->setProvincialTotalClaimAmount( 100 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1923 ); //Medium income, where part of the claim amount is reduced. $this->assertEquals( '1923.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '265.74', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '172.71', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_NS_Example3() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'NS' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 0 ); $pd_obj->setProvincialTotalClaimAmount( 11481 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 9615 ); //High income, over the threshold that reduces the claim amount. $this->assertEquals( '9615.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '2332.68', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '1636.90', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_GovExample1() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 18214 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1030 ); //Take Gross income minus RPP and Union Dues. $this->assertEquals( '1030.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '108.05', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '59.07', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_GovExample2() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 9938 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1030 ); //Take Gross income minus RPP and Union Dues. $this->assertEquals( '1030.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '108.05', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '44.08', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_GovExample3() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'ON' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 9863 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1030 ); //Take Gross income minus RPP and Union Dues. $this->assertEquals( '1030.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '108.05', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '56.67', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_GovExample4() { Debug::text( 'CA - Example1 - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'PE' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 52 ); $pd_obj->setFederalTotalClaimAmount( 11327 ); $pd_obj->setProvincialTotalClaimAmount( 7708 ); $pd_obj->setWCBRate( 0 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1030 ); //Take Gross income minus RPP and Union Dues. $this->assertEquals( '1030.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '108.05', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '92.15', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } // // CPP/ EI // function testCA_2020a_BiWeekly_CPP_LowIncome() { Debug::text( 'CA - BiWeekly - CPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 585.32 ); $this->assertEquals( '585.32', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '23.66', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '23.66', $this->mf( $pd_obj->getEmployerCPP() ) ); } function testCA_2020a_SemiMonthly_CPP_LowIncome() { Debug::text( 'CA - BiWeekly - CPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 24 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 585.23 ); $this->assertEquals( '585.23', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '23.07', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '23.07', $this->mf( $pd_obj->getEmployerCPP() ) ); } function testCA_2020a_SemiMonthly_MAXCPP_LowIncome() { Debug::text( 'CA - BiWeekly - MAXCPP - Beginning of 2020 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 24 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 1 ) ); //2544.30 - 1.00 $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 587.00 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '587.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployerCPP() ) ); } function testCA_2020a_EI_LowIncome() { Debug::text( 'CA - EI - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 587.76 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '587.76', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '9.29', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '13.00', $this->mf( $pd_obj->getEmployerEI() ) ); } function testCA_2020a_MAXEI_LowIncome() { Debug::text( 'CA - MAXEI - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 0 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( ( $pd_obj->getEIEmployeeMaximumContribution() - 1 ) ); $pd_obj->setGrossPayPeriodIncome( 587.00 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '587.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '1.40', $this->mf( $pd_obj->getEmployerEI() ) ); } function testCA_2020a_MAXEI_MAXCPPa() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11474 ); $pd_obj->setProvincialTotalClaimAmount( 10027 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 2569.21 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2569.21', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '127.82', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '127.82', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '40.59', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '56.83', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '318.87', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '126.83', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPa2() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '04-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 12069 ); $pd_obj->setProvincialTotalClaimAmount( 19369 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 126.35 ) ); $pd_obj->setYearToDateEIContribution( ( $pd_obj->getEIEmployeeMaximumContribution() - 14.30 ) ); //Test with this pay stub reaching the maximum limit. $pd_obj->setEmployeeCPPForPayPeriod( ( $pd_obj->getCPPEmployeeMaximumContribution() - 126.35 ) ); $pd_obj->setEmployeeEIForPayPeriod( ( $pd_obj->getEIEmployeeMaximumContribution() - 14.30 ) ); $pd_obj->setGrossPayPeriodIncome( 2612.12 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2612.12', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '126.35', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '126.35', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '14.30', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '20.02', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '327.67', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); //Should match the same federal amount in the below function. $this->assertEquals( '172.28', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPa3() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'AB' ); $pd_obj->setDate( strtotime( '04-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 12069 ); $pd_obj->setProvincialTotalClaimAmount( 19369 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( $pd_obj->getCPPEmployeeMaximumContribution() ); $pd_obj->setYearToDateEIContribution( $pd_obj->getEIEmployeeMaximumContribution() ); //Test with this pay stub past the maximum limit. // $pd_obj->setEmployeeCPPForPayPeriod( 126.35 ); // $pd_obj->setEmployeeEIForPayPeriod( 14.30 ); $pd_obj->setGrossPayPeriodIncome( 2612.12 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2612.12', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '327.67', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); //Should match the same federal amount in the above function. $this->assertEquals( '172.28', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPb() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11474 ); $pd_obj->setProvincialTotalClaimAmount( 10027 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 20 ) ); //2544.30 - 20.00 $pd_obj->setYearToDateEIContribution( ( $pd_obj->getEIEmployeeMaximumContribution() - 20 ) ); //955.04 - 20.00 $pd_obj->setGrossPayPeriodIncome( 2569.21 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2569.21', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '20.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '20.00', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '20.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '28.00', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '318.87', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '126.83', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPc() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11474 ); $pd_obj->setProvincialTotalClaimAmount( 10027 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 1 ) ); //2544.30 - 1.00 $pd_obj->setYearToDateEIContribution( ( $pd_obj->getEIEmployeeMaximumContribution() - 1 ) ); //955.04 - 1.00 $pd_obj->setGrossPayPeriodIncome( 2569.21 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2569.21', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '1.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '1.40', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '318.87', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '126.83', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPd() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11474 ); $pd_obj->setProvincialTotalClaimAmount( 10027 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( $pd_obj->getCPPEmployeeMaximumContribution() ); //2544.30 $pd_obj->setYearToDateEIContribution( $pd_obj->getEIEmployeeMaximumContribution() ); //955.04 $pd_obj->setGrossPayPeriodIncome( 2569.21 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2569.21', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '318.87', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '126.83', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPe() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 12069 ); $pd_obj->setProvincialTotalClaimAmount( 10682 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( $pd_obj->getCPPEmployeeMaximumContribution() ); //2544.30 $pd_obj->setYearToDateEIContribution( $pd_obj->getEIEmployeeMaximumContribution() ); //955.04 $pd_obj->setGrossPayPeriodIncome( 2865.38 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2865.38', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '0.00', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '379.59', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '149.63', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPf() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 12069 ); $pd_obj->setProvincialTotalClaimAmount( 10682 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 16.45 ) ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 2865.38 ); //$pd_obj->setEmployeeCPPForPayPeriod( 16.45 ); //$pd_obj->setEmployeeCPPForPayPeriod( $pd_obj->getEmployeeCPP() ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2865.38', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '16.45', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '16.45', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '45.27', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '63.38', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '379.59', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '149.63', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPf2() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 12069 ); $pd_obj->setProvincialTotalClaimAmount( 10682 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( ( $pd_obj->getCPPEmployeeMaximumContribution() - 16.45 ) ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 2865.38 ); $pd_obj->setEmployeeCPPForPayPeriod( 16.45 ); //var_dump($pd_obj->getArray()); $this->assertEquals( '2865.38', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '16.45', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '16.45', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '45.27', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '63.38', $this->mf( $pd_obj->getEmployerEI() ) ); //Below should be: 389.13, however because we call setEmployeeCPPForPayPeriod( 16.45 ) with a specific amount (lower than what it normally would be because we are approaching the maximum CPP limt), // that amount has to be used which causes the Fed/Prov. tax to be increased due to getEmployeeCPPForPayPeriod() being lower than expected. // In the normal formula it never takes the maximum CPP limit into account when calculating the per pay period CPP amount. But we have to do that currently to handle things like RRSP contributions that are calculated on tax vs. CPP different. // At least until we have a way of passing in annual gross income separate from F=RRSP amount. $this->assertEquals( '379.59', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '149.63', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_MAXEI_MAXCPPg() { Debug::text( 'CA - MAXEI/MAXCPP - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'BC' ); $pd_obj->setDate( strtotime( '10-Nov-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11474 ); $pd_obj->setProvincialTotalClaimAmount( 10027 ); $pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); $pd_obj->setGrossPayPeriodIncome( 1900.00 ); //Less than EI/CPP maximum earnings for the year. //var_dump($pd_obj->getArray()); $this->assertEquals( '1900.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '92.68', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '92.68', $this->mf( $pd_obj->getEmployerCPP() ) ); $this->assertEquals( '30.02', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '42.03', $this->mf( $pd_obj->getEmployerEI() ) ); $this->assertEquals( '184.94', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '76.40', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } function testCA_2020a_RRSP() { Debug::text( 'CA - RRSP Contribution - Beginning of 01-Jan-2020: ', __FILE__, __LINE__, __METHOD__, 10 ); $pd_obj = new PayrollDeduction( 'CA', 'ON' ); $pd_obj->setDate( strtotime( '01-Jan-2020' ) ); $pd_obj->setEnableCPPAndEIDeduction( true ); //Deduct CPP/EI. $pd_obj->setAnnualPayPeriods( 26 ); $pd_obj->setFederalTotalClaimAmount( 11809 ); $pd_obj->setProvincialTotalClaimAmount( 10171 ); //$pd_obj->setWCBRate( 0.18 ); $pd_obj->setEIExempt( false ); $pd_obj->setCPPExempt( false ); $pd_obj->setFederalTaxExempt( false ); $pd_obj->setProvincialTaxExempt( false ); $pd_obj->setYearToDateCPPContribution( 0 ); $pd_obj->setYearToDateEIContribution( 0 ); //Gross=1600, RRSP=32.00 $pd_obj->setGrossPayPeriodIncome( 1568 ); //Less the RRSP deduction of $32. $pd_obj->setEmployeeCPPForPayPeriod( 72.54 ); //Force CPP amount based on $1600 gross $pd_obj->setEmployeeEIForPayPeriod( 26.08 ); //Force EI amount based on $1600 gross $this->assertEquals( '1568.00', $this->mf( $pd_obj->getGrossPayPeriodIncome() ) ); $this->assertEquals( '72.54', $this->mf( $pd_obj->getEmployeeCPP() ) ); $this->assertEquals( '26.08', $this->mf( $pd_obj->getEmployeeEI() ) ); $this->assertEquals( '136.90', $this->mf( $pd_obj->getFederalPayPeriodDeductions() ) ); $this->assertEquals( '70.57', $this->mf( $pd_obj->getProvincialPayPeriodDeductions() ) ); } } ?>