PCX Payroll System

StateIncome.pm
StateIncome->calculate(
gross, # - gross pay
date, #- date of payment format YYYYMMDD
method, #- specifies mthod to use. currently only 1
allowances #, - state allowances claimed, integer
period, #- annual, semiannual, quarterly, monthly, semimonthly, biweekly, weekly, daily
marital, #- single, married, spouseWorks, head
federal, #- amount of federal tax withheld here
fYTD, #- total federal tax withheld yeart to date
round, #yes, no - defaults to yes
)
{
#Step 1.1
if period ne "annual"
aGross = annualize(gross, period)
#Step 1.2
aGross -= dataTables{$foundDate}->{standardDeduction}->{marital}
#Step 1.3
if allowances >= 1
aGross -= dataTables{$foundDate}->{allowance1}->{marital}
if allowances >= 2
aGross -= dataTables{$foundDate}->{allowance2}->{marital}
if allowances >= 3
aGross -= dataTables{$foundDate}->{allowance3}->{marital}
if allowances >= 4
aGross -= dataTables{$foundDate}->{allowance4}->{marital}
if allowances >= 5
aGross -= (dataTables{$foundDate}->{allowance5}->{marital} * (allowances -4))
#Step 1.4
aFed = annualize(federal, period) - dataTables{$foundDate}->{federalLimit}->{marital}
#Step 1.5 done along the way and finished here
aGross -= aFed
#Step 2.1 lookup tables for percentages
#need to place table in reverse oder so that we can know the top is
mGross = aGross
for (in reverse)
if mGross >= bottom[x]
if bottom[x] == 0
tax+= (mGross) * percent[x]
mGross = 0
else
tax += (mGross - bottom[x] + .01) * percent[x] #bottom is inclusive
mGross = bottom[x] - .01
#Step 2.2
tax = reverseAnnualize(tax, period)
if round eq "no"
return tax
else
return round(tax) #to whole number
}
#############!!!!!!!!!!!!!!!make the ='s into =>'s
new()
{
$dataTables->{tables}
dataTables{'20020101' =>
{ standardDeduction => {single = '4700', married = '7850' , spouseworks = '3925', head ='6900' },
allowance1 => { single = '1200', married = '1200' , spouseworks = '1200', head = '3500'},
allowance2 => { single = '1200', married = '1200' , spouseworks = '1200', head = '0'},
allowance3 => { single = '1200', married = '1200' , spouseworks = '1200', head = '0'},
allowance4 => { single = '1200', married = '1200' , spouseworks = '1200', head = '0'},
allowance5 => { single = '1200', married = '1200' , spouseworks = '1200', head = '1200'},
federalLimit = '5000', married = '10000' , spouseworks = '5000', head = '10000'} ,
percentTable =>
{top = '1000.00', percent = '1.5' },
{top = '2000.00', percent = '2.0' },
{top = '3000.00', percent = '2.5' },
{top = '4000.00', percent = '3.0' },
{top = '5000.00', percent = '3.5' },
{top = '6000.00', percent = '4.0' },
{top = '7000.00', percent = '4.5' },
{top = '8000.00', percent = '5.0' },
{top = '9000.00', percent = '5.5' },
{top = '-1', percent = '6.0' }
}
}
dataTables{$foundDate}->{allowance1}->{marital}
The periodDays hash holds the number of days in a period

periodDays-> | {annual} | = 1
| {semiannual} | = 2
| {quarterly} | = 4
| {monthly} | = 12
| {semimonthly} | = 24
| {biweekly} | = 26
| {weekly} | = 52
| {daily} | = 260

}