TimeTrex Community Edition v16.2.0
This commit is contained in:
		
							
								
								
									
										732
									
								
								classes/payroll_deduction/US/OR.class.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										732
									
								
								classes/payroll_deduction/US/OR.class.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,732 @@ | ||||
| <?php | ||||
| /********************************************************************************* | ||||
|  * | ||||
|  * TimeTrex is a Workforce Management program developed by | ||||
|  * TimeTrex Software Inc. Copyright (C) 2003 - 2021 TimeTrex Software Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it under | ||||
|  * the terms of the GNU Affero General Public License version 3 as published by | ||||
|  * the Free Software Foundation with the addition of the following permission | ||||
|  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED | ||||
|  * WORK IN WHICH THE COPYRIGHT IS OWNED BY TIMETREX, TIMETREX DISCLAIMS THE | ||||
|  * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but WITHOUT | ||||
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more | ||||
|  * details. | ||||
|  * | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License along | ||||
|  * with this program; if not, see http://www.gnu.org/licenses or write to the Free | ||||
|  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||||
|  * 02110-1301 USA. | ||||
|  * | ||||
|  * | ||||
|  * You can contact TimeTrex headquarters at Unit 22 - 2475 Dobbin Rd. Suite | ||||
|  * #292 West Kelowna, BC V4T 2E9, Canada or at email address info@timetrex.com. | ||||
|  * | ||||
|  * | ||||
|  * The interactive user interfaces in modified source and object code versions | ||||
|  * of this program must display Appropriate Legal Notices, as required under | ||||
|  * Section 5 of the GNU Affero General Public License version 3. | ||||
|  * | ||||
|  * | ||||
|  * In accordance with Section 7(b) of the GNU Affero General Public License | ||||
|  * version 3, these Appropriate Legal Notices must retain the display of the | ||||
|  * "Powered by TimeTrex" logo. If the display of the logo is not reasonably | ||||
|  * feasible for technical reasons, the Appropriate Legal Notices must display | ||||
|  * the words "Powered by TimeTrex". | ||||
|  * | ||||
|  ********************************************************************************/ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @package PayrollDeduction\US | ||||
|  */ | ||||
| /* | ||||
|  Need to manually calculate the brackets, as the brackets less than 50,000 include the allowance ( 188 ) in the constant. | ||||
|  Exclude the allowance from each bracket, then getStateTaxPayable() will add $188 (allowance amount) to the constant if the annual income is less than 50,000. | ||||
|  Check getStateTaxPayable() for the 50,000 setting. | ||||
| */ | ||||
|  | ||||
| class PayrollDeduction_US_OR extends PayrollDeduction_US { | ||||
| 	var $original_filing_status = null; | ||||
|  | ||||
| 	var $state_income_tax_rate_options = [ | ||||
| 			20220101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3750, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 9450, 'rate' => 6.75, 'constant' => 178.13 ], | ||||
| 							[ 'income' => 125000, 'rate' => 8.75, 'constant' => 562.88 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 10673.50 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 7500, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 18900, 'rate' => 6.75, 'constant' => 356.25 ], | ||||
| 							[ 'income' => 250000, 'rate' => 8.75, 'constant' => 1125.75 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 21347 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20210101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3650, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 9200, 'rate' => 6.75, 'constant' => 173.38 ], | ||||
| 							[ 'income' => 125000, 'rate' => 8.75, 'constant' => 548 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 10680.50 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 7300, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 18400, 'rate' => 6.75, 'constant' => 346.75 ], | ||||
| 							[ 'income' => 250000, 'rate' => 8.75, 'constant' => 1096 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 21361 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20200101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3600, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 9050, 'rate' => 6.75, 'constant' => 171 ], | ||||
| 							[ 'income' => 125000, 'rate' => 8.75, 'constant' => 538.88 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 10684.50 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 7200, 'rate' => 4.75, 'constant' => 0 ], | ||||
| 							[ 'income' => 18100, 'rate' => 6.75, 'constant' => 342 ], | ||||
| 							[ 'income' => 250000, 'rate' => 8.75, 'constant' => 1077.75 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 21369 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20190101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3550, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8900, 'rate' => 7, 'constant' => 177.50 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 552 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11001 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 7100, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 17800, 'rate' => 7, 'constant' => 355 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1104 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22002 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20180101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3450, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8700, 'rate' => 7, 'constant' => 172.5 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 540 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11007 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6900, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 17400, 'rate' => 7, 'constant' => 345 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1080 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22014 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20170101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3400, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8500, 'rate' => 7, 'constant' => 170 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 527 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11012 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6800, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 17000, 'rate' => 7, 'constant' => 340 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1054 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22024 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20160101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3350, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8450, 'rate' => 7, 'constant' => 167.50 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 524.50 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11014 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6700, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 16900, 'rate' => 7, 'constant' => 335 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1049 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22028 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20150101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3350, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8400, 'rate' => 7, 'constant' => 167.50 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 521 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11015 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6700, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 16800, 'rate' => 7, 'constant' => 335 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1042 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22030 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20140101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3300, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8250, 'rate' => 7, 'constant' => 165 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 512 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11019 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6600, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 16500, 'rate' => 7, 'constant' => 330 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1023 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22038 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20130101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3250, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 8150, 'rate' => 7, 'constant' => 163 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 506 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11022 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6500, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 16300, 'rate' => 7, 'constant' => 325 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 1011 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22044 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20120101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 3150, 'rate' => 5, 'constant' => 183 ], | ||||
| 							[ 'income' => 7950, 'rate' => 7, 'constant' => 341 ], | ||||
| 							[ 'income' => 50000, 'rate' => 9, 'constant' => 677 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9, 'constant' => 494 ], | ||||
| 							[ 'income' => 125000, 'rate' => 9.9, 'constant' => 11028 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 6300, 'rate' => 5, 'constant' => 183 ], | ||||
| 							[ 'income' => 15900, 'rate' => 7, 'constant' => 498 ], | ||||
| 							[ 'income' => 50000, 'rate' => 9, 'constant' => 1170 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9, 'constant' => 987 ], | ||||
| 							[ 'income' => 250000, 'rate' => 9.9, 'constant' => 22056 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20070101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 2850, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 7150, 'rate' => 7, 'constant' => 143 ], | ||||
| 							[ 'income' => 7150, 'rate' => 9, 'constant' => 444 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 5700, 'rate' => 5, 'constant' => 0 ], | ||||
| 							[ 'income' => 14300, 'rate' => 7, 'constant' => 285 ], | ||||
| 							[ 'income' => 14300, 'rate' => 9, 'constant' => 887 ], | ||||
| 					], | ||||
| 			], | ||||
| 			20060101 => [ | ||||
| 					10 => [ | ||||
| 							[ 'income' => 300, 'rate' => 0, 'constant' => 0 ], | ||||
| 							[ 'income' => 8030, 'rate' => 7, 'constant' => 0 ], | ||||
| 							[ 'income' => 8030, 'rate' => 9, 'constant' => 541 ], | ||||
| 					], | ||||
| 					20 => [ | ||||
| 							[ 'income' => 2725, 'rate' => 0, 'constant' => 0 ], | ||||
| 							[ 'income' => 16065, 'rate' => 7, 'constant' => 0 ], | ||||
| 							[ 'income' => 16065, 'rate' => 9, 'constant' => 934 ], | ||||
| 					], | ||||
| 			], | ||||
| 	]; | ||||
|  | ||||
| 	var $state_options = [ | ||||
| 			20220101  => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2420, | ||||
| 							'20' => 4840, | ||||
| 					], | ||||
| 					'allowance'           => 219, | ||||
| 					'federal_tax_maximum' => 7250, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 7250, | ||||
| 									125000 => 7250, | ||||
| 									130000 => 5800, | ||||
| 									135000 => 4350, | ||||
| 									140000 => 2900, | ||||
| 									145000 => 1450, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 7250, | ||||
| 									250000 => 7250, | ||||
| 									260000 => 5800, | ||||
| 									270000 => 4350, | ||||
| 									280000 => 2900, | ||||
| 									290000 => 1450, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20210101  => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2350, | ||||
| 							'20' => 4700, | ||||
| 					], | ||||
| 					'allowance'           => 213, | ||||
| 					'federal_tax_maximum' => 7050, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 7050, | ||||
| 									125000 => 7050, | ||||
| 									130000 => 5650, | ||||
| 									135000 => 4200, | ||||
| 									140000 => 2280, | ||||
| 									145000 => 1400, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 7050, | ||||
| 									250000 => 7050, | ||||
| 									260000 => 5650, | ||||
| 									270000 => 4200, | ||||
| 									280000 => 2280, | ||||
| 									290000 => 1400, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20200101  => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2315, | ||||
| 							'20' => 4630, | ||||
| 					], | ||||
| 					'allowance'           => 210, | ||||
| 					'federal_tax_maximum' => 6950, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6950, | ||||
| 									125000 => 6950, | ||||
| 									130000 => 5550, | ||||
| 									135000 => 4150, | ||||
| 									140000 => 2750, | ||||
| 									145000 => 1350, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6950, | ||||
| 									250000 => 6950, | ||||
| 									260000 => 5550, | ||||
| 									270000 => 4150, | ||||
| 									280000 => 2750, | ||||
| 									290000 => 1350, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20190101  => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2270, | ||||
| 							'20' => 4545, | ||||
| 					], | ||||
| 					'allowance'           => 206, | ||||
| 					'federal_tax_maximum' => 6800, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6800, | ||||
| 									125000 => 6800, | ||||
| 									130000 => 5450, | ||||
| 									135000 => 4100, | ||||
| 									140000 => 2700, | ||||
| 									145000 => 1350, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6800, | ||||
| 									250000 => 6800, | ||||
| 									260000 => 5450, | ||||
| 									270000 => 4100, | ||||
| 									280000 => 2700, | ||||
| 									290000 => 1350, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20180101  => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2215, | ||||
| 							'20' => 4435, | ||||
| 					], | ||||
| 					'allowance'           => 201, | ||||
| 					'federal_tax_maximum' => 6650, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6650, | ||||
| 									125000 => 6650, | ||||
| 									130000 => 5300, | ||||
| 									135000 => 4000, | ||||
| 									140000 => 2650, | ||||
| 									145000 => 1300, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6650, | ||||
| 									250000 => 6650, | ||||
| 									260000 => 5300, | ||||
| 									270000 => 4000, | ||||
| 									280000 => 2650, | ||||
| 									290000 => 1300, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20170101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2175, | ||||
| 							'20' => 4350, | ||||
| 					], | ||||
| 					'allowance'           => 197, | ||||
| 					'federal_tax_maximum' => 6550, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6550, | ||||
| 									125000 => 6550, | ||||
| 									130000 => 5200, | ||||
| 									135000 => 3900, | ||||
| 									140000 => 2600, | ||||
| 									145000 => 1300, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6550, | ||||
| 									250000 => 6550, | ||||
| 									260000 => 5200, | ||||
| 									270000 => 3900, | ||||
| 									280000 => 2600, | ||||
| 									290000 => 1300, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20160101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2155, | ||||
| 							'20' => 4315, | ||||
| 					], | ||||
| 					'allowance'           => 195, | ||||
| 					'federal_tax_maximum' => 6500, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6500, | ||||
| 									125000 => 6500, | ||||
| 									130000 => 5200, | ||||
| 									135000 => 3900, | ||||
| 									140000 => 2600, | ||||
| 									145000 => 1300, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6500, | ||||
| 									250000 => 6500, | ||||
| 									260000 => 5200, | ||||
| 									270000 => 3900, | ||||
| 									280000 => 2600, | ||||
| 									290000 => 1300, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20150101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2145, | ||||
| 							'20' => 4295, | ||||
| 					], | ||||
| 					'allowance'           => 194, | ||||
| 					'federal_tax_maximum' => 6450, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6450, | ||||
| 									125000 => 6450, | ||||
| 									130000 => 5150, | ||||
| 									135000 => 3850, | ||||
| 									140000 => 2550, | ||||
| 									145000 => 1250, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6450, | ||||
| 									250000 => 6450, | ||||
| 									260000 => 5150, | ||||
| 									270000 => 3850, | ||||
| 									280000 => 2550, | ||||
| 									290000 => 1250, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20140101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2115, | ||||
| 							'20' => 4230, | ||||
| 					], | ||||
| 					'allowance'           => 191, | ||||
| 					'federal_tax_maximum' => 6350, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6350, | ||||
| 									125000 => 6350, | ||||
| 									130000 => 5050, | ||||
| 									135000 => 3800, | ||||
| 									140000 => 2500, | ||||
| 									145000 => 1250, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6350, | ||||
| 									250000 => 6350, | ||||
| 									260000 => 5050, | ||||
| 									270000 => 3800, | ||||
| 									280000 => 2500, | ||||
| 									290000 => 1250, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20130101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2080, | ||||
| 							'20' => 4160, | ||||
| 					], | ||||
| 					'allowance'           => 188, | ||||
| 					'federal_tax_maximum' => 6250, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6250, | ||||
| 									125000 => 6250, | ||||
| 									130000 => 5000, | ||||
| 									135000 => 3750, | ||||
| 									140000 => 2500, | ||||
| 									145000 => 1250, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6250, | ||||
| 									250000 => 6250, | ||||
| 									260000 => 5000, | ||||
| 									270000 => 3750, | ||||
| 									280000 => 2500, | ||||
| 									290000 => 1250, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20120101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 2025, | ||||
| 							'20' => 4055, | ||||
| 					], | ||||
| 					'allowance'           => 183, | ||||
| 					'federal_tax_maximum' => 6100, | ||||
| 					'phase_out'           => [ | ||||
| 							'10' => [ | ||||
| 									50000  => 6100, | ||||
| 									125000 => 6100, | ||||
| 									130000 => 4850, | ||||
| 									135000 => 3650, | ||||
| 									140000 => 2400, | ||||
| 									145000 => 1200, | ||||
| 									145000 => 0, | ||||
| 							], | ||||
| 							'20' => [ | ||||
| 									50000  => 6100, | ||||
| 									250000 => 6100, | ||||
| 									260000 => 4850, | ||||
| 									270000 => 3650, | ||||
| 									280000 => 2400, | ||||
| 									290000 => 1200, | ||||
| 									290000 => 0, | ||||
| 							], | ||||
| 					], | ||||
| 			], | ||||
| 			20100101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 1950, | ||||
| 							'20' => 3900, | ||||
| 					], | ||||
| 					'allowance'           => 177, | ||||
| 					'federal_tax_maximum' => 5850, | ||||
| 			], | ||||
| 			20090101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 1945, | ||||
| 							'20' => 3895, | ||||
| 					], | ||||
| 					'allowance'           => 176, | ||||
| 					'federal_tax_maximum' => 5850, | ||||
| 			], | ||||
| 			20070101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 1870, | ||||
| 							'20' => 3740, | ||||
| 					], | ||||
| 					'allowance'           => 165, | ||||
| 					'federal_tax_maximum' => 5500, | ||||
| 			], | ||||
| 			20060101 => [ | ||||
| 					'standard_deduction'  => [ | ||||
| 							'10' => 0, | ||||
| 							'20' => 0, | ||||
| 					], | ||||
| 					'allowance'           => 154, | ||||
| 					'federal_tax_maximum' => 4500, | ||||
| 			], | ||||
| 	]; | ||||
|  | ||||
| 	var $state_ui_options = [ | ||||
| 			20220101 => [ 'wage_base' => 47700, 'new_employer_rate' => 2.6 ], | ||||
| 			20210101 => [ 'wage_base' => 43800, 'new_employer_rate' => 2.6 ], | ||||
| 			20200101 => [ 'wage_base' => 42100, 'new_employer_rate' => 2.6 ], | ||||
| 			20190101 => [ 'wage_base' => 40600, 'new_employer_rate' => 2.6 ], | ||||
| 	]; | ||||
|  | ||||
| 	function isFederalTaxRequired() { | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	private function getStateRateArray( $input_arr, $income ) { | ||||
| 		if ( !is_array( $input_arr ) ) { | ||||
| 			return 0; | ||||
| 		} | ||||
|  | ||||
| 		$total_rates = ( count( $input_arr ) - 1 ); | ||||
| 		$prev_bracket = 0; | ||||
| 		$i = 0; | ||||
| 		foreach ( $input_arr as $bracket => $value ) { | ||||
| //			Debug::text( 'Bracket: ' . $bracket . ' Value: ' . $value, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 			if ( $income >= $prev_bracket && $income < $bracket ) { | ||||
| 				Debug::text( 'Found Bracket: ' . $bracket . ' Returning: ' . $value, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 				return $value; | ||||
| 			} else if ( $i == $total_rates ) { | ||||
| 				Debug::text( 'Found Last Bracket: ' . $bracket . ' Returning: ' . $value, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 				return $value; | ||||
| 			} | ||||
|  | ||||
| 			$prev_bracket = $bracket; | ||||
| 			$i++; | ||||
| 		} | ||||
|  | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| 	function getStateAnnualTaxableIncome() { | ||||
| 		$annual_income = $this->getAnnualTaxableIncome(); | ||||
| 		$federal_tax = $this->getFederalTaxPayable(); | ||||
|  | ||||
| 		if ( $federal_tax > $this->getStateFederalTaxMaximum() ) { | ||||
| 			$federal_tax = $this->getStateFederalTaxMaximum(); | ||||
| 		} | ||||
|  | ||||
| 		$income = bcsub( bcsub( $annual_income, $federal_tax ), $this->getStateStandardDeduction() ); | ||||
|  | ||||
| 		Debug::text( 'State Annual Taxable Income: ' . $income, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 		return $income; | ||||
| 	} | ||||
|  | ||||
| 	function getStateFederalTaxMaximum() { | ||||
| 		$retarr = $this->getDataFromRateArray( $this->getDate(), $this->state_options ); | ||||
| 		if ( $retarr == false ) { | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		$maximum = $retarr['federal_tax_maximum']; | ||||
|  | ||||
| 		if ( isset( $retarr['phase_out'][$this->getStateFilingStatus()] ) ) { | ||||
| 			$phase_out_arr = $retarr['phase_out'][$this->getStateFilingStatus()]; | ||||
| 			$phase_out_maximum = $this->getStateRateArray( $phase_out_arr, $this->getAnnualTaxableIncome() ); | ||||
| 			if ( $maximum > $phase_out_maximum ) { | ||||
| 				Debug::text( 'Maximum allowed Federal Tax exceeded phase out maximum of: ' . $phase_out_maximum, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
| 				$maximum = $phase_out_maximum; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		Debug::text( 'Maximum State allowed Federal Tax: ' . $maximum, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 		return $maximum; | ||||
| 	} | ||||
|  | ||||
| 	function getStateStandardDeduction() { | ||||
| 		$retarr = $this->getDataFromRateArray( $this->getDate(), $this->state_options ); | ||||
| 		if ( $retarr == false ) { | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		if ( $this->original_filing_status == $this->getStateFilingStatus() && isset( $retarr['standard_deduction'][$this->getStateFilingStatus()] ) ) { | ||||
| 			$deduction = $retarr['standard_deduction'][$this->getStateFilingStatus()]; | ||||
| 		} else { | ||||
| 			$deduction = $retarr['standard_deduction'][10]; | ||||
| 		} | ||||
|  | ||||
| 		Debug::text( 'Standard Deduction: ' . $deduction, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 		return $deduction; | ||||
| 	} | ||||
|  | ||||
| 	function getStateAllowanceAmount() { | ||||
| 		$retarr = $this->getDataFromRateArray( $this->getDate(), $this->state_options ); | ||||
| 		if ( $retarr == false ) { | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		$allowance_arr = $retarr['allowance']; | ||||
|  | ||||
| 		$retval = bcmul( $this->getStateAllowance(), $allowance_arr ); | ||||
|  | ||||
| 		Debug::text( 'State Allowance Amount: ' . $retval . ' Allowances: ' . $this->getStateAllowance(), __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 		return $retval; | ||||
| 	} | ||||
|  | ||||
| 	function _getStateTaxPayable() { | ||||
| 		//IF exemptions are 3 or more, change filing status to married. | ||||
| 		$this->original_filing_status = $this->getStateFilingStatus(); | ||||
|  | ||||
| 		if ( $this->getStateFilingStatus() == 10 && $this->getStateAllowance() >= 3 ) { | ||||
| 			Debug::text( 'Forcing to Married Filing Status from: ' . $this->getStateAllowance(), __FILE__, __LINE__, __METHOD__, 10 ); | ||||
| 			$this->setStateFilingStatus( 20 ); //Married tax rates. | ||||
| 		} | ||||
|  | ||||
| 		$annual_income = $this->getStateAnnualTaxableIncome(); | ||||
|  | ||||
| 		if ( $this->getDate() >= 20170101 && ( ( $this->original_filing_status == 10 && $annual_income > 100000 ) || ( $this->original_filing_status == 20 && $annual_income > 200000 ) ) ) { | ||||
| 			Debug::text( 'Income over the 100,000 or 200,000 threshold, forcing allowances to 0.', __FILE__, __LINE__, __METHOD__, 10 ); | ||||
| 			$this->setStateAllowance( 0 ); | ||||
| 		} | ||||
|  | ||||
| 		$retval = 0; | ||||
|  | ||||
| 		if ( $annual_income > 0 ) { | ||||
| 			$rate = $this->getData()->getStateRate( $annual_income ); | ||||
| 			$state_constant = $this->getData()->getStateConstant( $annual_income ); | ||||
| 			if ( $this->getDate() >= 20120101 && $annual_income < 50000 ) { //01-Jan-2012 (was 2011?) | ||||
| 				$state_array = $this->getDataFromRateArray( $this->getDate(), $this->state_options ); | ||||
| 				$state_constant += $state_array['allowance']; | ||||
| 			} | ||||
| 			$state_rate_income = $this->getData()->getStateRatePreviousIncome( $annual_income ); | ||||
|  | ||||
| 			$retval = bcadd( bcmul( bcsub( $annual_income, $state_rate_income ), $rate ), $state_constant ); | ||||
| 		} | ||||
|  | ||||
| 		$retval = bcsub( $retval, $this->getStateAllowanceAmount() ); | ||||
|  | ||||
| 		if ( $retval < 0 ) { | ||||
| 			$retval = 0; | ||||
| 		} | ||||
|  | ||||
| 		Debug::text( 'State Annual Tax Payable: ' . $retval, __FILE__, __LINE__, __METHOD__, 10 ); | ||||
|  | ||||
| 		return $retval; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user