Hey so this is part of a bigger project where I calculate the taxes but somewhere there’s a problem that I can’t seem to figure out after studying about tax calculation – maybe the problem is closer than I think and someone with a fresh mind could find out the problem ?
Example (Made up number to show the average difference)
Actual Fed Tax = $54.25
Calculated Fed Tax = $ 115
function calculate_tax($income, $brackets)
{
$tax = 0.0;
foreach ($brackets as $bracket) {
if ($income > $bracket[1]) {
$tax += ($bracket[1] - $bracket[0]) * $bracket[2];
} else {
$tax += ($income - $bracket[0]) * $bracket[2];
break;
}
}
return $tax;
}
$federal_tax_brackets = [
'S' => [
[0, 11600, 0.10],
[11601, 47150, 0.12],
[47151, 100525, 0.22],
[100526, 191950, 0.24],
[191951, 243725, 0.32],
[243726, 609350, 0.35],
[609351, INF, 0.37]
],
'M' => [
[0, 23200, 0.10],
[23201, 94300, 0.12],
[94301, 201050, 0.22],
[201051, 383900, 0.24],
[383901, 487450, 0.32],
[487451, 731200, 0.35],
[731201, INF, 0.37]
],
'H' => [
[0, 16550, 0.10],
[16551, 63100, 0.12],
[63101, 100500, 0.22],
[100501, 191950, 0.24],
[191951, 243700, 0.32],
[243701, 609350, 0.35],
[609351, INF, 0.37]
]
];
$state_tax_brackets = [
'al' => [
[0, 500, 0.02],
[501, 3000, 0.04],
[3001, INF, 0.05]
],
'ak' => [
// Alaska has no state income tax
[0, INF, 0.0]
],
'az' => [
[0, INF, 0.025]
],
'ar' => [
[0, 4400, 0.02],
[4401, 8800, 0.04],
[8801, INF, 0.04]
],
'ca' => [
[0, 10412, 0.01],
[10413, 24684, 0.02],
[24685, 38959, 0.04],
[38960, 54081, 0.06],
[54082, 68350, 0.08],
[68351, 349137, 0.093],
[349138, 418961, 0.103],
[418962, 698271, 0.113],
[698272, 1000000, 0.123],
[1000001, INF, 0.133]
],
'co' => [
[0, INF, 0.044]
],
'ct' => [
[0, 10000, 0.02],
[10001, 50000, 0.045],
[50001, 100000, 0.055],
[100001, 200000, 0.06],
[200001, 250000, 0.065],
[250001, 500000, 0.069],
[500001, INF, 0.0699]
],
'de' => [
[2001, 5000, 0.022],
[5001, 10000, 0.039],
[10001, 20000, 0.048],
[20001, 25000, 0.052],
[25001, 60000, 0.0555],
[60001, INF, 0.066]
],
'fl' => [
// Florida has no state income tax
[0, INF, 0.0]
],
'ga' => [
[0, INF, 0.0549]
],
'hi' => [
[0, 2400, 0.014],
[2401, 4800, 0.032],
[4801, 9600, 0.055],
[9601, 14400, 0.064],
[14401, 19200, 0.068],
[19201, 24000, 0.072],
[24001, 36000, 0.076],
[36001, 48000, 0.079],
[48001, 150000, 0.0825],
[150001, 175000, 0.09],
[175001, 200000, 0.10],
[200001, INF, 0.11]
],
'id' => [
[4489, INF, 0.058]
],
'il' => [
[0, INF, 0.0495]
],
'in' => [
[0, INF, 0.0305]
],
'ia' => [
[0, 6210, 0.044],
[6211, 31050, 0.0482],
[31051, INF, 0.057]
],
'ks' => [
[0, 15000, 0.031],
[15001, 30000, 0.0525],
[30001, INF, 0.057]
],
'ky' => [
[0, INF, 0.04]
],
'la' => [
[0, 12500, 0.0185],
[12501, 50000, 0.035],
[50001, INF, 0.0425]
],
'me' => [
[0, 26050, 0.058],
[26051, 61600, 0.0675],
[61601, INF, 0.0715]
],
'md' => [
[0, 1000, 0.02],
[1001, 2000, 0.03],
[2001, 3000, 0.04],
[3001, 100000, 0.0475],
[100001, 125000, 0.05],
[125001, 150000, 0.0525],
[150001, 250000, 0.055],
[250001, INF, 0.0575]
],
'ma' => [
[0, 1000000, 0.05],
[1000001, INF, 0.09]
],
'mi' => [
[0, INF, 0.0405]
],
'mn' => [
[0, 31690, 0.0535],
[31691, 104090, 0.068],
[104091, 193240, 0.0785],
[193241, INF, 0.0985]
],
'ms' => [
[10001, INF, 0.047]
],
'mo' => [
[1274, 2546, 0.02],
[2547, 3819, 0.025],
[3820, 5092, 0.03],
[5093, 6365, 0.035],
[6366, 7638, 0.04],
[7639, 8911, 0.045],
[8912, INF, 0.048]
],
'mt' => [
[0, 20500, 0.047],
[20501, INF, 0.059]
],
'ne' => [
[0, 3700, 0.0246],
[3701, 22170, 0.0351],
[22171, 35730, 0.0501],
[35731, INF, 0.0584]
],
'nv' => [
// Nevada has no state income tax
[0, INF, 0.0]
],
'nh' => [
// New Hampshire has no state income tax
[0, INF, 0.0]
],
'nj' => [
[0, 20000, 0.014],
[20001, 35000, 0.0175],
[35001, 40000, 0.035],
[40001, 75000, 0.05525],
[75001, 500000, 0.0637],
[500001, 1000000, 0.0897],
[1000001, INF, 0.1075]
],
'nm' => [
[0, 5500, 0.017],
[5501, 11000, 0.032],
[11001, 16000, 0.047],
[16001, 210000, 0.049],
[210001, INF, 0.059]
],
'ny' => [
[0, 8500, 0.04],
[8501, 11700, 0.045],
[11701, 13900, 0.0525],
[13901, 80650, 0.055],
[80651, 215400, 0.06],
[215401, 1077550, 0.0685],
[1077551, 5000000, 0.0965],
[5000001, 25000000, 0.103],
[25000001, INF, 0.109]
],
'nc' => [
[0, INF, 0.045]
],
'nd' => [
[44726, 225975, 0.0195],
[225976, INF, 0.025]
],
'oh' => [
[26051, 92150, 0.0275],
[92151, INF, 0.035]
],
'ok' => [
[0, 1000, 0.0025],
[1001, 2500, 0.0075],
[2501, 3750, 0.0175],
[3751, 4900, 0.0275],
[4901, 7200, 0.0375],
[7201, INF, 0.0475]
],
'or' => [
[0, 4300, 0.0475],
[4301, 10750, 0.0675],
[10751, 125000, 0.0875],
[125001, INF, 0.099]
],
'pa' => [
[0, INF, 0.0307]
],
'ri' => [
[0, 77450, 0.0375],
[77451, 176050, 0.0475],
[176051, INF, 0.0599]
],
'sc' => [
[0, 3460, 0.00],
[3461, 17330, 0.03],
[17331, INF, 0.064]
],
'sd' => [
// South Dakota has no state income tax
[0, INF, 0.0]
],
'tn' => [
// Tennessee has no state income tax
[0, INF, 0.0]
],
'tx' => [
// Texas has no state income tax
[0, INF, 0.0]
],
'ut' => [
[0, INF, 0.0465]
],
'vt' => [
[0, 45400, 0.0335],
[45401, 110050, 0.066],
[110051, 229550, 0.076],
[229551, INF, 0.0875]
],
'va' => [
[0, 3000, 0.02],
[3001, 5000, 0.03],
[5001, 17000, 0.05],
[17001, INF, 0.0575]
],
'wa' => [
// Washington has no state income tax
[0, INF, 0.0]
],
'wv' => [
[0, 10000, 0.0236],
[10001, 25000, 0.0315],
[25001, 40000, 0.0353],
[40001, 60000, 0.0472],
[60001, INF, 0.0512]
],
'wi' => [
[0, 14320, 0.035],
[14321, 28640, 0.044],
[28641, 315310, 0.053],
[315311, INF, 0.0765]
],
'wy' => [
// Wyoming has no state income tax
[0, INF, 0.0]
],
'dc' => [
[0, 10000, 0.04],
[10001, 40000, 0.06],
[40001, 60000, 0.065],
[60001, 250000, 0.085],
[250001, 500000, 0.0925],
[500001, 1000000, 0.0975],
[1000001, INF, 0.1075]
]
];
$standard_deductions = [
'federal' => [
'S' => 14600, // Single; Married filing separately
'M' => 29200, // Married filing jointly; Surviving spouse
'H' => 21900 // Head of household
],
'al' => [
'S' => 3000,
'M' => 8500,
'H' => 5200
],
'ak' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'az' => [
'S' => 14600,
'M' => 29200,
'H' => 20800
] ,
'ar' => [
'S' => 2340,
'M'=> 4680,
'H'=> 2340
],
'ca' => [
'S' => 5363,
'M' => 10726,
'H' => 10726
],
'co' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'ct' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'de' => [
'S' => 3250,
'M' => 6500,
'H' => 3250
],
'fl' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ga' => [
'S' => 12000,
'M' => 24000,
'H' => 12000
],
'hi' => [
'S' => 2200,
'M' => 4400,
'H' => 3212
],
'id' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'il' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'in' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ia' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ks' => [
'S' => 3500,
'M' => 8000,
'H' => 6000
],
'ky' => [
'S' => 3160,
'M' => 6320,
'H' => 3160
],
'la' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'me' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'md' => [
'S' => 2550,
'M' => 5150,
'H' => 5150
],
'ma' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'mi' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'mn' => [
'S' => 14575,
'M' => 29150,
'H' => 21900
],
'ms' => [
'S' => 2300,
'M' => 4600,
'H' => 3400
],
'mo' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'mt' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'ne' => [
'S' => 7900,
'M' => 15800,
'H' => 11600
],
'nv' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'nh' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'nj' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'nm' => [
'S' => 14600,
'M' => 29200,
'H' => 18800
],
'ny' => [
'S' => 8000,
'M' => 16050,
'H' => 11200
],
'nc' => [
'S' => 12750,
'M' => 25500,
'H' => 19125
],
'nd' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'oh' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ok' => [
'S' => 6350,
'M' => 12700,
'H' => 9350
],
'or' => [
'S' => 2745,
'M' => 5495,
'H' => 4420
],
'pa' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ri' => [
'S' => 10550,
'M' => 21150,
'H' => 21900
],
'sc' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'sd' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'tn' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'tx' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'ut' => [
'S' => 15095,
'M' => 30190,
'H' => 22643
],
'vt' => [
'S' => 7000,
'M' => 14050,
'H' => 21900
],
'va' => [
'S' => 8000,
'M' => 16000,
'H' => 21900
],
'wa' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
],
'wv' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'wi' => [
'S' => 13230,
'M' => 24490,
'H' => 21900
],
'wy' => [
'S' => 0,
'M' => 0,
'H' => 0
],
'dc' => [
'S' => 14600,
'M' => 29200,
'H' => 21900
]
];