::if {$::qw::control(usa_nctb)} {} ::if {$::qw::control(has_tk)} { itcl::class ::QW::NV2::PAYROLL::PROCESS::USA { inherit ::QW::NV2::PAYROLL::PROCESS; public variable _federal_allowance 0; public variable _social_security_rate 0; public variable _social_security_wage_base 0; public variable _social_security_maximum 0; public variable _medicare_rate 0; public variable _medicare_additional_rate 0; public variable _medicare_wage_base 0; public variable _medicare_maximum 0; protected variable _employee_social_security_deduction 0.0; protected variable _employer_social_security_contribution 0.0; protected variable _employee_medicare_deduction 0.0; protected variable _employer_medicare_contribution 0.0; protected variable _employer_futa_contribution 0.0; protected variable _employee_federal_tax_deduction 0.0; protected variable _employer_social_security_rate 0; protected variable _employer_medicare_rate 0; protected variable _employer_futa_rate 0; public variable _futa_rate 0; public variable _futa_wage_base 0; public variable _futa_maximum 0; public variable _supplemental_tax_rate 0.0; public variable _california_sdi_maximum 0; public variable _california_sdi_rate 0; public variable _cafeteria_plan_maximum 0; protected variable _federalTableVersion ""; protected variable _stateTableVersion ""; protected variable _localTableVersion ""; constructor {args} { ::set _toplevel_title "U.S. Payroll Preview"; ::eval ::QW::NV2::PAYROLL::PROCESS::constructor $args; } { ::set _payrollCountry "USA"; ::set _chequeWord "check"; ::set _tablesStartDate "20130101"; ::set _tablesEndDate "20251231"; ::set _version_country "20250101"; ::set _patch_level_country "0"; ::unset -nocomplain _stateTableVersion;::array set _stateTableVersion {}; ::unset -nocomplain _localTableVersion;::array set _localTableVersion {}; ::return $this; } public method destructor {} { ::return ""; } public method version_information_other {} { ::set List ""; ::lappend List [::sargs .jurisdiction "Jurisdiction" .start_date "Start Date" .end_date "Last Revision"]; ::set SaveDate $_date; ::set SaveJurisdiction1 [employeeInfoGet .state/1.jurisdiction]; ::set SaveJurisdiction2 [employeeInfoGet .state/2.jurisdiction]; ::set _date "20000101"; set_tax_variables_federal; ::set BeginDate [::qw::date::format $_federalTableVersion $::qw::date::formats(dd month yyyy)]; ::set _date "20350101"; set_tax_variables_federal; ::set EndDate [::qw::date::format $_federalTableVersion $::qw::date::formats(dd month yyyy)]; ::lappend List [::sargs .jurisdiction "Federal" .start_date $BeginDate .end_date $EndDate]; ::foreach {State StateName} { {AL} {Alabama} {AZ} {Arizona} {AR} {Arkansas} {CA} {California} {CO} {Colorado} {CT} {Connecticut} {DE} {Delaware} {DC} {District of Columbia} {GA} {Georgia} {HI} {Hawaii} {ID} {Idaho} {IL} {Illinois} {IN} {Indiana} {IA} {Iowa} {KS} {Kansas} {KY} {Kentucky} {LA} {Louisiana} {ME} {Maine} {MD} {Maryland} {MA} {Massachusetts} {MI} {Michigan} {MN} {Minnesota} {MS} {Mississippi} {MO} {Missouri} {MT} {Montana} {NE} {Nebraska} {NJ} {New Jersey} {NM} {New Mexico} {NY} {New York} {NC} {North Carolina} {ND} {North Dakota} {OH} {Ohio} {OK} {Oklahoma} {OR} {Oregon} {PA} {Pennsylvania} {PR} {Puerto Rico} {RI} {Rhode Island} {SC} {South Carolina} {UT} {Utah} {VT} {Vermont} {VA} {Virginia} {WV} {West Virginia} {WI} {Wisconsin} } { employeeInfoSet ".state/1.jurisdiction" $State; ::set _date "20000101"; set_tax_variables_state; ::set BeginDate [::qw::date::format $_stateTableVersion(1) $::qw::date::formats(dd month yyyy)]; ::set _date "20350101"; set_tax_variables_state; ::set EndDate [::qw::date::format $_stateTableVersion(1) $::qw::date::formats(dd month yyyy)]; ::lappend List [::sargs .jurisdiction $StateName .start_date $BeginDate .end_date $EndDate]; } ::set _date $SaveDate; employeeInfoSet .state/1.jurisdiction $SaveJurisdiction1; employeeInfoSet .state/2.jurisdiction $SaveJurisdiction2; ::return $List; } public method init_payroll_country {} { chain; ::set _employer_social_security_rate [[$_payrollObject ".social_security_contribution_rate"] odb_get]; ::set _employer_medicare_rate [[$_payrollObject ".medicare_contribution_rate"] odb_get]; ::set _employer_futa_rate [[$_payrollObject ".futa_contribution_rate"] odb_get]; ::if {$_employer_social_security_rate eq ""} {::set _employer_social_security_rate 0.0;} ::if {$_employer_medicare_rate eq ""} {::set _employer_medicare_rate 0.0;} ::if {$_employer_futa_rate eq ""} {::set _employer_futa_rate 0.0;} set_tax_variables_federal; ::return $this; } public method set_tax_variables_federal {{s_args ""}} { ::if {[::sargs::get $s_args ".date"] ne ""} { ::set _date [::sargs::get $s_args ".date"]; } ::set _federalTableVersion "20130101"; ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _federalTableVersion "20250101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 176100; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// np change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 999999999; ;#// no change ::set _california_sdi_rate 0.012; ;#// new rate for 2025 ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _federalTableVersion "20240101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 168600; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// np change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 999999999; ;#// new for 2024 ::set _california_sdi_rate 0.011; ;#// new for 2024 ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _federalTableVersion "20230101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 160200; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 153164; ;#// new for 2023 ::set _california_sdi_rate 0.009; ;#// new for 2023 ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _federalTableVersion "20220101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 147000; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 145600; ;#// new for 2022 ::set _california_sdi_rate 0.011; ;#// new for 2022 ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _federalTableVersion "20210101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 142800; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 128298; ::set _california_sdi_rate 0.012; ;#// no change ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _federalTableVersion "20200101"; ::set _federal_allowance 4300; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 137700; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 122909; ::set _california_sdi_rate 0.010; ;#// no change ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _federalTableVersion "20190101"; ::set _federal_allowance 4200; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 132900; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 118371; ::set _california_sdi_rate 0.010; ;#// no change ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _federalTableVersion "20180101"; ::set _federal_allowance 4150; ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 128400; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 114967; ::set _california_sdi_rate 0.010; ;#// no change ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _federalTableVersion "20170101"; ::set _federal_allowance 4050; ;#// no change ::set _social_security_rate 0.062; ;#// no change ::set _social_security_wage_base 127200; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ;#// no change ::set _medicare_additional_rate 0.009; ;#// no change ::set _medicare_wage_base 999999999999999; ;#// no change ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ;#// no change ::set _futa_wage_base 7000; ;#// no change ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ;#// no change ::set _california_sdi_maximum 110902; ::set _california_sdi_rate 0.009; ;#// no change ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _federalTableVersion "20160101"; ::set _federal_allowance 4050; ::set _social_security_rate 0.062; ::set _social_security_wage_base 118500; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ::set _medicare_additional_rate 0.009; ::set _medicare_wage_base 999999999999999; ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ::set _futa_wage_base 7000; ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ::set _california_sdi_maximum 106742; ::set _california_sdi_rate 0.009; ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _federalTableVersion "20150101"; ::set _federal_allowance 4000; ::set _social_security_rate 0.062; ::set _social_security_wage_base 118500; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ::set _medicare_additional_rate 0.009; ::set _medicare_wage_base 999999999999999; ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ::set _futa_wage_base 7000; ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 18000; ::set _california_sdi_maximum 104378; ::set _california_sdi_rate 0.009; ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _federalTableVersion "20140101"; ::set _federal_allowance 3950; ::set _social_security_rate 0.062; ::set _social_security_wage_base 117000; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ::set _medicare_additional_rate 0.009; ::set _medicare_wage_base 999999999999999; ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ::set _futa_wage_base 7000; ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 17500; ::set _california_sdi_maximum 101636; ::set _california_sdi_rate 0.010; ;#??? ::set _supplemental_tax_rate 0.28; ;#??? ::return; } ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _federalTableVersion "20130101"; ::set _federal_allowance 3900; ::set _social_security_rate 0.062; ::set _social_security_wage_base 113700; ::set _social_security_maximum [::expr $_social_security_rate*$_social_security_wage_base]; ::set _medicare_rate 0.0145; ::set _medicare_additional_rate 0.009; ::set _medicare_wage_base 999999999999999; ::set _medicare_maximum $_medicare_wage_base; ::set _futa_rate 0.006; ::set _futa_wage_base 7000; ::set _futa_maximum [::expr $_futa_rate*$_futa_wage_base]; ::set _cafeteria_plan_maximum 17500; ::set _california_sdi_maximum 100880; ::set _california_sdi_rate 0.010; ;#??? ::set _supplemental_tax_rate 0.28; ;#??? ::return; } } public method tax_variables_federal_get {} { ::lappend List _federalTableVersion; ::lappend List _federal_allowance; ::lappend List _social_security_rate; ::lappend List _social_security_wage_base; ::lappend List _social_security_maximum; ::lappend List _medicare_rate; ::lappend List _medicare_wage_base; ::lappend List _medicare_maximum; ::lappend List _futa_rate; ::lappend List _futa_wage_base; ::lappend List _futa_maximum; ::lappend List _cafeteria_plan_maximum; ::lappend List _california_sdi_maximum; ::lappend List _california_sdi_rate; ::lappend List _supplemental_tax_rate; ::foreach Var $List { ::sargs::var::set Result ".$Var" [::set $Var]; } ::return $Result; } public method init_employee_country {} { chain; ::set _employee_social_security_deduction 0.0; ::set _employer_social_security_contribution 0.0; ::set _employee_medicare_deduction 0.0; ::set _employer_medicare_contribution 0.0; ::set _employer_futa_contribution 0.0; ::set _employee_federal_tax_deduction 0.0; set_tax_variables_state; # Set State Constants set_tax_variables_local; # Set Local Constants ::return $this; } public method employee_jurisdiction_list {} { ::set Result ""; ::foreach Name {".state/1.jurisdiction" ".state/2.jurisdiction" ".local/1.jurisdiction" ".local/2.jurisdiction"} { ::set Value [employeeInfoGet $Name]; ::if {$Value ne ""} {::sargs::var::set Result $Name $Value;} } ::return $Result; } public method set_tax_variables_state {} { ::set _stateTableVersion(1) "20130101"; ::set _stateTableVersion(2) "20130101"; ::foreach Number {1 2} { ::set Jurisdiction [employeeInfoGet .state/$Number.jurisdiction]; ::if {$Jurisdiction eq ""} {::continue;} ::switch $Jurisdiction { "AL" { ::if {[::qw::date::difference $_date "20100101" "day"]>=0} { ::set _stateTableVersion($Number) "20100101"; } ::if {[::qw::date::difference $_date "20130701" "day"]>=0} { ::set _stateTableVersion($Number) "20130701"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220701" "day"]>=0} { ::set _stateTableVersion($Number) "20220701"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } } "AR" { ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20200701" "day"]>=0} { ::set _stateTableVersion($Number) "20200701"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "AZ" { ::if {[::qw::date::difference $_date "20100701" "day"]>=0} { ::set _stateTableVersion($Number) "20100701"; } } "CA" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "CO" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180401" "day"]>=0} { ::set _stateTableVersion($Number) "20180401"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "CT" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "DC" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } } "DE" { ::if {[::qw::date::difference $_date "20100101" "day"]>=0} { ::set _stateTableVersion($Number) "20100101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } } "GA" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "HI" { ::if {[::qw::date::difference $_date "20110101" "day"]>=0} { ::set _stateTableVersion($Number) "20110101"; } ::if {[::qw::date::difference $_date "20150701" "day"]>=0} { ::set _stateTableVersion($Number) "20150701"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "IA" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "ID" { ::if {[::qw::date::difference $_date "20120701" "day"]>=0} { ::set _stateTableVersion($Number) "20120701"; } ::if {[::qw::date::difference $_date "20130701" "day"]>=0} { ::set _stateTableVersion($Number) "20130701"; } ::if {[::qw::date::difference $_date "20150701" "day"]>=0} { ::set _stateTableVersion($Number) "20150701"; } ::if {[::qw::date::difference $_date "20160601" "day"]>=0} { ::set _stateTableVersion($Number) "20160601"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20200701" "day"]>=0} { ::set _stateTableVersion($Number) "20200701"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20220701" "day"]>=0} { ::set _stateTableVersion($Number) "20220701"; } ::if {[::qw::date::difference $_date "20230701" "day"]>=0} { ::set _stateTableVersion($Number) "20230701"; } } "IL" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "IN" { ::set _stateTableVersion($Number) "20030101"; ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "KS" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "KY" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20180501" "day"]>=0} { ::set _stateTableVersion($Number) "20180501"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "LA" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20180201" "day"]>=0} { ::set _stateTableVersion($Number) "20180201"; } ::if {[::qw::date::difference $_date "20220701" "day"]>=0} { ::set _stateTableVersion($Number) "20220701"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "MA" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } } "MD" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20220701" "day"]>=0} { ::set _stateTableVersion($Number) "20220701"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } } "ME" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "MI" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "MN" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20190901" "day"]>=0} { ::set _stateTableVersion($Number) "20190901"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "MO" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "MS" { ::set _stateTableVersion($Number) "20030101"; ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } } "MT" { ::if {[::qw::date::difference $_date "20050101" "day"]>=0} { ::set _stateTableVersion($Number) "20050101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "NC" { ::if {[::qw::date::difference $_date "20080101" "day"]>=0} { ::set _stateTableVersion($Number) "20080101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "ND" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "NE" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "NJ" { ::if {[::qw::date::difference $_date "20100101" "day"]>=0} { ::set _stateTableVersion($Number) "20100101"; } ::if {[::qw::date::difference $_date "20180901" "day"]>=0} { ::set _stateTableVersion($Number) "20180901"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } } "NM" { ::if {[::qw::date::difference $_date "20120101" "day"]>=0} { ::set _stateTableVersion($Number) "20120101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "NY" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } } "OH" { ::if {[::qw::date::difference $_date "20090101" "day"]>=0} { ::set _stateTableVersion($Number) "20090101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "OK" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } } "OR" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "PA" { ::if {[::qw::date::difference $_date "20040101" "day"]>=0} { ::set _stateTableVersion($Number) "20040101"; } } "PR" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } } "RI" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "SC" { ::if {[::qw::date::difference $_date "20030101" "day"]>=0} { ::set _stateTableVersion($Number) "20030101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _stateTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20240101" "day"]>=0} { ::set _stateTableVersion($Number) "20240101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "VA" { ::if {[::qw::date::difference $_date "20080101" "day"]>=0} { ::set _stateTableVersion($Number) "20080101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "UT" { ::if {[::qw::date::difference $_date "20080101" "day"]>=0} { ::set _stateTableVersion($Number) "20080101"; } ::if {[::qw::date::difference $_date "20180501" "day"]>=0} { ::set _stateTableVersion($Number) "20180501"; } ::if {[::qw::date::difference $_date "20220701" "day"]>=0} { ::set _stateTableVersion($Number) "20220701"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "VT" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _stateTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _stateTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _stateTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _stateTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _stateTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _stateTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _stateTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _stateTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _stateTableVersion($Number) "20230101"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } "WI" { ::if {[::qw::date::difference $_date "20091001" "day"]>=0} { ::set _stateTableVersion($Number) "20091001"; } ::if {[::qw::date::difference $_date "20140401" "day"]>=0} { ::set _stateTableVersion($Number) "20140401"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _stateTableVersion($Number) "20220101"; } } "WV" { ::if {[::qw::date::difference $_date "20040101" "day"]>=0} { ::set _stateTableVersion($Number) "20040101"; } ::if {[::qw::date::difference $_date "20230701" "day"]>=0} { ::set _stateTableVersion($Number) "20230701"; } ::if {[::qw::date::difference $_date "20250101" "day"]>=0} { ::set _stateTableVersion($Number) "20250101"; } } default {::qw::bug "907020050401053927" "Employee has unknown state jurisdiction \"$Jurisdiction\".";} } } } public method set_tax_variables_local {} { ::set _localTableVersion(1) "20030101"; ::set _localTableVersion(2) "20030101"; ::foreach Number {1 2} { ::set Jurisdiction [employeeInfoGet .local/$Number.jurisdiction]; ::if {$Jurisdiction eq ""} {::continue;} ::switch $Jurisdiction { "20" { ::if {[::qw::date::difference $_date "20040101" "day"]>=0} { ::set _localTableVersion($Number) "20040101"; } } "40" { ::if {[::qw::date::difference $_date "20110101" "day"]>=0} { ::set _localTableVersion($Number) "20110101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _localTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _localTableVersion($Number) "20180101"; } } "50" { ::if {[::qw::date::difference $_date "20130101" "day"]>=0} { ::set _localTableVersion($Number) "20130101"; } ::if {[::qw::date::difference $_date "20140101" "day"]>=0} { ::set _localTableVersion($Number) "20140101"; } ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _localTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20160101" "day"]>=0} { ::set _localTableVersion($Number) "20160101"; } ::if {[::qw::date::difference $_date "20170101" "day"]>=0} { ::set _localTableVersion($Number) "20170101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _localTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _localTableVersion($Number) "20190101"; } ::if {[::qw::date::difference $_date "20200101" "day"]>=0} { ::set _localTableVersion($Number) "20200101"; } ::if {[::qw::date::difference $_date "20210101" "day"]>=0} { ::set _localTableVersion($Number) "20210101"; } ::if {[::qw::date::difference $_date "20220101" "day"]>=0} { ::set _localTableVersion($Number) "20220101"; } ::if {[::qw::date::difference $_date "20230101" "day"]>=0} { ::set _localTableVersion($Number) "20230101"; } } "90" { ::if {[::qw::date::difference $_date "20040101" "day"]>=0} { ::set _localTableVersion($Number) "20040101"; } } "10" { ::if {[::qw::date::difference $_date "20150101" "day"]>=0} { ::set _localTableVersion($Number) "20150101"; } ::if {[::qw::date::difference $_date "20180101" "day"]>=0} { ::set _localTableVersion($Number) "20180101"; } ::if {[::qw::date::difference $_date "20190101" "day"]>=0} { ::set _localTableVersion($Number) "20190101"; } } "30" {} "60" {} "80" {} "99" {} "85" {} default {::qw::bug "907020050401054000" "Employee has unknown local jurisdiction \"$Jurisdiction\".";} } } } public method employee_fields_country {} { ::set Result [::concat [chain] { .social_security_number .federal.exemptions .federal.marital_status .federal.tax_exempt .federal.social_security_exempt .federal.medicare_exempt .federal.futa_exempt .federal.manual_tax_calculation .federal.additional_tax .federal.round_tax }]; ::foreach Sub {/1 /2} { ::set Result [::concat $Result [::string map "%_sub $Sub" { .state%_sub.exemptions .state%_sub.marital_status .state%_sub.jurisdiction .state%_sub.residence .state%_sub.tax_exempt .state%_sub.unemployment_insurance_exempt .state%_sub.manual_tax_calculation .state%_sub.additional_tax .state%_sub.round_tax }]]; } ::foreach Sub {/1 /2} { ::set Result [::concat $Result [::string map "%_sub $Sub" { .local%_sub.exemptions .local%_sub.marital_status .local%_sub.jurisdiction .local%_sub.residence .local%_sub.tax_exempt .local%_sub.manual_tax_calculation .local%_sub.additional_tax .local%_sub.round_tax }]]; } ::if {$::qw::control(usa_nctb)} { ::foreach Benefit {1 2 3 4} { ::set Result [::concat $Result [::string map "%_sub $Benefit" { .non_cash_taxable_benefits/%_sub.description .non_cash_taxable_benefits/%_sub.amount .non_cash_taxable_benefits/%_sub.amount_period .non_cash_taxable_benefits/%_sub.percent .non_cash_taxable_benefits/%_sub.percentage_base .non_cash_taxable_benefits/%_sub.w2_box .non_cash_taxable_benefits/%_sub.taxable_federal .non_cash_taxable_benefits/%_sub.taxable_state_1 .non_cash_taxable_benefits/%_sub.taxable_state_2 .non_cash_taxable_benefits/%_sub.taxable_local_1 .non_cash_taxable_benefits/%_sub.taxable_local_2 .non_cash_taxable_benefits/%_sub.pensionable .non_cash_taxable_benefits/%_sub.medicare .non_cash_taxable_benefits/%_sub.futa .non_cash_taxable_benefits/%_sub.insurable .non_cash_taxable_benefits/%_sub.sdi .non_cash_taxable_benefits/%_sub.vacationable }]]; } } ::return $Result; } public method build_employee_structure_country {} { chain; employeeInfoSet ".social_security_earnings" 0.0; employeeInfoSet ".medicare_earnings" 0.0; employeeInfoSet ".futa_earnings" 0.0; employeeInfoSet ".state_earnings/1" 0.0; employeeInfoSet ".state_earnings/2" 0.0; employeeInfoSet ".local_earnings/1" 0.0; employeeInfoSet ".local_earnings/2" 0.0; ::if {$::qw::control(usa_nctb)} { employeeInfoSet ".taxable_benefit/1.amount" 0.0; employeeInfoSet ".taxable_benefit/2.amount" 0.0; employeeInfoSet ".taxable_benefit/3.amount" 0.0; employeeInfoSet ".taxable_benefit/4.amount" 0.0; employeeInfoSet ".taxable_benefit/1.description" ""; employeeInfoSet ".taxable_benefit/2.description" ""; employeeInfoSet ".taxable_benefit/3.description" ""; employeeInfoSet ".taxable_benefit/4.description" ""; } ::return $this; } public method normalize_employee_structure_country {} { chain; ::foreach Field { .federal.exemptions .federal.additional_tax .state/1.exemptions .state/1.additional_tax .state/2.exemptions .state/2.additional_tax .local/1.exemptions .local/1.additional_tax .local/2.exemptions .local/2.additional_tax } { employeeInfoSet $Field [employeeInfoGetNumber $Field]; } ::set Flist { .non_cash_taxable_benefits/%_sub.amount .non_cash_taxable_benefits/%_sub.percent } ::foreach Sub {1 2 3 4} { ::foreach Field $Flist { ::set Field [::string map [::list %_sub $Sub] $Field]; employeeInfoSet $Field [employeeInfoGetNumber $Field]; } } ::foreach Field { .federal.tax_exempt .federal.social_security_exempt .federal.medicare_exempt .federal.futa_exempt .federal.manual_tax_calculation .federal.round_tax .state/1.tax_exempt .state/1.unemployment_insurance_exempt .state/1.manual_tax_calculation .state/1.round_tax .state/2.tax_exempt .state/2.unemployment_insurance_exempt .state/2.manual_tax_calculation .state/2.round_tax .local/1.tax_exempt .local/1.manual_tax_calculation .local/1.round_tax .local/2.tax_exempt .local/2.manual_tax_calculation .local/2.round_tax } { employeeInfoSet $Field [employeeInfoGetBoolean $Field]; } ::set Flist { .non_cash_taxable_benefits/%_sub.taxable_federal .non_cash_taxable_benefits/%_sub.taxable_state_1 .non_cash_taxable_benefits/%_sub.taxable_state_2 .non_cash_taxable_benefits/%_sub.taxable_local_1 .non_cash_taxable_benefits/%_sub.taxable_local_2 .non_cash_taxable_benefits/%_sub.pensionable .non_cash_taxable_benefits/%_sub.medicare .non_cash_taxable_benefits/%_sub.futa .non_cash_taxable_benefits/%_sub.insurable .non_cash_taxable_benefits/%_sub.sdi .non_cash_taxable_benefits/%_sub.vacationable } ::foreach Sub {1 2 3 4} { ::foreach Field $Flist { ::set Field [::string map [::list %_sub $Sub] $Field]; employeeInfoSet $Field [employeeInfoGetBoolean $Field]; } } } public method taxable_income {{s_args ""}} { ::set TaxableIncome [earningsSubjectTo ".federal_tax"]; ::if {$::qw::control(usa_nctb)} { ::set NonCashTaxableBenefits [non_cash_taxable_benefits [::sargs::var::set s_args .type "taxable_federal"]]; ::set TaxableIncome [::expr {$TaxableIncome+$NonCashTaxableBenefits}]; } ::return $TaxableIncome; } public method tables_test {} { build_test_employee_structure; test_employee_add_account { .account { .name "" .normal_balance "" .description "" .amount { /perpetual 0.0 /month_to_date 0.0 /year_to_date 0.0 /pay_period_to_date 0.0 } .paycodes { } } } ::puts "State TableDate Periods MaritalStatus Exemptions Wages Target Result Error"; ::set Format $::qw::number::formats(dollar_minus_trailing); ::foreach {State TableDate Periods MaritalStatus Exemptions Residency Wages Target} { {Alabama} {} {} {} {} {} {} {} {AL} {20070101} {52} {married-filing-jointly} {2 2.72} {} {435.0} {10.03} {California} {} {} {} {} {} {} {} {CA} {20060101} {52} {single} {1} {} {205.0} {0.00} {CA} {20060101} {26} {married} {3,1} {} {1150.0} {5.67} {CA} {20060101} {12} {married} {5} {} {3800.0} {33.63} {CA} {20060101} {24} {married} {4} {} {1600.0} {8.42} {CA} {20060101} {1} {married} {4} {} {42000.0} {346.14} {CA} {20070101} {52} {single} {1} {} {205.0} {0.00} {CA} {20070101} {26} {married} {3,1} {} {1150.0} {4.92} {CA} {20070101} {12} {married} {5} {} {3800.0} {28.00} {CA} {20070101} {52} {head-of-household} {3} {} {800.0} {6.88} {CA} {20070101} {24} {married} {4} {} {1600.0} {5.79} {CA} {20070101} {1} {married} {4} {} {42000.0} {282.84} {CA} {20080101} {52} {single} {1} {} {220.0} {0.00} {CA} {20080101} {26} {married} {3,1} {} {1150.0} {4.37} {CA} {20080101} {12} {married} {5} {} {3800.0} {24.11} {CA} {20080101} {52} {head-of-household} {3} {} {800.0} {6.09} {CA} {20080101} {24} {married} {4} {} {1800.0} {11.95} {CA} {20080101} {1} {married} {4} {} {42000.0} {238.78} {Colorado} {} {} {} {} {} {} {} {CO} {20060101} {12} {married} {12} {} {4375.0} {24.00} {CO} {20070101} {12} {married} {3} {} {4255.0} {130.00} {Hawaii} {} {} {} {} {} {} {} {HI} {20070101} {52} {} {3} {} {375.0} {15.70} {Iowa} {} {} {} {} {} {} {} {IA} {20060401} {26} {} {3 5.12} {} {740.0} {17.48} {IA} {20060401} {12} {} {4 98.30} {} {2750.0} {102.33} {Kentucky} {} {} {} {} {} {} {} {KY} {20060101} {12} {} {1} {} {3020.0} {148.64} {KY} {20080101} {12} {} {1} {} {3020.0} {148.01} {Maine} {} {} {} {} {} {} {} {ME} {20060101} {52} {single} {2} {resident} {165.0} {0.00} {ME} {20060101} {52} {single} {2} {resident} {475.0} {15.92} {ME} {20070101} {52} {single} {2} {resident} {165.0} {0.00} {ME} {20070101} {52} {single} {2} {resident} {475.0} {15.40} {ME} {20080101} {52} {single} {2} {resident} {175.0} {0.00} {ME} {20080101} {52} {single} {2} {resident} {560.0} {21.00} {Michigan} {} {} {} {} {} {} {} {MI} {20060101} {52} {} {3} {} {600.0} {15.98} {MI} {20080101} {52} {} {3} {} {600.0} {17.57} {Missouri} {} {} {} {} {} {} {} {MO} {20060101} {1} {married-both-spouses-working} {2} {} {30000.0} {1028.10} {MO} {20070101} {1} {married-both-spouses-working} {2 1565.0} {} {30000.0} {1016.10} {MO} {20080101} {1} {married-both-spouses-working} {2 1565.0} {} {30000.0} {1010.10} {North Carolina} {} {} {} {} {} {} {} {NC} {20070101} {52} {single} {2} {} {450.0} {18.00} {NC} {20080101} {52} {single} {2} {} {450.0} {18.00} {North Dakota} {} {} {} {} {} {} {} {ND} {20060101} {52} {single} {2} {} {600.0} {8.53} {ND} {20070101} {52} {single} {2} {} {600.0} {8.41} {ND} {20080101} {52} {single} {2} {} {600.0} {8.28} {New Mexico} {} {} {} {} {} {} {} {NM} {20060101} {52} {single} {2} {} {500.0} {11.25} {NM} {20080101} {52} {single} {2} {} {500.0} {10.93} {New York State} {} {} {} {} {} {} {} {NY} {20060101} {52} {single} {3} {resident} {400.0} {8.58} {NY} {20060101} {24} {single} {1} {resident} {5000.0} {312.93} {NY} {20060101} {12} {single} {3} {resident} {50000.0} {3578.83} {NY} {20060101} {365} {single} {2} {resident} {750.0} {50.96} {NY} {20060101} {52} {married} {4} {resident} {400.0} {7.29} {NY} {20060101} {24} {married} {3} {resident} {5000.0} {304.45} {NY} {20060101} {12} {married} {3} {resident} {50000.0} {3575.77} {NY} {20060101} {365} {married} {2} {resident} {750.0} {50.82} {Oklahoma} {} {} {} {} {} {} {} {OK} {20060101} {24} {head-of-household} {2} {} {600.0} {6.11} {OK} {20070101} {24} {married} {2} {} {600.0} {3.00} {OK} {20080101} {24} {married} {2} {} {875.00} {11.00} {OK} {20080101} {24} {married-filing-jointly} {2} {} {875.00} {11.00} {Oregon} {} {} {} {} {} {} {} {OR} {20070101} {1} {single} {1 1170} {} {15000.0} {712.0} {OR} {20070101} {12} {married} {2 250} {} {3300.0} {185.0} {Rhode Island} {} {} {} {} {} {} {} {RI} {20060101} {52} {single} {2} {} {800.0} {25.06} {RI} {20080101} {52} {single} {2} {} {900.0} {30.12} {Utah} {} {} {} {} {} {} {} {UT} {20070101} {52} {single} {1} {} {150.0} {2.00} {UT} {20070101} {26} {single} {2} {} {1000.0} {44.00} {UT} {20070101} {24} {married} {4} {} {855.0} {16.00} {UT} {20070101} {12} {married} {9} {} {2500.0} {29.00} {UT} {20070101} {255} {married} {4} {} {75.0} {1.00} {UT} {20070101} {12} {single} {5} {} {3000.0} {115.00} {UT} {20080101} {52} {single} {1} {} {400.0} {14.00} {UT} {20080101} {26} {single} {2} {} {1000.0} {40.00} {UT} {20080101} {24} {married} {4} {} {855.0} {0.00} {UT} {20080101} {12} {married} {3} {} {2500.0} {70.00} {UT} {20080101} {4} {single} {1} {} {8000.0} {369.00} {UT} {20080101} {2} {married} {4} {} {18000.0} {468.00} {UT} {20080101} {1} {married} {2} {} {40000.0} {1350.00} {UT} {20080101} {365} {married} {3} {} {150.0} {6.00} {Virginia} {} {} {} {} {} {} {} {VA} {20080101} {24} {married} {5} {} {725.0} {14.90} {Vermont} {} {} {} {} {} {} {} {VT} {20060101} {52} {married} {2} {} {1400.0} {46.81} {VT} {20070101} {52} {married} {2} {} {1400.0} {45.05} {VT} {20080101} {52} {married} {2} {} {1400.0} {43.87} {New York City} {} {} {} {} {} {} {} {40} {20060101} {52} {single} {3} {resident} {400.0} {5.74} {40} {20060101} {24} {single} {1} {resident} {5000.0} {177.54} {40} {20060101} {12} {single} {3} {resident} {50000.0} {1948.42} {40} {20060101} {365} {single} {2} {resident} {750.0} {27.76} {40} {20060101} {52} {married} {4} {resident} {400.0} {4.85} {40} {20060101} {24} {married} {3} {resident} {5000.0} {173.38} {40} {20060101} {12} {married} {3} {resident} {50000.0} {1946.75} {40} {20060101} {365} {married} {2} {resident} {750.0} {27.69} {Yonkers - Resident} {} {} {} {} {} {} {} {50} {20060101} {52} {single} {3} {resident} {400.0} {0.86} {50} {20060101} {24} {single} {1} {resident} {5000.0} {31.22} {50} {20060101} {12} {single} {3} {resident} {50000.0} {357.88} {50} {20060101} {365} {single} {2} {resident} {750.0} {5.10} {50} {20060101} {52} {married} {4} {resident} {400.0} {0.73} {50} {20060101} {24} {married} {3} {resident} {5000.0} {30.45} {50} {20060101} {12} {married} {3} {resident} {50000.0} {357.58} {50} {20060101} {365} {married} {2} {resident} {750.0} {5.09} {Yonkers - Non-Resident} {} {} {} {} {} {} {} {50} {20060101} {52} {} {} {non-resident} {75.0} {0.00} {50} {20060101} {52} {} {} {non-resident} {200.0} {0.81} {50} {20060101} {24} {} {} {non-resident} {400.0} {1.38} } { ::if {$TableDate eq ""} { ::puts "$State --------"; ::continue; } ::if {[::qw::date::get $TableDate "year"] ne 2008} {::continue;} employeeInfoSet ".state/current.marital_status" $MaritalStatus; ::if {[::llength $Exemptions]==2} { ::set _employee_federal_tax_deduction [::lindex $Exemptions 1]; ::set Exemptions [::lindex $Exemptions 0]; } employeeInfoSet ".state/current.exemptions" $Exemptions; employeeInfoSet ".state/current.residence" $Residency; employeeInfoSet ".local/current.marital_status" $MaritalStatus; employeeInfoSet ".local/current.exemptions" $Exemptions; employeeInfoSet ".local/current.residence" $Residency; ::set _pay_frequency $Periods; ::set Table $State-$TableDate; ::set Result [$Table $Wages]; ::set Difference [::expr $Result-$Target]; ::set Line ""; ::append Line [padRight $State 6 { }]; ::append Line [padRight $TableDate 10 { }]; ::append Line [padRight $Periods 8 { }]; ::append Line [padRight $MaritalStatus 14 { }]; ::append Line [padRight $Exemptions 11 { }]; ::append Line [padLeft [::qw::number::format $Wages $Format] 10 { }]; ::append Line [padLeft [::qw::number::format $Target $Format] 10 { }]; ::append Line [padLeft [::qw::number::format $Result $Format] 10 { }]; ::append Line [padLeft [::qw::number::format $Difference $Format] 10 { }]; ::puts $Line; } } public method DETAILS {} { chain; } public method calculate_pay {} { ::set Type [payCodeValueGet ".type"]; ::if {[accountInfoGet ".account.normal_balance"] eq "debit"} { ::switch $Type { "BONUS" { ::return [BONUS]; } "COMMISSION" { ::return [COMMISSION]; } "RETRO" {::return [RETROACTIVEPAYINCREASE];} "STATUTORYHOLIDAY" {::return [STATUTORYHOLIDAY];} "EIC" {::return [EIC];} } } else { ::switch $Type { "FICA" { ::set Result [FICA]; ::set _employee_social_security_deduction $Result; ::return $Result; } "MEDI" { ::set Result [MEDI]; ::set _employee_medicare_deduction $Result; ::return $Result; } "FIT" { ::set Result [FIT]; ::set _employee_federal_tax_deduction $Result; ::return $Result; } "SIT1" {::return [SIT1];} "SIT2" {::return [SIT2];} "CIT1" {::return [CIT1];} "CIT2" {::return [CIT2];} } } ::return [chain]; } public method DOLINE {} { chain; } public method employee_end {} { preview_employer_contributions; chain; } public method preview_employer_contributions {} { ::lappend _employee_detail_list ""; ::foreach {Name Description} { ".social_security_earnings" "Soc. Security Earnings" ".medicare_earnings" "Medicare Earnings" ".futa_earnings" "FUTA Earnings" } { ::set Amount [employeeInfoGet $Name]; ::lappend _employee_detail_list "[padRight $Description 35 { }][::format %10.2f $Amount]"; }; ::if {$::qw::control(usa_nctb)} { ::set Flag 0; ::set Total 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [employeeInfoGet ".taxable_benefit/$Benefit.amount"]; ::if {$Amount==0.0} {::continue;} ::set Description [employeeInfoGet ".taxable_benefit/$Benefit.description"]; ::if {$Description eq ""} {::set Description "#$Benefit";} ::if {!$Flag} { ::lappend _employee_detail_list ""; ::lappend _employee_detail_list "Taxable Benefits:"; ::set Flag 1; } ::lappend _employee_detail_list " [padRight $Description 33 { }][::format %10.2f $Amount]"; ::set Total [::qw::number::add $Total $Amount]; } ::if {$Flag} { ::lappend _employee_detail_list "[padRight Total 35 { }][::format %10.2f $Total]"; } } ::lappend _employee_detail_list "[padRight {Employer FICA contribution} 35 { }][::format %10.2f $_employer_social_security_contribution]"; ::if {$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/social_security_expense"] eq ""} { preview_employer_contributions_pie $_employer_social_security_contribution "FICA"; } } ::lappend _employee_detail_list "[padRight {Employer Medicare contribution} 35 { }][::format %10.2f $_employer_medicare_contribution]"; ::if {$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/social_security_expense"] eq ""} { preview_employer_contributions_pie $_employer_medicare_contribution "Medicare"; } } ::lappend _employee_detail_list "[padRight {Employer FUTA contribution} 35 { }][::format %10.2f $_employer_futa_contribution]"; ::if {$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/social_security_expense"] eq ""} { preview_employer_contributions_pie $_employer_futa_contribution "FUTA"; } } } public method preview_employer_contributions_pie {Contribution DebugLog} { ::set Count 0; ::set FinalAllocation [::expr {[::llength $_allocation_partitions]-1}]; ::set AllocationSum 0.0; ::foreach Partition $_allocation_partitions { ::set PName [[[::lindex $Partition 0] ".name"] odb_get]; ::set PDescription [[[::lindex $Partition 0] ".description"] odb_get]; ::append PName " $PDescription"; ::if {$Count==$FinalAllocation} { ::set PNumber [::qw::number::subtract $Contribution $AllocationSum]; } else { ::set Allocation [::qw::number::divide [::lindex $Partition 2] $_TAmount]; ::set PNumber [round2 [::qw::number::multiply $Contribution $Allocation]] ::qw::number::var::add AllocationSum $PNumber; } ::lappend _employee_detail_list "..[padRight $PName 25 { }][::format %10.2f $PNumber]"; indentIncrement; debugLog "$DebugLog Cont. $PName ==$PNumber"; indentDecrement; ::incr Count; } } public method record_employer_contributions {} { chain; ::set _employer_social_security_contribution [round2 [::expr $_employee_social_security_deduction*$_employer_social_security_rate]]; ::if {$_employer_social_security_contribution!=0.0} { ::if {!$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/social_security_expense"] ne "" && [payrunAccount "/employer_contribution/social_security_accrued"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FICA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/social_security_expense"] $Sub; accountInfoSet ".result.amount" $_employer_social_security_contribution $Sub; ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FICA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/social_security_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_social_security_contribution] $Sub; } } else { ::if {[payrunAccount "/employer_contribution/social_security_accrued"] ne ""} { ::while {1} { ::if {[payrunAccount "/employer_contribution/social_security_expense"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FICA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/social_security_expense"] $Sub; accountInfoSet ".result.amount" $_employer_social_security_contribution $Sub; ::break; } ::if {[::llength $_allocation_partitions]==0} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FICA" $Sub; accountInfoSet ".account.address" [payrunAccount "/unallocated_wage_expense"] $Sub; accountInfoSet ".result.amount" $_employer_social_security_contribution $Sub; ::break; } record_employer_contributions_pie $_employer_social_security_contribution "FICA"; ::break; } ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FICA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/social_security_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_social_security_contribution] $Sub; } } } ::set Medi_earnings [earningsSubjectTo ".medicare"]; ::if {$::qw::control(usa_nctb)} { ::set Benefits [non_cash_taxable_benefits [::sargs .type "medicare"]]; ::qw::number::var::add Medi_earnings $Benefits; } ::set _employer_medicare_contribution [::qw::number::multiply $Medi_earnings [::qw::number::multiply $_medicare_rate $_employer_medicare_rate]]; ::if {$_employer_medicare_contribution!=0.0} { ::if {!$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/medicare_expense"] ne "" && [payrunAccount "/employer_contribution/medicare_accrued"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer Medicare" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/medicare_expense"] $Sub; accountInfoSet ".result.amount" $_employer_medicare_contribution $Sub; ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer Medicare" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/medicare_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_medicare_contribution] $Sub; } } else { ::if {[payrunAccount "/employer_contribution/medicare_accrued"] ne ""} { ::while {1} { ::if {[payrunAccount "/employer_contribution/medicare_expense"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer Medicare" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/medicare_expense"] $Sub; accountInfoSet ".result.amount" $_employer_medicare_contribution $Sub; ::break; } ::if {[::llength $_allocation_partitions]==0} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer Medicare" $Sub; accountInfoSet ".account.address" [payrunAccount "/unallocated_wage_expense"] $Sub; accountInfoSet ".result.amount" $_employer_medicare_contribution $Sub; ::break; } record_employer_contributions_pie $_employer_medicare_contribution "Medicare"; ::break; } ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer Medicare" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/medicare_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_medicare_contribution] $Sub; } } } ::set _employer_futa_contribution [FUTA]; ::if {$_employer_futa_contribution!=0.0} { ::if {!$::qw::control(accrual_payroll)} { ::if {[payrunAccount "/employer_contribution/futa_expense"] ne "" && [payrunAccount "/employer_contribution/futa_accrued"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FUTA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/futa_expense"] $Sub; accountInfoSet ".result.amount" $_employer_futa_contribution $Sub; ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FUTA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/futa_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_futa_contribution] $Sub; } } else { ::if {[payrunAccount "/employer_contribution/futa_accrued"] ne ""} { ::while {1} { ::if {[payrunAccount "/employer_contribution/futa_expense"] ne ""} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FUTA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/futa_expense"] $Sub; accountInfoSet ".result.amount" $_employer_futa_contribution $Sub; ::break; } ::if {[::llength $_allocation_partitions]==0} { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FUTA" $Sub; accountInfoSet ".account.address" [payrunAccount "/unallocated_wage_expense"] $Sub; accountInfoSet ".result.amount" $_employer_futa_contribution $Sub; ::break; } record_employer_contributions_pie $_employer_futa_contribution "FUTA"; ::break; } ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer FUTA" $Sub; accountInfoSet ".account.address" [payrunAccount "/employer_contribution/futa_accrued"] $Sub; accountInfoSet ".result.amount" [::qw::number::negative $_employer_futa_contribution] $Sub; } } } } public method record_employer_contributions_pie {Contribution Text} { ::set Count 0; ::set FinalAllocation [::expr {[::llength $_allocation_partitions]-1}]; ::set AllocationSum 0.0; ::foreach Partition $_allocation_partitions { ::set Sub [append_account_structure]; accountInfoSet ".result.description" "[employeeInfoGet .employee_id] Employer $Text" $Sub; accountInfoSet ".account.address" [::lindex $Partition 0] $Sub; accountInfoSet ".result.quantity" 0; ::if {$Count==$FinalAllocation} { ::set PNumber [::qw::number::subtract $Contribution $AllocationSum]; } else { ::set Allocation [::qw::number::divide [::lindex $Partition 2] $_TAmount]; ::set PNumber [round2 [::qw::number::multiply $Contribution $Allocation]] ::qw::number::var::add AllocationSum $PNumber; } accountInfoSet ".result.amount" $PNumber $Sub; ::incr Count; } } public method BONUS {} { accountInfoSet ".result.description" "Bonus YTD = @Y" ::set Result [percent_or_time_amount_get]; ::return $Result; } public method COMMISSION {} { accountInfoSet ".result.description" "Commission YTD = @Y" ::set Result [percent_or_time_amount_get]; ::return $Result; } public method RETROACTIVEPAYINCREASE {} { accountInfoSet ".result.description" "Retroactive Pay Increase YTD = @Y" ::set Result [percent_or_time_amount_get]; ::return $Result; } public method STATUTORYHOLIDAY {} { accountInfoSet ".result.description" "Statutory Holiday Pay YTD = @Y" ::set Result [percent_or_time_amount_get]; ::return $Result; } ::if {$::qw::control(usa_nctb)} { public method non_cash_taxable_benefits_period_subject_to {s_args} { ::set Type [::sargs::get $s_args .type]; ::set Result 0.0; ::foreach Benefit {1 2 3 4} { ::if {![employeeInfoGet ".non_cash_taxable_benefits/$Benefit.$Type"]} { ::continue; } ::sargs::var::set s_args .type ".non_cash_taxable_benefits/$Benefit.amount"; ::set Amount [employeeDeductionEarningsPayPeriod $s_args]; ::set Result [::qw::number::add $Result $Amount]; } ::return $Result; } public method non_cash_taxable_benefits {s_args} { ::set Type [::sargs::get $s_args .type]; ::set Result 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [non_cash_taxable_benefit [::sargs::set $s_args .benefit $Benefit .type $Type]]; ::set Result [::qw::number::add $Result $Amount]; } ::return $Result; } public method non_cash_taxable_benefit {s_args} { ::set Benefit [::sargs::get $s_args .benefit]; ::if {[::sargs::get $s_args .purpose] eq "non_cash_taxable_benefits"} { ::return 0.0; } ::set Type [::sargs::get $s_args .type]; ::if {![employeeInfoGetBoolean ".non_cash_taxable_benefits/$Benefit.$Type"]} { ::return 0.0; } ::set Result [employeeInfoGet ".non_cash_taxable_benefits/$Benefit.amount"]; ::if {![::string is double $Result]} { ::set Result 0.0; } ::if {$Result!=0.0} { ::set AmountPeriod [employeeInfoGet ".non_cash_taxable_benefits/$Benefit.amount_period"]; ::switch -- $AmountPeriod { "weekly" {::set Result [::qw::number::multiply $Result 52]} "monthly" {::set Result [::qw::number::multiply $Result 12]} "pay-period" {::set Result [::qw::number::multiply $Result $_pay_frequency]} "annual" {} } ::set Result [round2 [::qw::number::divide $Result $_pay_frequency]]; ::set PeriodYear [[$_payrunObject ".pay_period_year"] odb_get]; ::set PeriodNumber [[$_payrunObject ".pay_period_number"] odb_get]; ::set Checks [employeePayChecksByPayPeriod [::sargs ".year" $PeriodYear ".period" $PeriodNumber]]; ::set PriorAmountTotal 0.0; ::foreach Check $Checks { ::set PriorAmount [[$Check ".non_cash_taxable_benefits/$Benefit.amount"] odb_get]; ::set PriorAmountTotal [::qw::number::add $PriorAmountTotal $PriorAmount]; } ::if {$Result>=0.0} { ::set Result [::qw::number::subtract $Result $PriorAmountTotal]; ::if {$Result<0.0} { ::return 0.0; } } else { ::set Result [::qw::number::add $Result $PriorAmountTotal]; ::if {$Result>0.0} { ::return 0.0; } } ::return $Result; } ::set Percent [employeeInfoGet ".non_cash_taxable_benefits/$Benefit.percent"]; ::if {![::string is double $Percent]} { ::return 0.0; } ::set Percent [::qw::number::multiply $Percent 0.01]; ::set Expression [employeeInfoGet ".non_cash_taxable_benefits/$Benefit.percentage_base"]; ::if {$Expression eq ""} { ::set PercentageBase [taxable_income [::sargs .purpose "non_cash_taxable_benefits"]]; } else { ::set PercentageBase [percentage_base [::sargs .expression $Expression]]; } ::if {$PercentageBase==0.0} { ::return 0.0; } ::set Result [round2 [::qw::number::multiply $PercentageBase $Percent]]; ::return $Result; } } public method FICA {} { ::set Fica_earnings [earningsSubjectTo ".social_security"]; ::if {$::qw::control(usa_nctb)} { ::set Benefits [non_cash_taxable_benefits [::sargs .type "pensionable"]];debugLog "FICA benefits: $Benefits"; ::qw::number::var::add Fica_earnings $Benefits;debugLog "FICA Total FICA earnings: $Fica_earnings"; } ::set Range [::qw::odb::factory range]; $Range cpp_configure \ -index [$_employee ".paychecks.index/date"] \ -begin ".tag financial .date $_yearBeginDate" \ -end ".tag financial .date $_yearEndDate" \ ; ::set YearToDate [$Range odb_total ".path .social_security_earnings .priority foreground"]; $Range cpp_destroy; ::set Result 0.0; accountInfoSet ".result.description" "F.I.C.A. YTD = @Y"; ::if {$Fica_earnings==0.0 \ ||[employeeInfoGet ".federal.social_security_exempt"] \ } { employeeInfoSet ".social_security_earnings" $Fica_earnings; ::return $Result; } ::set Headroom [::expr $_social_security_maximum-[accountInfoGet ".amount/year_to_date"]]; ::set Result [round2 [::expr $Fica_earnings*$_social_security_rate]]; debugLog "FICA Earnings: $Fica_earnings Rate: $_social_security_rate Amount: $Result"; ::if {$Result>$Headroom} { ::set Fica_earnings [round2 [::expr {$_social_security_wage_base-$YearToDate}]]; ::set Result $Headroom; debugLog "FICA limit exceeded, Earnings: $Fica_earnings Amount: $Result"; } employeeInfoSet ".social_security_earnings" $Fica_earnings; ::if {$Result<0.0} { ::set Result 0.0; } ::return $Result; } public method FICA_CALC {Fica_earnings} { } public method MEDI {} { ::set Medi_earnings [earningsSubjectTo ".medicare"]; ::if {$::qw::control(usa_nctb)} { ::set Benefits [non_cash_taxable_benefits [::sargs .type "medicare"]];debugLog "MEDI benefits: $Benefits"; ::qw::number::var::add Medi_earnings $Benefits;debugLog "MEDI Total MEDI earnings: $Medi_earnings"; } ::set Result [MEDI_CALC $Medi_earnings]; accountInfoSet ".result.description" "Medicare YTD = @Y"; employeeInfoSet ".medicare_earnings" $Medi_earnings; ::return $Result; } public method MEDI_CALC {Medicare_earnings} { ::set Result 0.0; ::if {$Medicare_earnings==0.0} {::return $Result;} ::if {[employeeInfoGet ".federal.medicare_exempt"]} {::return $Result;} ::set MaritalStatus [employeeInfoGet .federal.marital_status]; ::set Range [::qw::odb::factory range]; ::qw::finally [::list $Range cpp_destroy]; $Range cpp_configure \ -index [$_employee ".paychecks.index/date"] \ -begin ".tag financial .date $_yearBeginDate" \ -end ".tag financial .date $_yearEndDate" \ ; ::set YearToDate [$Range odb_total ".path .medicare_earnings .priority foreground"]; debugLog "MEDI Marital status: $MaritalStatus"; debugLog "MEDI Year to date earnings: $YearToDate"; ::switch -exact $MaritalStatus { married-filing-jointly {::set LowRateMax 250000;} married-filing-separately {::set LowRateMax 125000;} default {::set LowRateMax 200000;} } ::set StraddleBelow 0.0; ::set StraddleAbove 0.0; ::set Headroom [::qw::number::subtract $LowRateMax $YearToDate]; ::if {$Headroom>0.0} { ::if {$Medicare_earnings<=$Headroom} { ::set StraddleBelow $Medicare_earnings; } else { ::set StraddleBelow $Headroom; ::set StraddleAbove [::qw::number::subtract $Medicare_earnings $Headroom]; } ::set Result [::qw::number::multiply $StraddleBelow $_medicare_rate]; debugLog "Medicare Earnings at Low Rate: $StraddleBelow Rate: $_medicare_rate Amount: $Result"; } else { ::set StraddleAbove $Medicare_earnings; } ::if {$StraddleAbove>0.0} { ::set StraddleAboveDeduct [::qw::number::multiply $StraddleAbove [::qw::number::add $_medicare_rate $_medicare_additional_rate]]; debugLog "Medicare Earnings at High Rate: $StraddleAbove Rate: [::qw::number::add $_medicare_rate $_medicare_additional_rate] Amount: $StraddleAboveDeduct"; ::qw::number::var::add Result $StraddleAboveDeduct; ::if {$StraddleBelow>0.0} { debugLog "Medicare Earnings: $Medicare_earnings Rate: blended Total: $Result"; } } ::set Limit [::expr $_medicare_maximum-[accountInfoGet ".amount/year_to_date"]]; ::if {$Result>$Limit} { ::set Result $Limit; debugLog "Medicare limit exceeded, Amount: $Result"; } ::if {$Result<0.0} {::set Result 0.0;} ::return $Result; } public method FIT {} { ::set FitEarnings [earningsSubjectTo ".federal_tax"]; debugLog "FIT earnings: $FitEarnings"; ::if {$::qw::control(usa_nctb)} { ::set NonCashTaxableBenefits 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [non_cash_taxable_benefit [::sargs .benefit $Benefit .type "taxable_federal"]]; ::if {$Amount==0.0} { ::continue; } ::set Description [employeeInfoGet ".non_cash_taxable_benefits/$Benefit.description"]; employeeInfoSet ".taxable_benefit/$Benefit.amount" $Amount; employeeInfoSet ".taxable_benefit/$Benefit.description" $Description; ::set NonCashTaxableBenefits [::qw::number::add $NonCashTaxableBenefits $Amount]; } debugLog "FIT benefits: $NonCashTaxableBenefits"; ::qw::number::var::add FitEarnings $NonCashTaxableBenefits; } ::set Supplemental [earningsOfType "SUPPLEMENTAL"]; ::set TaxableEarnings [::qw::number::subtract $FitEarnings $Supplemental]; debugLog "FIT Marital status: [employeeInfoGet .federal.marital_status]"; debugLog "FIT Exemptions: [employeeInfoGet .federal.exemptions]"; ::set Tax1 [FIT_CALC $TaxableEarnings]; ::set Tax2 [::qw::number::multiply $Supplemental $_supplemental_tax_rate]; debugLog "FIT Taxable earnings: $FitEarnings tax: $Tax1"; debugLog "FIT Supplemental wages: $Supplemental tax: $Tax2"; ::set Result [::qw::number::add $Tax1 $Tax2]; ::if {[employeeInfoGet ".federal.round_tax"]} { ::set Result [round $Result 0]; } ::set Result [::expr $Result+[employeeInfoGet ".federal.additional_tax"]]; ::return $Result; } public method FIT_CALC {Fit_earnings} { ::set Result 0.0; accountInfoSet ".result.description" "F.I.T YTD = @Y"; employeeInfoSet ".fit_earnings" $Fit_earnings; ::if {$Fit_earnings==0.0} { ::return $Result; } ::if {[employeeInfoGet ".federal.tax_exempt"]} { ::return $Result; } ::set FederalTaxTable "US-$_federalTableVersion"; ::set Result [$FederalTaxTable $Fit_earnings]; ::return $Result; } public method SIT1 {} {::return [SIT 1];} public method SIT2 {} {::return [SIT 2];} public method SIT {Src} { employeeInfoSet ".state.number" $Src; employeeInfoSet ".state/current" [employeeInfoGet ".state/$Src"]; ::set Sit_earnings [earningsSubjectTo ".state_tax$Src"]; debugLog "SIT $Src Earnings: $Sit_earnings"; debugLog "SIT $Src Marital status: [employeeInfoGet .state/current.marital_status]"; debugLog "SIT $Src Exemptions: [employeeInfoGet .state/current.exemptions]"; ::if {$::qw::control(usa_nctb)} { ::set NonCashTaxableBenefits 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [non_cash_taxable_benefit [::sargs .benefit $Benefit .type "taxable_state_$Src"]]; ::if {$Amount==0.0} { ::continue; } ::set NonCashTaxableBenefits [::qw::number::add $NonCashTaxableBenefits $Amount]; } ::qw::number::var::add Sit_earnings $NonCashTaxableBenefits; } ::set Result [SIT_CALC $Sit_earnings]; ::if {[employeeInfoGet ".state/current.round_tax"]} { ::set Result [round $Result 0]; } debugLog "SIT $Src tax: $Result"; ::set AdditionalTax [employeeInfoGet ".state/current.additional_tax"]; ::if {$AdditionalTax!=0.0} { debugLog "SIT $Src Additional tax: $AdditionalTax"; } ::set Result [::expr $Result+$AdditionalTax]; employeeInfoSet ".state_earnings/$Src" $Sit_earnings; ::return $Result; } public method SIT_CALC {Sit_earnings} { ::set Result 0.0; accountInfoSet ".result.description" "S.I.T. YTD = @Y"; ::set StateJurisdiction [::string trim [employeeInfoGet ".state/current.jurisdiction"]]; ::if {$StateJurisdiction eq ""} { ::return $Result; } ::set Description [padRight "$StateJurisdiction Tax" 11 { }]; ::append Description "YTD = @Y"; accountInfoSet ".result.description" $Description; ::if {$Sit_earnings==0.0} { ::return $Result; } ::if {[employeeInfoGet ".state/current.tax_exempt"]} { ::return $Result; } ::set Number [employeeInfoGet ".state.number"]; ::set StateTaxTable "$StateJurisdiction-$_stateTableVersion($Number)"; ::set Result [$StateTaxTable $Sit_earnings]; debugLog "[employeeInfoGet .state/current.jurisdiction] state taxable earnings: $Sit_earnings tax: $Result"; ::return $Result; } public method state_name {Src} { ::array set Data [$_payrollObject state_abbreviation_and_name_list]; ::if {[::info exists Data($Src)]} {::return $Data($Src)} ::return ""; } public method CIT1 {} {::return [CIT 1];} public method CIT2 {} {::return [CIT 2];} public method CIT {Src} { employeeInfoSet ".local.number" $Src; employeeInfoSet ".local/current" [employeeInfoGet ".local/$Src"]; ::set Cit_earnings [earningsSubjectTo ".local_tax$Src"]; ::if {$::qw::control(usa_nctb)} { ::set NonCashTaxableBenefits 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [non_cash_taxable_benefit [::sargs .benefit $Benefit .type "taxable_local_$Src"]]; ::if {$Amount==0.0} { ::continue; } ::set NonCashTaxableBenefits [::qw::number::add $NonCashTaxableBenefits $Amount]; } ::qw::number::var::add Cit_earnings $NonCashTaxableBenefits; } ::set Result [CIT_CALC $Cit_earnings]; ::if {[employeeInfoGet ".local/current.round_tax"]} { ::set Result [round $Result 0]; } ::set Result [::expr $Result+[employeeInfoGet ".local/current.additional_tax"]]; employeeInfoSet ".local_earnings/$Src" $Cit_earnings; ::return $Result; } public method CIT_CALC {Cit_earnings} { ::set Result 0.0; accountInfoSet ".result.description" "C.I.T. YTD = @Y"; ::set LocalJurisdiction [::string trim [employeeInfoGet ".local/current.jurisdiction"]]; ::if {$LocalJurisdiction eq ""} {::return $Result;} accountInfoSet ".result.description" "[local_name $LocalJurisdiction] Tax YTD = @Y"; ::if {$Cit_earnings==0.0} {::return $Result;} ::if {[employeeInfoGet ".local/current.tax_exempt"]} {::return $Result;} ::set Number [employeeInfoGet ".local.number"]; ::set LocalTaxTable "$LocalJurisdiction-$_localTableVersion($Number)"; ::set Result [$LocalTaxTable $Cit_earnings]; ::return $Result; } public method local_name {Src} { ::array set Data [$_payrollObject local_abbreviation_and_short_name_list]; ::if {[::info exists Data($Src)]} {::return $Data($Src)} ::return "$Src"; } public method EIC {} { ::set Result 0.0; ::set Eic_earnings [earningsSubjectTo ".federal_tax"]; accountInfoSet ".result.description" "E.I.C. YTD = @Y"; ::if {$Eic_earnings==0.0} {::return $Result;} ::set EICTaxTable "EIC-$_federalTableVersion"; ;#//pgq,doc_constructed_method_name ::set Result [$EICTaxTable $Eic_earnings]; ::return $Result; } public method FUTA {} { ::set Result 0.0; ::if {[employeeInfoGet ".federal.futa_exempt"]} { ::return $Result; } ::set Futa_earnings [earningsSubjectTo ".futa"]; ::if {$::qw::control(usa_nctb)} { ::set NonCashTaxableBenefits 0.0; ::foreach Benefit {1 2 3 4} { ::set Amount [non_cash_taxable_benefit [::sargs .benefit $Benefit .type "futa"]]; ::if {$Amount==0.0} { ::continue; } ::set NonCashTaxableBenefits [::qw::number::add $NonCashTaxableBenefits $Amount]; } ::qw::number::var::add Futa_earnings $NonCashTaxableBenefits; } ::if {$Futa_earnings==0.0} { ::return $Result; } ::set YTD_futa_earnings [employeeDeductionEarningsByDate ".type .futa_earnings"]; ::set Limit [::expr $_futa_wage_base-$YTD_futa_earnings]; ::if {$Futa_earnings>$Limit} { ::set Futa_earnings $Limit; } employeeInfoSet ".futa_earnings" $Futa_earnings; ::set Result [round2 [::expr $Futa_earnings*$_employer_futa_rate]]; ::if {$Result<0.0} {::set Result 0.0;} ::return $Result; } method LA-20250101 {TaxableWages} { debugLog "--- Louisiana Tax Calculation (20250101) ---"; ::set DESC "LA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "LA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions ne ""} { ::set E1 [::expr {int($Exemptions)}]; ;#// the whole number part ::set E2 [::expr {int(($Exemptions-$E1)*10)}]; ;#// the fraction part ::set A [::expr {0.0185*((($E1*4500.0)+($E2*1000.0))/$_pay_frequency)}]; ::set B [::expr {0.0165*(((($E1*4500.0)+($E2*1000.0))-12500.0)/$_pay_frequency)}]; ::if {$B<0} { ::set B 0.0; } } ::if {$Exemptions<2} { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 12500.0; ::set M2 50000.0; } else { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 25000.0; ::set M2 100000.0; } ::set AnnualIncome [::expr {$TaxableWages*$_pay_frequency}]; ::while 1 { ::if {$AnnualIncome<$M1} { ::set W [::expr {$RateW*$TaxableWages-($A+$B)}]; ::break; } ::if {$AnnualIncome<$M2} { ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)-($A+$B)}]; ::break; } ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)+$RateZ*($TaxableWages-$M2/$_pay_frequency)-($A+$B)}]; ::break; } ::if {$W<0} {::set W 0;} ::set Result [round2 $W]; ::return $Result; } method ND-20250101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 5050; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=55975} {::set BASE 55975; ::set RATE 0.0195;::set FLAT 0.00;} ::if {$TAXABLE>=252325} {::set BASE 252325;::set RATE 0.0250;::set FLAT 3828.83;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=55488} {::set BASE 55488; ::set RATE 0.0195;::set FLAT 0.00;} ::if {$TAXABLE>=164038} {::set BASE 164038;::set RATE 0.0250;::set FLAT 2116.73;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20250101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 7800.00; ::set PERSONAL 236.00; ::set STANDARD 2605.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 5210; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2605; ::if {$Annual>=50000} {::set MAXIMUM 7800;} ::if {$Annual>=125000} {::set MAXIMUM 6250;} ::if {$Annual>=130000} {::set MAXIMUM 4700;} ::if {$Annual>=135000} {::set MAXIMUM 3100;} ::if {$Annual>=140000} {::set MAXIMUM 1550;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 5210; ::if {$Annual>=50000} {::set MAXIMUM 7800;} ::if {$Annual>=250000} {::set MAXIMUM 6250;} ::if {$Annual>=260000} {::set MAXIMUM 4700;} ::if {$Annual>=270000} {::set MAXIMUM 3100;} ::if {$Annual>=280000} {::set MAXIMUM 1550;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>4400} {::set BASE 4400; ::set RATE 0.0675;::set FLAT 465;} ::if {$TAXABLE>11100} {::set BASE 11100;::set RATE 0.0875;::set FLAT 917;} } else { ::if {$TAXABLE>8800} {::set BASE 8800; ::set RATE 0.0675;::set FLAT 674;} ::if {$TAXABLE>22200} {::set BASE 22200;::set RATE 0.0875;::set FLAT 1579;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>38665} {::set BASE 38665; ::set RATE 0.0875;::set FLAT 661;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.0990;::set FLAT 10627;} } else { ::if {$TAXABLE>35830} {::set BASE 35830; ::set RATE 0.0875;::set FLAT 1323;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.0990;::set FLAT 21256;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method VT-20250101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20250101) ---"; ::set ALLOW 5300; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3825} {::set BASE 3825; ::set RATE 0.0335;::set FLAT 0.00;} ::if {$TAXABLE>=53225} {::set BASE 53225; ::set RATE 0.0660;::set FLAT 1654.90;} ::if {$TAXABLE>=123525} {::set BASE 123525;::set RATE 0.0760;::set FLAT 6294.70;} ::if {$TAXABLE>=253525} {::set BASE 253525;::set RATE 0.0875;::set FLAT 16174.70;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=11475} {::set BASE 11475; ::set RATE 0.0335;::set FLAT 0.00;} ::if {$TAXABLE>=93975} {::set BASE 93975; ::set RATE 0.0660;::set FLAT 2763.75;} ::if {$TAXABLE>=210925} {::set BASE 210925;::set RATE 0.0760;::set FLAT 10482.45;} ::if {$TAXABLE>=315475} {::set BASE 315475;::set RATE 0.0875;::set FLAT 18428.25;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20250101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20250101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {17100 0.100 0.00} {40950 0.120 2385.00} {114050 0.220 11157.00} {223800 0.240 35302.00} {411700 0.320 80398.00} {518150 0.350 114462.00} {768700 0.370 202154.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {6400 0.100 0.00} {18325 0.120 1192.50} {54875 0.220 5578.50} {109750 0.240 17651.00} {203700 0.320 40199.00} {256925 0.350 57231.00} {632750 0.370 188769.75} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {13900 0.100 0.00} {30900 0.120 1700.00} {78750 0.220 7442.00} {117250 0.240 15912.00} {211200 0.320 38460.00} {264400 0.350 55484.00} {640250 0.370 187031.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method AR-20250101 {TaxableWages} { debugLog "--- Arkansas Tax Calculation (20250101) ---"; ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 29; ;#// Exemption for dependents ::set STANDARD 2340; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0;} ::if {$TAXABLE>=5500} {::set BASE 5500;::set RATE 0.0200;::set FLAT 109.98;} ::if {$TAXABLE>=10900} {::set BASE 10900;::set RATE 0.0300;::set FLAT 218.97;} ::if {$TAXABLE>=15600} {::set BASE 15600;::set RATE 0.0340;::set FLAT 281.37;} ::if {$TAXABLE>=25700} {::set BASE 25700;::set RATE 0.0390;::set FLAT 409.86;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method CA-20250101 {TaxableWages} { debugLog "--- California Tax Calculation (20250101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=18368} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=36736} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=18368} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=36736} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 5540;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 11080;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 5540; } else { ::set Standard 11080; } } ::set Regular 163.90; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {10756 0.0220 118.32} {25499 0.0440 442.67} {40245 0.0660 1091.49} {55866 0.0880 2122.48} {70606 0.1023 3419.60} {360659 0.1133 33092.02} {432787 0.1243 41264.12} {721314 0.1353 77128.03} {1000000 0.1463 114834.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {21512 0.0220 236.63} {50998 0.0440 885.32} {80490 0.0660 2182.97} {111732 0.0880 4244.94} {141212 0.1023 6839.18} {721318 0.1133 66184.02} {865574 0.1243 82528.22} {1000000 0.1353 99237.37} {1442628 0.1463 159124.94} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {21527 0.0220 236.80} {51000 0.0440 885.21} {65744 0.0660 1533.95} {81364 0.0880 2564.87} {96107 0.1023 3862.25} {490493 0.1133 44207.94} {588593 0.1243 55322.67} {980987 0.1353 104097.24} {1000000 0.1463 106669.70} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method HI-20250101 {TaxableWages} { debugLog "--- Hawaii Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "HI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1650; ;#// Amount per exemption ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT-$EXTRA]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=9600} {::set BASE 9600;::set RATE .032;::set FLAT 134;} ::if {$TAXABLE>=14400} {::set BASE 14400;::set RATE .055;::set FLAT 288;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .064;::set FLAT 552;} ::if {$TAXABLE>=24000} {::set BASE 24000;::set RATE .068;::set FLAT 859;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .072;::set FLAT 1675;} ::if {$TAXABLE>=48000} {::set BASE 48000;::set RATE .076;::set FLAT 2539;} ::if {$TAXABLE>=125000} {::set BASE 125000;::set RATE .079;::set FLAT 8391;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .032;::set FLAT 269;} ::if {$TAXABLE>=28800} {::set BASE 28800;::set RATE .055;::set FLAT 576;} ::if {$TAXABLE>=38400} {::set BASE 38400;::set RATE .064;::set FLAT 1104;} ::if {$TAXABLE>=48000} {::set BASE 48000;::set RATE .068;::set FLAT 1718;} ::if {$TAXABLE>=72000} {::set BASE 72000;::set RATE .072;::set FLAT 3350;} ::if {$TAXABLE>=96000} {::set BASE 96000;::set RATE .076;::set FLAT 5078;} ::if {$TAXABLE>=250000} {::set BASE 250000;::set RATE .079;::set FLAT 16782;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX==0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IN-20250101 {TaxableWages} { debugLog "--- Indiana Tax Calculation (20250101) ---"; ::set DESC "Indiana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0305; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $DEDUCT * 1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ;#// MPS missing TABLE C ::set DEDUCT [::expr $DEDUCT * 3000]; ;#// MPS missing TABLE C ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ;#// MPS missing TABLE C ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::set Result [round2 $TAX]; ::return $Result; } method GA-20250101 {TaxableWages} { debugLog "--- Georgia Tax Calculation (20250101) ---"; ::set DESC "Georgia Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "GA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Standard 0; ::set Personal 0; ::set Dependant 4000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set TotalAllowance 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable+$Supp]; ::switch -- $MaritalStatus { zero - single - head-of-household {::set Standard 12000;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Standard 12000;} married-filing-jointly-one-spouse-working {::set Standard 24000;} } ::set TotalAllowance [::expr {$Exemptions*$Dependant-3000}]; ::if {$MaritalStatus eq "zero"} { ::set Taxable [::expr $Taxable-$Standard]; } else { ::set Taxable [::expr $Taxable-$Standard-$TotalAllowance]; } ::if {$Taxable<0} { ::set Taxable 0 }; ::set Tax [::expr $Taxable*0.0539]; ;#// Tax = (Taxable-Base)*Rate+Flat ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Taxable<0} {::set Taxable 0;} ::set Result [round2 $Tax]; ::return $Result; } method IA-20250101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 14600; } else { ::set MAXIMUM 29200; } ::set EXEMPT1 40; ::set MAXIMUM [::expr {$MAXIMUM/$_pay_frequency}]; ::set TAXABLE [::expr $TaxableWages-$MAXIMUM] ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .0440;::set FLAT 0.00;} ::if {$TAXABLE>=4896} {::set BASE 4896; ::set RATE .0482;::set FLAT 215.42;} ::if {$TAXABLE>=24480} {::set BASE 24480;::set RATE .0570;::set FLAT 1159.37;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KS-20250101 {TaxableWages} { debugLog "--- Kansas Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 9160; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3605} {::set BASE 3605;::set RATE .0520;::set FLAT 0.00;} ::if {$TAXABLE>=26605} {::set BASE 26605;::set RATE .0558;::set FLAT 1196.00;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8240} {::set BASE 8240;::set RATE .0520;::set FLAT 0.00;} ::if {$TAXABLE>=54240} {::set BASE 54240;::set RATE .0558;::set FLAT 2392.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20250101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 3270; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .040; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20250101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20250101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 5150; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=100000} { ::set Phase [::expr $Taxable-100000]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*12150]; } else { ::set Phase 12150; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-12150]; } } "married" { ::if {$Taxable>=200050} { ::set Phase [::expr $Taxable-200050]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*27150]; } else { ::set Phase 27150; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-27150]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=26800} {::set Base 26800;::set Rate 0.0675;::set Flat 1554;} ::if {$Taxable>=63450} {::set Base 63450;::set Rate 0.0715;::set Flat 4028;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=53600} {::set Base 53600;::set Rate 0.0675;::set Flat 3109;} ::if {$Taxable>=126900} {::set Base 126900;::set Rate 0.0715;::set Flat 8057;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MI-20250101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20250101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 5800.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20250101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 5200; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4500} {::set BASE 4500;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=37120} {::set BASE 37120;::set RATE 0.0680;::set FLAT 1742.50;} ::if {$TAXABLE>=111540} {::set BASE 111540;::set RATE 0.0785;::set FLAT 6803.06;} ::if {$TAXABLE>=203180} {::set BASE 203180;::set RATE 0.0985;::set FLAT 13996.80;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=14300} {::set BASE 13250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=61920} {::set BASE 61920;::set RATE 0.0680;::set FLAT 2547.67;} ::if {$TAXABLE>=203480} {::set BASE 203480;::set RATE 0.0785;::set FLAT 12173.75;} ::if {$TAXABLE>=344710} {::set BASE 344710;::set RATE 0.0985;::set FLAT 23260.31;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20250101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 15000; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 30000; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 22500; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 15000; } else { ::set MaritalStatus "single"; ::set STANDARD 15000; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1313} {::set BASE 1313;::set RATE .020;::set FLAT [::expr $FLAT+26];} ::if {$TAXABLE>2626} {::set BASE 2626;::set RATE .025;::set FLAT [::expr $FLAT+59];} ::if {$TAXABLE>3939} {::set BASE 3939;::set RATE .030;::set FLAT [::expr $FLAT+98];} ::if {$TAXABLE>5252} {::set BASE 5252;::set RATE .035;::set FLAT [::expr $FLAT+144];} ::if {$TAXABLE>6565} {::set BASE 6565;::set RATE .040;::set FLAT [::expr $FLAT+197];} ::if {$TAXABLE>7878} {::set BASE 7878;::set RATE .045;::set FLAT [::expr $FLAT+256];} ::if {$TAXABLE>9191} {::set BASE 9191;::set RATE .047;::set FLAT [::expr $FLAT+321];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NE-20250101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2360; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3310} {::set BASE 3310; ::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=6480} {::set BASE 6480; ::set RATE 0.0322;::set FLAT 71.64;} ::if {$TAXABLE>=21050} {::set BASE 21050;::set RATE 0.0491;::set FLAT 540.79;} ::if {$TAXABLE>=30510} {::set BASE 30510;::set RATE 0.0507;::set FLAT 1005.28;} ::if {$TAXABLE>=38740} {::set BASE 38740;::set RATE 0.0523;::set FLAT 1422.54;} ::if {$TAXABLE>=72750} {::set BASE 72750;::set RATE 0.0537;::set FLAT 3201.26;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7910} {::set BASE 7910; ::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=12560} {::set BASE 12560;::set RATE 0.0322;::set FLAT 105.09;} ::if {$TAXABLE>=31270} {::set BASE 31270;::set RATE 0.0491;::set FLAT 707.55;} ::if {$TAXABLE>=48650} {::set BASE 48650;::set RATE 0.0507;::set FLAT 1560.91;} ::if {$TAXABLE>=60360} {::set BASE 60360;::set RATE 0.0523;::set FLAT 2154.61;} ::if {$TAXABLE>=80040} {::set BASE 80040;::set RATE 0.0537;::set FLAT 3183.87;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NC-20250101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 19125; } default { ::set STANDARD 12750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0435; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method OH-20250101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0; ::set RATE 0.00501;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000; ::set RATE 0.01001;::set FLAT 25;} ::if {$TAXABLE>10000} {::set BASE 10000; ::set RATE 0.02005;::set FLAT 75;} ::if {$TAXABLE>15000} {::set BASE 15000; ::set RATE 0.02505;::set FLAT 175;} ::if {$TAXABLE>20000} {::set BASE 20000; ::set RATE 0.02990;::set FLAT 300;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.03800;::set FLAT 2695;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX*1.032]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method RI-20250101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20250101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>283250} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=79900} {::set BASE 79900;::set RATE 0.0475;::set FLAT 2996.25;} ::if {$TAXABLE>=181650} {::set BASE 181650;::set RATE 0.0599;::set FLAT 7829.38;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method SC-20250101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20250101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 4860; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 4860;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0; ::set Rate .0; ::set Flat 0;} ::if {$Taxable>=3560} {::set Base 3560; ::set Rate .03; ::set Flat 106.80;} ::if {$Taxable>=17830} {::set Base 17830;::set Rate .062;::set Flat 677.36;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method UT-20250101 {TaxableWages} { debugLog "--- Utah Tax Calculation (20250101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "UT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr {$_pay_frequency*$TaxableWages}]; ::if {$Taxable<=0.0} {::set Taxable 0.0;} ::set Line1 $Taxable; ::set Line2 [::expr {$Line1*0.0455}]; ::switch $MaritalStatus { "single" { ::set Line3 440.0; ::set Line4 [::expr {$Line1-8826.0}]; } "married" { ::set Line3 880.0; ::set Line4 [::expr {$Line1-17652.0}]; } } ::set Line5 [::expr {$Line4*0.013}]; ::set Line6 [::expr {$Line3-$Line5}]; ::if {$Line6<0.0} { ::set Line6 0.0; } ::set Line7 [::expr {$Line2-$Line6}]; ::if {$Line7<0.0} { ::set Line7 0.0; } ::set Tax [::expr {$Line7/$_pay_frequency}]; ::set Result [round2 $Tax]; ::return $Result; } method VA-20250101 {TaxableWages} { debugLog "--- Virginia Tax Calculation (20250101) ---"; ::set PERSONAL1 930; ;#// Personal & Dependant deductions ::set PERSONAL2 800; ;#// Age 65 and over & Blind exemptions ::set DESC "VA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE - 8500]; ;#// Taxable = (Periods*Paysum)-4500-(Xemp*Personal) ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions ,]; ::if {[::llength $ExemptionTypes] == 1} { ::set PERSONAL1 [::expr [stringToNumber $ExemptionTypes] *$PERSONAL1]; ::set PERSONAL2 0; } else { ::set PERSONAL1 [::expr [stringToNumber [::lindex $ExemptionTypes 0]]*$PERSONAL1]; ::set PERSONAL2 [::expr [stringToNumber [::lindex $ExemptionTypes 1]]*$PERSONAL2]; } } ::set TAXABLE [::expr $TAXABLE-$PERSONAL1]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL2]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.02;::set FLAT 0;} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE 0.03;::set FLAT 60;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE 0.05;::set FLAT 120;} ::if {$TAXABLE>=17000} {::set BASE 17000;::set RATE 0.0575;::set FLAT 720;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method WV-20250101 {TaxableWages} { debugLog "--- West Virginia Tax Calculation (20250101) ---"; ::set PERSONAL 2000.00; ::set DESC "WV Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WV"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; # Taxable = (Periods*Paysum)-(Xemp*Personal) ::set TAXABLE [::expr $TAXABLE-$PERSONAL]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0222;::set FLAT 0;} ::if {$TAXABLE>=7500} {::set BASE 7500;::set RATE .0296;::set FLAT 166.50;} ::if {$TAXABLE>=18750} {::set BASE 18750;::set RATE .0333;::set FLAT 499.50;} ::if {$TAXABLE>=30000} {::set BASE 30000;::set RATE .0444;::set FLAT 874.13;} ::if {$TAXABLE>=45000} {::set BASE 45000;::set RATE .0482;::set FLAT 1540.13;} } } ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "not-applicable" \ } { ::if {$TAXABLE>=0} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0222;::set FLAT 0;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0296;::set FLAT 222.00;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0333;::set FLAT 666.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0444;::set FLAT 1165.50;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0482;::set FLAT 2053.50;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax ={(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20240101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20240101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {16300 0.100 0.00} {39500 0.120 2320.00} {110600 0.220 10852.00} {217350 0.240 34337.00} {400200 0.320 78221.00} {503750 0.350 111357.00} {747500 0.370 196669.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {6000 0.100 0.00} {17600 0.120 1160.00} {53150 0.220 5426.00} {106525 0.240 17168.50} {197950 0.320 39110.50} {249725 0.350 55678.50} {615350 0.370 183647.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {13300 0.100 0.00} {29850 0.120 1655.00} {76400 0.220 7241.00} {113800 0.240 15469.00} {205250 0.320 37417.00} {257000 0.350 53977.00} {622650 0.370 181954.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method AR-20240101 {TaxableWages} { debugLog "--- Arkansas Tax Calculation (20240101) ---"; ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 29; ;#// Exemption for dependents ::set STANDARD 2340; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0;} ::if {$TAXABLE>=5300} {::set BASE 5300;::set RATE 0.0200;::set FLAT 105.98;} ::if {$TAXABLE>=10600} {::set BASE 10600;::set RATE 0.0300;::set FLAT 211.97;} ::if {$TAXABLE>=15100} {::set BASE 15100;::set RATE 0.0340;::set FLAT 272.37;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE 0.0440;::set FLAT 522.36;} ::if {$TAXABLE>=89601} {::set BASE 89601;::set RATE 0.0440;::set FLAT 506.40;} ::if {$TAXABLE>=100001} {::set BASE 100001;::set RATE 0.0440;::set FLAT 126.40;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method CA-20240101 {TaxableWages} { debugLog "--- California Tax Calculation (20240101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=17769} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=35538} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=17769} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=35538} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 5363;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 10726;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 5363; } else { ::set Standard 10726; } } ::set Regular 158.40; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {10412 0.0220 114.53} {24684 0.0440 428.51} {38959 0.0660 1056.61} {54081 0.0880 2054.66} {68350 0.1023 3310.33} {349137 0.1133 32034.84} {418961 0.1243 39945.90} {698271 0.1353 74664.13} {1000000 0.1463 115488.06} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {20824 0.0220 229.06} {49368 0.0440 857.03} {77918 0.0660 2113.23} {108162 0.0880 4109.33} {136700 0.1023 6620.67} {698274 0.1133 64069.69} {837922 0.1243 79891.81} {1000000 0.1353 100038.11} {1396542 0.1463 153690.24} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {20839 0.0220 229.23} {49371 0.0440 856.93} {63644 0.0660 1484.94} {78765 0.0880 2482.93} {93037 0.1023 3738.87} {474824 0.1133 42795.68} {569790 0.1243 53555.33} {949649 0.1353 100771.80} {1000000 0.1463 107584.29} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20240101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20240101) ---"; ::set ALLOW 4200; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 5000;} ::if {$MaritalStatus eq "married"} {::set BASE 10000;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .044]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method CT-20240101 {TaxableWages} { debugLog "--- Connecticut Tax Calculation (20240101) ---"; ::set Desc "CT Tax"; ::set Rate 0.020; ::set Flat 0; ::set BaseTax 0; ::set Credit 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CT-20160101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::set Exemption 0; ::if {($MaritalStatus eq "married-filing-jointly-both-spouses-working24} {::set Exemption 11}; ::if {$Tmp1>25} {::set Exemption 10}; ::if {$Tmp1>26} {::set Exemption 9}; ::if {$Tmp1>27} {::set Exemption 8}; ::if {$Tmp1>28} {::set Exemption 7}; ::if {$Tmp1>29} {::set Exemption 6}; ::if {$Tmp1>30} {::set Exemption 5}; ::if {$Tmp1>31} {::set Exemption 4}; ::if {$Tmp1>32} {::set Exemption 3}; ::if {$Tmp1>33} {::set Exemption 2}; ::if {$Tmp1>34} {::set Exemption 1}; ::if {$Tmp1>35} {::set Exemption 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::set Base 16000; ::set Exemption 19; ::if {$Tmp1>38} {::set Exemption 18}; ::if {$Tmp1>39} {::set Exemption 17}; ::if {$Tmp1>40} {::set Exemption 16}; ::if {$Tmp1>41} {::set Exemption 15}; ::if {$Tmp1>42} {::set Exemption 14}; ::if {$Tmp1>43} {::set Exemption 13}; ::if {$Tmp1>44} {::set Exemption 12}; ::if {$Tmp1>45} {::set Exemption 11}; ::if {$Tmp1>46} {::set Exemption 10}; ::if {$Tmp1>47} {::set Exemption 9}; ::if {$Tmp1>48} {::set Exemption 8}; ::if {$Tmp1>49} {::set Exemption 7}; ::if {$Tmp1>50} {::set Exemption 6}; ::if {$Tmp1>51} {::set Exemption 5}; ::if {$Tmp1>52} {::set Exemption 4}; ::if {$Tmp1>53} {::set Exemption 3}; ::if {$Tmp1>54} {::set Exemption 2}; ::if {$Tmp1>55} {::set Exemption 1}; ::if {$Tmp1>56} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::set Base 20000; ::set Exemption 24; ::if {$Tmp1>48} {::set Exemption 23}; ::if {$Tmp1>49} {::set Exemption 22}; ::if {$Tmp1>50} {::set Exemption 21}; ::if {$Tmp1>51} {::set Exemption 20}; ::if {$Tmp1>52} {::set Exemption 19}; ::if {$Tmp1>53} {::set Exemption 18}; ::if {$Tmp1>54} {::set Exemption 17}; ::if {$Tmp1>55} {::set Exemption 16}; ::if {$Tmp1>56} {::set Exemption 15}; ::if {$Tmp1>57} {::set Exemption 14}; ::if {$Tmp1>58} {::set Exemption 13}; ::if {$Tmp1>59} {::set Exemption 12}; ::if {$Tmp1>60} {::set Exemption 11}; ::if {$Tmp1>61} {::set Exemption 10}; ::if {$Tmp1>62} {::set Exemption 9}; ::if {$Tmp1>63} {::set Exemption 8}; ::if {$Tmp1>64} {::set Exemption 7}; ::if {$Tmp1>65} {::set Exemption 6}; ::if {$Tmp1>66} {::set Exemption 5}; ::if {$Tmp1>67} {::set Exemption 4}; ::if {$Tmp1>68} {::set Exemption 3}; ::if {$Tmp1>69} {::set Exemption 2}; ::if {$Tmp1>70} {::set Exemption 1}; ::if {$Tmp1>71} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Base 10000; ::set Exemption 0; } ::if {$MaritalStatus eq "single"} { ::set Base 10000; ::set Exemption 15; ::if {$Tmp1>30} {::set Exemption 14}; ::if {$Tmp1>31} {::set Exemption 13}; ::if {$Tmp1>32} {::set Exemption 12}; ::if {$Tmp1>33} {::set Exemption 11}; ::if {$Tmp1>34} {::set Exemption 10}; ::if {$Tmp1>35} {::set Exemption 9}; ::if {$Tmp1>36} {::set Exemption 8}; ::if {$Tmp1>37} {::set Exemption 7}; ::if {$Tmp1>38} {::set Exemption 6}; ::if {$Tmp1>39} {::set Exemption 5}; ::if {$Tmp1>40} {::set Exemption 4}; ::if {$Tmp1>41} {::set Exemption 3}; ::if {$Tmp1>42} {::set Exemption 2}; ::if {$Tmp1>43} {::set Exemption 1}; ::if {$Tmp1>44} {::set Exemption 0}; } ::set Exemption [::expr $Exemption * 1000]; ::set Taxable [::expr $Taxable-$Exemption]; ;#// (6) Annual Taxable Income ::set Tax 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "married-filing-separately" \ } { ::if {$Taxable<=10000} {::set Base 0; ::set Rate 0.02; ::set Flat 0;} ::if {$Taxable>10000} {::set Base 10000; ::set Rate 0.045; ::set Flat 200;} ::if {$Taxable>50000} {::set Base 50000; ::set Rate 0.055; ::set Flat 2000;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.06; ::set Flat 4750;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.065; ::set Flat 10750;} ::if {$Taxable>250000} {::set Base 250000; ::set Rate 0.069; ::set Flat 14000;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.0699; ::set Flat 31250;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable<=16000} {::set Base 0; ::set Rate 0.02; ::set Flat 0;} ::if {$Taxable>16000} {::set Base 16000; ::set Rate 0.045; ::set Flat 320;} ::if {$Taxable>80000} {::set Base 80000; ::set Rate 0.055; ::set Flat 3200;} ::if {$Taxable>160000} {::set Base 160000; ::set Rate 0.06; ::set Flat 7600;} ::if {$Taxable>320000} {::set Base 320000; ::set Rate 0.065; ::set Flat 17200;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.069; ::set Flat 22400;} ::if {$Taxable>800000} {::set Base 400000; ::set Rate 0.0699; ::set Flat 50000;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable<=20000} {::set Base 0; ::set Rate 0.02; ::set Flat 0;} ::if {$Taxable>20000} {::set Base 20000; ::set Rate 0.045; ::set Flat 400;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.055; ::set Flat 4000;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.06; ::set Flat 9500;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.065; ::set Flat 21500;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.069; ::set Flat 28000;} ::if {$Taxable>1000000} {::set Base 1000000; ::set Rate 0.0699; ::set Flat 62500;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "exempt"} { ::set Tax 0; } ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable>50250} { ::if {$Taxable>50250&&$Taxable<52750} {::set Tax [::expr $Tax+25]}; ::if {$Taxable>52750&&$Taxable<55250} {::set Tax [::expr $Tax+50]}; ::if {$Taxable>55250&&$Taxable<57750} {::set Tax [::expr $Tax+75]}; ::if {$Taxable>57750&&$Taxable<60250} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>60250&&$Taxable<62750} {::set Tax [::expr $Tax+125]}; ::if {$Taxable>62750&&$Taxable<65250} {::set Tax [::expr $Tax+150]}; ::if {$Taxable>65250&&$Taxable<67750} {::set Tax [::expr $Tax+175]}; ::if {$Taxable>67750&&$Taxable<70250} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>70250&&$Taxable<72750} {::set Tax [::expr $Tax+225]}; ::if {$Taxable>72750} {::set Tax [::expr $Tax+250]}; } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable>78500} { ::if {$Taxable>78500&&$Taxable<82500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>82500&&$Taxable<86500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>86500&&$Taxable<90500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>90500&&$Taxable<94500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>94500&&$Taxable<98500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>98500&&$Taxable<102500} {::set Tax [::expr $Tax+240]}; ::if {$Taxable>102500&&$Taxable<106500} {::set Tax [::expr $Tax+280]}; ::if {$Taxable>106500&&$Taxable<100500} {::set Tax [::expr $Tax+320]}; ::if {$Taxable>110500&&$Taxable<114500} {::set Tax [::expr $Tax+360]}; ::if {$Taxable>114500} {::set Tax [::expr $Tax+400]}; } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable>100500} { ::if {$Taxable>100500&&$Taxable<105500} {::set Tax [::expr $Tax+50]}; ::if {$Taxable>105500&&$Taxable<110500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>110500&&$Taxable<115500} {::set Tax [::expr $Tax+150]}; ::if {$Taxable>115500&&$Taxable<120500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>120500&&$Taxable<125500} {::set Tax [::expr $Tax+250]}; ::if {$Taxable>125500&&$Taxable<130500} {::set Tax [::expr $Tax+300]}; ::if {$Taxable>130500&&$Taxable<135500} {::set Tax [::expr $Tax+350]}; ::if {$Taxable>135500&&$Taxable<140500} {::set Tax [::expr $Tax+400]}; ::if {$Taxable>140500&&$Taxable<145500} {::set Tax [::expr $Tax+450]}; ::if {$Taxable>145000} {::set Tax [::expr $Tax+500]}; } } ::if {$MaritalStatus eq "single"} { ::if {$Taxable>56500} { ::if {$Taxable>56500&&$Taxable<61500} {::set Tax [::expr $Tax+25]}; ::if {$Taxable>61500&&$Taxable<66500} {::set Tax [::expr $Tax+50]}; ::if {$Taxable>66500&&$Taxable<71500} {::set Tax [::expr $Tax+75]}; ::if {$Taxable>71500&&$Taxable<76500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>76500&&$Taxable<81500} {::set Tax [::expr $Tax+125]}; ::if {$Taxable>81500&&$Taxable<86500} {::set Tax [::expr $Tax+150]}; ::if {$Taxable>86500&&$Taxable<91500} {::set Tax [::expr $Tax+175]}; ::if {$Taxable>91500&&$Taxable<96500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>96500&&$Taxable<101500} {::set Tax [::expr $Tax+225]}; ::if {$Taxable>101500} {::set Tax [::expr $Tax+250]}; } } ::set Recapture 0; ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "single" \ } { ::if {$Taxable >105000} { ::set Recapture [::expr $Taxable-105000]; ::set Recapture [::expr $Recapture/5000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*25]; ::if {$Recapture>=3400} { ::set Recapture 3400; } } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable >168000} { ::set Recapture [::expr $Taxable-168000]; ::set Recapture [::expr $Recapture/8000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*40]; ::if {$Recapture>=5320} { ::set Recapture 5320; } } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable >210000} { ::set Recapture [::expr $Taxable-210000]; ::set Recapture [::expr $Recapture/10000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*50]; ::if {$Recapture>=6800} { ::set Recapture 6800; } } } ::set Tax [::expr $Tax+$Recapture]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$Tmp1>12} {::set Credit .75}; ::if {$Tmp1>15} {::set Credit .70}; ::if {$Tmp1>15.5} {::set Credit .65}; ::if {$Tmp1>16} {::set Credit .60}; ::if {$Tmp1>16.5} {::set Credit .55}; ::if {$Tmp1>17} {::set Credit .50}; ::if {$Tmp1>17.5} {::set Credit .45}; ::if {$Tmp1>18} {::set Credit .40}; ::if {$Tmp1>18.5} {::set Credit .35}; ::if {$Tmp1>20} {::set Credit .30}; ::if {$Tmp1>20.5} {::set Credit .25}; ::if {$Tmp1>21} {::set Credit .20}; ::if {$Tmp1>21.5} {::set Credit .15}; ::if {$Tmp1>25} {::set Credit .14}; ::if {$Tmp1>25.5} {::set Credit .13}; ::if {$Tmp1>26} {::set Credit .12}; ::if {$Tmp1>26.5} {::set Credit .11}; ::if {$Tmp1>27} {::set Credit .10}; ::if {$Tmp1>48} {::set Credit .09}; ::if {$Tmp1>48.5} {::set Credit .08}; ::if {$Tmp1>49} {::set Credit .07}; ::if {$Tmp1>49.5} {::set Credit .06}; ::if {$Tmp1>50} {::set Credit .05}; ::if {$Tmp1>50.5} {::set Credit .04}; ::if {$Tmp1>51} {::set Credit .03}; ::if {$Tmp1>51.5} {::set Credit .02}; ::if {$Tmp1>52.0} {::set Credit .01}; ::if {$Tmp1>52.5} {::set Credit 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Tmp1>19} {::set Credit .75}; ::if {$Tmp1>24} {::set Credit .70}; ::if {$Tmp1>24.5} {::set Credit .65}; ::if {$Tmp1>25} {::set Credit .60}; ::if {$Tmp1>25.5} {::set Credit .55}; ::if {$Tmp1>26} {::set Credit .50}; ::if {$Tmp1>26.5} {::set Credit .45}; ::if {$Tmp1>27} {::set Credit .40}; ::if {$Tmp1>27.5} {::set Credit .35}; ::if {$Tmp1>34} {::set Credit .30}; ::if {$Tmp1>34.5} {::set Credit .25}; ::if {$Tmp1>35} {::set Credit .20}; ::if {$Tmp1>35.5} {::set Credit .15}; ::if {$Tmp1>44} {::set Credit .14}; ::if {$Tmp1>44.5} {::set Credit .13}; ::if {$Tmp1>45} {::set Credit .12}; ::if {$Tmp1>45.5} {::set Credit .11}; ::if {$Tmp1>46} {::set Credit .10}; ::if {$Tmp1>74} {::set Credit .09}; ::if {$Tmp1>74.5} {::set Credit .08}; ::if {$Tmp1>75} {::set Credit .07}; ::if {$Tmp1>75.5} {::set Credit .06}; ::if {$Tmp1>76} {::set Credit .05}; ::if {$Tmp1>76.5} {::set Credit .04}; ::if {$Tmp1>77} {::set Credit .03}; ::if {$Tmp1>77.5} {::set Credit .02}; ::if {$Tmp1>78} {::set Credit .01}; ::if {$Tmp1>78.5} {::set Credit 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Tmp1>24} {::set Credit .75}; ::if {$Tmp1>30} {::set Credit .70}; ::if {$Tmp1>30.5} {::set Credit .65}; ::if {$Tmp1>31} {::set Credit .60}; ::if {$Tmp1>31.5} {::set Credit .55}; ::if {$Tmp1>32} {::set Credit .50}; ::if {$Tmp1>32.5} {::set Credit .45}; ::if {$Tmp1>33} {::set Credit .40}; ::if {$Tmp1>33.5} {::set Credit .35}; ::if {$Tmp1>40} {::set Credit .30}; ::if {$Tmp1>40.5} {::set Credit .25}; ::if {$Tmp1>41} {::set Credit .20}; ::if {$Tmp1>41.5} {::set Credit .15}; ::if {$Tmp1>50} {::set Credit .14}; ::if {$Tmp1>50.5} {::set Credit .13}; ::if {$Tmp1>51} {::set Credit .12}; ::if {$Tmp1>51.5} {::set Credit .11}; ::if {$Tmp1>52} {::set Credit .10}; ::if {$Tmp1>96} {::set Credit .09}; ::if {$Tmp1>96.5} {::set Credit .08}; ::if {$Tmp1>97} {::set Credit .07}; ::if {$Tmp1>97.5} {::set Credit .06}; ::if {$Tmp1>98} {::set Credit .05}; ::if {$Tmp1>98.5} {::set Credit .04}; ::if {$Tmp1>99} {::set Credit .03}; ::if {$Tmp1>99.5} {::set Credit .02}; ::if {$Tmp1>100} {::set Credit .01}; ::if {$Tmp1>100.5} {::set Credit 0}; } ::if {$MaritalStatus eq "single"} { ::if {$Tmp1>15.0} {::set Credit .75}; ::if {$Tmp1>18.8} {::set Credit .70}; ::if {$Tmp1>19.3} {::set Credit .65}; ::if {$Tmp1>19.8} {::set Credit .60}; ::if {$Tmp1>20.3} {::set Credit .55}; ::if {$Tmp1>20.8} {::set Credit .50}; ::if {$Tmp1>21.3} {::set Credit .45}; ::if {$Tmp1>21.8} {::set Credit .40}; ::if {$Tmp1>22.3} {::set Credit .35}; ::if {$Tmp1>25.0} {::set Credit .30}; ::if {$Tmp1>25.5} {::set Credit .25}; ::if {$Tmp1>26.0} {::set Credit .20}; ::if {$Tmp1>26.5} {::set Credit .15}; ::if {$Tmp1>31.3} {::set Credit .14}; ::if {$Tmp1>31.8} {::set Credit .13}; ::if {$Tmp1>32.3} {::set Credit .12}; ::if {$Tmp1>32.8} {::set Credit .11}; ::if {$Tmp1>33.3} {::set Credit .10}; ::if {$Tmp1>60.0} {::set Credit .09}; ::if {$Tmp1>60.5} {::set Credit .08}; ::if {$Tmp1>61.0} {::set Credit .07}; ::if {$Tmp1>61.5} {::set Credit .06}; ::if {$Tmp1>62.0} {::set Credit .05}; ::if {$Tmp1>62.5} {::set Credit .04}; ::if {$Tmp1>63.0} {::set Credit .03}; ::if {$Tmp1>63.5} {::set Credit .02}; ::if {$Tmp1>64.0} {::set Credit .01}; ::if {$Tmp1>64.5} {::set Credit 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Credit 0.00; } ;# Exempt ::if {$MaritalStatus eq "exempt"} { ::set Credit 1; ;#// (This will cause credit to be 0%) } ::set Credit [::expr 1-$Credit]; ::set Tax [::expr $Tax*$Credit]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Tax<0} { ::set Tax 0; } ::set Result [round2 $Tax]; ::return $Result; } method IL-20240101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20240101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2775; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IN-20240101 {TaxableWages} { debugLog "--- Indiana Tax Calculation (20240101) ---"; ::set DESC "Indiana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0315; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $DEDUCT * 1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::set Result [round2 $TAX]; ::return $Result; } method GA-20240101 {TaxableWages} { debugLog "--- Georgia Tax Calculation (20240101) ---"; ::set DESC "Georgia Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "GA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Standard 0; ::set Personal 3000; ::set Dependant 3000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set TotalAllowance 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable+$Supp]; ::switch -- $MaritalStatus { zero - single - head-of-household {::set Standard 12000;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Standard 12000;} married-filing-jointly-one-spouse-working {::set Standard 24000;} } ::set TotalAllowance [::expr {$Exemptions*$Dependant-3000}]; ::if {$MaritalStatus eq "zero"} { ::set Taxable [::expr $Taxable-$Standard]; } else { ::set Taxable [::expr $Taxable-$Standard-$TotalAllowance]; } ::if {$Taxable<0} { ::set Taxable 0 }; ::set Tax [::expr $Taxable*0.0549]; ;#// Tax = (Taxable-Base)*Rate+Flat ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Taxable<0} {::set Taxable 0;} ::set Result [round2 $Tax]; ::return $Result; } method IA-20240101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 14600; } else { ::set MAXIMUM 29200; } ::set EXEMPT1 40; ::set MAXIMUM [::expr {$MAXIMUM/$_pay_frequency}]; ::set TAXABLE [::expr $TaxableWages-$MAXIMUM] ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .0440;::set FLAT 0.00;} ::if {$TAXABLE>=4896} {::set BASE 4896; ::set RATE .0482;::set FLAT 215.42;} ::if {$TAXABLE>=24480} {::set BASE 24480;::set RATE .0570;::set FLAT 1159.37;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20240101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 3160; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .040; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20240101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20240101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 5000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=97150} { ::set Phase [::expr $Taxable-97150]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*11750]; } else { ::set Phase 11750; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-11750]; } } "married" { ::if {$Taxable>=194300} { ::set Phase [::expr $Taxable-194300]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*26350]; } else { ::set Phase 26350; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-26350]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=24500} {::set Base 24500;::set Rate 0.0675;::set Flat 1421;} ::if {$Taxable>=58050} {::set Base 58050;::set Rate 0.0715;::set Flat 3686;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=49050} {::set Base 49050;::set Rate 0.0675;::set Flat 2845;} ::if {$Taxable>=116100} {::set Base 116100;::set Rate 0.0715;::set Flat 7371;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MN-20240101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4800; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4225} {::set BASE 4225;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=34295} {::set BASE 34295;::set RATE 0.0680;::set FLAT 1608.75;} ::if {$TAXABLE>=102985} {::set BASE 102985;::set RATE 0.0785;::set FLAT 6279.67;} ::if {$TAXABLE>=187565} {::set BASE 187565;::set RATE 0.0985;::set FLAT 12919.20;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=13250} {::set BASE 13250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=57200} {::set BASE 57200;::set RATE 0.0680;::set FLAT 2351.33;} ::if {$TAXABLE>=187860} {::set BASE 187860;::set RATE 0.0785;::set FLAT 11236.21;} ::if {$TAXABLE>=318220} {::set BASE 318220;::set RATE 0.0985;::set FLAT 21469.47;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20240101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 14600; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 29200; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 21900; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 14600; } else { ::set MaritalStatus "single"; ::set STANDARD 14600; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1273} {::set BASE 1273;::set RATE .020;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>2546} {::set BASE 2546;::set RATE .025;::set FLAT [::expr $FLAT+32];} ::if {$TAXABLE>3819} {::set BASE 3819;::set RATE .030;::set FLAT [::expr $FLAT+38];} ::if {$TAXABLE>5092} {::set BASE 5092;::set RATE .035;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>6365} {::set BASE 6365;::set RATE .040;::set FLAT [::expr $FLAT+51];} ::if {$TAXABLE>7638} {::set BASE 7638;::set RATE .045;::set FLAT [::expr $FLAT+57];} ::if {$TAXABLE>8911} {::set BASE 8911;::set RATE .048;::set FLAT [::expr $FLAT+61];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method MT-20240101 {TaxableWages} { debugLog "--- Montana Tax Calculation (20240101) ---"; ::set DESC "Montana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2070; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE .026; ::set FLAT 0; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .018;::set FLAT 0.00;} ::if {$TAXABLE>=7630} {::set BASE 7630;::set RATE .0440;::set FLAT 137.00;} ::if {$TAXABLE>=16350} {::set BASE 16350;::set RATE .0600;::set FLAT 521.00;} ::if {$TAXABLE>=130790} {::set BASE 130790;::set RATE .0660;::set FLAT 7387.00;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Periods*Paysum-(Xemp*Allow)-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NC-20240101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 19125; } default { ::set STANDARD 12750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0460; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NE-20240101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2250; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3210} {::set BASE 3210; ::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=6290} {::set BASE 6290; ::set RATE 0.0322;::set FLAT 66.61;} ::if {$TAXABLE>=20440} {::set BASE 20440;::set RATE 0.0491;::set FLAT 525.24;} ::if {$TAXABLE>=29620} {::set BASE 29620;::set RATE 0.0577;::set FLAT 975.98;} ::if {$TAXABLE>=37610} {::set BASE 37610;::set RATE 0.0594;::set FLAT 1437.00;} ::if {$TAXABLE>=70630} {::set BASE 70630;::set RATE 0.0610;::set FLAT 3398.39;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7680} {::set BASE 7680; ::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=12190} {::set BASE 12190;::set RATE 0.0322;::set FLAT 101.93;} ::if {$TAXABLE>=30360} {::set BASE 30360;::set RATE 0.0491;::set FLAT 687.00;} ::if {$TAXABLE>=47230} {::set BASE 47230;::set RATE 0.0577;::set FLAT 1515.32;} ::if {$TAXABLE>=58600} {::set BASE 58600;::set RATE 0.0594;::set FLAT 2171.37;} ::if {$TAXABLE>=77710} {::set BASE 77710;::set RATE 0.0610;::set FLAT 3306.50;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NM-20240101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20240101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 0; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=7500} {::set Base 7300;::set Rate 0.015;::set Flat 0.00;} ::if {$Taxable>=13000} {::set Base 13000;::set Rate 0.032;::set Flat 82.50;} ::if {$Taxable>=24000} {::set Base 24000;::set Rate 0.043;::set Flat 434.50;} ::if {$Taxable>=41000} {::set Base 41000;::set Rate 0.047;::set Flat 1165.50;} ::if {$Taxable>=74000} {::set Base 74000;::set Rate 0.049;::set Flat 2716.50;} ::if {$Taxable>=217500} {::set Base 217500;::set Rate 0.059;::set Flat 9748.00;} } "married" { ::if {$Taxable>=15000} {::set Base 15000;::set Rate 0.015;::set Flat 0.00;} ::if {$Taxable>=23000} {::set Base 23000;::set Rate 0.032;::set Flat 120.00;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate 0.043;::set Flat 664.00;} ::if {$Taxable>=65000} {::set Base 65000;::set Rate 0.047;::set Flat 1739.00;} ::if {$Taxable>=115000} {::set Base 115000;::set Rate 0.049;::set Flat 4089.00;} ::if {$Taxable>=330000} {::set Base 330000;::set Rate 0.059;::set Flat 14624.00;} } "head-of-household" { ::if {$Taxable>=11250} {::set Base 11250;::set Rate 0.015;::set Flat 0.00;} ::if {$Taxable>=19250} {::set Base 19250;::set Rate 0.032;::set Flat 120.00;} ::if {$Taxable>=36250} {::set Base 36250;::set Rate 0.043;::set Flat 664.00;} ::if {$Taxable>=61250} {::set Base 61250;::set Rate 0.047;::set Flat 1739.00;} ::if {$Taxable>=111250} {::set Base 111250;::set Rate 0.049;::set Flat 4089.00;} ::if {$Taxable>=325950} {::set Base 325950;::set Rate 0.059;::set Flat 14624.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method OH-20240101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0; ::set RATE 0.00501;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000; ::set RATE 0.01001;::set FLAT 25;} ::if {$TAXABLE>10000} {::set BASE 10000; ::set RATE 0.02005;::set FLAT 75;} ::if {$TAXABLE>15000} {::set BASE 15000; ::set RATE 0.02505;::set FLAT 175;} ::if {$TAXABLE>20000} {::set BASE 20000; ::set RATE 0.02990;::set FLAT 300;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.04410;::set FLAT 3100;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX*1.032]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method OK-20240101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (20240101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0.00;} ::if {$TAXABLE>6350} {::set BASE 6350;::set RATE 0.0025;::set FLAT 0.00;} ::if {$TAXABLE>7350} {::set BASE 7350;::set RATE 0.0075;::set FLAT 2.50;} ::if {$TAXABLE>8850} {::set BASE 8850;::set RATE 0.0175;::set FLAT 13.75;} ::if {$TAXABLE>10100} {::set BASE 10100;::set RATE 0.0275;::set FLAT 35.63;} ::if {$TAXABLE>11250} {::set BASE 11250;::set RATE 0.0375;::set FLAT 67.25;} ::if {$TAXABLE>13550} {::set BASE 13550;::set RATE 0.0475;::set FLAT 153.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0.00;} ::if {$TAXABLE>12700} {::set BASE 12700;::set RATE 0.0025;::set FLAT 0.00;} ::if {$TAXABLE>14700} {::set BASE 14700;::set RATE 0.0075;::set FLAT 5.00;} ::if {$TAXABLE>17700} {::set BASE 17700;::set RATE 0.0175;::set FLAT 27.50;} ::if {$TAXABLE>20200} {::set BASE 20200;::set RATE 0.0275;::set FLAT 71.25;} ::if {$TAXABLE>22500} {::set BASE 22500;::set RATE 0.0375;::set FLAT 134.50;} ::if {$TAXABLE>27100} {::set BASE 27100;::set RATE 0.0475;::set FLAT 307.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method RI-20240101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20240101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>274650} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=77450} {::set BASE 77450;::set RATE 0.0475;::set FLAT 2904.38;} ::if {$TAXABLE>=176050} {::set BASE 176050;::set RATE 0.0599;::set FLAT 7587.88;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method SC-20240101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20240101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 4610; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 4310;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0; ::set Rate .0; ::set Flat 0;} ::if {$Taxable>=3460} {::set Base 3460; ::set Rate .03; ::set Flat 103.80;} ::if {$Taxable>=17330} {::set Base 17330;::set Rate .064;::set Flat 693.02;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method ID-20230701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20220701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3534; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=13850} {::set Base 13850;::set Rate 0.058;::set Flat 0;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=27700} {::set Base 27700;::set Rate 0.058;::set Flat 0;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method WV-20230701 {TaxableWages} { ::set PERSONAL 2000.00; ::set DESC "WV Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WV"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; # Taxable = (Periods*Paysum)-(Xemp*Personal) ::set TAXABLE [::expr $TAXABLE-$PERSONAL]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0236;::set FLAT 0;} ::if {$TAXABLE>=7500} {::set BASE 7500;::set RATE .0315;::set FLAT 177;} ::if {$TAXABLE>=18750} {::set BASE 18750;::set RATE .0354;::set FLAT 531.38;} ::if {$TAXABLE>=30000} {::set BASE 30000;::set RATE .0472;::set FLAT 929.63;} ::if {$TAXABLE>=45000} {::set BASE 45000;::set RATE .0512;::set FLAT 1637.63;} } } ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "not-applicable" \ } { ::if {$TAXABLE>=0} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0236;::set FLAT 0;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0315;::set FLAT 236;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0354;::set FLAT 708.5;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0472;::set FLAT 1239.5;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0512;::set FLAT 2183.5;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax ={(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IL-20230101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20230101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2625; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MI-20230101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20230101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 5400.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20230101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 13850; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 27700; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 20800; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 13850; } else { ::set MaritalStatus "single"; ::set STANDARD 13850; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1207} {::set BASE 1207;::set RATE .020;::set FLAT [::expr $FLAT+18];} ::if {$TAXABLE>2414} {::set BASE 2414;::set RATE .025;::set FLAT [::expr $FLAT+24];} ::if {$TAXABLE>3621} {::set BASE 3621;::set RATE .030;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>4828} {::set BASE 4828;::set RATE .035;::set FLAT [::expr $FLAT+36];} ::if {$TAXABLE>6035} {::set BASE 6035;::set RATE .040;::set FLAT [::expr $FLAT+42];} ::if {$TAXABLE>7242} {::set BASE 7242;::set RATE .045;::set FLAT [::expr $FLAT+48];} ::if {$TAXABLE>8449} {::set BASE 8449;::set RATE .0495;::set FLAT [::expr $FLAT+54];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ND-20230101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4300; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=6925} {::set BASE 6925;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=51650} {::set BASE 51650;::set RATE 0.0204;::set FLAT 491.98;} ::if {$TAXABLE>=115250} {::set BASE 115250;::set RATE 0.0227;::set FLAT 1789.42;} ::if {$TAXABLE>=232900} {::set BASE 232900;::set RATE 0.0264;::set FLAT 4460.07;} ::if {$TAXABLE>=498275} {::set BASE 498275;::set RATE 0.0290;::set FLAT 11465.97;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=13850} {::set BASE 13850;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=51225} {::set BASE 51225;::set RATE 0.0204;::set FLAT 411.13;} ::if {$TAXABLE>=104125} {::set BASE 104125;::set RATE 0.0227;::set FLAT 1490.29;} ::if {$TAXABLE>=151400} {::set BASE 151400;::set RATE 0.0264;::set FLAT 2563.43;} ::if {$TAXABLE>=259525} {::set BASE 259525;::set RATE 0.0290;::set FLAT 5417.93;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20230101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 7800.00; ::set PERSONAL 236.00; ::set STANDARD 2605.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 5210; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2605; ::if {$Annual>=50000} {::set MAXIMUM 7800;} ::if {$Annual>=125000} {::set MAXIMUM 6250;} ::if {$Annual>=130000} {::set MAXIMUM 4700;} ::if {$Annual>=135000} {::set MAXIMUM 3100;} ::if {$Annual>=140000} {::set MAXIMUM 1550;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 5210; ::if {$Annual>=50000} {::set MAXIMUM 7800;} ::if {$Annual>=250000} {::set MAXIMUM 6250;} ::if {$Annual>=260000} {::set MAXIMUM 4700;} ::if {$Annual>=270000} {::set MAXIMUM 3100;} ::if {$Annual>=280000} {::set MAXIMUM 1550;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>4050} {::set BASE 4050;::set RATE 0.0675;::set FLAT 428;} ::if {$TAXABLE>10200} {::set BASE 10200;::set RATE 0.0875;::set FLAT 844;} } else { ::if {$TAXABLE>8100} {::set BASE 8100;::set RATE 0.0675;::set FLAT 621;} ::if {$TAXABLE>20400} {::set BASE 20400;::set RATE 0.0875;::set FLAT 1451;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>39565} {::set BASE 39565;::set RATE 0.0875;::set FLAT 608;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 10653;} } else { ::if {$TAXABLE>36990} {::set BASE 36990;::set RATE 0.0875;::set FLAT 1215;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 21305;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20230101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20230101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>260550} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=73450} {::set BASE 73450;::set RATE 0.0475;::set FLAT 2754.38;} ::if {$TAXABLE>=166950} {::set BASE 166950;::set RATE 0.0599;::set FLAT 7195.63;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20230101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20230101) ---"; ::set ALLOW 4850; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3500} {::set BASE 3500;::set RATE 0.0335;::set FLAT 0.00;} ::if {$TAXABLE>=48900} {::set BASE 48900;::set RATE 0.0660;::set FLAT 1520.90;} ::if {$TAXABLE>=113550} {::set BASE 113550;::set RATE 0.0760;::set FLAT 5787.80;} ::if {$TAXABLE>=233050} {::set BASE 233050;::set RATE 0.0875;::set FLAT 14869.80;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10538} {::set BASE 10538;::set RATE 0.0335;::set FLAT 0.00;} ::if {$TAXABLE>=86388} {::set BASE 86388;::set RATE 0.0660;::set FLAT 2540.98;} ::if {$TAXABLE>=193938} {::set BASE 193938;::set RATE 0.0760;::set FLAT 9639.28;} ::if {$TAXABLE>=289988} {::set BASE 289988;::set RATE 0.0875;::set FLAT 16939.08;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20230101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20230101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {14800 0.100 0.00} {36800 0.120 2200.00} {104250 0.220 10294.00} {205550 0.240 32580.00} {379000 0.320 74208.00} {477300 0.350 105664.00} {708550 0.370 186601.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {5250 0.100 0.00} {16250 0.120 1100.00} {49975 0.220 5147.00} {100625 0.240 16290.00} {187350 0.320 37104.00} {236500 0.350 52832.00} {583375 0.370 174238.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {12200 0.100 0.00} {27900 0.120 1570.00} {72050 0.220 6868.00} {107550 0.240 14678.00} {194300 0.320 35498.00} {243450 0.350 51226.00} {590300 0.370 172623.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method AL-20230101 {TaxableWages} { debugLog "--- Alabama Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::switch -- $MaritalStatus { "married" {::set MaritalStatus "married-filing-jointly";} "head-of-household" {::set MaritalStatus "head-of-family";} "zero" {::set MaritalStatus "single";} } ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AL"] ""]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { "single" { ::if {$Taxable<=25999} { ::set STANDARD "3000"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*25]; ::set STANDARD [::expr 3000-$Tmp1]; } else { ::set STANDARD 2500; } } } "married-filing-separately" { ::if {$Taxable<=12999} { ::set STANDARD "4250"; } else { ::if {$Taxable <= 17750} { ::set Tmp1 [::expr $Taxable-12999]; ::set Tmp1 [::expr round(($Tmp1/250.0)+.5)]; ::set Tmp1 [::expr $Tmp1*88]; ::set STANDARD [::expr 4250-$Tmp1]; } else { ::set STANDARD 2500; } } } "married-filing-jointly" { ::if {$Taxable<=25999} { ::set STANDARD "8500"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*175]; ::set STANDARD [::expr 8500-$Tmp1]; } else { ::set STANDARD 5000; } } } "head-of-family" { ::if {$Taxable<=25999} { ::set STANDARD "5200"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*135]; ::set STANDARD [::expr 5200-$Tmp1]; } else { ::set STANDARD 2500; } } } } ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::switch -- $MaritalStatus { "zero" {::set PERSONAL 0.00;} "single" { ::if {$Taxable<=25999} {::set PERSONAL 3000}; ::if {$Taxable<=26499} {::set PERSONAL 2975}; ::if {$Taxable<=26999} {::set PERSONAL 2950}; ::if {$Taxable<=27499} {::set PERSONAL 2925}; ::if {$Taxable<=27999} {::set PERSONAL 2900}; ::if {$Taxable<=28499} {::set PERSONAL 2875}; ::if {$Taxable<=28999} {::set PERSONAL 2850}; ::if {$Taxable<=29499} {::set PERSONAL 2825}; ::if {$Taxable<=29999} {::set PERSONAL 2800}; ::if {$Taxable<=30499} {::set PERSONAL 2775}; ::if {$Taxable<=30999} {::set PERSONAL 2750}; ::if {$Taxable<=31499} {::set PERSONAL 2725}; ::if {$Taxable<=31999} {::set PERSONAL 2700}; ::if {$Taxable<=32499} {::set PERSONAL 2675}; ::if {$Taxable<=32999} {::set PERSONAL 2650}; ::if {$Taxable<=33499} {::set PERSONAL 2625}; ::if {$Taxable<=33999} {::set PERSONAL 2600}; ::if {$Taxable<=34499} {::set PERSONAL 2575}; ::if {$Taxable<=34999} {::set PERSONAL 2550}; ::if {$Taxable<=35499} {::set PERSONAL 2525}; ::if {$Taxable>=35500} {::set PERSONAL 2500}; } "married-filing-separately" { ::if {$Taxable<=12999} {::set PERSONAL 4250}; ::if {$Taxable<=13249} {::set PERSONAL 4162}; ::if {$Taxable<=13499} {::set PERSONAL 4074}; ::if {$Taxable<=13749} {::set PERSONAL 3986}; ::if {$Taxable<=13999} {::set PERSONAL 3898}; ::if {$Taxable<=14249} {::set PERSONAL 3810}; ::if {$Taxable<=14499} {::set PERSONAL 3722}; ::if {$Taxable<=14749} {::set PERSONAL 3634}; ::if {$Taxable<=14999} {::set PERSONAL 3546}; ::if {$Taxable<=15249} {::set PERSONAL 3458}; ::if {$Taxable<=15499} {::set PERSONAL 3370}; ::if {$Taxable<=15749} {::set PERSONAL 3282}; ::if {$Taxable<=15999} {::set PERSONAL 3194}; ::if {$Taxable<=16249} {::set PERSONAL 3106}; ::if {$Taxable<=16499} {::set PERSONAL 3018}; ::if {$Taxable<=16749} {::set PERSONAL 2930}; ::if {$Taxable<=16999} {::set PERSONAL 2842}; ::if {$Taxable<=17249} {::set PERSONAL 2754}; ::if {$Taxable<=17499} {::set PERSONAL 2666}; ::if {$Taxable<=17749} {::set PERSONAL 2578}; ::if {$Taxable>=17750} {::set PERSONAL 2500}; } "head-of-family" { ::if {$Taxable<=25999} {::set PERSONAL 5200}; ::if {$Taxable<=26499} {::set PERSONAL 5065}; ::if {$Taxable<=26999} {::set PERSONAL 4930}; ::if {$Taxable<=27499} {::set PERSONAL 4795}; ::if {$Taxable<=27999} {::set PERSONAL 4660}; ::if {$Taxable<=28499} {::set PERSONAL 4525}; ::if {$Taxable<=28999} {::set PERSONAL 4390}; ::if {$Taxable<=29499} {::set PERSONAL 4255}; ::if {$Taxable<=29999} {::set PERSONAL 4120}; ::if {$Taxable<=30499} {::set PERSONAL 3985}; ::if {$Taxable<=30999} {::set PERSONAL 3850}; ::if {$Taxable<=31499} {::set PERSONAL 3715}; ::if {$Taxable<=31999} {::set PERSONAL 3580}; ::if {$Taxable<=32499} {::set PERSONAL 3445}; ::if {$Taxable<=32999} {::set PERSONAL 3310}; ::if {$Taxable<=33499} {::set PERSONAL 3175}; ::if {$Taxable<=33999} {::set PERSONAL 3040}; ::if {$Taxable<=34499} {::set PERSONAL 2905}; ::if {$Taxable<=34999} {::set PERSONAL 2770}; ::if {$Taxable<=35499} {::set PERSONAL 2635}; ::if {$Taxable>=35500} {::set PERSONAL 2500}; } "married-filing-jointly" { ::if {$Taxable<=25999} {::set PERSONAL 8500}; ::if {$Taxable<=26499} {::set PERSONAL 8325}; ::if {$Taxable<=26999} {::set PERSONAL 8150}; ::if {$Taxable<=27499} {::set PERSONAL 7975}; ::if {$Taxable<=27999} {::set PERSONAL 7800}; ::if {$Taxable<=28499} {::set PERSONAL 7625}; ::if {$Taxable<=28999} {::set PERSONAL 7450}; ::if {$Taxable<=29499} {::set PERSONAL 7275}; ::if {$Taxable<=29999} {::set PERSONAL 7100}; ::if {$Taxable<=30499} {::set PERSONAL 6925}; ::if {$Taxable<=30999} {::set PERSONAL 6750}; ::if {$Taxable<=31499} {::set PERSONAL 6575}; ::if {$Taxable<=31999} {::set PERSONAL 6400}; ::if {$Taxable<=32499} {::set PERSONAL 6225}; ::if {$Taxable<=32999} {::set PERSONAL 6050}; ::if {$Taxable<=33499} {::set PERSONAL 5875}; ::if {$Taxable<=33999} {::set PERSONAL 5700}; ::if {$Taxable<=34499} {::set PERSONAL 5525}; ::if {$Taxable<=34999} {::set PERSONAL 5350}; ::if {$Taxable<=35499} {::set PERSONAL 5175}; ::if {$Taxable>=35500} {::set PERSONAL 5000}; } }; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 0.0; ::if {$Taxable<=50000} { ::set DEPEND [::expr $Exemptions*1000]; } else { ::if {$Taxable<=100000} { ::set DEPEND [::expr $Exemptions*500]; } else { ::set DEPEND [::expr $Exemptions*300]; } } ::set Taxable [::expr $Taxable-$STANDARD]; ;#// A - Standard Deduction ::set Taxable [::expr $Taxable-$FEDERAL]; ;#// B - Federal Tax ::set Taxable [::expr $Taxable-$PERSONAL]; ;#// C - Personal Exemption ::set Taxable [::expr $Taxable-$DEPEND]; ;#// D - Dependants ::if {$Taxable<=0.00} {::return 0.00;} ::set BASE 0;::set RATE 0.02;::set FLAT 0; ::switch -- $MaritalStatus { "zero" - "single" - "married-filing-separately" - "head-of-family" { ::if {$Taxable>500} {::set BASE 500;::set RATE .02;::set FLAT [::expr $FLAT+10];} ::if {$Taxable>2500} {::set BASE 2500;::set RATE .04;::set FLAT [::expr $FLAT+100];} ::if {$Taxable>3000} {::set BASE 3000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } "married-filing-jointly" { ::if {$Taxable>1000} {::set BASE 1000;::set RATE .02;::set FLAT [::expr $FLAT+20];} ::if {$Taxable>5000} {::set BASE 5000;::set RATE .04;::set FLAT [::expr $FLAT+200];} ::if {$Taxable>6000} {::set BASE 6000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } }; ::set Result [::expr $Taxable-$BASE]; ::set Result [::expr $Result*$RATE]; ::set Result [::expr $Result+$FLAT]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method AR-20230101 {TaxableWages} { debugLog "--- Arkansas Tax Calculation (20230101) ---"; ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 29; ;#// Exemption for dependents ::set STANDARD 2270; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0;} ::if {$TAXABLE>=5100} {::set BASE 5100;::set RATE 0.0200;::set FLAT 101.98;} ::if {$TAXABLE>=10300} {::set BASE 10300;::set RATE 0.0300;::set FLAT 204.97;} ::if {$TAXABLE>=14700} {::set BASE 14700;::set RATE 0.0340;::set FLAT 263.77;} ::if {$TAXABLE>=24300} {::set BASE 24300;::set RATE 0.0490;::set FLAT 628.25;} ::if {$TAXABLE>=87001} {::set BASE 87001;::set RATE 0.0490;::set FLAT 627.20;} ::if {$TAXABLE>=91801} {::set BASE 91801;::set RATE 0.0490;::set FLAT 167.20;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method CA-20230101 {TaxableWages} { debugLog "--- California Tax Calculation (20230101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=17252} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=34503} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=17252} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=34503} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 5202;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 10404;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 5202; } else { ::set Standard 10404; } } ::set Regular 154.00; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {10099 0.0220 111.09} {23942 0.0440 415.64} {37788 0.0660 1024.86} {52455 0.0880 1992.88} {66295 0.1023 3210.80} {338639 0.1133 31071.59} {406364 0.1243 38744.83} {677275 0.1353 72419.07} {1000000 0.1463 116083.76} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {20198 0.0220 222.18} {47884 0.0440 831.27} {75576 0.0660 2049.72} {104910 0.0880 3985.76} {132590 0.1023 6421.60} {677278 0.1133 62143.18} {812728 0.1243 77489.67} {1000000 0.1353 100767.58} {1354550 0.1463 148738.20} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {20212 0.0220 222.33} {47887 0.0440 831.18} {61730 0.0660 1440.27} {76397 0.0880 2408.29} {90240 0.1023 3626.47} {460547 0.1133 41508.88} {552658 0.1243 51945.06} {921095 0.1353 97741.78} {1000000 0.1463 108417.63} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20230101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20230101) ---"; ::set ALLOW 4200; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 4500;} ::if {$MaritalStatus eq "married"} {::set BASE 9000;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$Exemptions>=7} { ::set ALLOW 25200; } else { ::if {$Exemptions<=6} { ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } else { ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } } ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .044]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method DC-20230101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20230101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 4000; ::if {($MaritalStatus eq "married-filing-separately")} {::set MaritalStatus "married-filing-jointly";} ::if {($MaritalStatus eq "single")} {::set MaritalStatus "married-filing-jointly";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married-filing-jointly"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .060;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .065;::set FLAT 2200.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .085;::set FLAT 3500.00;} ::if {$TAXABLE>=250000} {::set BASE 250000;::set RATE .0925;::set FLAT 19650.00;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0975;::set FLAT 42775.00;} ::if {$TAXABLE>=1000000} {::set BASE 1000000;::set RATE .1075;::set FLAT 91525.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method IA-20230101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 13850; } else { ::set MAXIMUM 27700; } ::set EXEMPT1 40; ::set MAXIMUM [::expr {$MAXIMUM/$_pay_frequency}]; ::set TAXABLE [::expr $TaxableWages-$MAXIMUM] ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .044;::set FLAT 0.00;} ::if {$TAXABLE>=4800} {::set BASE 4800;::set RATE .0482;::set FLAT 211.20;} ::if {$TAXABLE>=24000} {::set BASE 24000;::set RATE .0570;::set FLAT 1136.64;} ::if {$TAXABLE>=50000} {::set BASE 50000;::set RATE .0600;::set FLAT 2618.64;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20230101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2980; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .045; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method LA-20230101 {TaxableWages} { debugLog "--- Louisiana Tax Calculation (20230101) ---"; ::set DESC "LA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "LA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions ne ""} { ::set E1 [::expr {int($Exemptions)}]; ;#// the whole number part ::set E2 [::expr {int(($Exemptions-$E1)*10)}]; ;#// the fraction part ::set A [::expr {0.0185*((($E1*4500.0)+($E2*1000.0))/$_pay_frequency)}]; ::set B [::expr {0.0165*(((($E1*4500.0)+($E2*1000.0))-12500.0)/$_pay_frequency)}]; ::if {$B<0} { ::set B 0.0; } } ::if {$Exemptions<2} { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 12500.0; ::set M2 50000.0; } else { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 25000.0; ::set M2 100000.0; } ::set AnnualIncome [::expr {$TaxableWages*$_pay_frequency}]; ::while 1 { ::if {$AnnualIncome<$M1} { ::set W [::expr {$RateW*$TaxableWages-($A+$B)}]; ::break; } ::if {$AnnualIncome<$M2} { ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)-($A+$B)}]; ::break; } ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)+$RateZ*($TaxableWages-$M2/$_pay_frequency)-($A+$B)}]; ::break; } ::if {$W<0} {::set W 0;} ::set Result [round2 $W]; ::return $Result; } method MD-20230101 {TaxableWages} { debugLog "--- Maryland Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MD"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 3200.00; ::set BASE 0; ::set FLAT 0; ::set RATE 0.02; ::set Perc [payCodeValueGet ".percent"]; ::if {$Perc eq ""} {::set Perc 0;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { single - married-filing-separately - dependant-taxpayer { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {100000 .0500 4697.5} {125000 .0525 5947.5} {150000 .0550 7360.0} {250000 .0575 12760.0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } married-filing-jointly - head-of-household - qualifying-widow/widower { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {150000 .0500 7072.5} {175000 .0525 8322.5} {225000 .0550 10947.5} {300000 .0575 15072.5} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing MD state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT ]; ::set Taxable [::expr $Taxable-$EXEMPT]; ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20230101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20230101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4700; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=91500} { ::set Phase [::expr $Taxable-91500]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*11000]; } else { ::set Phase 11000; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-11000]; } } "married" { ::if {$Taxable>=183050} { ::set Phase [::expr $Taxable-183050]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*24850]; } else { ::set Phase 24850; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-24850]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=24500} {::set Base 24500;::set Rate 0.0675;::set Flat 1421;} ::if {$Taxable>=58050} {::set Base 58050;::set Rate 0.0715;::set Flat 3686;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=49050} {::set Base 49050;::set Rate 0.0675;::set Flat 2845;} ::if {$Taxable>=116100} {::set Base 116100;::set Rate 0.0715;::set Flat 7371;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MN-20230101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4800; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4225} {::set BASE 4225;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=34295} {::set BASE 34295;::set RATE 0.0680;::set FLAT 1608.75;} ::if {$TAXABLE>=102985} {::set BASE 102985;::set RATE 0.0785;::set FLAT 6279.67;} ::if {$TAXABLE>=187565} {::set BASE 187565;::set RATE 0.0985;::set FLAT 12919.20;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=13250} {::set BASE 13250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=57200} {::set BASE 57200;::set RATE 0.0680;::set FLAT 2351.33;} ::if {$TAXABLE>=187860} {::set BASE 187860;::set RATE 0.0785;::set FLAT 11236.21;} ::if {$TAXABLE>=318220} {::set BASE 318220;::set RATE 0.0985;::set FLAT 21469.47;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MS-20230101 {TaxableWages} { ::set RATE 0; ::set DESC "MS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ADDITION 1500; ::set RATE [payCodeValueNumber ".rate"]; ::set PERSONAL $RATE; ::set STANDARD 4600; ::if {$MaritalStatus eq "single"} {::set STANDARD 2300;}; ::if {$MaritalStatus eq "head-of-household"} {::set STANDARD 3400;}; ::if {$MaritalStatus eq "married-both-spouses-working"} {::set STANDARD 2300;}; ::if {$MaritalStatus eq "married-one-spouse-working"} {::set STANDARD 2300;}; ::if {$MaritalStatus eq "married"} {::set STANDARD 4600;}; ::if {$Exemptions<0} { ::set PERSONAL 0; ::set ADDITION 0; } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL]; # Taxable = (Periods*Paysum)-Personal-Standard-(Xemp*Addition) ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ADDITION [::expr $Exemptions*$ADDITION]; ::set TAXABLE [::expr $TAXABLE-$ADDITION]; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .00;::set FLAT 0;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .00;::set FLAT 0;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .05;::set FLAT 0;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MT-20230101 {TaxableWages} { debugLog "--- Montana Tax Calculation (20230101) ---"; ::set DESC "Montana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2070; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE .026; ::set FLAT 0; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .018;::set FLAT 0.00;} ::if {$TAXABLE>=7630} {::set BASE 7630;::set RATE .0440;::set FLAT 137.00;} ::if {$TAXABLE>=16350} {::set BASE 16350;::set RATE .0600;::set FLAT 521.00;} ::if {$TAXABLE>=130790} {::set BASE 130790;::set RATE .0660;::set FLAT 7387.00;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Periods*Paysum-(Xemp*Allow)-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NC-20230101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 19125; } default { ::set STANDARD 12750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0485; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NE-20230101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2140; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3060} {::set BASE 3060;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=5990} {::set BASE 5990;::set RATE 0.0322;::set FLAT 66.22;} ::if {$TAXABLE>=19470} {::set BASE 19470;::set RATE 0.0491;::set FLAT 500.28;} ::if {$TAXABLE>=28210} {::set BASE 28210;::set RATE 0.0620;::set FLAT 929.41;} ::if {$TAXABLE>=35820} {::set BASE 35820;::set RATE 0.0639;::set FLAT 1401.23;} ::if {$TAXABLE>=67270} {::set BASE 67270;::set RATE 0.0675;::set FLAT 3473.79;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7530} {::set BASE 7530;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=11610} {::set BASE 11610;::set RATE 0.0322;::set FLAT 92.91;} ::if {$TAXABLE>=28910} {::set BASE 28910;::set RATE 0.0491;::set FLAT 649.27;} ::if {$TAXABLE>=44980} {::set BASE 44980;::set RATE 0.0620;::set FLAT 1438.31;} ::if {$TAXABLE>=55810} {::set BASE 55810;::set RATE 0.0659;::set FLAT 2109.77;} ::if {$TAXABLE>=74010} {::set BASE 74010;::set RATE 0.0695;::set FLAT 3272.75;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NM-20230101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20230101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 0; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=6925} {::set Base 6925;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=12425} {::set Base 12425;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=17925} {::set Base 17925;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=22925} {::set Base 22925;::set Rate 0.049;::set Flat 504.50;} ::if {$Taxable>=216925} {::set Base 216925;::set Rate 0.059;::set Flat 10010.50;} } "married" { ::if {$Taxable>=13850} {::set Base 13850;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=21850} {::set Base 21850;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=29850} {::set Base 29850;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=37850} {::set Base 37850;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=328850} {::set Base 328850;::set Rate 0.059;::set Flat 15027.00;} } "head-of-household" { ::if {$Taxable>=10400} {::set Base 10400;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=18400} {::set Base 18400;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=26400} {::set Base 26400;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=34400} {::set Base 34400;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=325400} {::set Base 325400;::set Rate 0.059;::set Flat 15027.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20230101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20230101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0550 600} {80650 .0600 4271} {96800 .0714 5240} {107650 .0764 6014} {157650 .0650 9832} {215400 .1101 13586} {265400 .0735 19092} {1077550 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0550 600} {80650 .0600 4271} {96800 .0667 5240} {107650 .0717 5963} {157650 .0811 9546} {211550 .0650 13919} {323200 .1284 21177} {373200 .0735 27599} {1077550 .0765 79368} {2155350 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method SC-20230101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20230101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 4310; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 4310;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .0;::set Flat 0;} ::if {$Taxable>=3330} {::set Base 3330;::set Rate .03;::set Flat 99.90;} ::if {$Taxable>=16680} {::set Base 16680;::set Rate .065;::set Flat 683.70;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method UT-20230101 {TaxableWages} { debugLog "--- Utah Tax Calculation (20230101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "UT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr {$_pay_frequency*$TaxableWages}]; ::if {$Taxable<=0.0} {::set Taxable 0.0;} ::set Line1 $Taxable; ::set Line2 [::expr {$Line1*0.0485}]; ::switch $MaritalStatus { "single" { ::set Line3 390.0; ::set Line4 [::expr {$Line1-7774.0}]; } "married" { ::set Line3 780.0; ::set Line4 [::expr {$Line1-15548.0}]; } } ::set Line5 [::expr {$Line4*0.013}]; ::set Line6 [::expr {$Line3-$Line5}]; ::if {$Line6<0.0} { ::set Line6 0.0; } ::set Line7 [::expr {$Line2-$Line6}]; ::if {$Line7<0.0} { ::set Line7 0.0; } ::set Tax [::expr {$Line7/$_pay_frequency}]; ::set Result [round2 $Tax]; ::return $Result; } method VA-20230101 {TaxableWages} { debugLog "--- Virginia Tax Calculation (20230101) ---"; ::set PERSONAL1 930; ;#// Personal & Dependant deductions ::set PERSONAL2 800; ;#// Age 65 and over & Blind exemptions ::set DESC "VA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE - 8000]; ;#// Taxable = (Periods*Paysum)-4500-(Xemp*Personal) ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions ,]; ::if {[::llength $ExemptionTypes] == 1} { ::set PERSONAL1 [::expr [stringToNumber $ExemptionTypes] *$PERSONAL1]; ::set PERSONAL2 0; } else { ::set PERSONAL1 [::expr [stringToNumber [::lindex $ExemptionTypes 0]]*$PERSONAL1]; ::set PERSONAL2 [::expr [stringToNumber [::lindex $ExemptionTypes 1]]*$PERSONAL2]; } } ::set TAXABLE [::expr $TAXABLE-$PERSONAL1]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL2]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.02;::set FLAT 0;} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE 0.03;::set FLAT 60;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE 0.05;::set FLAT 120;} ::if {$TAXABLE>=17000} {::set BASE 17000;::set RATE 0.0575;::set FLAT 720;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20230101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20230101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0550 600} {80650 .0600 4271} {96800 .0714 5240} {107650 .0764 6014} {157650 .0650 9832} {215400 .1101 13586} {265400 .0735 19092} {1077550 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0585 600} {80650 .0600 4271} {96800 .0667 5240} {107650 .0717 5963} {157650 .0811 9546} {211550 .0650 13919} {323200 .1284 21177} {373200 .0735 27599} {1077550 .0765 79368} {2155350 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method AL-20220701 {TaxableWages} { debugLog "--- Alabama Tax Calculation (20220701) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::switch -- $MaritalStatus { "married" {::set MaritalStatus "married-filing-jointly";} "head-of-household" {::set MaritalStatus "head-of-family";} "zero" {::set MaritalStatus "single";} } ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AL"] ""]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { "single" { ::if {$Taxable<=25999} { ::set STANDARD "3000"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*25]; ::set STANDARD [::expr 3000-$Tmp1]; } else { ::set STANDARD 2500; } } } "married-filing-separately" { ::if {$Taxable<=12999} { ::set STANDARD "4250"; } else { ::if {$Taxable <= 17750} { ::set Tmp1 [::expr $Taxable-12999]; ::set Tmp1 [::expr round(($Tmp1/250.0)+.5)]; ::set Tmp1 [::expr $Tmp1*88]; ::set STANDARD [::expr 4250-$Tmp1]; } else { ::set STANDARD 2500; } } } "married-filing-jointly" { ::if {$Taxable<=25999} { ::set STANDARD "8500"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*175]; ::set STANDARD [::expr 8500-$Tmp1]; } else { ::set STANDARD 5000; } } } "head-of-family" { ::if {$Taxable<=25999} { ::set STANDARD "5200"; } else { ::if {$Taxable <= 35500} { ::set Tmp1 [::expr $Taxable-25999]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*135]; ::set STANDARD [::expr 5200-$Tmp1]; } else { ::set STANDARD 2500; } } } } ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::switch -- $MaritalStatus { "zero" {::set PERSONAL 0.00;} "single" { ::if {$Taxable<=25999} {::set PERSONAL 3000}; ::if {$Taxable<=26499} {::set PERSONAL 2975}; ::if {$Taxable<=26999} {::set PERSONAL 2950}; ::if {$Taxable<=27499} {::set PERSONAL 2925}; ::if {$Taxable<=27999} {::set PERSONAL 2900}; ::if {$Taxable<=28499} {::set PERSONAL 2875}; ::if {$Taxable<=28999} {::set PERSONAL 2850}; ::if {$Taxable<=29499} {::set PERSONAL 2825}; ::if {$Taxable<=29999} {::set PERSONAL 2800}; ::if {$Taxable<=30499} {::set PERSONAL 2775}; ::if {$Taxable<=30999} {::set PERSONAL 2750}; ::if {$Taxable<=31499} {::set PERSONAL 2725}; ::if {$Taxable<=31999} {::set PERSONAL 2700}; ::if {$Taxable<=32499} {::set PERSONAL 2675}; ::if {$Taxable<=32999} {::set PERSONAL 2650}; ::if {$Taxable<=33499} {::set PERSONAL 2625}; ::if {$Taxable<=33999} {::set PERSONAL 2600}; ::if {$Taxable<=34499} {::set PERSONAL 2575}; ::if {$Taxable<=34999} {::set PERSONAL 2550}; ::if {$Taxable<=35499} {::set PERSONAL 2525}; ::if {$Taxable>=35500} {::set PERSONAL 2500}; } "married-filing-separately" { ::if {$Taxable<=12999} {::set PERSONAL 4250}; ::if {$Taxable<=13249} {::set PERSONAL 4162}; ::if {$Taxable<=13499} {::set PERSONAL 4074}; ::if {$Taxable<=13749} {::set PERSONAL 3986}; ::if {$Taxable<=13999} {::set PERSONAL 3898}; ::if {$Taxable<=14249} {::set PERSONAL 3810}; ::if {$Taxable<=14499} {::set PERSONAL 3722}; ::if {$Taxable<=14749} {::set PERSONAL 3634}; ::if {$Taxable<=14999} {::set PERSONAL 3546}; ::if {$Taxable<=15249} {::set PERSONAL 3458}; ::if {$Taxable<=15499} {::set PERSONAL 3370}; ::if {$Taxable<=15749} {::set PERSONAL 3282}; ::if {$Taxable<=15999} {::set PERSONAL 3194}; ::if {$Taxable<=16249} {::set PERSONAL 3106}; ::if {$Taxable<=16499} {::set PERSONAL 3018}; ::if {$Taxable<=16749} {::set PERSONAL 2930}; ::if {$Taxable<=16999} {::set PERSONAL 2842}; ::if {$Taxable<=17249} {::set PERSONAL 2754}; ::if {$Taxable<=17499} {::set PERSONAL 2666}; ::if {$Taxable<=17749} {::set PERSONAL 2578}; ::if {$Taxable>=17750} {::set PERSONAL 2500}; } "head-of-family" { ::if {$Taxable<=25999} {::set PERSONAL 5200}; ::if {$Taxable<=26499} {::set PERSONAL 5065}; ::if {$Taxable<=26999} {::set PERSONAL 4930}; ::if {$Taxable<=27499} {::set PERSONAL 4795}; ::if {$Taxable<=27999} {::set PERSONAL 4660}; ::if {$Taxable<=28499} {::set PERSONAL 4525}; ::if {$Taxable<=28999} {::set PERSONAL 4390}; ::if {$Taxable<=29499} {::set PERSONAL 4255}; ::if {$Taxable<=29999} {::set PERSONAL 4120}; ::if {$Taxable<=30499} {::set PERSONAL 3985}; ::if {$Taxable<=30999} {::set PERSONAL 3850}; ::if {$Taxable<=31499} {::set PERSONAL 3715}; ::if {$Taxable<=31999} {::set PERSONAL 3580}; ::if {$Taxable<=32499} {::set PERSONAL 3445}; ::if {$Taxable<=32999} {::set PERSONAL 3310}; ::if {$Taxable<=33499} {::set PERSONAL 3175}; ::if {$Taxable<=33999} {::set PERSONAL 3040}; ::if {$Taxable<=34499} {::set PERSONAL 2905}; ::if {$Taxable<=34999} {::set PERSONAL 2770}; ::if {$Taxable<=35499} {::set PERSONAL 2635}; ::if {$Taxable>=35500} {::set PERSONAL 2500}; } "married-filing-jointly" { ::if {$Taxable<=25999} {::set PERSONAL 8500}; ::if {$Taxable<=26499} {::set PERSONAL 8325}; ::if {$Taxable<=26999} {::set PERSONAL 8150}; ::if {$Taxable<=27499} {::set PERSONAL 7975}; ::if {$Taxable<=27999} {::set PERSONAL 7800}; ::if {$Taxable<=28499} {::set PERSONAL 7625}; ::if {$Taxable<=28999} {::set PERSONAL 7450}; ::if {$Taxable<=29499} {::set PERSONAL 7275}; ::if {$Taxable<=29999} {::set PERSONAL 7100}; ::if {$Taxable<=30499} {::set PERSONAL 6925}; ::if {$Taxable<=30999} {::set PERSONAL 6750}; ::if {$Taxable<=31499} {::set PERSONAL 6575}; ::if {$Taxable<=31999} {::set PERSONAL 6400}; ::if {$Taxable<=32499} {::set PERSONAL 6225}; ::if {$Taxable<=32999} {::set PERSONAL 6050}; ::if {$Taxable<=33499} {::set PERSONAL 5875}; ::if {$Taxable<=33999} {::set PERSONAL 5700}; ::if {$Taxable<=34499} {::set PERSONAL 5525}; ::if {$Taxable<=34999} {::set PERSONAL 5350}; ::if {$Taxable<=35499} {::set PERSONAL 5175}; ::if {$Taxable>=35500} {::set PERSONAL 5000}; } }; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 0.0; ::if {$Taxable<=50000} { ::set DEPEND [::expr $Exemptions*1000]; } else { ::if {$Taxable<=100000} { ::set DEPEND [::expr $Exemptions*500]; } else { ::set DEPEND [::expr $Exemptions*300]; } } ::set Taxable [::expr $Taxable-$STANDARD]; ;#// A - Standard Deduction ::set Taxable [::expr $Taxable-$FEDERAL]; ;#// B - Federal Tax ::set Taxable [::expr $Taxable-$PERSONAL]; ;#// C - Personal Exemption ::set Taxable [::expr $Taxable-$DEPEND]; ;#// D - Dependants ::if {$Taxable<=0.00} {::return 0.00;} ::set BASE 0;::set RATE 0.02;::set FLAT 0; ::switch -- $MaritalStatus { "zero" - "single" - "married-filing-separately" - "head-of-family" { ::if {$Taxable>500} {::set BASE 500;::set RATE .02;::set FLAT [::expr $FLAT+10];} ::if {$Taxable>2500} {::set BASE 2500;::set RATE .04;::set FLAT [::expr $FLAT+100];} ::if {$Taxable>3000} {::set BASE 3000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } "married-filing-jointly" { ::if {$Taxable>1000} {::set BASE 1000;::set RATE .02;::set FLAT [::expr $FLAT+20];} ::if {$Taxable>5000} {::set BASE 5000;::set RATE .04;::set FLAT [::expr $FLAT+200];} ::if {$Taxable>6000} {::set BASE 6000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } }; ::set Result [::expr $Taxable-$BASE]; ::set Result [::expr $Result*$RATE]; ::set Result [::expr $Result+$FLAT]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method ID-20220701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20220701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3417; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=12950} {::set Base 12950;::set Rate 0.010;::set Flat 0;} ::if {$Taxable>=14612} {::set Base 14612;::set Rate 0.030;::set Flat 17;} ::if {$Taxable>=17937} {::set Base 17937;::set Rate 0.045;::set Flat 117;} ::if {$Taxable>=21261} {::set Base 21261;::set Rate 0.060;::set Flat 267;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=25900} {::set Base 25900;::set Rate 0.010;::set Flat 0;} ::if {$Taxable>=29224} {::set Base 29224;::set Rate 0.030;::set Flat 33;} ::if {$Taxable>=35874} {::set Base 35874;::set Rate 0.045;::set Flat 233;} ::if {$Taxable>=42522} {::set Base 42522;::set Rate 0.060;::set Flat 532;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method LA-20220701 {TaxableWages} { debugLog "--- Louisiana Tax Calculation (20220701) ---"; ::set DESC "LA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "LA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions ne ""} { ::set E1 [::expr {int($Exemptions)}]; ;#// the whole number part ::set E2 [::expr {int(($Exemptions-$E1)*10)}]; ;#// the fraction part ::set A [::expr {0.0185*((($E1*4500.0)+($E2*1000.0))/$_pay_frequency)}]; ::set B [::expr {0.0165*(((($E1*4500.0)+($E2*1000.0))-12500.0)/$_pay_frequency)}]; ::if {$B<0} { ::set B 0.0; } } ::if {$Exemptions<2} { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 12500.0; ::set M2 50000.0; } else { ::set RateB 0.0165; ::set RateW 0.0185; ::set RateZ 0.0075; ::set M1 25000.0; ::set M2 100000.0; } ::set AnnualIncome [::expr {$TaxableWages*$_pay_frequency}]; ::while 1 { ::if {$AnnualIncome<$M1} { ::set W [::expr {$RateW*$TaxableWages-($A+$B)}]; ::break; } ::if {$AnnualIncome<$M2} { ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)-($A+$B)}]; ::break; } ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)+$RateZ*($TaxableWages-$M2/$_pay_frequency)-($A+$B)}]; ::break; } ::if {$W<0} {::set W 0;} ::set Result [round2 $W]; ::return $Result; } method MD-20220701 {TaxableWages} { debugLog "--- Maryland Tax Calculation (20220701) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MD"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 3200.00; ::set BASE 0; ::set FLAT 0; ::set RATE 0.02; ::set Perc [payCodeValueGet ".percent"]; ::if {$Perc eq ""} {::set Perc 0;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { single - married-filing-separately - dependant-taxpayer { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {100000 .0500 4697.5} {125000 .0525 5947.5} {150000 .0550 7360.0} {250000 .0575 12760.0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } married-filing-jointly - head-of-household - qualifying-widow/widower { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {150000 .0500 7072.5} {175000 .0525 8322.5} {225000 .0550 10947.5} {300000 .0575 15072.5} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing MD state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT ]; ::set Taxable [::expr $Taxable-$EXEMPT]; ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method UT-20220701 {TaxableWages} { debugLog "--- Utah Tax Calculation (20220701) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "UT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr {$_pay_frequency*$TaxableWages}]; ::if {$Taxable<=0.0} {::set Taxable 0.0;} ::set Line1 $Taxable; ::set Line2 [::expr {$Line1*0.0485}]; ::switch $MaritalStatus { "single" { ::set Line3 390.0; ::set Line4 [::expr {$Line1-7774.0}]; } "married" { ::set Line3 780.0; ::set Line4 [::expr {$Line1-15548.0}]; } } ::set Line5 [::expr {$Line4*0.013}]; ::set Line6 [::expr {$Line3-$Line5}]; ::if {$Line6<0.0} { ::set Line6 0.0; } ::set Line7 [::expr {$Line2-$Line6}]; ::if {$Line7<0.0} { ::set Line7 0.0; } ::set Tax [::expr {$Line7/$_pay_frequency}]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20220101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20220101) ---"; ::set ALLOW 4200; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 4000;} ::if {$MaritalStatus eq "married"} {::set BASE 8000;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$Exemptions>=7} { ::set ALLOW 25200; } else { ::if {$Exemptions<=6} { ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } else { ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } } ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0455]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20220101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20220101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>241850} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=68200} {::set BASE 68200;::set RATE 0.0475;::set FLAT 2557.50;} ::if {$TAXABLE>=150550} {::set BASE 150550;::set RATE 0.0599;::set FLAT 6682.88;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20220101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20220101) ---"; ::set ALLOW 4500; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3250} {::set BASE 3250;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=45400} {::set BASE 45400;::set RATE 0.0660;::set FLAT 1412.03;} ::if {$TAXABLE>=105450} {::set BASE 105450;::set RATE 0.0760;::set FLAT 5375.33;} ::if {$TAXABLE>=216400} {::set BASE 216400;::set RATE 0.0875;::set FLAT 13807.53;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=9788} {::set BASE 9788;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=80238} {::set BASE 80238;::set RATE 0.0660;::set FLAT 2360.08;} ::if {$TAXABLE>=180088} {::set BASE 180088;::set RATE 0.0760;::set FLAT 8950.18;} ::if {$TAXABLE>=269288} {::set BASE 269288;::set RATE 0.0875;::set FLAT 15729.38;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20220101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20220101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {13000 0.100 0.00} {33550 0.120 2055.00} {96550 0.220 9615.00} {191150 0.240 30427.00} {353100 0.320 69295.00} {444900 0.350 98671.00} {660850 0.370 174253.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {4350 0.100 0.00} {14625 0.120 1027.50} {46125 0.220 4807.50} {93425 0.240 15213.50} {174400 0.320 34647.50} {220300 0.350 49335.50} {544250 0.370 162718.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {10800 0.100 0.00} {25450 0.120 1465.00} {66700 0.220 6415.00} {99850 0.240 13708.00} {180850 0.320 33148.00} {226750 0.350 47836.00} {550700 0.370 161218.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20220101 {TaxableWages} { debugLog "--- California Tax Calculation (20220101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=15916} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=31831} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=15916} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=31831} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4803;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 9606;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4803; } else { ::set Standard 9606; } } ::set Regular 141.90; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {9325 0.0220 102.58} {22107 0.0440 383.75} {34892 0.0660 946.32} {48435 0.0880 1840.16} {61214 0.1023 2964.71} {312686 0.1133 28690.30} {375221 0.1243 35775.52} {625369 0.1353 66868.92} {1000000 0.1463 117556.49} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {18650 0.0220 205.15} {44214 0.0440 767.56} {69784 0.0660 1892.64} {96870 0.0880 3680.32} {122428 0.1023 5929.42} {625372 0.1133 57380.59} {750442 0.1243 71551.02} {1000000 0.1353 102571.08} {1250738 0.1463 136495.93} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {18663 0.0220 205.29} {44217 0.0440 767.48} {56999 0.0660 1329.89} {70542 0.0880 2223.73} {83324 0.1023 3348.55} {425251 0.1133 38327.68} {510303 0.1243 47964.07} {850503 0.1353 90250.93} {1000000 0.1463 110477.87} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method GA-20220101 {TaxableWages} { debugLog "--- Georgia Tax Calculation (20220101) ---"; ::set DESC "Georgia Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "GA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Standard 0; ::set Personal 3000; ::set Dependant 3000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set TotalAllowance 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable+$Supp]; ::switch -- $MaritalStatus { zero - single - head-of-household {::set Standard 5400;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Standard 3550;} married-filing-jointly-one-spouse-working {::set Standard 7100;} } ::switch -- $MaritalStatus { zero - single - head-of-household {::set Personal 2700;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Personal 3700;} married-filing-jointly-one-spouse-working {::set Personal 7400;} } ::set TotalAllowance [::expr $Personal+$Exemptions*$Dependant-3000]; ::if {$MaritalStatus eq "zero"} { ::set Taxable [::expr $Taxable-$Standard]; } else { ::set Taxable [::expr $Taxable-$Standard-$TotalAllowance]; } ::if {$Taxable<0} { ::set Taxable 0 }; ::switch -- $MaritalStatus { zero - single { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0.00}; ::if {$Taxable>=750} {::set Base 750;::set Rate .02;::set Flat 7.50}; ::if {$Taxable>=2250} {::set Base 2250;::set Rate .03;::set Flat 37.50}; ::if {$Taxable>=3750} {::set Base 3750;::set Rate .04;::set Flat 82.50}; ::if {$Taxable>=5250} {::set Base 5250;::set Rate .05;::set Flat 142.50}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .0575;::set Flat 230.00}; } married-filing-separately - married-filing-jointly-both-spouses-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=500} {::set Base 500;::set Rate .02;::set Flat 5}; ::if {$Taxable>=1500} {::set Base 1500;::set Rate .03;::set Flat 25}; ::if {$Taxable>=2500} {::set Base 2500;::set Rate .04;::set Flat 55}; ::if {$Taxable>=3500} {::set Base 3500;::set Rate .05;::set Flat 95}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .0575;::set Flat 170}; } head-of-household - married-filing-jointly-one-spouse-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=1000} {::set Base 1000;::set Rate .02;::set Flat 10}; ::if {$Taxable>=3000} {::set Base 3000;::set Rate .03;::set Flat 50}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .04;::set Flat 110}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .05;::set Flat 190}; ::if {$Taxable>=10000} {::set Base 10000;::set Rate .0575;::set Flat 340}; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Taxable<0} {::set Taxable 0;} ::set Result [round2 $Tax]; ::return $Result; } method ID-20220101 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20220101) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3154; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=12550} {::set Base 12550;::set Rate 0.010;::set Flat 0;} ::if {$Taxable>=14138} {::set Base 14138;::set Rate 0.031;::set Flat 16;} ::if {$Taxable>=17313} {::set Base 17313;::set Rate 0.045;::set Flat 114;} ::if {$Taxable>=18901} {::set Base 18901;::set Rate 0.055;::set Flat 185;} ::if {$Taxable>=20489} {::set Base 20489;::set Rate 0.065;::set Flat 272;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=25100} {::set Base 25100;::set Rate 0.010;::set Flat 0;} ::if {$Taxable>=28276} {::set Base 28276;::set Rate 0.031;::set Flat 32;} ::if {$Taxable>=34626} {::set Base 34626;::set Rate 0.045;::set Flat 229;} ::if {$Taxable>=37802} {::set Base 37802;::set Rate 0.055;::set Flat 372;} ::if {$Taxable>=40978} {::set Base 40978;::set Rate 0.065;::set Flat 547;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method IL-20220101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20220101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2425; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IA-20220101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 2210; } else { ::set MAXIMUM 5450; } ::set EXEMPT1 40; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $TaxableWages-$FEDERAL]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set STANDARD $MAXIMUM; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0033;::set FLAT 0.00;} ::if {$TAXABLE>=1743} {::set BASE 1743;::set RATE .0067;::set FLAT 5.75;} ::if {$TAXABLE>=3486} {::set BASE 3486;::set RATE .0225;::set FLAT 17.43;} ::if {$TAXABLE>=6972} {::set BASE 6972;::set RATE .0414;::set FLAT 95.87;} ::if {$TAXABLE>=15687} {::set BASE 15684;::set RATE .0563;::set FLAT 456.67;} ::if {$TAXABLE>=26145} {::set BASE 26145;::set RATE .0596;::set FLAT 1045.46;} ::if {$TAXABLE>=34860} {::set BASE 34860;::set RATE .0625;::set FLAT 1564.87;} ::if {$TAXABLE>=52290} {::set BASE 52290;::set RATE .0744;::set FLAT 2654.25;} ::if {$TAXABLE>=78435} {::set BASE 78435;::set RATE .0853;::set FLAT 4599.44;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20220101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2770; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .05; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MD-20220101 {TaxableWages} { debugLog "--- Maryland Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MD"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 3200.00; ::set BASE 0; ::set FLAT 0; ::set RATE 0.02; ::set Perc [payCodeValueGet ".percent"]; ::if {$Perc eq ""} {::set Perc 0;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { single - married-filing-separately - dependant-taxpayer { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {100000 .0500 4697.5} {125000 .0525 5947.5} {150000 .0550 7360.0} {250000 .0575 12760.0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } married-filing-jointly - head-of-household - qualifying-widow/widower { ::foreach Range { {1000 .0300 20.0} {2000 .0400 50.0} {3000 .0475 90.0} {150000 .0500 7072.5} {175000 .0525 8322.5} {225000 .0550 10947.5} {300000 .0575 15072.5} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing MD state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20220101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20220101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4450; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=85850} { ::set Phase [::expr $Taxable-85850]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*10100]; } else { ::set Phase 10100; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-10100]; } } "married" { ::if {$Taxable>=171700} { ::set Phase [::expr $Taxable-171700]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*23050]; } else { ::set Phase 23050; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-23050]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=23000} {::set Base 23000;::set Rate 0.0675;::set Flat 1334;} ::if {$Taxable>=54450} {::set Base 54450;::set Rate 0.0715;::set Flat 3457;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=46000} {::set Base 46000;::set Rate 0.0675;::set Flat 2668;} ::if {$Taxable>=108900} {::set Base 108900;::set Rate 0.0715;::set Flat 6914;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MI-20220101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20220101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 5000.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20220101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4450; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=32080} {::set BASE 32080;::set RATE 0.0680;::set FLAT 1502.28;} ::if {$TAXABLE>=96230} {::set BASE 96230;::set RATE 0.0785;::set FLAT 5864.48;} ::if {$TAXABLE>=175220} {::set BASE 175220;::set RATE 0.0985;::set FLAT 12065.20;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=12450} {::set BASE 12000;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=53500} {::set BASE 53500;::set RATE 0.0680;::set FLAT 2196.18;} ::if {$TAXABLE>=175510} {::set BASE 175510;::set RATE 0.0785;::set FLAT 10492.86;} ::if {$TAXABLE>=297260} {::set BASE 297260;::set RATE 0.0985;::set FLAT 20050.24;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20220101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 12950; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 25900; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 19400; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 12950; } else { ::set MaritalStatus "single"; ::set STANDARD 12950; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1121} {::set BASE 1121;::set RATE .020;::set FLAT [::expr $FLAT+17];} ::if {$TAXABLE>2242} {::set BASE 2242;::set RATE .025;::set FLAT [::expr $FLAT+22];} ::if {$TAXABLE>3363} {::set BASE 3363;::set RATE .030;::set FLAT [::expr $FLAT+28];} ::if {$TAXABLE>4484} {::set BASE 4484;::set RATE .035;::set FLAT [::expr $FLAT+34];} ::if {$TAXABLE>5605} {::set BASE 5605;::set RATE .040;::set FLAT [::expr $FLAT+39];} ::if {$TAXABLE>6726} {::set BASE 6726;::set RATE .045;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>7847} {::set BASE 7847;::set RATE .050;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>8968} {::set BASE 8968;::set RATE .053;::set FLAT [::expr $FLAT+56];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NC-20220101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 19125; } default { ::set STANDARD 12750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0509; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NE-20220101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2080; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2975} {::set BASE 2975;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=5820} {::set BASE 5820;::set RATE 0.0322;::set FLAT 64.30;} ::if {$TAXABLE>=18900} {::set BASE 18900;::set RATE 0.0491;::set FLAT 485.48;} ::if {$TAXABLE>=27390} {::set BASE 27390;::set RATE 0.0620;::set FLAT 902.34;} ::if {$TAXABLE>=34780} {::set BASE 34780;::set RATE 0.0659;::set FLAT 1360.52;} ::if {$TAXABLE>=65310} {::set BASE 65310;::set RATE 0.0695;::set FLAT 3372.45;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7100} {::set BASE 7100;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=11270} {::set BASE 11270;::set RATE 0.0322;::set FLAT 94.24;} ::if {$TAXABLE>=28070} {::set BASE 28070;::set RATE 0.0491;::set FLAT 635.2;} ::if {$TAXABLE>=43670} {::set BASE 43670;::set RATE 0.0620;::set FLAT 1401.16;} ::if {$TAXABLE>=54180} {::set BASE 54180;::set RATE 0.0659;::set FLAT 2052.78;} ::if {$TAXABLE>=71850} {::set BASE 71850;::set RATE 0.0695;::set FLAT 3217.23;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NM-20220101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20220101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 0; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=6475} {::set Base 6475;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=11975} {::set Base 11975;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=17475} {::set Base 17475;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=22475} {::set Base 22475;::set Rate 0.049;::set Flat 504.50;} ::if {$Taxable>=216475} {::set Base 216475;::set Rate 0.059;::set Flat 10010.50;} } "married" { ::if {$Taxable>=12950} {::set Base 12950;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=20950} {::set Base 20950;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=28950} {::set Base 28950;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=36950} {::set Base 36950;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=327950} {::set Base 327950;::set Rate 0.059;::set Flat 15027.00;} } "head-of-household" { ::if {$Taxable>=9700} {::set Base 9700;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=17700} {::set Base 17700;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=25700} {::set Base 25700;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=33700} {::set Base 33700;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=324700} {::set Base 324700;::set Rate 0.059;::set Flat 15027.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20220101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20220101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0585 600} {80650 .0625 4504} {96800 .0732 5514} {107650 .0782 6308} {157650 .0675 10219} {215400 .0994 14117} {265400 .0735 19085} {1077550 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0585 600} {80650 .0625 4504} {96800 .0711 5514} {107650 .0761 6285} {157650 .0804 10090} {211550 .0675 14425} {323200 .1123 21961} {373200 .0735 27576} {1077550 .0765 79346} {2155350 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method ND-20220101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4300; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=6475} {::set BASE 6475;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=48250} {::set BASE 48250;::set RATE 0.0204;::set FLAT 459.53;} ::if {$TAXABLE>=107525} {::set BASE 107525;::set RATE 0.0227;::set FLAT 1668.74;} ::if {$TAXABLE>=217300} {::set BASE 217300;::set RATE 0.0264;::set FLAT 4160.63;} ::if {$TAXABLE>=464825} {::set BASE 464825;::set RATE 0.0290;::set FLAT 10695.29;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=12950} {::set BASE 12950;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=47800} {::set BASE 47800;::set RATE 0.0204;::set FLAT 383.35;} ::if {$TAXABLE>=97175} {::set BASE 97175;::set RATE 0.0227;::set FLAT 1390.60;} ::if {$TAXABLE>=141275} {::set BASE 141275;::set RATE 0.0264;::set FLAT 2391.67;} ::if {$TAXABLE>=242125} {::set BASE 242125;::set RATE 0.0290;::set FLAT 5054.11;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OK-20220101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0.00;} ::if {$TAXABLE>6350} {::set BASE 6350;::set RATE 0.0025;::set FLAT 0.00;} ::if {$TAXABLE>7350} {::set BASE 7350;::set RATE 0.0075;::set FLAT 2.50;} ::if {$TAXABLE>8850} {::set BASE 8850;::set RATE 0.0175;::set FLAT 13.75;} ::if {$TAXABLE>10100} {::set BASE 10100;::set RATE 0.0275;::set FLAT 35.63;} ::if {$TAXABLE>11250} {::set BASE 11250;::set RATE 0.0375;::set FLAT 67.25;} ::if {$TAXABLE>13550} {::set BASE 13550;::set RATE 0.0475;::set FLAT 153.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0000;::set FLAT 0.00;} ::if {$TAXABLE>12700} {::set BASE 12700;::set RATE 0.0025;::set FLAT 0.00;} ::if {$TAXABLE>14700} {::set BASE 14700;::set RATE 0.0075;::set FLAT 5.00;} ::if {$TAXABLE>17700} {::set BASE 17700;::set RATE 0.0175;::set FLAT 27.50;} ::if {$TAXABLE>20200} {::set BASE 20200;::set RATE 0.0275;::set FLAT 71.25;} ::if {$TAXABLE>22500} {::set BASE 22500;::set RATE 0.0375;::set FLAT 134.50;} ::if {$TAXABLE>24900} {::set BASE 24900;::set RATE 0.0475;::set FLAT 224.50;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20220101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20220101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 7250.00; ::set PERSONAL 219.00; ::set STANDARD 2420.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 4840; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2420; ::if {$Annual>=50000} {::set MAXIMUM 7250;} ::if {$Annual>=125000} {::set MAXIMUM 5800;} ::if {$Annual>=130000} {::set MAXIMUM 4350;} ::if {$Annual>=135000} {::set MAXIMUM 2900;} ::if {$Annual>=140000} {::set MAXIMUM 1450;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4840; ::if {$Annual>=50000} {::set MAXIMUM 7250;} ::if {$Annual>=250000} {::set MAXIMUM 5800;} ::if {$Annual>=260000} {::set MAXIMUM 4350;} ::if {$Annual>=270000} {::set MAXIMUM 2900;} ::if {$Annual>=280000} {::set MAXIMUM 1450;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3750} {::set BASE 3750;::set RATE 0.0675;::set FLAT 397;} ::if {$TAXABLE>9450} {::set BASE 9450;::set RATE 0.0875;::set FLAT 782;} } else { ::if {$TAXABLE>7500} {::set BASE 7500;::set RATE 0.0675;::set FLAT 575;} ::if {$TAXABLE>18900} {::set BASE 18900;::set RATE 0.0875;::set FLAT 1345;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>40330} {::set BASE 40330;::set RATE 0.0875;::set FLAT 563;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 10674;} } else { ::if {$TAXABLE>37910} {::set BASE 37910;::set RATE 0.0875;::set FLAT 1126;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 21347;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method SC-20220101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20220101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2750; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 4580;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .02;::set Flat 0;} ::if {$Taxable>=2980} {::set Base 2980;::set Rate .03;::set Flat 83.44;} ::if {$Taxable>=5960} {::set Base 5960;::set Rate .04;::set Flat 143.04;} ::if {$Taxable>=8940} {::set Base 8940;::set Rate .05;::set Flat 232.44;} ::if {$Taxable>=11920} {::set Base 11920;::set Rate .06;::set Flat 351.64;} ::if {$Taxable>=14900} {::set Base 14900;::set Rate .07;::set Flat 500.64;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method WI-20220101 {TaxableWages} { debugLog "--- Wisconsin Tax Calculation (20220101) ---"; ::set DESC "WI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 400; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set BASE 0; ::set RATE 0.0354; ::set FLAT 0; ::switch -- $MaritalStatus { single { ::if {$TAXABLE<17780} {::set DEDUCT 6702;} ::if {$TAXABLE>=17780&&$TAXABLE<73630} {::set DEDUCT [::expr {6702-($TAXABLE-17780)*0.12}];} ::if {$TAXABLE>=73630} {::set DEDUCT 0;} } married { ::if {$TAXABLE<25727} {::set DEDUCT 9461;} ::if {$TAXABLE>=25727&&$TAXABLE<73032} {::set DEDUCT [::expr {9461-($TAXABLE-25727)*0.20}];} ::if {$TAXABLE>=73032} {::set DEDUCT 0;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing WI state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set TAXABLE [::expr {$TAXABLE-$DEDUCT}]; ::set EXEMPT [ ::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr {$TAXABLE-$EXEMPT}]; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$TAXABLE>=12760} {::set BASE 12760;::set RATE .0465;::set FLAT 451.70;} ::if {$TAXABLE>=25520} {::set BASE 25520;::set RATE .0530;::set FLAT 1045.04;} ::if {$TAXABLE>=280950} {::set BASE 280950;::set RATE .0765;::set FLAT 14582.83;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20220101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20220101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0585 600} {80650 .0625 4504} {96800 .0732 5514} {107650 .0782 6308} {157650 .0675 10219} {215400 .0994 14117} {265400 .0735 19085} {1077550 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0585 600} {80650 .0625 4504} {96800 .0711 5514} {107650 .0761 6285} {157650 .0804 10090} {211550 .0675 14525} {323200 .1123 21961} {373200 .0735 27576} {1077550 .0765 79346} {2155350 .1045 0} {5000000 .1110 0} {25000000 .1170 0} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method AL-20210101 {TaxableWages} { debugLog "--- Alabama Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::switch -- $MaritalStatus { "married" {::set MaritalStatus "married-filing-jointly";} "head-of-household" {::set MaritalStatus "head-of-family";} "zero" {::set MaritalStatus "single";} } ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AL"] ""]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { "single" { ::if {$Taxable<=23499} { ::set STANDARD "2500"; } else { ::if {$Taxable <= 33000} { ::set Tmp1 [::expr $Taxable-23499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*25]; ::set STANDARD [::expr 2500-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-separately" { ::if {$Taxable<=10749} { ::set STANDARD "3750"; } else { ::if {$Taxable <= 15500} { ::set Tmp1 [::expr $Taxable-10749]; ::set Tmp1 [::expr round(($Tmp1/250.0)+.5)]; ::set Tmp1 [::expr $Tmp1*88]; ::set STANDARD [::expr 3750-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-jointly" { ::if {$Taxable<=23499} { ::set STANDARD "7500"; } else { ::if {$Taxable <= 33000} { ::set Tmp1 [::expr $Taxable-23499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*175]; ::set STANDARD [::expr 7500-$Tmp1]; } else { ::set STANDARD 4000; } } } "head-of-family" { ::if {$Taxable<=23499} { ::set STANDARD "4700"; } else { ::if {$Taxable <= 33000} { ::set Tmp1 [::expr $Taxable-23499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*135]; ::set STANDARD [::expr 4700-$Tmp1]; } else { ::set STANDARD 2000; } } } } ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::switch -- $MaritalStatus { "zero" {::set PERSONAL 0.00;} "single" - "married-filing-separately" {::set PERSONAL 1500;} "head-of-family" - "married-filing-jointly" {::set PERSONAL 3000;} }; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 0.0; ::if {$Taxable<=20000} { ::set DEPEND [::expr $Exemptions*1000]; } else { ::if {$Taxable<=100000} { ::set DEPEND [::expr $Exemptions*500]; } else { ::set DEPEND [::expr $Exemptions*300]; } } ::set Taxable [::expr $Taxable-$STANDARD]; ;#// A - Standard Deduction ::set Taxable [::expr $Taxable-$FEDERAL]; ;#// B - Federal Tax ::set Taxable [::expr $Taxable-$PERSONAL]; ;#// C - Personal Exemption ::set Taxable [::expr $Taxable-$DEPEND]; ;#// D - Dependants ::if {$Taxable<=0.00} {::return 0.00;} ::set BASE 0;::set RATE 0.02;::set FLAT 0; ::switch -- $MaritalStatus { "zero" - "single" - "married-filing-separately" - "head-of-family" { ::if {$Taxable>500} {::set BASE 500;::set RATE .02;::set FLAT [::expr $FLAT+10];} ::if {$Taxable>2500} {::set BASE 2500;::set RATE .04;::set FLAT [::expr $FLAT+100];} ::if {$Taxable>3000} {::set BASE 3000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } "married-filing-jointly" { ::if {$Taxable>1000} {::set BASE 1000;::set RATE .02;::set FLAT [::expr $FLAT+20];} ::if {$Taxable>5000} {::set BASE 5000;::set RATE .04;::set FLAT [::expr $FLAT+200];} ::if {$Taxable>6000} {::set BASE 6000;::set RATE .05;::set FLAT [::expr $FLAT+0];} } }; ::set Result [::expr $Taxable-$BASE]; ::set Result [::expr $Result*$RATE]; ::set Result [::expr $Result+$FLAT]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20210101 {TaxableWages} { debugLog "--- California Tax Calculation (20210101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=15267} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=30534} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=15267} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=30534} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4537;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 9074;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4601; } else { ::set Standard 9202; } } ::set Regular 136.40; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {8932 0.0220 98.25} {21175 0.0440 367.60} {33421 0.0660 906.42} {46394 0.0880 1762.64} {58634 0.1023 2839.76} {299508 0.1133 27481.17} {359407 0.1243 34267.73} {599012 0.1353 64050.63} {1000000 0.1463 118304.31} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {17864 0.0220 196.50} {42350 0.0440 735.19} {66842 0.0660 1812.84} {92788 0.0880 3525.28} {117268 0.1023 5679.53} {599016 0.1133 54962.34} {718814 0.1243 68535.45} {1000000 0.1353 103486.84} {1198024 0.1463 130279.52} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {17876 0.0220 196.64} {42353 0.0440 735.13} {54597 0.0660 1273.87} {67569 0.0880 2130.02} {79812 0.1023 3207.40} {407329 0.1133 36712.39} {488796 0.1243 45942.60} {814658 0.1353 86447.25} {1000000 0.1463 111524.02} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method IL-20210101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20210101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2375; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MI-20210101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20210101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 4900.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20210101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4350; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3825} {::set BASE 3825;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=31055} {::set BASE 31055;::set RATE 0.0680;::set FLAT 1456.81;} ::if {$TAXABLE>=93265} {::set BASE 93265;::set RATE 0.0785;::set FLAT 5687.09;} ::if {$TAXABLE>=169865} {::set BASE 169865;::set RATE 0.0985;::set FLAT 11700.19;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=12000} {::set BASE 12000;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=51810} {::set BASE 51810;::set RATE 0.0680;::set FLAT 2129.84;} ::if {$TAXABLE>=170140} {::set BASE 170140;::set RATE 0.0785;::set FLAT 10176.28;} ::if {$TAXABLE>=288200} {::set BASE 288200;::set RATE 0.0985;::set FLAT 19443.99;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20210101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20210101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 0; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=6225} {::set Base 6225;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=11775} {::set Base 11775;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=17275} {::set Base 17275;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=22275} {::set Base 22200;::set Rate 0.049;::set Flat 504.50;} ::if {$Taxable>=216275} {::set Base 216275;::set Rate 0.059;::set Flat 10010.50;} } "married" { ::if {$Taxable>=12550} {::set Base 12550;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=20550} {::set Base 20550;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=28550} {::set Base 28550;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=36550} {::set Base 36550;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=327550} {::set Base 327550;::set Rate 0.059;::set Flat 15027.00;} } "head-of-household" { ::if {$Taxable>=9400} {::set Base 9400;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=17400} {::set Base 17400;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=25400} {::set Base 25400;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=33400} {::set Base 33400;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=324400} {::set Base 324400;::set Rate 0.059;::set Flat 15027.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method OR-20210101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 7050.00; ::set PERSONAL 213.00; ::set STANDARD 2350.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 4700; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2350; ::if {$Annual>=50000} {::set MAXIMUM 7050;} ::if {$Annual>=125000} {::set MAXIMUM 5650;} ::if {$Annual>=130000} {::set MAXIMUM 4200;} ::if {$Annual>=135000} {::set MAXIMUM 2800;} ::if {$Annual>=140000} {::set MAXIMUM 1400;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4700; ::if {$Annual>=50000} {::set MAXIMUM 7050;} ::if {$Annual>=250000} {::set MAXIMUM 5650;} ::if {$Annual>=260000} {::set MAXIMUM 4200;} ::if {$Annual>=270000} {::set MAXIMUM 2800;} ::if {$Annual>=280000} {::set MAXIMUM 1400;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3650} {::set BASE 3650;::set RATE 0.0675;::set FLAT 386;} ::if {$TAXABLE>9200} {::set BASE 9200;::set RATE 0.0875;::set FLAT 761;} } else { ::if {$TAXABLE>7300} {::set BASE 7300;::set RATE 0.0675;::set FLAT 560;} ::if {$TAXABLE>18400} {::set BASE 18400;::set RATE 0.0875;::set FLAT 1309;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>40600} {::set BASE 40600;::set RATE 0.0875;::set FLAT 548;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 10681;} } else { ::if {$TAXABLE>38250} {::set BASE 38250;::set RATE 0.0875;::set FLAT 1096;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 21361;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20210101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20210101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>234750} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=66200} {::set BASE 66200;::set RATE 0.0475;::set FLAT 2482.50;} ::if {$TAXABLE>=150550} {::set BASE 150550;::set RATE 0.0599;::set FLAT 6489.13} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20210101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20210101) ---"; ::set ALLOW 4400; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3175} {::set BASE 3175;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=44125} {::set BASE 44125;::set RATE 0.0660;::set FLAT 1371.83;} ::if {$TAXABLE>=102375} {::set BASE 102375;::set RATE 0.0760;::set FLAT 5216.33;} ::if {$TAXABLE>=210125} {::set BASE 210125;::set RATE 0.0875;::set FLAT 13405.33;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=9525} {::set BASE 9525;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=77925} {::set BASE 77925;::set RATE 0.0660;::set FLAT 2291.40;} ::if {$TAXABLE>=174875} {::set BASE 174875;::set RATE 0.0760;::set FLAT 8690.10;} ::if {$TAXABLE>=261475} {::set BASE 261475;::set RATE 0.0875;::set FLAT 15271.70;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20210101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20210101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {12200 0.100 0.00} {32100 0.120 1990.00} {93250 0.220 9328.00} {184950 0.240 29502.00} {342050 0.320 67206.00} {431050 0.350 95686.00} {640500 0.370 168993.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {3950 0.100 0.00} {13900 0.120 995.00} {44475 0.220 4664.00} {90325 0.240 14751.00} {168875 0.320 33603.00} {213375 0.350 47843.00} {527550 0.370 157804.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {10200 0.100 0.00} {24400 0.120 1420.00} {64400 0.220 6220.00} {96550 0.240 13293.00} {175100 0.320 32145.00} {219600 0.350 46385.00} {533800 0.370 156355.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method AR-20210101 {TaxableWages} { debugLog "--- Arkansas Tax Calculation (20210101) ---"; ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 29; ;#// Exemption for dependents ::set STANDARD 2200; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.009;::set FLAT 0;} ::if {$TAXABLE>=4700} {::set BASE 4700;::set RATE 0.020;::set FLAT 93.98;} ::if {$TAXABLE>=9200} {::set BASE 9200;::set RATE 0.030;::set FLAT 185.97;} ::if {$TAXABLE>=13900} {::set BASE 13900;::set RATE 0.034;::set FLAT 241.57;} ::if {$TAXABLE>=22900} {::set BASE 22900;::set RATE 0.050;::set FLAT 427.71;} ::if {$TAXABLE>=38500} {::set BASE 38500;::set RATE 0.059;::set FLAT 774.20;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IA-20210101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 2130; } else { ::set MAXIMUM 5240; } ::set EXEMPT1 40; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $TaxableWages-$FEDERAL]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set STANDARD $MAXIMUM; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0033;::set FLAT 0.00;} ::if {$TAXABLE>=1676} {::set BASE 1676;::set RATE .0067;::set FLAT 5.53;} ::if {$TAXABLE>=3352} {::set BASE 3352;::set RATE .0225;::set FLAT 16.76;} ::if {$TAXABLE>=6704} {::set BASE 6704;::set RATE .0414;::set FLAT 92.18;} ::if {$TAXABLE>=15084} {::set BASE 15084;::set RATE .0563;::set FLAT 439.11;} ::if {$TAXABLE>=25140} {::set BASE 25140;::set RATE .0596;::set FLAT 1005.26;} ::if {$TAXABLE>=33520} {::set BASE 33520;::set RATE .0625;::set FLAT 1504.71;} ::if {$TAXABLE>=50280} {::set BASE 50280;::set RATE .0744;::set FLAT 2552.21;} ::if {$TAXABLE>=75420} {::set BASE 75420;::set RATE .0853;::set FLAT 4422.63;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20210101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2690; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .05; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20210101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20210101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4300; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=83850} { ::set Phase [::expr $Taxable-83850]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*9700]; } else { ::set Phase 9700; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-9700]; } } "married" { ::if {$Taxable>=167700} { ::set Phase [::expr $Taxable-167700]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*22250]; } else { ::set Phase 22250; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-22250]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=22450} {::set Base 22450;::set Rate 0.0675;::set Flat 1302;} ::if {$Taxable>=53150} {::set Base 53150;::set Rate 0.0715;::set Flat 3374;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=44950} {::set Base 44950;::set Rate 0.0675;::set Flat 2607;} ::if {$Taxable>=106350} {::set Base 106350;::set Rate 0.0715;::set Flat 6752;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MO-20210101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 12550; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 25100; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 18800; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 12550; } else { ::set MaritalStatus "single"; ::set STANDARD 12550; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1073} {::set BASE 1073;::set RATE .020;::set FLAT [::expr $FLAT+16];} ::if {$TAXABLE>2146} {::set BASE 2146;::set RATE .025;::set FLAT [::expr $FLAT+21];} ::if {$TAXABLE>3219} {::set BASE 3219;::set RATE .030;::set FLAT [::expr $FLAT+27];} ::if {$TAXABLE>4292} {::set BASE 4292;::set RATE .035;::set FLAT [::expr $FLAT+32];} ::if {$TAXABLE>5365} {::set BASE 5365;::set RATE .040;::set FLAT [::expr $FLAT+38];} ::if {$TAXABLE>6438} {::set BASE 6438;::set RATE .045;::set FLAT [::expr $FLAT+43];} ::if {$TAXABLE>7511} {::set BASE 7511;::set RATE .050;::set FLAT [::expr $FLAT+48];} ::if {$TAXABLE>8584} {::set BASE 8584;::set RATE .054;::set FLAT [::expr $FLAT+54];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ND-20210101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20210101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4300; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=6275} {::set BASE 6275;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=46800} {::set BASE 46800;::set RATE 0.0204;::set FLAT 445.78;} ::if {$TAXABLE>=104375} {::set BASE 104375;::set RATE 0.0227;::set FLAT 1620.31;} ::if {$TAXABLE>=210950} {::set BASE 210950;::set RATE 0.0264;::set FLAT 4039.56;} ::if {$TAXABLE>=451275} {::set BASE 451275;::set RATE 0.0290;::set FLAT 10384.14;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=12750} {::set BASE 12750;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=46600} {::set BASE 46600;::set RATE 0.0204;::set FLAT 372.35;} ::if {$TAXABLE>=94525} {::set BASE 94525;::set RATE 0.0227;::set FLAT 1350.02;} ::if {$TAXABLE>=137325} {::set BASE 137325;::set RATE 0.0264;::set FLAT 2321.58;} ::if {$TAXABLE>=235250} {::set BASE 235250;::set RATE 0.0290;::set FLAT 4906.80;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NJ-20210101 {TaxableWages} { debugLog "--- New Jersey Tax Calculation (20210101) ---"; ::set Desc "NJ Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NJ"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 1000; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Allow [::expr $Exemptions*$Allow]; # Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .039;::set Flat 600;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .061;::set Flat 795;} ::if {$Taxable>=75000} {::set Base 75000;::set Rate .070;::set Flat 2930;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 32680;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate .118;::set Flat 82180;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .027;::set Flat 900;} ::if {$Taxable>=70000} {::set Base 70000;::set Rate .039;::set Flat 1440;} ::if {$Taxable>=80000} {::set Base 80000;::set Rate .061;::set Flat 1830;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .070;::set Flat 6100;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30600;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate .118;::set Flat 80100;} } ::if {$MaritalStatus eq "new-jersey-rate-c"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .023;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .028;::set Flat 760;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .035;::set Flat 1040;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1390;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .066;::set Flat 6430;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29530;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate .118;::set Flat 79030;} } ::if {$MaritalStatus eq "new-jersey-rate-d"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .027;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .034;::set Flat 840;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .043;::set Flat 1180;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1610;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .065;::set Flat 6650;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29400;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate .118;::set Flat 78900;} } ::if {$MaritalStatus eq "new-jersey-rate-e"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .058;::set Flat 600;} ::if {$Taxable>=100000} {::set Base 100000;::set Rate .065;::set Flat 4370;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30370;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate .118;::set Flat 79870;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20210101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20210101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0597 1042} {80650 .0633 4579} {96800 .0738 5602} {107650 .0788 6402} {157650 .0683 10342} {215400 .0959 14287} {265400 .0735 19082} {1077550 .5208 78775} {1127550 .0962 104815} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0597 1042} {80650 .0633 4579} {96800 .0728 5602} {107650 .0778 6391} {157650 .0799 10281} {211550 .0683 14588} {323200 .1071 22414} {373200 .0735 27569} {1077550 .0765 79338} {2155350 .9454 161790} {2205350 .0962 209060} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method SC-20210101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20210101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2670; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 3900;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .011;::set Flat 0;} ::if {$Taxable>=2800} {::set Base 2800;::set Rate .03;::set Flat 70.00;} ::if {$Taxable>=5610} {::set Base 5610;::set Rate .04;::set Flat 126.10;} ::if {$Taxable>=8410} {::set Base 8410;::set Rate .05;::set Flat 210.20;} ::if {$Taxable>=11220} {::set Base 11220;::set Rate .06;::set Flat 322.40;} ::if {$Taxable>=14030} {::set Base 14030;::set Rate .07;::set Flat 462.70;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method 50-20210101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20210101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0597 1042} {80650 .0633 4579} {96800 .0738 5602} {107650 .0788 6402} {157650 .0683 10342} {215400 .0959 14287} {265400 .0735 19082} {1077550 .5208 78775} {1127550 .0962 104815} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0597 1042} {80650 .0633 4579} {96800 .0728 5602} {107650 .0778 6391} {157650 .0799 10281} {211550 .0683 14588} {323200 .1071 22414} {373200 .0735 27569} {1077550 .0765 79338} {2155350 .9454 161790} {2205250 .0962 209060} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method AR-20200701 {TaxableWages} { debugLog "--- Arkansas Tax Calculation (20200701) ---"; ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 26; ;#// Exemption for dependents ::set STANDARD 2200; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.009;::set FLAT 0;} ::if {$TAXABLE>=4600} {::set BASE 4600;::set RATE 0.020;::set FLAT 91.98;} ::if {$TAXABLE>=9100} {::set BASE 9100;::set RATE 0.030;::set FLAT 182.97;} ::if {$TAXABLE>=13700} {::set BASE 13700;::set RATE 0.034;::set FLAT 237.77;} ::if {$TAXABLE>=22600} {::set BASE 22600;::set RATE 0.050;::set FLAT 421.46;} ::if {$TAXABLE>=37900} {::set BASE 37900;::set RATE 0.059;::set FLAT 762.55;} ::if {$TAXABLE>=80801} {::set BASE 80801;::set RATE 0.066;::set FLAT 1243.40;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ID-20200701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20200701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 2960; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=12400} {::set Base 12400;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=13968} {::set Base 13968;::set Rate 0.03125;::set Flat 18;} ::if {$Taxable>=15536} {::set Base 15536;::set Rate 0.03625;::set Flat 67;} ::if {$Taxable>=17104} {::set Base 17104;::set Rate 0.04625;::set Flat 124;} ::if {$Taxable>=18672} {::set Base 18672;::set Rate 0.05625;::set Flat 197;} ::if {$Taxable>=20240} {::set Base 20240;::set Rate 0.06625;::set Flat 285;} ::if {$Taxable>=24160} {::set Base 24160;::set Rate 0.06925;::set Flat 545;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=24800} {::set Base 24800;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=27936} {::set Base 27936;::set Rate 0.03125;::set Flat 35;} ::if {$Taxable>=31072} {::set Base 31072;::set Rate 0.03625;::set Flat 133;} ::if {$Taxable>=34208} {::set Base 34208;::set Rate 0.04625;::set Flat 247;} ::if {$Taxable>=37344} {::set Base 37344;::set Rate 0.05625;::set Flat 392;} ::if {$Taxable>=40480} {::set Base 40480;::set Rate 0.06625;::set Flat 568;} ::if {$Taxable>=48320} {::set Base 48320;::set Rate 0.06925;::set Flat 1087;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method ME-20200101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20200101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4300; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=82900} { ::set Phase [::expr $Taxable-82900]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*9550]; } else { ::set Phase 9550; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-9550]; } } "married" { ::if {$Taxable>=165800} { ::set Phase [::expr $Taxable-165800]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*21950]; } else { ::set Phase 21950; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-21950]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=22200} {::set Base 22200;::set Rate 0.0675;::set Flat 1288;} ::if {$Taxable>=52600} {::set Base 52600;::set Rate 0.0715;::set Flat 3340;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=44450} {::set Base 44450;::set Rate 0.0675;::set Flat 2578;} ::if {$Taxable>=105200} {::set Base 105200;::set Rate 0.0715;::set Flat 6679;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MA-20200101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::qw::number::var::negative Total_FICA_MEDI; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD $MAXIMUM; } else { ::set STANDARD $Total_FICA_MEDI; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0500]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20200101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4300; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3800} {::set BASE 3800;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=30760} {::set BASE 30760;::set RATE 0.0680;::set FLAT 1442.36;} ::if {$TAXABLE>=92350} {::set BASE 92350;::set RATE 0.0785;::set FLAT 5630.48;} ::if {$TAXABLE>=168200} {::set BASE 168200;::set RATE 0.0985;::set FLAT 11584.71;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=11900} {::set BASE 11900;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=51310} {::set BASE 51310;::set RATE 0.0680;::set FLAT 2108.44;} ::if {$TAXABLE>=168470} {::set BASE 168470;::set RATE 0.0785;::set FLAT 10075.32;} ::if {$TAXABLE>=285370} {::set BASE 285370;::set RATE 0.0985;::set FLAT 19251.97;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20200101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20200101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4150; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=6200} {::set Base 6200;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=11700} {::set Base 11700;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=17200} {::set Base 17200;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=22200} {::set Base 22200;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=12400} {::set Base 12400;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=20400} {::set Base 20400;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=28400} {::set Base 28400;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=36400} {::set Base 36400;::set Rate 0.049;::set Flat 768.00;} } "head-of-household" { ::if {$Taxable>=9325} {::set Base 9325;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=17325} {::set Base 17325;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=25325} {::set Base 25325;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=33325} {::set Base 33325;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method OR-20200101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6950.00; ::set PERSONAL 210.00; ::set STANDARD 2315.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 4630; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2315; ::if {$Annual>=50000} {::set MAXIMUM 6950;} ::if {$Annual>=125000} {::set MAXIMUM 5550;} ::if {$Annual>=130000} {::set MAXIMUM 4150;} ::if {$Annual>=135000} {::set MAXIMUM 2750;} ::if {$Annual>=140000} {::set MAXIMUM 1350;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4630; ::if {$Annual>=50000} {::set MAXIMUM 6950;} ::if {$Annual>=250000} {::set MAXIMUM 5550;} ::if {$Annual>=260000} {::set MAXIMUM 4150;} ::if {$Annual>=270000} {::set MAXIMUM 2750;} ::if {$Annual>=280000} {::set MAXIMUM 1350;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3600} {::set BASE 3600;::set RATE 0.0675;::set FLAT 381;} ::if {$TAXABLE>9050} {::set BASE 9050;::set RATE 0.0875;::set FLAT 749;} } else { ::if {$TAXABLE>7200} {::set BASE 7200;::set RATE 0.0675;::set FLAT 552;} ::if {$TAXABLE>18100} {::set BASE 18100;::set RATE 0.0875;::set FLAT 1288;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>40735} {::set BASE 9050;::set RATE 0.0875;::set FLAT 539;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 10685;} } else { ::if {$TAXABLE>38420} {::set BASE 18100;::set RATE 0.0875;::set FLAT 1078;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 21369;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20200101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20200101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>231500} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=65250} {::set BASE 65250;::set RATE 0.0475;::set FLAT 2446.88;} ::if {$TAXABLE>=148350} {::set BASE 148350;::set RATE 0.0599;::set FLAT 6394.13} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20200101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20200101) ---"; ::set ALLOW 4350; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3125} {::set BASE 3125;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=43475} {::set BASE 43475;::set RATE 0.0660;::set FLAT 1351.73;} ::if {$TAXABLE>=100925} {::set BASE 100925;::set RATE 0.0760;::set FLAT 5143.43;} ::if {$TAXABLE>=207125} {::set BASE 207125;::set RATE 0.0875;::set FLAT 13214.63;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=9375} {::set BASE 9375;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=76825} {::set BASE 76825;::set RATE 0.0660;::set FLAT 2259.58;} ::if {$TAXABLE>=172375} {::set BASE 172375;::set RATE 0.0760;::set FLAT 8565.88;} ::if {$TAXABLE>=257725} {::set BASE 257725;::set RATE 0.0875;::set FLAT 15052.48;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20200101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20200101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "married" { ::foreach Range { {11900 0.100 0.00} {31650 0.120 1975.00} {92150 0.220 9235.00} {182950 0.240 29211.00} {338500 0.320 66543.00} {426600 0.350 94735.00} {633950 0.370 167307.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "single" { ::foreach Range { {3800 0.100 0.00} {13675 0.120 987.50} {43925 0.220 4617.50} {89325 0.240 14605.00} {167100 0.320 33271.00} {211150 0.350 47367.50} {522200 0.370 156235.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head of household" { ::foreach Range { {10050 0.100 0.00} {24150 0.120 1410.00} {63750 0.220 6162.00} {95550 0.240 13158.00} {173350 0.320 31830.00} {217400 0.350 45926.00} {528450 0.370 154793.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method 50-20200101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20200101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0609 1042} {80650 .0641 4650} {96800 .0745 5686} {107650 .0795 6494} {157650 .0691 10469} {215400 .0925 14459} {265400 .0735 19084} {1077550 .5208 78777} {1127550 .0962 104817} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0609 1042} {80650 .0641 4650} {96800 .0746 5686} {107650 .0796 6495} {157650 .0794 10475} {211550 .0691 14755} {323200 .1019 22470} {373200 .0735 27565} {1077550 .0765 79334} {2155350 .9454 161786} {2205250 .0962 209056} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method CA-20200101 {TaxableWages} { debugLog "--- California Tax Calculation (20200101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=15042} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=30083} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=15042} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=30083} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4537;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 9074;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4537; } else { ::set Standard 9074; } } ::set Regular 134.20; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {8809 0.0220 96.90} {20883 0.0440 362.53} {32960 0.0660 893.92} {45753 0.0880 1738.26} {57824 0.1023 2800.51} {295373 0.1133 27101.77} {354445 0.1243 33794.63} {590742 0.1353 63166.35} {1000000 0.1463 118538.96} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {17618 0.0220 193.80} {41766 0.0440 725.06} {65920 0.0660 1787.84} {91506 0.0880 3476.52} {115648 0.1023 5601.02} {590746 0.1133 54203.55} {708890 0.1243 67589.27} {1000000 0.1353 103774.24} {1181484 0.1463 128329.03} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {17629 0.0220 193.92} {41768 0.0440 724.98} {53843 0.0660 1256.28} {66636 0.0880 2100.62} {78710 0.1023 3163.13} {401705 0.1133 36205.52} {482047 0.1243 45308.27} {803410 0.1353 85253.69} {1000000 0.1463 111852.32} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method ID-20200101 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20200101) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 2960; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=12200} {::set Base 12200;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=13741} {::set Base 13741;::set Rate 0.03125;::set Flat 17;} ::if {$Taxable>=15281} {::set Base 15281;::set Rate 0.03625;::set Flat 65;} ::if {$Taxable>=16822} {::set Base 16822;::set Rate 0.04625;::set Flat 121;} ::if {$Taxable>=18362} {::set Base 18362;::set Rate 0.05625;::set Flat 192;} ::if {$Taxable>=19903} {::set Base 19903;::set Rate 0.06625;::set Flat 279;} ::if {$Taxable>=23754} {::set Base 23754;::set Rate 0.06925;::set Flat 534;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=24400} {::set Base 24400;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=27482} {::set Base 27482;::set Rate 0.03125;::set Flat 35;} ::if {$Taxable>=30562} {::set Base 30562;::set Rate 0.03625;::set Flat 131;} ::if {$Taxable>=33644} {::set Base 33644;::set Rate 0.04625;::set Flat 243;} ::if {$Taxable>=36724} {::set Base 36724;::set Rate 0.05625;::set Flat 385;} ::if {$Taxable>=39806} {::set Base 39806;::set Rate 0.06625;::set Flat 558;} ::if {$Taxable>=47508} {::set Base 47508;::set Rate 0.06925;::set Flat 1068;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method IA-20200101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 1880; } else { ::set MAXIMUM 4630; } ::set EXEMPT1 40; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $TaxableWages-$FEDERAL]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set STANDARD $MAXIMUM; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0033;::set FLAT 0.00;} ::if {$TAXABLE>=1480} {::set BASE 1480;::set RATE .0067;::set FLAT 4.88;} ::if {$TAXABLE>=2959} {::set BASE 2959;::set RATE .0225;::set FLAT 14.79;} ::if {$TAXABLE>=5918} {::set BASE 5918;::set RATE .0414;::set FLAT 81.37;} ::if {$TAXABLE>=13316} {::set BASE 13316;::set RATE .0563;::set FLAT 387.65;} ::if {$TAXABLE>=22193} {::set BASE 22193;::set RATE .0596;::set FLAT 887.43;} ::if {$TAXABLE>=29590} {::set BASE 29590;::set RATE .0625;::set FLAT 1328.29;} ::if {$TAXABLE>=44385} {::set BASE 44385;::set RATE .0744;::set FLAT 2252.98;} ::if {$TAXABLE>=66578} {::set BASE 66578;::set RATE .0853;::set FLAT 3904.14;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IL-20200101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20200101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2325; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20200101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2650; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .05; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MI-20200101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20200101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 4750.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20200101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 12400; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 24800; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 18650; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 12400; } else { ::set MaritalStatus "single"; ::set STANDARD 12400; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1073} {::set BASE 1073;::set RATE .020;::set FLAT [::expr $FLAT+16];} ::if {$TAXABLE>2146} {::set BASE 2146;::set RATE .025;::set FLAT [::expr $FLAT+21];} ::if {$TAXABLE>3219} {::set BASE 3219;::set RATE .030;::set FLAT [::expr $FLAT+27];} ::if {$TAXABLE>4292} {::set BASE 4292;::set RATE .035;::set FLAT [::expr $FLAT+32];} ::if {$TAXABLE>5365} {::set BASE 5365;::set RATE .040;::set FLAT [::expr $FLAT+38];} ::if {$TAXABLE>6438} {::set BASE 6438;::set RATE .045;::set FLAT [::expr $FLAT+43];} ::if {$TAXABLE>7511} {::set BASE 7511;::set RATE .050;::set FLAT [::expr $FLAT+48];} ::if {$TAXABLE>8584} {::set BASE 8584;::set RATE .054;::set FLAT [::expr $FLAT+54];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NY-20200101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20200101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0609 1042} {80650 .0641 4650} {96800 .0745 5686} {107650 .0795 6494} {157650 .0691 10469} {215400 .0925 14459} {265400 .0735 19084} {1077550 .5208 78777} {1127550 .0962 104817} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0609 1042} {80650 .0641 4650} {96800 .0746 5686} {107650 .0796 6495} {157650 .0794 10475} {211550 .0691 14755} {323200 .1019 22470} {373200 .0735 27565} {1077550 .0765 79334} {2155350 .9454 161786} {2205350 .0962 209056} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method NC-20200101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 16125; } default { ::set STANDARD 10750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0535; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ND-20200101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4300; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=6200} {::set BASE 6200;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=46325} {::set BASE 46325;::set RATE 0.0204;::set FLAT 441.38;} ::if {$TAXABLE>=103350} {::set BASE 103350;::set RATE 0.0227;::set FLAT 1604.69;} ::if {$TAXABLE>=208850} {::set BASE 208850;::set RATE 0.0264;::set FLAT 3999.54;} ::if {$TAXABLE>=446800} {::set BASE 446800;::set RATE 0.0290;::set FLAT 10281.42;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=12400} {::set BASE 12400;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=45925} {::set BASE 45925;::set RATE 0.0204;::set FLAT 368.78;} ::if {$TAXABLE>=93375} {::set BASE 93375;::set RATE 0.0227;::set FLAT 1336.76;} ::if {$TAXABLE>=135750} {::set BASE 135750;::set RATE 0.0264;::set FLAT 2298.67;} ::if {$TAXABLE>=232700} {::set BASE 232700;::set RATE 0.0290;::set FLAT 4858.15;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OH-20200101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20200101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0;::set RATE 0.005;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE 0.010;::set FLAT 25;} ::if {$TAXABLE>10000} {::set BASE 10000;::set RATE 0.020;::set FLAT 75;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.025;::set FLAT 175;} ::if {$TAXABLE>20000} {::set BASE 20000;::set RATE 0.030;::set FLAT 300;} ::if {$TAXABLE>40000} {::set BASE 40000;::set RATE 0.035;::set FLAT 900;} ::if {$TAXABLE>80000} {::set BASE 80000;::set RATE 0.040;::set FLAT 2300;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.05;::set FLAT 3100;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX*1.032]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method SC-20200101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20200101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2590; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 3820;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .011;::set Flat 0;} ::if {$Taxable>=2620} {::set Base 2620;::set Rate .03;::set Flat 57.64;} ::if {$Taxable>=5240} {::set Base 5240;::set Rate .04;::set Flat 110.04;} ::if {$Taxable>=7860} {::set Base 7860;::set Rate .05;::set Flat 188.64;} ::if {$Taxable>=10490} {::set Base 10490;::set Rate .06;::set Flat 293.54;} ::if {$Taxable>=13110} {::set Base 13110;::set Rate .07;::set Flat 424.64;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method VA-20200101 {TaxableWages} { debugLog "--- Virginia Tax Calculation (20200101) ---"; ::set PERSONAL1 930; ;#// Personal & Dependant deductions ::set PERSONAL2 800; ;#// Age 65 and over & Blind exemptions ::set DESC "VA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE - 4500]; ;#// Taxable = (Periods*Paysum)-4500-(Xemp*Personal) ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions ,]; ::if {[::llength $ExemptionTypes] == 1} { ::set PERSONAL1 [::expr [stringToNumber $ExemptionTypes] *$PERSONAL1]; ::set PERSONAL2 0; } else { ::set PERSONAL1 [::expr [stringToNumber [::lindex $ExemptionTypes 0]]*$PERSONAL1]; ::set PERSONAL2 [::expr [stringToNumber [::lindex $ExemptionTypes 1]]*$PERSONAL2]; } } ::set TAXABLE [::expr $TAXABLE-$PERSONAL1]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL2]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.02;::set FLAT 0;} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE 0.03;::set FLAT 60;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE 0.05;::set FLAT 120;} ::if {$TAXABLE>=17000} {::set BASE 17000;::set RATE 0.0575;::set FLAT 720;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20190901 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4250; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3700} {::set BASE 3700;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=30220} {::set BASE 30220;::set RATE 0.0680;::set FLAT 1418.82;} ::if {$TAXABLE>=90810} {::set BASE 90810;::set RATE 0.0785;::set FLAT 5538.94;} ::if {$TAXABLE>=165420} {::set BASE 165420;::set RATE 0.0985;::set FLAT 11395.83;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=11650} {::set BASE 11650;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=50420} {::set BASE 50420;::set RATE 0.0680;::set FLAT 2074.20;} ::if {$TAXABLE>=165670} {::set BASE 165670;::set RATE 0.0785;::set FLAT 9911.20;} ::if {$TAXABLE>=280660} {::set BASE 280660;::set RATE 0.0985;::set FLAT 18937.92;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20190101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20190101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "head of household" - "single" { ::foreach Range { {3800 0.100 0.00} {13500 0.120 970.00} {43275 0.220 4543.00} {88000 0.240 14382.50} {164525 0.320 32748.50} {207900 0.350 46628.50} {514100 0.370 153798.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {11800 0.100 0.00} {31200 0.120 1940.00} {90750 0.220 9086.00} {180200 0.240 28765.00} {333250 0.320 65497.00} {420000 0.350 93257.00} {624150 0.370 164709.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20190101 {TaxableWages} { debugLog "--- California Tax Calculation (20190101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=14048} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=28095} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=14573} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=29146} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4401;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 8802;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4401; } else { ::set Standard 8802; } } ::set Regular 129.80; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {8544 0.0220 93.98} {20255 0.0440 351.62} {31969 0.0660 867.04} {44377 0.0880 1685.97} {56085 0.1023 2716.17} {286492 0.1133 26286.91} {343788 0.1243 32778.55} {572980 0.1353 61267.12} {1000000 0.1463 119042.93} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {17088 0.0220 187.97} {40510 0.0440 703.25} {63938 0.0660 1734.08} {88754 0.0880 3371.94} {112170 0.1023 5432.55} {572984 0.1133 52573.82} {687576 0.1243 65557.09} {1000000 0.1353 104391.39} {1145961 0.1463 124139.90} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {17099 0.0220 188.09} {40512 0.0440 703.18} {52224 0.0660 1218.51} {64632 0.0880 2037.44} {76343 0.1023 3068.01} {389627 0.1133 35116.96} {467553 0.1243 43945.98} {779253 0.1353 82690.29} {1000000 0.1463 112557.36} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method GA-20190101 {TaxableWages} { debugLog "--- Georgia Tax Calculation (20190101) ---"; ::set DESC "Georgia Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "GA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Standard 0; ::set Personal 3000; ::set Dependant 3000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set TotalAllowance 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable+$Supp]; ::switch -- $MaritalStatus { zero - single - head-of-household {::set Standard 4600;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Standard 3000;} married-filing-jointly-one-spouse-working {::set Standard 6000;} } ::switch -- $MaritalStatus { zero - single - head-of-household {::set Personal 2700;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Personal 3700;} married-filing-jointly-one-spouse-working {::set Personal 7400;} } ::set TotalAllowance [::expr $Personal+$Exemptions*$Dependant-3000]; ::if {$MaritalStatus eq "zero"} { ::set Taxable [::expr $Taxable-$Standard]; } else { ::set Taxable [::expr $Taxable-$Standard-$TotalAllowance]; } ::if {$Taxable<0} { ::set Taxable 0 }; ::switch -- $MaritalStatus { zero - single { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0.00}; ::if {$Taxable>=750} {::set Base 750;::set Rate .02;::set Flat 7.50}; ::if {$Taxable>=2250} {::set Base 2250;::set Rate .03;::set Flat 37.50}; ::if {$Taxable>=3750} {::set Base 3750;::set Rate .04;::set Flat 82.50}; ::if {$Taxable>=5250} {::set Base 5250;::set Rate .05;::set Flat 142.50}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .0575;::set Flat 230.00}; } married-filing-separately - married-filing-jointly-both-spouses-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=500} {::set Base 500;::set Rate .02;::set Flat 5}; ::if {$Taxable>=1500} {::set Base 1500;::set Rate .03;::set Flat 25}; ::if {$Taxable>=2500} {::set Base 2500;::set Rate .04;::set Flat 55}; ::if {$Taxable>=3500} {::set Base 3500;::set Rate .05;::set Flat 95}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .0575;::set Flat 170}; } head-of-household - married-filing-jointly-one-spouse-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=1000} {::set Base 1000;::set Rate .02;::set Flat 10}; ::if {$Taxable>=3000} {::set Base 3000;::set Rate .03;::set Flat 50}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .04;::set Flat 110}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .05;::set Flat 190}; ::if {$Taxable>=10000} {::set Base 10000;::set Rate .0575;::set Flat 340}; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Taxable<0} {::set Taxable 0;} ::set Result [round2 $Tax]; ::return $Result; } method IA-20190101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 1690; } else { ::set MAXIMUM 4160; } ::set EXEMPT1 40; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $TaxableWages-$FEDERAL]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set STANDARD $MAXIMUM; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0033;::set FLAT 0.00;} ::if {$TAXABLE>=1333} {::set BASE 1333;::set RATE .0067;::set FLAT 4.40;} ::if {$TAXABLE>=2666} {::set BASE 2666;::set RATE .0225;::set FLAT 13.33;} ::if {$TAXABLE>=5331} {::set BASE 5331;::set RATE .0414;::set FLAT 73.29;} ::if {$TAXABLE>=11995} {::set BASE 11995;::set RATE .0563;::set FLAT 349.18;} ::if {$TAXABLE>=19992} {::set BASE 19992;::set RATE .0596;::set FLAT 799.41;} ::if {$TAXABLE>=26656} {::set BASE 26656;::set RATE .0625;::set FLAT 1196.58;} ::if {$TAXABLE>=39984} {::set BASE 39984;::set RATE .0744;::set FLAT 2029.58;} ::if {$TAXABLE>=59976} {::set BASE 59976;::set RATE .0853;::set FLAT 3516.98;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IL-20190101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20190101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2225; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20190101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2590; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .05; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20190101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20190101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4200; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=81450} { ::set Phase [::expr $Taxable-81450]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*9350]; } else { ::set Phase 9350; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-9350]; } } "married" { ::if {$Taxable>=162950} { ::set Phase [::expr $Taxable-162950]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ::set Phase [::expr $Phase*21550]; } else { ::set Phase 21550; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-21550]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=21850} {::set Base 21850;::set Rate 0.0675;::set Flat 1267;} ::if {$Taxable>=51700} {::set Base 51700;::set Rate 0.0715;::set Flat 3282;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=43700} {::set Base 43700;::set Rate 0.0675;::set Flat 2535;} ::if {$Taxable>=103400} {::set Base 103400;::set Rate 0.0715;::set Flat 6565;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MI-20190101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20190101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 4400.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20190101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4150; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2400} {::set BASE 2400;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=28920} {::set BASE 28920;::set RATE 0.0705;::set FLAT 1418.82;} ::if {$TAXABLE>=89510} {::set BASE 89510;::set RATE 0.0785;::set FLAT 5690.42;} ::if {$TAXABLE>=166290} {::set BASE 166290;::set RATE 0.0985;::set FLAT 11717.65;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=9050} {::set BASE 9050;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=47820} {::set BASE 47820;::set RATE 0.0705;::set FLAT 2074.20;} ::if {$TAXABLE>=163070} {::set BASE 163070;::set RATE 0.0785;::set FLAT 10199.33;} ::if {$TAXABLE>=282200} {::set BASE 282200;::set RATE 0.0985;::set FLAT 19551.04;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20190101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 12200; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 24400; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 18350; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 12200; } else { ::set MaritalStatus "single"; ::set STANDARD 12200; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1053} {::set BASE 1053;::set RATE .020;::set FLAT [::expr $FLAT+16];} ::if {$TAXABLE>2106} {::set BASE 2106;::set RATE .025;::set FLAT [::expr $FLAT+21];} ::if {$TAXABLE>3159} {::set BASE 3159;::set RATE .030;::set FLAT [::expr $FLAT+26];} ::if {$TAXABLE>4212} {::set BASE 4212;::set RATE .035;::set FLAT [::expr $FLAT+32];} ::if {$TAXABLE>5265} {::set BASE 5265;::set RATE .040;::set FLAT [::expr $FLAT+37];} ::if {$TAXABLE>6318} {::set BASE 6318;::set RATE .045;::set FLAT [::expr $FLAT+42];} ::if {$TAXABLE>7371} {::set BASE 7371;::set RATE .050;::set FLAT [::expr $FLAT+47];} ::if {$TAXABLE>8424} {::set BASE 8424;::set RATE .054;::set FLAT [::expr $FLAT+53];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NC-20190101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 15000; } default { ::set STANDARD 10000; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0535; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20190101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20190101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4150; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0490]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=3700} {::set Base 3700;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=9200} {::set Base 9200;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=14700} {::set Base 14700;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=19700} {::set Base 19700;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=11550} {::set Base 11550;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=19550} {::set Base 19550;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=27550} {::set Base 27550;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=35550} {::set Base 35550;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20190101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20190101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0621 1042} {80650 .0649 4721} {96800 .0752 5770} {107650 .0802 6585} {157650 .0699 10595} {215400 .0890 14632} {265400 .0735 19082} {1077550 .5208 78775} {1127550 .0962 104815} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0621 1042} {80650 .0649 4721} {96800 .0764 5770} {107650 .0814 6599} {157650 .0790 10669} {211550 .0699 14927} {323200 .0968 22731} {373200 .0735 27571} {1077550 .0765 79341} {2155350 .9454 161792} {2205350 .0962 209062} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method OH-20190101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0;::set RATE 0.005;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE 0.010;::set FLAT 25;} ::if {$TAXABLE>10000} {::set BASE 10000;::set RATE 0.020;::set FLAT 75;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.025;::set FLAT 175;} ::if {$TAXABLE>20000} {::set BASE 20000;::set RATE 0.030;::set FLAT 300;} ::if {$TAXABLE>40000} {::set BASE 40000;::set RATE 0.035;::set FLAT 900;} ::if {$TAXABLE>80000} {::set BASE 80000;::set RATE 0.040;::set FLAT 2300;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.05;::set FLAT 3100;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX*1.075]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method SC-20190101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20190101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2510; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 3470;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .011;::set Flat 0;} ::if {$Taxable>=2450} {::set Base 2450;::set Rate .03;::set Flat 46.55;} ::if {$Taxable>=4900} {::set Base 4900;::set Rate .04;::set Flat 95.55;} ::if {$Taxable>=7350} {::set Base 7350;::set Rate .05;::set Flat 169.05;} ::if {$Taxable>=9800} {::set Base 9800;::set Rate .06;::set Flat 267.05;} ::if {$Taxable>=12250} {::set Base 12250;::set Rate .07;::set Flat 389.55;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method 10-20190101 {TaxableWages} { ::set DESC "County Tax"; ::set DEDUCT "1000"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $DEDUCT*1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set RATE [payCodeValueNumber ".percent"]; ::if {$RATE eq 0} {::set RATE 0.0100;} ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20190101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20190101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0621 1042} {80650 .0649 4721} {96800 .0752 5770} {107650 .0802 6585} {157650 .0699 10595} {215400 .0890 14632} {265400 .0735 19082} {1077550 .5208 78775} {1127550 .0962 104815} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0621 1042} {80650 .0649 4721} {96800 .0764 5770} {107650 .0814 6599} {157650 .0790 10669} {211550 .0699 14927} {323200 .0968 22731} {373200 .0735 27571} {1077550 .0765 79341} {2155350 .9454 161792} {2205250 .0962 209062} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method CO-20190101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20190101) ---"; ::set ALLOW 4200; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 3800;} ::if {$MaritalStatus eq "married"} {::set BASE 11800;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$Exemptions>=7} { ::set ALLOW 25200; } else { ::if {$Exemptions<=6} { ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } else { ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } } ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0463]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $TAX]; ::return $Result; } method MA-20190101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::qw::number::var::negative Total_FICA_MEDI; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD $MAXIMUM; } else { ::set STANDARD $Total_FICA_MEDI; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0505]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ND-20190101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4200; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4500} {::set BASE 4500;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=43000} {::set BASE 43000;::set RATE 0.0204;::set FLAT 423.50;} ::if {$TAXABLE>=87000} {::set BASE 87000;::set RATE 0.0227;::set FLAT 1321.10;} ::if {$TAXABLE>=202000} {::set BASE 202000;::set RATE 0.0264;::set FLAT 3931.60;} ::if {$TAXABLE>=432000} {::set BASE 432000;::set RATE 0.0290;::set FLAT 10003.60;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10400} {::set BASE 10400;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE 0.0204;::set FLAT 710.60;} ::if {$TAXABLE>=141000} {::set BASE 141000;::set RATE 0.0227;::set FLAT 2057.00;} ::if {$TAXABLE>=252000} {::set BASE 252000;::set RATE 0.0264;::set FLAT 4576.70;} ::if {$TAXABLE>=440000} {::set BASE 440000;::set RATE 0.0290;::set FLAT 9539.90;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20190101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20190101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6800.00; ::set PERSONAL 206.00; ::set STANDARD 2270.00; ::if {$MaritalStatus eq "married-filing-separately"} { ::set STANDARD 4545; ::set MaritalStatus married; } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2270; ::if {$Annual>=50000} {::set MAXIMUM 6800;} ::if {$Annual>=125000} {::set MAXIMUM 5450;} ::if {$Annual>=130000} {::set MAXIMUM 4100;} ::if {$Annual>=135000} {::set MAXIMUM 2700;} ::if {$Annual>=140000} {::set MAXIMUM 1350;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4545; ::if {$Annual>=50000} {::set MAXIMUM 6800;} ::if {$Annual>=250000} {::set MAXIMUM 5450;} ::if {$Annual>=260000} {::set MAXIMUM 4100;} ::if {$Annual>=270000} {::set MAXIMUM 2700;} ::if {$Annual>=280000} {::set MAXIMUM 1350;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3550} {::set BASE 3550;::set RATE 0.07;::set FLAT 383.50;} ::if {$TAXABLE>8900} {::set BASE 8900;::set RATE 0.09;::set FLAT 758.00;} } else { ::if {$TAXABLE>7100} {::set BASE 7100;::set RATE 0.07;::set FLAT 561;} ::if {$TAXABLE>17800} {::set BASE 17800;::set RATE 0.09;::set FLAT 1310;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>40931} {::set BASE 8900;::set RATE 0.09;::set FLAT 552;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11001;} } else { ::if {$TAXABLE>38655} {::set BASE 17800;::set RATE 0.09;::set FLAT 1104;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22002;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20190101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20190101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>221800} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=64050} {::set BASE 64050;::set RATE 0.0475;::set FLAT 2401.88;} ::if {$TAXABLE>=145600} {::set BASE 145600;::set RATE 0.0599;::set FLAT 6275.50} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20190101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20190101) ---"; ::set ALLOW 4250; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3075} {::set BASE 3075;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=42675} {::set BASE 42675;::set RATE 0.0660;::set FLAT 1326.60;} ::if {$TAXABLE>=99075} {::set BASE 99075;::set RATE 0.0760;::set FLAT 5049.00;} ::if {$TAXABLE>=203275} {::set BASE 203275;::set RATE 0.0875;::set FLAT 12968.20;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=9225} {::set BASE 9225;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=75375} {::set BASE 75375;::set RATE 0.0660;::set FLAT 2216.03;} ::if {$TAXABLE>=169175} {::set BASE 169175;::set RATE 0.0760;::set FLAT 8406.83;} ::if {$TAXABLE>=252975} {::set BASE 252975;::set RATE 0.0875;::set FLAT 14775.63;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20180501 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20180501) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2530; ::set CREDIT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0; ::set RATE .05; ::set FLAT [::expr $FLAT+0];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NJ-20180901 {TaxableWages} { debugLog "--- New Jersey Tax Calculation (20180901) ---"; ::set Desc "NJ Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NJ"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 1000; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Allow [::expr $Exemptions*$Allow]; # Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .02;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .039;::set Flat 600;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .061;::set Flat 795;} ::if {$Taxable>=75000} {::set Base 75000;::set Rate .07;::set Flat 2930;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 32680;} ::if {$Taxable>=5000000} {::set Base 5000000;::set Rate .156;::set Flat 478180;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .027;::set Flat 900;} ::if {$Taxable>=70000} {::set Base 70000;::set Rate .039;::set Flat 1440;} ::if {$Taxable>=80000} {::set Base 80000;::set Rate .061;::set Flat 1830;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .07;::set Flat 6100;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30600;} ::if {$Taxable>=5000000} {::set Base 5000000;::set Rate .156;::set Flat 476100;} } ::if {$MaritalStatus eq "new-jersey-rate-c"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .023;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .028;::set Flat 760;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .035;::set Flat 1040;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1390;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .066;::set Flat 6430;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29530;} ::if {$Taxable>=5000000} {::set Base 5000000;::set Rate .156;::set Flat 475030;} } ::if {$MaritalStatus eq "new-jersey-rate-d"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .027;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .034;::set Flat 840;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .043;::set Flat 1180;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1610;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .065;::set Flat 6650;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29400;} ::if {$Taxable>=5000000} {::set Base 5000000;::set Rate .156;::set Flat 474900;} } ::if {$MaritalStatus eq "new-jersey-rate-e"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .058;::set Flat 600;} ::if {$Taxable>=100000} {::set Base 100000;::set Rate .065;::set Flat 4370;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30370;} ::if {$Taxable>=5000000} {::set Base 5000000;::set Rate .156;::set Flat 475870;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NM-20180101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20180101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4150; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=3700} {::set Base 3700;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=9200} {::set Base 9200;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=14700} {::set Base 14700;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=19700} {::set Base 19700;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=11550} {::set Base 11550;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=19550} {::set Base 19550;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=27550} {::set Base 27550;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=35550} {::set Base 35550;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method UT-20180501 {TaxableWages} { debugLog "--- Utah Tax Calculation (20180501) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "UT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr {$_pay_frequency*$TaxableWages}]; ::if {$Taxable<=0.0} {::set Taxable 0.0;} ::set Line1 $Taxable; ::set Line2 [::expr {$Line1*0.0495}]; ::switch $MaritalStatus { "single" { ::set Line3 360.0; ::set Line4 [::expr {$Line1-7128.0}]; } "married" { ::set Line3 720.0; ::set Line4 [::expr {$Line1-14256.0}]; } } ::set Line5 [::expr {$Line4*0.013}]; ::set Line6 [::expr {$Line3-$Line5}]; ::if {$Line6<0.0} { ::set Line6 0.0; } ::set Line7 [::expr {$Line2-$Line6}]; ::if {$Line7<0.0} { ::set Line7 0.0; } ::set Tax [::expr {$Line7/$_pay_frequency}]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20180401 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20180401) ---"; ::set ALLOW 4050; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 2300;} ::if {$MaritalStatus eq "married"} {::set BASE 8650;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$Exemptions>10} { ::set ALLOW 18900; } else { ::if {$Exemptions<7} { ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } else { ::if {$Exemptions==7} {::set ALLOW 22950;} ::if {$Exemptions==8} {::set ALLOW 21600;} ::if {$Exemptions==9} {::set ALLOW 20250;} ::if {$Exemptions==10} {::set ALLOW 18900;} ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } } ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0463]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $TAX]; ::return $Result; } method ID-20180101 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20180101) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 2960; ;#// New (ICTCAT deduction), no longer an exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=12000} {::set Base 12000;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=13504} {::set Base 13504;::set Rate 0.03125;::set Flat 17;} ::if {$Taxable>=15008} {::set Base 15008;::set Rate 0.03625;::set Flat 64;} ::if {$Taxable>=16511} {::set Base 16511;::set Rate 0.04625;::set Flat 118;} ::if {$Taxable>=18015} {::set Base 18015;::set Rate 0.05625;::set Flat 188;} ::if {$Taxable>=19519} {::set Base 19519;::set Rate 0.06625;::set Flat 273;} ::if {$Taxable>=23279} {::set Base 23279;::set Rate 0.06925;::set Flat 522;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=24000} {::set Base 24000;::set Rate 0.0125;::set Flat 0;} ::if {$Taxable>=27008} {::set Base 27008;::set Rate 0.03325;::set Flat 34;} ::if {$Taxable>=30016} {::set Base 30016;::set Rate 0.03625;::set Flat 128;} ::if {$Taxable>=33022} {::set Base 33022;::set Rate 0.04625;::set Flat 237;} ::if {$Taxable>=36030} {::set Base 36030;::set Rate 0.05625;::set Flat 376;} ::if {$Taxable>=39038} {::set Base 39038;::set Rate 0.06625;::set Flat 545;} ::if {$Taxable>=46558} {::set Base 46558;::set Rate 0.06925;::set Flat 1043;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method LA-20180201 {TaxableWages} { ::set DESC "LA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "LA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions ne ""} { ::set E1 [::expr {int($Exemptions)}]; ;#// the whole number part ::set E2 [::expr {int(($Exemptions-$E1)*10)}]; ;#// the fraction part ::set A [::expr {0.021*((($E1*4500.0)+($E2*1000.0))/$_pay_frequency)}]; ::set B [::expr {0.016*(((($E1*4500.0)+($E2*1000.0))-12500.0)/$_pay_frequency)}]; ::if {$B<0} { ::set B 0.0; } } ::if {$Exemptions<2} { ::set RateB 0.0180; ::set RateW 0.021; ::set RateZ 0.0165; ::set M1 12500.0; ::set M2 50000.0; } else { ::set RateB 0.0175; ::set RateW 0.022; ::set RateZ 0.0169; ::set M1 25000.0; ::set M2 100000.0; } ::set AnnualIncome [::expr {$TaxableWages*$_pay_frequency}]; ::while 1 { ::if {$AnnualIncome<$M1} { ::set W [::expr {$RateW*$TaxableWages-($A+$B)}]; ::break; } ::if {$AnnualIncome<$M2} { ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)-($A+$B)}]; ::break; } ::set W [::expr {$RateW*$TaxableWages+$RateB*($TaxableWages-$M1/$_pay_frequency)+$RateZ*($TaxableWages-$M2/$_pay_frequency)-($A+$B)}]; ::break; } ::if {$W<0} {::set W 0;} ::set Result [round2 $W]; ::return $Result; } method MO-20180101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20180101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 12000; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 24000; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 18000; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 12000; } else { ::set MaritalStatus "single"; ::set STANDARD 12000; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1028} {::set BASE 1028;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2056} {::set BASE 2056;::set RATE .025;::set FLAT [::expr $FLAT+21];} ::if {$TAXABLE>3084} {::set BASE 3084;::set RATE .030;::set FLAT [::expr $FLAT+26];} ::if {$TAXABLE>4113} {::set BASE 4113;::set RATE .035;::set FLAT [::expr $FLAT+31];} ::if {$TAXABLE>5141} {::set BASE 5141;::set RATE .040;::set FLAT [::expr $FLAT+36];} ::if {$TAXABLE>6169} {::set BASE 6169;::set RATE .045;::set FLAT [::expr $FLAT+41];} ::if {$TAXABLE>7197} {::set BASE 7197;::set RATE .050;::set FLAT [::expr $FLAT+46];} ::if {$TAXABLE>8225} {::set BASE 8225;::set RATE .055;::set FLAT [::expr $FLAT+51];} ::if {$TAXABLE>9253} {::set BASE 9253;::set RATE .059;::set FLAT [::expr $FLAT+57];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ND-20180101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20180101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4150; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4400} {::set BASE 4400;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=42000} {::set BASE 42000;::set RATE 0.0204;::set FLAT 413.60;} ::if {$TAXABLE>=86000} {::set BASE 86000;::set RATE 0.0227;::set FLAT 1311.20;} ::if {$TAXABLE>=198000} {::set BASE 198000;::set RATE 0.0264;::set FLAT 3853.60;} ::if {$TAXABLE>=424000} {::set BASE 424000;::set RATE 0.0290;::set FLAT 9820.00;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10200} {::set BASE 10200;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=73500} {::set BASE 73500;::set RATE 0.0204;::set FLAT 696.30;} ::if {$TAXABLE>=139000} {::set BASE 139000;::set RATE 0.0227;::set FLAT 2032.50;} ::if {$TAXABLE>=247000} {::set BASE 247000;::set RATE 0.0264;::set FLAT 4484.10;} ::if {$TAXABLE>=431000} {::set BASE 431000;::set RATE 0.0290;::set FLAT 9341.70;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method US-20180101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20180101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {3700 0.100 0.00} {13225 0.120 952.50} {42400 0.220 4453.50} {86200 0.240 14089.50} {161200 0.320 32089.50} {203700 0.350 45689.50} {503700 0.370 150689.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {11550 0.100 0.00} {30600 0.120 1905.00} {88950 0.220 8907.00} {176550 0.240 28179.00} {326550 0.320 64179.00} {411550 0.350 91379.00} {611550 0.370 161379.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20180101 {TaxableWages} { debugLog "--- California Tax Calculation (20180101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=14048} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=28095} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=14048} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=28095} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4236;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 8472;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4236; } else { ::set Standard 8472; } } ::set Regular 125.40; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {8223 0.0220 90.45} {19495 0.0440 338.43} {30769 0.0660 834.49} {42711 0.0880 1622.66} {53980 0.1023 2614.33} {275738 0.1133 25300.17} {330884 0.1243 31548.21} {551473 0.1353 58967.42} {1000000 0.1463 119653.12} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {16446 0.0220 180.91} {38990 0.0440 676.88} {61538 0.0660 1668.99} {85422 0.0880 3245.33} {107960 0.1023 5228.67} {551476 0.1133 50600.36} {661768 0.1243 63096.44} {1000000 0.1353 105138.68} {1102946 0.1463 119067.26} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {16457 0.0220 181.03} {38991 0.0440 676.78} {50264 0.0660 1172.79} {62206 0.0880 1960.96} {73477 0.1023 2952.81} {375002 0.1133 33798.82} {450003 0.1243 42296.43} {750003 0.1353 79586.43} {1000000 0.1463 113411.02} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method DC-20180101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20180101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 4150; ::if {($MaritalStatus eq "married-filing-separately")} {::set MaritalStatus "married-filing-jointly";} ::if {($MaritalStatus eq "single")} {::set MaritalStatus "married-filing-jointly";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married-filing-jointly"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0650;::set FLAT 2200.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0850;::set FLAT 3500.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0875;::set FLAT 28150.00;} ::if {$TAXABLE>=1000000} {::set BASE 1000000;::set RATE .0895;::set FLAT 85025.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method IL-20180101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20180101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0495; ::set EXEMPT1 2000; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method IN-20180101 {TaxableWages} { debugLog "--- Indiana Tax Calculation (20180101) ---"; ::set DESC "Indiana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0323; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $DEDUCT * 1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20180101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20180101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2530; ::set CREDIT 10; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20180101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20180101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4150; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=71100} { ::set Phase [::expr $Taxable-71100]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ;#//JRP new 2017_payroll ::set Phase [::expr $Phase*8950]; } else { ::set Phase 8950; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-8950]; } } "married" { ::if {$Taxable>=146100} { ::set Phase [::expr $Taxable-146100]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ;#//JRP new 2017_payroll ::set Phase [::expr $Phase*20750]; } else { ::set Phase 20750; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-20750]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=21450} {::set Base 21450;::set Rate 0.0675;::set Flat 1244;} ::if {$Taxable>=50750} {::set Base 50750;::set Rate 0.0715;::set Flat 3222;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=42900} {::set Base 42900;::set Rate 0.0675;::set Flat 2488;} ::if {$Taxable>=101550} {::set Base 101550;::set Rate 0.0715;::set Flat 6447;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MN-20180101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20180101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4150; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2350} {::set BASE 2350;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=28240} {::set BASE 28240;::set RATE 0.0705;::set FLAT 1385.12;} ::if {$TAXABLE>=87410} {::set BASE 87410;::set RATE 0.0785;::set FLAT 5556.61;} ::if {$TAXABLE>=162370} {::set BASE 162370;::set RATE 0.0985;::set FLAT 11440.97;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8850} {::set BASE 8850;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=46700} {::set BASE 46700;::set RATE 0.0705;::set FLAT 2024.98;} ::if {$TAXABLE>=159230} {::set BASE 159230;::set RATE 0.0785;::set FLAT 9958.35;} ::if {$TAXABLE>=275550} {::set BASE 275550;::set RATE 0.0985;::set FLAT 19089.47;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NY-20180101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20180101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0633 1042} {80650 .0657 4793} {96800 .0758 5854} {107650 .0808 6676} {157650 .0707 10716} {215400 .0856 14799} {265400 .0735 19079} {1077550 .5208 78772} {1127550 .0962 104812} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0633 1042} {80650 .0657 4793} {96800 .0783 5854} {107650 .0833 6703} {157650 .0785 10868} {211550 .0707 15099} {323200 .0916 22993} {373200 .0735 27573} {1077550 .0765 79343} {2155350 .9454 161794} {2205350 .0962 209064} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method OR-20180101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20180101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6650.00; ::set PERSONAL 201.00; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2215; ::if {$Annual>=50000} {::set MAXIMUM 6650;} ::if {$Annual>=125000} {::set MAXIMUM 5300;} ::if {$Annual>=130000} {::set MAXIMUM 4000;} ::if {$Annual>=135000} {::set MAXIMUM 2650;} ::if {$Annual>=140000} {::set MAXIMUM 1300;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4435; ::if {$Annual>=50000} {::set MAXIMUM 6650;} ::if {$Annual>=250000} {::set MAXIMUM 5300;} ::if {$Annual>=260000} {::set MAXIMUM 4000;} ::if {$Annual>=270000} {::set MAXIMUM 2650;} ::if {$Annual>=280000} {::set MAXIMUM 1300;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3450} {::set BASE 3450;::set RATE 0.07;::set FLAT 373.50;} ::if {$TAXABLE>8700} {::set BASE 8700;::set RATE 0.09;::set FLAT 741.00;} } else { ::if {$TAXABLE>6900} {::set BASE 6900;::set RATE 0.07;::set FLAT 546;} ::if {$TAXABLE>17400} {::set BASE 17400;::set RATE 0.09;::set FLAT 1281;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41135} {::set BASE 8700;::set RATE 0.09;::set FLAT 540;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11007;} } else { ::if {$TAXABLE>38915} {::set BASE 17400;::set RATE 0.09;::set FLAT 1080;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22014;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20180101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20180101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>221800} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=62550} {::set BASE 62550;::set RATE 0.0475;::set FLAT 2345.63;} ::if {$TAXABLE>=142150} {::set BASE 142150;::set RATE 0.0599;::set FLAT 6126.63} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method SC-20180101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20180101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2440; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 3150;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .014;::set Flat 0;} ::if {$Taxable>=2290} {::set Base 2290;::set Rate .03;::set Flat 36.64;} ::if {$Taxable>=4580} {::set Base 4580;::set Rate .04;::set Flat 82.44;} ::if {$Taxable>=6870} {::set Base 6870;::set Rate .05;::set Flat 151.14;} ::if {$Taxable>=9160} {::set Base 9160;::set Rate .06;::set Flat 242.74;} ::if {$Taxable>=11450} {::set Base 11450;::set Rate .07;::set Flat 357.24;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method 10-20180101 {TaxableWages} { ::set DESC "County Tax"; ::set DEDUCT "1000"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $DEDUCT*1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set RATE 0.0100; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 40-20180101 {TaxableWages} { debugLog "--- New York City Tax Calculation (20180101) ---"; ::set DESC "NYC Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set DEDUCT 0; ::set EXEMPT 1000; ::if {$MaritalStatus eq "single"} { ::set DEDUCT 5000; ::set EXEMPT 1000; } ::if {$MaritalStatus eq "married"} { ::set DEDUCT 5500; ::set EXEMPT 1000; } ::if {$RESIDENCE eq "non-resident"} { ::set DEDUCT 4000; ::set EXEMPT 0; } ::set S401K [earningsOfType "401K"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$S401K]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Deduct-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0205;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0280;::set FLAT 164;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0325;::set FLAT 184;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0395;::set FLAT 388;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0415;::set FLAT 783;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0425;::set FLAT 2236;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0205;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0280;::set FLAT 164;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0325;::set FLAT 184;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0395;::set FLAT 388;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0415;::set FLAT 783;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0425;::set FLAT 2236;} } } ::if {$RESIDENCE eq "non-resident"} { ::set TAXABLE [::expr $TAXABLE+$DEDUCT]; ::set RATE .0025; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE $TAXABLE;} ::if {$TAXABLE>=3999.99} {::set BASE 3000;} ::if {$TAXABLE>=10000.00} {::set BASE 2000;} ::if {$TAXABLE>=20000.00} {::set BASE 1000;} ::if {$TAXABLE>=30000.00} {::set BASE 0;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20180101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20180101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0633 1042} {80650 .0657 4793} {96800 .0758 5854} {107650 .0808 6676} {157650 .0707 10716} {215400 .0856 14799} {265400 .0735 19079} {1077550 .5208 78772} {1127550 .0962 104812} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0633 1042} {80650 .0657 4793} {96800 .0783 5854} {107650 .0833 6703} {157650 .0785 10868} {211550 .0707 15099} {323200 .0916 22993} {373200 .0735 27573} {1077550 .0765 79343} {2155350 .9454 161794} {2205250 .0962 209064} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method CO-20170101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20170101) ---"; ::set ALLOW 4050; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 2300;} ::if {$MaritalStatus eq "married"} {::set BASE 8650;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::if {$Exemptions>10} { ::set Exemption [::expr $Exemptions-10]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } else { ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; } ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0463]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $TAX]; ::return $Result; } method DC-20170101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20170101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1775; ::if {($MaritalStatus eq "married-filing-separately")} {::set MaritalStatus "married-filing-jointly";} ::if {($MaritalStatus eq "single")} {::set MaritalStatus "married-filing-jointly";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married-filing-jointly"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0650;::set FLAT 2200.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0850;::set FLAT 3500.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0875;::set FLAT 28150.00;} ::if {$TAXABLE>=1000000} {::set BASE 1000000;::set RATE .0895;::set FLAT 85025.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ND-20170101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4050; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4300} {::set BASE 4300;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=41000} {::set BASE 41000;::set RATE 0.0204;::set FLAT 403.70;} ::if {$TAXABLE>=84000} {::set BASE 84000;::set RATE 0.0227;::set FLAT 1280.90;} ::if {$TAXABLE>=194000} {::set BASE 194000;::set RATE 0.0264;::set FLAT 3777.90;} ::if {$TAXABLE>=416000} {::set BASE 416000;::set RATE 0.0290;::set FLAT 9538.70;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=72000} {::set BASE 72000;::set RATE 0.0204;::set FLAT 682.00;} ::if {$TAXABLE>=136000} {::set BASE 136000;::set RATE 0.0227;::set FLAT 1987.60;} ::if {$TAXABLE>=242000} {::set BASE 242000;::set RATE 0.0264;::set FLAT 4393.80;} ::if {$TAXABLE>=423000} {::set BASE 423000;::set RATE 0.0290;::set FLAT 9172.20;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20170101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6550.00; ::set PERSONAL 197.00; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2175; ::if {$Annual>=50000} {::set MAXIMUM 6550;} ::if {$Annual>=125000} {::set MAXIMUM 5200;} ::if {$Annual>=130000} {::set MAXIMUM 3900;} ::if {$Annual>=135000} {::set MAXIMUM 2600;} ::if {$Annual>=140000} {::set MAXIMUM 1300;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4350; ::if {$Annual>=50000} {::set MAXIMUM 6550;} ::if {$Annual>=250000} {::set MAXIMUM 5200;} ::if {$Annual>=260000} {::set MAXIMUM 3900;} ::if {$Annual>=270000} {::set MAXIMUM 2600;} ::if {$Annual>=280000} {::set MAXIMUM 1300;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3400} {::set BASE 3400;::set RATE 0.07;::set FLAT 367;} ::if {$TAXABLE>8500} {::set BASE 8500;::set RATE 0.09;::set FLAT 724;} } else { ::if {$TAXABLE>6800} {::set BASE 6800;::set RATE 0.07;::set FLAT 537;} ::if {$TAXABLE>17000} {::set BASE 17000;::set RATE 0.09;::set FLAT 1251;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41275} {::set BASE 8500;::set RATE 0.09;::set FLAT 527;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11012;} } else { ::if {$TAXABLE>39100} {::set BASE 17000;::set RATE 0.09;::set FLAT 1054;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22024;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20170101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20170101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2300 0.100 0.00} {11625 0.150 932.50} {40250 0.250 5226.25} {94200 0.280 18713.75} {193950 0.330 46643.75} {419000 0.350 120910.25} {420700 0.396 121505.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8650 0.100 0.00} {27300 0.150 1865.00} {84550 0.250 10452.50} {161750 0.280 29752.50} {242000 0.330 52222.50} {425350 0.350 112728.00} {479350 0.396 131628.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20170101 {TaxableWages} { debugLog "--- California Tax Calculation (20170101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=13687} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=27373} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=13687} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=27373} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4129;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 8258;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4129; } else { ::set Standard 8258; } } ::set Regular 122.10; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {8015 0.0220 88.17} {19001 0.0440 329.86} {29989 0.0660 813.33} {41629 0.0880 1581.57} {52612 0.1023 2548.07} {268750 0.1133 24658.99} {322499 0.1243 30748.75} {537498 0.1353 57473.13} {1000000 0.1463 120049.65} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {16030 0.0220 176.33} {38002 0.0440 659.71} {59978 0.0660 1626.65} {83258 0.0880 3163.13} {105224 0.1023 5096.14} {537500 0.1133 49317.97} {644998 0.1243 61497.49} {1000000 0.1353 105624.24} {1074996 0.1463 115771.20} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {16040 0.0220 176.44} {38003 0.0440 659.63} {48990 0.0660 1143.06} {60630 0.0880 1911.30} {71615 0.1023 2877.98} {365499 0.1133 32942.31} {438599 0.1243 41224.54} {730997 0.1353 77569.61} {1000000 0.1463 113965.72} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method KY-20170101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2480; ::set CREDIT 10; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20170101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20170101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4050; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=70000} { ::set Phase [::expr $Taxable-70000]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ;#//JRP new 2017_payroll ::set Phase [::expr $Phase*8750]; } else { ::set Phase 8750; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-8750]; } } "married" { ::if {$Taxable>=140000} { ::set Phase [::expr $Taxable-140000]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr 1-$Phase]; ;#//JRP new 2017_payroll ::set Phase [::expr $Phase*20350]; } else { ::set Phase 20350; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable-20350]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=21100} {::set Base 21100;::set Rate 0.0675;::set Flat 1224;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate 0.0715;::set Flat 3175;} ::if {$Taxable>=200000} {::set Base 200000;::set Rate 0.1015;::set Flat 13900;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=42250} {::set Base 42250;::set Rate 0.0675;::set Flat 2451;} ::if {$Taxable>=100000} {::set Base 100000;::set Rate 0.0715;::set Flat 6349;} ::if {$Taxable>=200000} {::set Base 200000;::set Rate 0.1015;::set Flat 13499;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MN-20170101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4050; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2300} {::set BASE 2300;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=27690} {::set BASE 27690;::set RATE 0.0705;::set FLAT 1358.37;} ::if {$TAXABLE>=85700} {::set BASE 85700;::set RATE 0.0785;::set FLAT 5448.08;} ::if {$TAXABLE>=159210} {::set BASE 159210;::set RATE 0.0985;::set FLAT 11218.62;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8650} {::set BASE 8650;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=45760} {::set BASE 45760;::set RATE 0.0705;::set FLAT 1985.39;} ::if {$TAXABLE>=156100} {::set BASE 156100;::set RATE 0.0785;::set FLAT 9764.36;} ::if {$TAXABLE>=270160} {::set BASE 270160;::set RATE 0.0985;::set FLAT 18718.07;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20170101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 6350; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 12700; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 9350; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 6350; } else { ::set MaritalStatus "single"; ::set STANDARD 6350; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1008} {::set BASE 1000;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2016} {::set BASE 2000;::set RATE .025;::set FLAT [::expr $FLAT+20];} ::if {$TAXABLE>3024} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>4032} {::set BASE 4000;::set RATE .035;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>5040} {::set BASE 5000;::set RATE .040;::set FLAT [::expr $FLAT+35];} ::if {$TAXABLE>6048} {::set BASE 6000;::set RATE .045;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>7056} {::set BASE 7000;::set RATE .050;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>8064} {::set BASE 8000;::set RATE .055;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>9072} {::set BASE 9000;::set RATE .060;::set FLAT [::expr $FLAT+55];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NE-20170101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 1960; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2975} {::set BASE 2975;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=5480} {::set BASE 5480;::set RATE 0.0322;::set FLAT 56.61;} ::if {$TAXABLE>=17790} {::set BASE 17790;::set RATE 0.0491;::set FLAT 452.99;} ::if {$TAXABLE>=25780} {::set BASE 25780;::set RATE 0.0620;::set FLAT 845.30;} ::if {$TAXABLE>=32730} {::set BASE 32730;::set RATE 0.0659;::set FLAT 1276.20;} ::if {$TAXABLE>=61470} {::set BASE 61470;::set RATE 0.0695;::set FLAT 3170.17;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7100} {::set BASE 7100;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=10610} {::set BASE 10610;::set RATE 0.0322;::set FLAT 79.33;} ::if {$TAXABLE>=26420} {::set BASE 26420;::set RATE 0.0491;::set FLAT 588.41;} ::if {$TAXABLE>=41100} {::set BASE 41100;::set RATE 0.0620;::set FLAT 1309.20;} ::if {$TAXABLE>=50990} {::set BASE 50990;::set RATE 0.0659;::set FLAT 1922.38;} ::if {$TAXABLE>=67620} {::set BASE 67620;::set RATE 0.0695;::set FLAT 3018.30;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NM-20170101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20170101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4050; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=2300} {::set Base 2300;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=7800} {::set Base 7800;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=13300} {::set Base 13300;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=18300} {::set Base 18300;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=8650} {::set Base 8650;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=16650} {::set Base 16650;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=24650} {::set Base 24650;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=32650} {::set Base 32650;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20170101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20170101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7950;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0645 1042} {80650 .0665 4864} {96800 .0758 5938} {107650 .0808 6760} {161550 .0715 11115} {215400 .0815 14965} {269300 .0735 19358} {1077550 .4902 78765} {1131500 .0962 105211} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0645 1042} {80650 .0665 4864} {96800 .0728 5938} {107650 .0778 6727} {161550 .0808 10921} {215400 .0715 15272} {323200 .0815 22980} {377100 .0735 27373} {1077550 .0765 78856} {2155350 .8842 161307} {2209300 .0962 209010} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method NC-20170101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 14000; } default { ::set STANDARD 8750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .05599; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method OK-20170101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (20170101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>6350} {::set BASE 6350;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>7350} {::set BASE 7350;::set RATE 0.010;::set FLAT 5.00;} ::if {$TAXABLE>8850} {::set BASE 8850;::set RATE 0.020;::set FLAT 20.00;} ::if {$TAXABLE>10100} {::set BASE 10100;::set RATE 0.030;::set FLAT 45.00;} ::if {$TAXABLE>11250} {::set BASE 11250;::set RATE 0.040;::set FLAT 79.50;} ::if {$TAXABLE>13550} {::set BASE 13550;::set RATE 0.050;::set FLAT 171.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>12700} {::set BASE 12700;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>14700} {::set BASE 14700;::set RATE 0.010;::set FLAT 10.00;} ::if {$TAXABLE>17700} {::set BASE 17700;::set RATE 0.020;::set FLAT 40.00;} ::if {$TAXABLE>20200} {::set BASE 20200;::set RATE 0.030;::set FLAT 90.00;} ::if {$TAXABLE>22500} {::set BASE 22500;::set RATE 0.040;::set FLAT 159.00;} ::if {$TAXABLE>24900} {::set BASE 24900;::set RATE 0.050;::set FLAT 255.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method RI-20170101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20170101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>217350} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=61300} {::set BASE 61300;::set RATE 0.0475;::set FLAT 2298.75;} ::if {$TAXABLE>=139400} {::set BASE 139400;::set RATE 0.0599;::set FLAT 6008.50} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method SC-20170101 {TaxableWages} { debugLog "--- South Carolina Tax Calculation (20170101) ---"; ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2370; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 2860;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Standard [::expr $Taxable * .1]; ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .017;::set Flat 0;} ::if {$Taxable>=2140} {::set Base 2140;::set Rate .03;::set Flat 27.82;} ::if {$Taxable>=4280} {::set Base 4280;::set Rate .04;::set Flat 70.62;} ::if {$Taxable>=6420} {::set Base 6420;::set Rate .05;::set Flat 134.82;} ::if {$Taxable>=8560} {::set Base 8560;::set Rate .06;::set Flat 220.42;} ::if {$Taxable>=10700} {::set Base 10700;::set Rate .07;::set Flat 327.42;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method VT-20170101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20170101) ---"; ::set ALLOW 4050; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2650} {::set BASE 2650;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=40250} {::set BASE 40250;::set RATE 0.0680;::set FLAT 1334.80;} ::if {$TAXABLE>=94200} {::set BASE 94200;::set RATE 0.0780;::set FLAT 5003.40;} ::if {$TAXABLE>=193950} {::set BASE 193950;::set RATE 0.0880;::set FLAT 12783.90;} ::if {$TAXABLE>=419000} {::set BASE 419000;::set RATE 0.0895;::set FLAT 32588.30;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=70500} {::set BASE 70500;::set RATE 0.0680;::set FLAT 2218.75;} ::if {$TAXABLE>=161750} {::set BASE 161750;::set RATE 0.0780;::set FLAT 8423.75;} ::if {$TAXABLE>=242000} {::set BASE 242000;::set RATE 0.0880;::set FLAT 14683.25;} ::if {$TAXABLE>=425350} {::set BASE 425350;::set RATE 0.0895;::set FLAT 30818.05;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20170101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20170101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7950;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0645 1042} {80650 .0665 4864} {96800 .0758 5938} {107650 .0808 6760} {161550 .0715 11115} {215400 .0815 14965} {269300 .0735 19358} {1077550 .4902 78765} {1131500 .0962 105211} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8500 .0450 340} {11700 .0525 484} {13900 .0590 600} {21400 .0645 1042} {80650 .0665 4864} {96800 .0728 5938} {107650 .0778 6727} {161550 .0808 10921} {215400 .0715 15272} {323200 .0815 22980} {377100 .0735 27373} {1077550 .0765 78856} {2155350 .8842 161307} {2209300 .0962 209010} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method ID-20160601 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20160601) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 4050; ;#// Amount per exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=2250} {::set Base 2250;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=3704} {::set Base 3704;::set Rate 0.036;::set Flat 23}; ::if {$Taxable>=5158} {::set Base 5158;::set Rate 0.041;::set Flat 75}; ::if {$Taxable>=6612} {::set Base 6612;::set Rate 0.051;::set Flat 135}; ::if {$Taxable>=8066} {::set Base 8066;::set Rate 0.061;::set Flat 209}; ::if {$Taxable>=9520} {::set Base 9520;::set Rate 0.071;::set Flat 298}; ::if {$Taxable>=13155} {::set Base 13155;::set Rate 0.074;::set Flat 556}; } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=8550} {::set Base 8550;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=11458} {::set Base 11458;::set Rate 0.036;::set Flat 47}; ::if {$Taxable>=14366} {::set Base 14366;::set Rate 0.041;::set Flat 152}; ::if {$Taxable>=17274} {::set Base 17274;::set Rate 0.051;::set Flat 271}; ::if {$Taxable>=20182} {::set Base 20182;::set Rate 0.061;::set Flat 419}; ::if {$Taxable>=23090} {::set Base 23090;::set Rate 0.071;::set Flat 596}; ::if {$Taxable>=30360} {::set Base 30360;::set Rate 0.074;::set Flat 1112}; } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method US-20160101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20160101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2250 0.100 0.00} {11525 0.150 927.50} {39900 0.250 5183.75} {93400 0.280 18558.75} {192400 0.330 46278.75} {415600 0.350 119934.75} {417300 0.396 120529.75} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8550 0.100 0.00} {27100 0.150 1855.00} {83850 0.250 10367.50} {160450 0.280 29517.50} {240000 0.330 51791.50} {421900 0.350 111818.50} {475000 0.396 130578.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20160101 {TaxableWages} { debugLog "--- California Tax Calculation (20160101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=13419} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=26838} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=13419} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=26838} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 4044;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 8088;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 4044; } else { ::set Standard 8088; } } ::set Regular 119.90; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {7850 0.0220 86.35} {18610 0.0440 323.07} {29372 0.0660 796.60} {40773 0.0880 1549.07} {51530 0.1023 2495.69} {263222 0.1133 24151.78} {315866 0.1243 30116.35} {526443 0.1353 56291.07} {1000000 0.1463 120363.33} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {15700 0.0220 172.70} {37220 0.0440 646.14} {58744 0.0660 1593.20} {81546 0.0880 3098.13} {103060 0.1023 4991.36} {526444 0.1133 48303.54} {631732 0.1243 60232.67} {1000000 0.1353 106008.38} {1052886 0.1463 113163.86} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {15710 0.0220 172.81} {37221 0.0440 646.05} {47982 0.0660 1119.53} {59383 0.0880 1872.00} {70142 0.1023 2818.79} {357981 0.1133 32264.72} {429578 0.1243 40376.66} {715962 0.1353 75974.19} {1000000 0.1463 114404.53} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method CT-20160101 {TaxableWages} { debugLog "--- Connecticut Tax Calculation (20160101) ---"; ::set Desc "CT Tax"; ::set Rate 0.030; ::set Flat 0; ::set BaseTax 0; ::set Credit 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CT-20160101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::set Exemption 0; ::if {($MaritalStatus eq "married-filing-jointly-both-spouses-working24} {::set Exemption 11}; ::if {$Tmp1>25} {::set Exemption 10}; ::if {$Tmp1>26} {::set Exemption 9}; ::if {$Tmp1>27} {::set Exemption 8}; ::if {$Tmp1>28} {::set Exemption 7}; ::if {$Tmp1>29} {::set Exemption 6}; ::if {$Tmp1>30} {::set Exemption 5}; ::if {$Tmp1>31} {::set Exemption 4}; ::if {$Tmp1>32} {::set Exemption 3}; ::if {$Tmp1>33} {::set Exemption 2}; ::if {$Tmp1>34} {::set Exemption 1}; ::if {$Tmp1>35} {::set Exemption 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::set Base 16000; ::set Exemption 19; ::if {$Tmp1>38} {::set Exemption 18}; ::if {$Tmp1>39} {::set Exemption 17}; ::if {$Tmp1>40} {::set Exemption 16}; ::if {$Tmp1>41} {::set Exemption 15}; ::if {$Tmp1>42} {::set Exemption 14}; ::if {$Tmp1>43} {::set Exemption 13}; ::if {$Tmp1>44} {::set Exemption 12}; ::if {$Tmp1>45} {::set Exemption 11}; ::if {$Tmp1>46} {::set Exemption 10}; ::if {$Tmp1>47} {::set Exemption 9}; ::if {$Tmp1>48} {::set Exemption 8}; ::if {$Tmp1>49} {::set Exemption 7}; ::if {$Tmp1>50} {::set Exemption 6}; ::if {$Tmp1>51} {::set Exemption 5}; ::if {$Tmp1>52} {::set Exemption 4}; ::if {$Tmp1>53} {::set Exemption 3}; ::if {$Tmp1>54} {::set Exemption 2}; ::if {$Tmp1>55} {::set Exemption 1}; ::if {$Tmp1>56} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::set Base 20000; ::set Exemption 24; ::if {$Tmp1>48} {::set Exemption 23}; ::if {$Tmp1>49} {::set Exemption 22}; ::if {$Tmp1>50} {::set Exemption 21}; ::if {$Tmp1>51} {::set Exemption 20}; ::if {$Tmp1>52} {::set Exemption 19}; ::if {$Tmp1>53} {::set Exemption 18}; ::if {$Tmp1>54} {::set Exemption 17}; ::if {$Tmp1>55} {::set Exemption 16}; ::if {$Tmp1>56} {::set Exemption 15}; ::if {$Tmp1>57} {::set Exemption 14}; ::if {$Tmp1>58} {::set Exemption 13}; ::if {$Tmp1>59} {::set Exemption 12}; ::if {$Tmp1>60} {::set Exemption 11}; ::if {$Tmp1>61} {::set Exemption 10}; ::if {$Tmp1>62} {::set Exemption 9}; ::if {$Tmp1>63} {::set Exemption 8}; ::if {$Tmp1>64} {::set Exemption 7}; ::if {$Tmp1>65} {::set Exemption 6}; ::if {$Tmp1>66} {::set Exemption 5}; ::if {$Tmp1>67} {::set Exemption 4}; ::if {$Tmp1>68} {::set Exemption 3}; ::if {$Tmp1>69} {::set Exemption 2}; ::if {$Tmp1>70} {::set Exemption 1}; ::if {$Tmp1>71} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Base 10000; ::set Exemption 0; } ::if {$MaritalStatus eq "single"} { ::set Base 10000; ::set Exemption 15; ::if {$Tmp1>30} {::set Exemption 14}; ::if {$Tmp1>31} {::set Exemption 13}; ::if {$Tmp1>32} {::set Exemption 12}; ::if {$Tmp1>33} {::set Exemption 11}; ::if {$Tmp1>34} {::set Exemption 10}; ::if {$Tmp1>35} {::set Exemption 9}; ::if {$Tmp1>36} {::set Exemption 8}; ::if {$Tmp1>37} {::set Exemption 7}; ::if {$Tmp1>38} {::set Exemption 6}; ::if {$Tmp1>39} {::set Exemption 5}; ::if {$Tmp1>40} {::set Exemption 4}; ::if {$Tmp1>41} {::set Exemption 3}; ::if {$Tmp1>42} {::set Exemption 2}; ::if {$Tmp1>43} {::set Exemption 1}; ::if {$Tmp1>44} {::set Exemption 0}; } ::set Exemption [::expr $Exemption * 1000]; ::set Taxable [::expr $Taxable-$Exemption]; ;#// (6) Annual Taxable Income ::set Tax 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "married-filing-separately" \ } { ::if {$Taxable<=10000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>10000} {::set Base 10000; ::set Rate 0.05; ::set Flat 300;} ::if {$Taxable>50000} {::set Base 50000; ::set Rate 0.055; ::set Flat 2300;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.06; ::set Flat 5050;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.065; ::set Flat 11050;} ::if {$Taxable>250000} {::set Base 250000; ::set Rate 0.067; ::set Flat 14300;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable<=16000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>16000} {::set Base 16000; ::set Rate 0.05; ::set Flat 480;} ::if {$Taxable>80000} {::set Base 80000; ::set Rate 0.055; ::set Flat 3680;} ::if {$Taxable>160000} {::set Base 160000; ::set Rate 0.06; ::set Flat 8080;} ::if {$Taxable>320000} {::set Base 320000; ::set Rate 0.065; ::set Flat 17680;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.067; ::set Flat 22880;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable<=20000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>20000} {::set Base 20000; ::set Rate 0.05; ::set Flat 600;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.055; ::set Flat 4600;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.06; ::set Flat 10100;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.065; ::set Flat 22100;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.067; ::set Flat 28600;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "exempt"} { ::set Tax 0; } ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable>50250} { ::if {$Taxable>50250&&$Taxable<52750} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>52750&&$Taxable<55250} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>55250&&$Taxable<57750} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>57750&&$Taxable<60250} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>60250&&$Taxable<62750} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>62750&&$Taxable<65250} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>65250&&$Taxable<67750} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>67750&&$Taxable<70250} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>70250&&$Taxable<72750} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>72750} {::set Tax [::expr $Tax+200]}; } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable>78500} { ::if {$Taxable>78500&&$Taxable<82500} {::set Tax [::expr $Tax+32]}; ::if {$Taxable>82500&&$Taxable<86500} {::set Tax [::expr $Tax+64]}; ::if {$Taxable>86500&&$Taxable<90500} {::set Tax [::expr $Tax+96]}; ::if {$Taxable>90500&&$Taxable<94500} {::set Tax [::expr $Tax+128]}; ::if {$Taxable>94500&&$Taxable<98500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>98500&&$Taxable<102500} {::set Tax [::expr $Tax+192]}; ::if {$Taxable>102500&&$Taxable<106500} {::set Tax [::expr $Tax+224]}; ::if {$Taxable>106500&&$Taxable<100500} {::set Tax [::expr $Tax+256]}; ::if {$Taxable>110500&&$Taxable<114500} {::set Tax [::expr $Tax+288]}; ::if {$Taxable>114500} {::set Tax [::expr $Tax+320]}; } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable>100500} { ::if {$Taxable>100500&&$Taxable<105500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>105500&&$Taxable<110500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>110500&&$Taxable<115500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>115500&&$Taxable<120500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>120500&&$Taxable<125500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>125500&&$Taxable<130500} {::set Tax [::expr $Tax+240]}; ::if {$Taxable>130500&&$Taxable<135500} {::set Tax [::expr $Tax+280]}; ::if {$Taxable>135500&&$Taxable<140500} {::set Tax [::expr $Tax+320]}; ::if {$Taxable>140500&&$Taxable<145500} {::set Tax [::expr $Tax+360]}; ::if {$Taxable>145000} {::set Tax [::expr $Tax+400]}; } } ::if {$MaritalStatus eq "single"} { ::if {$Taxable>56500} { ::if {$Taxable>56500&&$Taxable<61500} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>61500&&$Taxable<66500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>66500&&$Taxable<71500} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>71500&&$Taxable<76500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>76500&&$Taxable<81500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>81500&&$Taxable<86500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>86500&&$Taxable<91500} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>91500&&$Taxable<96500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>96500&&$Taxable<101500} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>101500} {::set Tax [::expr $Tax+200]}; } } ::set Recapture 0; ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "single" \ } { ::if {$Taxable >200000} { ::set Recapture [::expr $Taxable-200000]; ::set Recapture [::expr $Recapture/5000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*75]; ::if {$Recapture>=2250} { ::set Recapture 2250; } } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable >320000} { ::set Recapture [::expr $Taxable-320000]; ::set Recapture [::expr $Recapture/8000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*120]; ::if {$Recapture>=3600} { ::set Recapture 3600; } } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable >400000} { ::set Recapture [::expr $Taxable-400000]; ::set Recapture [::expr $Recapture/10000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*150]; ::if {$Recapture>=4500} { ::set Recapture 4500; } } } ::set Tax [::expr $Tax+$Recapture]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$Tmp1>12} {::set Credit .75}; ::if {$Tmp1>15} {::set Credit .70}; ::if {$Tmp1>15.5} {::set Credit .65}; ::if {$Tmp1>16} {::set Credit .60}; ::if {$Tmp1>16.5} {::set Credit .55}; ::if {$Tmp1>17} {::set Credit .50}; ::if {$Tmp1>17.5} {::set Credit .45}; ::if {$Tmp1>18} {::set Credit .40}; ::if {$Tmp1>18.5} {::set Credit .35}; ::if {$Tmp1>20} {::set Credit .30}; ::if {$Tmp1>20.5} {::set Credit .25}; ::if {$Tmp1>21} {::set Credit .20}; ::if {$Tmp1>21.5} {::set Credit .15}; ::if {$Tmp1>25} {::set Credit .14}; ::if {$Tmp1>25.5} {::set Credit .13}; ::if {$Tmp1>26} {::set Credit .12}; ::if {$Tmp1>26.5} {::set Credit .11}; ::if {$Tmp1>27} {::set Credit .10}; ::if {$Tmp1>48} {::set Credit .09}; ::if {$Tmp1>48.5} {::set Credit .08}; ::if {$Tmp1>49} {::set Credit .07}; ::if {$Tmp1>49.5} {::set Credit .06}; ::if {$Tmp1>50} {::set Credit .05}; ::if {$Tmp1>50.5} {::set Credit .04}; ::if {$Tmp1>51} {::set Credit .03}; ::if {$Tmp1>51.5} {::set Credit .02}; ::if {$Tmp1>52.0} {::set Credit .01}; ::if {$Tmp1>52.5} {::set Credit 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Tmp1>19} {::set Credit .75}; ::if {$Tmp1>24} {::set Credit .70}; ::if {$Tmp1>24.5} {::set Credit .65}; ::if {$Tmp1>25} {::set Credit .60}; ::if {$Tmp1>25.5} {::set Credit .55}; ::if {$Tmp1>26} {::set Credit .50}; ::if {$Tmp1>26.5} {::set Credit .45}; ::if {$Tmp1>27} {::set Credit .40}; ::if {$Tmp1>27.5} {::set Credit .35}; ::if {$Tmp1>34} {::set Credit .30}; ::if {$Tmp1>34.5} {::set Credit .25}; ::if {$Tmp1>35} {::set Credit .20}; ::if {$Tmp1>35.5} {::set Credit .15}; ::if {$Tmp1>44} {::set Credit .14}; ::if {$Tmp1>44.5} {::set Credit .13}; ::if {$Tmp1>45} {::set Credit .12}; ::if {$Tmp1>45.5} {::set Credit .11}; ::if {$Tmp1>46} {::set Credit .10}; ::if {$Tmp1>74} {::set Credit .09}; ::if {$Tmp1>74.5} {::set Credit .08}; ::if {$Tmp1>75} {::set Credit .07}; ::if {$Tmp1>75.5} {::set Credit .06}; ::if {$Tmp1>76} {::set Credit .05}; ::if {$Tmp1>76.5} {::set Credit .04}; ::if {$Tmp1>77} {::set Credit .03}; ::if {$Tmp1>77.5} {::set Credit .02}; ::if {$Tmp1>78} {::set Credit .01}; ::if {$Tmp1>78.5} {::set Credit 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Tmp1>24} {::set Credit .75}; ::if {$Tmp1>30} {::set Credit .70}; ::if {$Tmp1>30.5} {::set Credit .65}; ::if {$Tmp1>31} {::set Credit .60}; ::if {$Tmp1>31.5} {::set Credit .55}; ::if {$Tmp1>32} {::set Credit .50}; ::if {$Tmp1>32.5} {::set Credit .45}; ::if {$Tmp1>33} {::set Credit .40}; ::if {$Tmp1>33.5} {::set Credit .35}; ::if {$Tmp1>40} {::set Credit .30}; ::if {$Tmp1>40.5} {::set Credit .25}; ::if {$Tmp1>41} {::set Credit .20}; ::if {$Tmp1>41.5} {::set Credit .15}; ::if {$Tmp1>50} {::set Credit .14}; ::if {$Tmp1>50.5} {::set Credit .13}; ::if {$Tmp1>51} {::set Credit .12}; ::if {$Tmp1>51.5} {::set Credit .11}; ::if {$Tmp1>52} {::set Credit .10}; ::if {$Tmp1>96} {::set Credit .09}; ::if {$Tmp1>96.5} {::set Credit .08}; ::if {$Tmp1>97} {::set Credit .07}; ::if {$Tmp1>97.5} {::set Credit .06}; ::if {$Tmp1>98} {::set Credit .05}; ::if {$Tmp1>98.5} {::set Credit .04}; ::if {$Tmp1>99} {::set Credit .03}; ::if {$Tmp1>99.5} {::set Credit .02}; ::if {$Tmp1>100} {::set Credit .01}; ::if {$Tmp1>100.5} {::set Credit 0}; } ::if {$MaritalStatus eq "single"} { ::if {$Tmp1>15.0} {::set Credit .75}; ::if {$Tmp1>18.8} {::set Credit .70}; ::if {$Tmp1>19.3} {::set Credit .65}; ::if {$Tmp1>19.8} {::set Credit .60}; ::if {$Tmp1>20.3} {::set Credit .55}; ::if {$Tmp1>20.8} {::set Credit .50}; ::if {$Tmp1>21.3} {::set Credit .45}; ::if {$Tmp1>21.8} {::set Credit .40}; ::if {$Tmp1>22.3} {::set Credit .35}; ::if {$Tmp1>25.0} {::set Credit .30}; ::if {$Tmp1>25.5} {::set Credit .25}; ::if {$Tmp1>26.0} {::set Credit .20}; ::if {$Tmp1>26.5} {::set Credit .15}; ::if {$Tmp1>31.3} {::set Credit .14}; ::if {$Tmp1>31.8} {::set Credit .13}; ::if {$Tmp1>32.3} {::set Credit .12}; ::if {$Tmp1>32.8} {::set Credit .11}; ::if {$Tmp1>33.3} {::set Credit .10}; ::if {$Tmp1>60.0} {::set Credit .09}; ::if {$Tmp1>60.5} {::set Credit .08}; ::if {$Tmp1>61.0} {::set Credit .07}; ::if {$Tmp1>61.5} {::set Credit .06}; ::if {$Tmp1>62.0} {::set Credit .05}; ::if {$Tmp1>62.5} {::set Credit .04}; ::if {$Tmp1>63.0} {::set Credit .03}; ::if {$Tmp1>63.5} {::set Credit .02}; ::if {$Tmp1>64.0} {::set Credit .01}; ::if {$Tmp1>64.5} {::set Credit 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Credit 0.00; } ;# Exempt ::if {$MaritalStatus eq "exempt"} { ::set Credit 1; ;#// (This will cause credit to be 0%) } ::set Credit [::expr 1-$Credit]; ::set Tax [::expr $Tax*$Credit]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Tax<0} { ::set Tax 0; } ::set Result [round2 $Tax]; ::return $Result; } method IL-20160101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20160101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0375; ::set EXEMPT1 2175; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20160101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2460; ::set CREDIT 10; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20160101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20160101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4050; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=70000} { ::set Phase [::expr $Taxable-67150]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/75000.0]; ::if {$Phase<1} { ::set Phase [::expr $Phase*11600]; } else { ::set Phase 11600; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable+$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; } } "married" { ::if {$Taxable>=140000} { ::set Phase [::expr $Taxable-137150]; ::if {$Phase<0} { ::set Phase 0; } else { ::set Phase [::expr $Phase/150000.0]; ::if {$Phase<1} { ::set Phase [::expr $Phase*23200]; } else { ::set Phase 23200; } ::set Taxable [::expr $Taxable-$Allow]; ::set Taxable [::expr $Taxable+$Phase]; } } else { ::set Taxable [::expr $Taxable-$Allow]; } } } ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=8750} {::set Base 8750;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=29800} {::set Base 29800;::set Rate 0.0675;::set Flat 1221;} ::if {$Taxable>=46250} {::set Base 46250;::set Rate 0.0715;::set Flat 2331;} } "married" { ::if {$Taxable>=20350} {::set Base 20350;::set Rate 0.0580;::set Flat 0;} ::if {$Taxable>=62450} {::set Base 62450;::set Rate 0.0675;::set Flat 2442;} ::if {$Taxable>=95350} {::set Base 95350;::set Rate 0.0715;::set Flat 4663;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MN-20160101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4050; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2250} {::set BASE 2250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=27430} {::set BASE 27430;::set RATE 0.0705;::set FLAT 1347.13;} ::if {$TAXABLE>=84990} {::set BASE 84990;::set RATE 0.0785;::set FLAT 5405.11;} ::if {$TAXABLE>=157900} {::set BASE 157900;::set RATE 0.0985;::set FLAT 11128.55;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8550} {::set BASE 8550;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=45370} {::set BASE 45370;::set RATE 0.0705;::set FLAT 1969.87;} ::if {$TAXABLE>=154820} {::set BASE 154820;::set RATE 0.0785;::set FLAT 9686.10;} ::if {$TAXABLE>=267970} {::set BASE 267970;::set RATE 0.0985;::set FLAT 18568.38;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20160101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20160101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4050; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=2250} {::set Base 2250;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=7750} {::set Base 7750;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=13250} {::set Base 13250;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=18250} {::set Base 18250;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=8550} {::set Base 8550;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=16550} {::set Base 16550;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=24550} {::set Base 24550;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=32550} {::set Base 32550;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20160101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20160101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7900;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8450 .0450 338} {11650 .0525 482} {13850 .0590 598} {21300 .0645 1037} {80150 .0665 4833} {96200 .0758 5900} {106950 .0808 6715} {160500 .0715 11042} {214000 .0815 14867} {267500 .0735 19227} {1070350 .4902 78237} {1123950 .0962 104512} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8450 .0450 338} {11650 .0525 482} {13850 .0590 598} {21300 .0645 1037} {80150 .0665 4833} {96200 .0728 5900} {106950 .0778 6683} {160500 .0808 10849} {214000 .0715 15172} {321050 .0815 22826} {374600 .0735 27190} {1070350 .0765 78328} {2140900 .8842 160225} {2194500 .0962 207618} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method OK-20160101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (2016101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>6300} {::set BASE 6300;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>7300} {::set BASE 7300;::set RATE 0.010;::set FLAT 5.00;} ::if {$TAXABLE>8800} {::set BASE 8800;::set RATE 0.020;::set FLAT 20.00;} ::if {$TAXABLE>10050} {::set BASE 10050;::set RATE 0.030;::set FLAT 45.00;} ::if {$TAXABLE>11200} {::set BASE 11200;::set RATE 0.040;::set FLAT 79.50;} ::if {$TAXABLE>13500} {::set BASE 13500;::set RATE 0.050;::set FLAT 171.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>12600} {::set BASE 12600;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>14600} {::set BASE 14600;::set RATE 0.010;::set FLAT 10.00;} ::if {$TAXABLE>17600} {::set BASE 17600;::set RATE 0.020;::set FLAT 40.00;} ::if {$TAXABLE>20100} {::set BASE 20100;::set RATE 0.030;::set FLAT 90.00;} ::if {$TAXABLE>22400} {::set BASE 22400;::set RATE 0.040;::set FLAT 159.00;} ::if {$TAXABLE>24800} {::set BASE 24800;::set RATE 0.050;::set FLAT 255.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method 40-20160101 {TaxableWages} { debugLog "--- New York City Tax Calculation (20160101) ---"; ::set DESC "NYC Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set DEDUCT 0; ::set EXEMPT 1000; ::if {$MaritalStatus eq "single"} { ::set DEDUCT 5000; ::set EXEMPT 1000; } ::if {$MaritalStatus eq "married"} { ::set DEDUCT 5500; ::set EXEMPT 1000; } ::if {$RESIDENCE eq "non-resident"} { ::set DEDUCT 4000; ::set EXEMPT 0; } ::set S401K [earningsOfType "401K"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$S401K]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Deduct-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0190;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0265;::set FLAT 152;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0310;::set FLAT 171;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0370;::set FLAT 366;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0390;::set FLAT 736;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0400;::set FLAT 2101;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0425;::set FLAT 20834.16;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0190;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0265;::set FLAT 152;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0310;::set FLAT 171;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0370;::set FLAT 366;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0390;::set FLAT 736;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0400;::set FLAT 2101;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0425;::set FLAT 20828.46;} } } ::if {$RESIDENCE eq "non-resident"} { ::set TAXABLE [::expr $TAXABLE+$DEDUCT]; ::set RATE .0025; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE $TAXABLE;} ::if {$TAXABLE>=3999.99} {::set BASE 3000;} ::if {$TAXABLE>=10000.00} {::set BASE 2000;} ::if {$TAXABLE>=20000.00} {::set BASE 1000;} ::if {$TAXABLE>=30000.00} {::set BASE 0;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 50-20160101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20160101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7400;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7900;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8450 .0450 338} {11650 .0525 482} {13850 .0590 598} {21300 .0645 1037} {81500 .0665 4833} {96200 .0758 5900} {106950 .0808 6715} {160500 .0715 11042} {214000 .0815 14867} {267500 .0735 19227} {1070350 .4902 78237} {1123950 .0962 104512} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8450 .0450 338} {11650 .0525 482} {13850 .0590 598} {21300 .0645 1037} {81500 .0665 4833} {96200 .0728 5900} {106950 .0778 6683} {160500 .0808 10849} {214000 .0715 15172} {321050 .0815 22826} {374600 .0735 27190} {1070350 .0765 78238} {2140900 .8842 160225} {2194500 .0962 206618} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method DC-20160101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20160101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1775; ::if {($MaritalStatus eq "married-filing-separately")} {::set MaritalStatus "married-filing-jointly";} ::if {($MaritalStatus eq "single")} {::set MaritalStatus "married-filing-jointly";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married-filing-jointly"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0650;::set FLAT 2200.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0850;::set FLAT 3500.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0875;::set FLAT 28150.00;} ::if {$TAXABLE>=1000000} {::set BASE 1000000;::set RATE .0895;::set FLAT 82025.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method MD-20160101 {TaxableWages} { debugLog "--- Maryland Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MD"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 3200.00; ::set MINIMUM 1500; ::set MAXIMUM 2000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set Perc [payCodeValueGet ".percent"]; ::if {$Perc eq ""} {::set Perc 0;} ::set RESIDENCE [employeeInfoGet ".state/current.residence"]; ::set RESIDENCE [codeValidate $RESIDENCE {non-resident resident maryland-residents-employed-in-delaware} resident]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$TAXABLE<5000} {::set TAXABLE 0;} ::set STANDARD [::expr $TAXABLE * 0.15]; ;#// Standard = (15% of Taxable) but not more than Maximum or less than Minimum ::if {$STANDARD>$MAXIMUM} {::set STANDARD $MAXIMUM;} ::if {$STANDARD<$MINIMUM} {::set STANDARD $MINIMUM;} ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Standard-(Xemp*Exempt) ::if {$TAXABLE<=0} {::return 0;} ::if {$RESIDENCE eq "maryland-residents-employed-in-delaware"} { ::set BASE 0; ::set RATE 0.0320; ::set FLAT 0; } else { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0200;::set FLAT 0;} ::if {$TAXABLE>=5000} {::set BASE 0;::set RATE 0.0600;::set FLAT 0;} } ::if {$RESIDENCE eq "resident"} { ::if {$Perc!=0} { ::set Tmp1 [::expr $BASE*$Perc]; ;#// Add % of base to flat tax amount ::set Tmp1 [::expr $Tmp1 * 0.01]; ::set FLAT [::expr $FLAT+$Tmp1]; ::set Tmp1 [::expr $Perc * 0.01]; ;#// Up the tax rate ::set RATE [::expr $RATE+$Tmp1]; } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MA-20160101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::qw::number::var::negative Total_FICA_MEDI; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD $MAXIMUM; } else { ::set STANDARD $Total_FICA_MEDI; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0510]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20160101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 6300; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 12600; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 9300; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 6300; } else { ::set MaritalStatus "single"; ::set STANDARD 6300; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1000} {::set BASE 1000;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2000} {::set BASE 2000;::set RATE .025;::set FLAT [::expr $FLAT+20];} ::if {$TAXABLE>3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>4000} {::set BASE 4000;::set RATE .035;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE .040;::set FLAT [::expr $FLAT+35];} ::if {$TAXABLE>6000} {::set BASE 6000;::set RATE .045;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>7000} {::set BASE 7000;::set RATE .050;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>8000} {::set BASE 8000;::set RATE .055;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>9000} {::set BASE 9000;::set RATE .060;::set FLAT [::expr $FLAT+55];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NC-20160101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "head-of-household" { ::set STANDARD 12400; } default { ::set STANDARD 7750; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0585; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ND-20160101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4050; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4300} {::set BASE 4300;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=41000} {::set BASE 41000;::set RATE 0.0204;::set FLAT 403.70;} ::if {$TAXABLE>=83000} {::set BASE 83000;::set RATE 0.0227;::set FLAT 1260.50;} ::if {$TAXABLE>=192000} {::set BASE 192000;::set RATE 0.0264;::set FLAT 3734.80;} ::if {$TAXABLE>=413000} {::set BASE 413000;::set RATE 0.0290;::set FLAT 9569.20;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE 0.0110;::set FLAT 0.00;} ::if {$TAXABLE>=71000} {::set BASE 71000;::set RATE 0.0204;::set FLAT 671.00;} ::if {$TAXABLE>=135000} {::set BASE 135000;::set RATE 0.0227;::set FLAT 1976.60;} ::if {$TAXABLE>=240000} {::set BASE 240000;::set RATE 0.0264;::set FLAT 4360.10;} ::if {$TAXABLE>=420000} {::set BASE 420000;::set RATE 0.0290;::set FLAT 9112.10;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20160101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20160101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6500.00; ::set PERSONAL 195.00; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2155; ::if {$Annual>=50000} {::set MAXIMUM 6450;} ::if {$Annual>=125000} {::set MAXIMUM 5150;} ::if {$Annual>=130000} {::set MAXIMUM 3850;} ::if {$Annual>=135000} {::set MAXIMUM 2550;} ::if {$Annual>=140000} {::set MAXIMUM 1250;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4315; ::if {$Annual>=50000} {::set MAXIMUM 6450;} ::if {$Annual>=250000} {::set MAXIMUM 5150;} ::if {$Annual>=260000} {::set MAXIMUM 3850;} ::if {$Annual>=270000} {::set MAXIMUM 2550;} ::if {$Annual>=280000} {::set MAXIMUM 1250;} ::if {$Annual>=290000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3350} {::set BASE 3350;::set RATE 0.07;::set FLAT 363;} ::if {$TAXABLE>8450} {::set BASE 8450;::set RATE 0.09;::set FLAT 720;} } else { ::if {$TAXABLE>6700} {::set BASE 6700;::set RATE 0.07;::set FLAT 530;} ::if {$TAXABLE>16900} {::set BASE 16900;::set RATE 0.09;::set FLAT 1244;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41345} {::set BASE 8450;::set RATE 0.09;::set FLAT 525;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11014;} } else { ::if {$TAXABLE>39185} {::set BASE 16900;::set RATE 0.09;::set FLAT 1049;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22028;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20160101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20160101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>215800} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=60850} {::set BASE 60850;::set RATE 0.0475;::set FLAT 2281.88;} ::if {$TAXABLE>=138300} {::set BASE 138300;::set RATE 0.0599;::set FLAT 5960.75} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20160101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20160101) ---"; ::set ALLOW 4050; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2650} {::set BASE 2650;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=39900} {::set BASE 39900;::set RATE 0.0680;::set FLAT 1322.38;} ::if {$TAXABLE>=93400} {::set BASE 93400;::set RATE 0.0780;::set FLAT 4960.38;} ::if {$TAXABLE>=192400} {::set BASE 192400;::set RATE 0.0880;::set FLAT 12682.38;} ::if {$TAXABLE>=415600} {::set BASE 415600;::set RATE 0.0895;::set FLAT 32323.98;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=69900} {::set BASE 69900;::set RATE 0.0680;::set FLAT 2197.45;} ::if {$TAXABLE>=160450} {::set BASE 160450;::set RATE 0.0780;::set FLAT 8354.85;} ::if {$TAXABLE>=240000} {::set BASE 240000;::set RATE 0.0880;::set FLAT 14559.75;} ::if {$TAXABLE>=421900} {::set BASE 421900;::set RATE 0.0895;::set FLAT 30566.95;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method HI-20150701 {TaxableWages} { debugLog "--- Hawaii Tax Calculation (20150701) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "HI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1144; ;#// Amount per exemption ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=2400} {::set BASE 2400;::set RATE .032;::set FLAT 34;} ::if {$TAXABLE>=4800} {::set BASE 4800;::set RATE .055;::set FLAT 110;} ::if {$TAXABLE>=9600} {::set BASE 9600;::set RATE .064;::set FLAT 374;} ::if {$TAXABLE>=14400} {::set BASE 14400;::set RATE .068;::set FLAT 682;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .072;::set FLAT 1008;} ::if {$TAXABLE>=24000} {::set BASE 24000;::set RATE .076;::set FLAT 1354;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .079;::set FLAT 2266;} ::if {$TAXABLE>=48000} {::set BASE 48000;::set RATE .0825;::set FLAT 3214;} ::if {$TAXABLE>=150000} {::set BASE 150000;::set RATE .09;::set FLAT 11629;} ::if {$TAXABLE>=175000} {::set BASE 175000;::set RATE .10;::set FLAT 13879;} ::if {$TAXABLE>=200000} {::set BASE 200000;::set RATE .11;::set FLAT 16379;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=4800} {::set BASE 4800;::set RATE .032;::set FLAT 67;} ::if {$TAXABLE>=9600} {::set BASE 9600;::set RATE .055;::set FLAT 221;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .064;::set FLAT 749;} ::if {$TAXABLE>=28800} {::set BASE 28800;::set RATE .068;::set FLAT 1363;} ::if {$TAXABLE>=38400} {::set BASE 38400;::set RATE .072;::set FLAT 2016;} ::if {$TAXABLE>=48000} {::set BASE 48000;::set RATE .076;::set FLAT 2707;} ::if {$TAXABLE>=72000} {::set BASE 72000;::set RATE .079;::set FLAT 4531;} ::if {$TAXABLE>=96000} {::set BASE 96000;::set RATE .0825;::set FLAT 6427;} ::if {$TAXABLE>=300000} {::set BASE 300000;::set RATE .09;::set FLAT 23257;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .10;::set FLAT 27757;} ::if {$TAXABLE>=400000} {::set BASE 400000;::set RATE .11;::set FLAT 32757;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX==0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ID-20150701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20150701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3950; ;#// Amount per exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=2250} {::set Base 2250;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=3679} {::set Base 3679;::set Rate 0.036;::set Flat 23}; ::if {$Taxable>=5108} {::set Base 5108;::set Rate 0.041;::set Flat 74}; ::if {$Taxable>=6537} {::set Base 6537;::set Rate 0.051;::set Flat 133}; ::if {$Taxable>=7966} {::set Base 7966;::set Rate 0.061;::set Flat 206}; ::if {$Taxable>=9395} {::set Base 9395;::set Rate 0.071;::set Flat 293}; ::if {$Taxable>=12968} {::set Base 12968;::set Rate 0.074;::set Flat 547}; } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=8450} {::set Base 8450;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=11308} {::set Base 11308;::set Rate 0.036;::set Flat 46}; ::if {$Taxable>=14166} {::set Base 14166;::set Rate 0.041;::set Flat 149}; ::if {$Taxable>=17024} {::set Base 17024;::set Rate 0.051;::set Flat 266}; ::if {$Taxable>=19882} {::set Base 19882;::set Rate 0.061;::set Flat 412}; ::if {$Taxable>=22740} {::set Base 22740;::set Rate 0.071;::set Flat 586}; ::if {$Taxable>=29886} {::set Base 29886;::set Rate 0.074;::set Flat 1093}; } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method US-20150101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20150101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2300 0.100 0.00} {11525 0.150 922.50} {39750 0.250 5156.25} {93050 0.280 18481.25} {191600 0.330 46075.25} {413800 0.350 119401.25} {415500 0.396 119996.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8600 0.100 0.00} {27050 0.150 1845.00} {83500 0.250 10312.50} {159800 0.280 28387.50} {239050 0.330 51577.50} {420100 0.350 111324.00} {473450 0.396 129996.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method 50-20150101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20150101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7350;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7850;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8400 .0450 336} {11600 .0525 480} {13750 .0590 593} {21150 .0645 1029} {79600 .0665 4800} {95550 .0758 5860} {106200 .0808 6667} {159350 .0715 10962} {212500 .0815 14762} {265600 .0735 19090} {1062650 .4902 77673} {1115850 .0962 103752} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8400 .0450 336} {11600 .0525 480} {13750 .0590 593} {21150 .0645 1029} {79600 .0665 4800} {95550 .0728 5860} {106200 .0778 6635} {159350 .0808 10771} {212500 .0715 15065} {318750 .0815 22662} {371900 .0735 26994} {1062650 .0765 77764} {2125450 .8842 159068} {2178650 .0962 206107} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .1675]; ;#// 16.75% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method AR-20150101 {TaxableWages} { ::set DESC "Arkansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 26; ;#// Exemption for dependents ::set STANDARD 2200; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.009;::set FLAT 0;} ::if {$TAXABLE>=4300} {::set BASE 4300;::set RATE 0.024;::set FLAT 64.49;} ::if {$TAXABLE>=8400} {::set BASE 8400;::set RATE 0.034;::set FLAT 148.48;} ::if {$TAXABLE>=12600} {::set BASE 12600;::set RATE 0.044;::set FLAT 274.47;} ::if {$TAXABLE>=21000} {::set BASE 21000;::set RATE 0.059;::set FLAT 589.45;} ::if {$TAXABLE>=35100} {::set BASE 35100;::set RATE 0.069;::set FLAT 940.44;} ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ::set DEPEND [::expr $Exemptions*$DEPEND]; ::set TAX [::expr $TAX-$DEPEND]; ::if {$TAX<0} { ::set TAX 0; } ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method CA-20150101 {TaxableWages} { debugLog "--- California Tax Calculation (20150101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=13267} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=26533} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=13267} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=26533} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 3992;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 7984;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 3992; } else { ::set Standard 7984; } } ::set Regular 118.80; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {7749 0.0220 85.24} {18371 0.0440 318.92} {28995 0.0660 786.38} {40250 0.0880 1529.21} {50869 0.1023 2463.68} {259844 0.1133 23841.82} {311812 0.1243 29729.79} {519687 0.1353 55568.65} {1000000 0.1463 120555.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {15498 0.0220 170.48} {36742 0.0440 637.85} {57990 0.0660 1572.76} {80500 0.0880 3058.42} {101738 0.1023 4927.36} {519688 0.1133 47683.65} {623624 0.1243 59459.60} {1000000 0.1353 106243.14} {1039374 0.1463 111570.44} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {15580 0.0220 170.59} {36743 0.0440 637.76} {47366 0.0660 1105.17} {58621 0.0880 1848.00} {69242 0.1023 2782.65} {353387 0.1133 31850.68} {424065 0.1243 39858.50} {706774 0.1353 74999.23} {1000000 0.1463 114672.71} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20150101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20150101) ---"; ::set ALLOW 4100; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 2300;} ::if {$MaritalStatus eq "married"} {::set BASE 8600;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0463]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $TAX]; ::return $Result; } method IL-20150101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20150101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .0375; ::set EXEMPT1 2150; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KS-20150101 {TaxableWages} { debugLog "--- Kansas Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2250; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .0270;::set FLAT 0.00;} ::if {$TAXABLE>=18000} {::set BASE 18000;::set RATE .046;::set FLAT 405.00;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=6000} {::set BASE 6000;::set RATE .0270;::set FLAT 0.00;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .046;::set FLAT 810.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20150101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2440; ::set CREDIT 10; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MA-20150101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::qw::number::var::negative Total_FICA_MEDI; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD $MAXIMUM; } else { ::set STANDARD $Total_FICA_MEDI; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0515]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20150101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20150101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=8650} {::set Base 8650;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=24350} {::set Base 24350;::set Rate 0.0795;::set Flat 1021;} } "married" { ::if {$Taxable>=20200} {::set Base 20200;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=51600} {::set Base 51600;::set Rate 0.0795;::set Flat 2041;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Taxable [::expr $Supp * .05]; ::set Tax [::expr $Tax+$Taxable]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $Tax]; ::return $Result; } method MN-20150101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 4000; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2300} {::set BASE 2300;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=27370} {::set BASE 27370;::set RATE 0.0705;::set FLAT 1341.25;} ::if {$TAXABLE>=84660} {::set BASE 84660;::set RATE 0.0785;::set FLAT 5380.20;} ::if {$TAXABLE>=157250} {::set BASE 157250;::set RATE 0.0985;::set FLAT 11078.52;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8600} {::set BASE 8600;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=45250} {::set BASE 45250;::set RATE 0.0705;::set FLAT 1960.78;} ::if {$TAXABLE>=154220} {::set BASE 154220;::set RATE 0.0785;::set FLAT 9643.17;} ::if {$TAXABLE>=266860} {::set BASE 266860;::set RATE 0.0985;::set FLAT 18485.41;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NY-20150101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20150101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7350;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7850;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8400 .0450 336} {11600 .0525 480} {13750 .0590 593} {21150 .0645 1029} {79600 .0665 4800} {95550 .0758 5860} {106200 .0808 6667} {159350 .0715 10962} {212500 .0815 14762} {265600 .0735 19090} {1062650 .4902 77673} {1115850 .0962 103752} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8400 .0450 336} {11600 .0525 480} {13750 .0590 593} {21150 .0645 1029} {79600 .0665 4800} {95550 .0728 5860} {106200 .0778 6635} {159350 .0808 10771} {212500 .0715 15065} {318750 .0815 22662} {371900 .0735 26994} {1062650 .0765 77764} {2125450 .8842 159068} {2178650 .0962 206107} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method RI-20150101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20150101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>214700} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=60550} {::set BASE 60550;::set RATE 0.0475;::set FLAT 2270.63;} ::if {$TAXABLE>=137650} {::set BASE 137650;::set RATE 0.0599;::set FLAT 5932.88} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method CT-20150101 {TaxableWages} { debugLog "--- Connecticut Tax Calculation (20150101) ---"; ::set Desc "CT Tax"; ::set Rate 0.030; ::set Flat 0; ::set BaseTax 0; ::set Credit 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CT-20150101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::set Exemption 0; ::if {($MaritalStatus eq "married-filing-jointly-both-spouses-working24} {::set Exemption 11}; ::if {$Tmp1>25} {::set Exemption 10}; ::if {$Tmp1>26} {::set Exemption 9}; ::if {$Tmp1>27} {::set Exemption 8}; ::if {$Tmp1>28} {::set Exemption 7}; ::if {$Tmp1>29} {::set Exemption 6}; ::if {$Tmp1>30} {::set Exemption 5}; ::if {$Tmp1>31} {::set Exemption 4}; ::if {$Tmp1>32} {::set Exemption 3}; ::if {$Tmp1>33} {::set Exemption 2}; ::if {$Tmp1>34} {::set Exemption 1}; ::if {$Tmp1>35} {::set Exemption 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::set Base 16000; ::set Exemption 19; ::if {$Tmp1>38} {::set Exemption 18}; ::if {$Tmp1>39} {::set Exemption 17}; ::if {$Tmp1>40} {::set Exemption 16}; ::if {$Tmp1>41} {::set Exemption 15}; ::if {$Tmp1>42} {::set Exemption 14}; ::if {$Tmp1>43} {::set Exemption 13}; ::if {$Tmp1>44} {::set Exemption 12}; ::if {$Tmp1>45} {::set Exemption 11}; ::if {$Tmp1>46} {::set Exemption 10}; ::if {$Tmp1>47} {::set Exemption 9}; ::if {$Tmp1>48} {::set Exemption 8}; ::if {$Tmp1>49} {::set Exemption 7}; ::if {$Tmp1>50} {::set Exemption 6}; ::if {$Tmp1>51} {::set Exemption 5}; ::if {$Tmp1>52} {::set Exemption 4}; ::if {$Tmp1>53} {::set Exemption 3}; ::if {$Tmp1>54} {::set Exemption 2}; ::if {$Tmp1>55} {::set Exemption 1}; ::if {$Tmp1>56} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::set Base 20000; ::set Exemption 24; ::if {$Tmp1>48} {::set Exemption 23}; ::if {$Tmp1>49} {::set Exemption 22}; ::if {$Tmp1>50} {::set Exemption 21}; ::if {$Tmp1>51} {::set Exemption 20}; ::if {$Tmp1>52} {::set Exemption 19}; ::if {$Tmp1>53} {::set Exemption 18}; ::if {$Tmp1>54} {::set Exemption 17}; ::if {$Tmp1>55} {::set Exemption 16}; ::if {$Tmp1>56} {::set Exemption 15}; ::if {$Tmp1>57} {::set Exemption 14}; ::if {$Tmp1>58} {::set Exemption 13}; ::if {$Tmp1>59} {::set Exemption 12}; ::if {$Tmp1>60} {::set Exemption 11}; ::if {$Tmp1>61} {::set Exemption 10}; ::if {$Tmp1>62} {::set Exemption 9}; ::if {$Tmp1>63} {::set Exemption 8}; ::if {$Tmp1>64} {::set Exemption 7}; ::if {$Tmp1>65} {::set Exemption 6}; ::if {$Tmp1>66} {::set Exemption 5}; ::if {$Tmp1>67} {::set Exemption 4}; ::if {$Tmp1>68} {::set Exemption 3}; ::if {$Tmp1>69} {::set Exemption 2}; ::if {$Tmp1>70} {::set Exemption 1}; ::if {$Tmp1>71} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Base 10000; ::set Exemption 0; } ::if {$MaritalStatus eq "single"} { ::set Base 10000; ::set Exemption 15; ::if {$Tmp1>30.0} {::set Exemption 14.0}; ::if {$Tmp1>31.0} {::set Exemption 13.0}; ::if {$Tmp1>32.0} {::set Exemption 12.0}; ::if {$Tmp1>33.0} {::set Exemption 11.0}; ::if {$Tmp1>34.0} {::set Exemption 10.0}; ::if {$Tmp1>35.0} {::set Exemption 9.0}; ::if {$Tmp1>36.0} {::set Exemption 8.0}; ::if {$Tmp1>37.0} {::set Exemption 7.0}; ::if {$Tmp1>38.0} {::set Exemption 6.0}; ::if {$Tmp1>39.0} {::set Exemption 5.0}; ::if {$Tmp1>40.0} {::set Exemption 4.0}; ::if {$Tmp1>41.0} {::set Exemption 3.0}; ::if {$Tmp1>42.0} {::set Exemption 2.0}; ::if {$Tmp1>43.0} {::set Exemption 1.0}; ::if {$Tmp1>44.0} {::set Exemption 0}; } ::set Exemption [::expr $Exemption * 1000]; ::set Taxable [::expr $Taxable-$Exemption]; ;#// (6) Annual Taxable Income ::set Tax 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "married-filing-separately" \ } { ::if {$Taxable<=10000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>10000} {::set Base 10000; ::set Rate 0.05; ::set Flat 300;} ::if {$Taxable>50000} {::set Base 50000; ::set Rate 0.055; ::set Flat 2300;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.06; ::set Flat 5050;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.065; ::set Flat 11050;} ::if {$Taxable>250000} {::set Base 250000; ::set Rate 0.067; ::set Flat 14300;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable<=16000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>16000} {::set Base 16000; ::set Rate 0.05; ::set Flat 480;} ::if {$Taxable>80000} {::set Base 80000; ::set Rate 0.055; ::set Flat 3680;} ::if {$Taxable>160000} {::set Base 160000; ::set Rate 0.06; ::set Flat 8080;} ::if {$Taxable>320000} {::set Base 320000; ::set Rate 0.065; ::set Flat 17680;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.067; ::set Flat 22880;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable<=20000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>20000} {::set Base 20000; ::set Rate 0.05; ::set Flat 600;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.055; ::set Flat 4600;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.06; ::set Flat 10100;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.065; ::set Flat 22100;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.067; ::set Flat 28600;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "exempt"} { ::set Tax 0; } ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable>50250} { ::if {$Taxable>50250&&$Taxable<52750} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>52750&&$Taxable<55250} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>55250&&$Taxable<57750} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>57750&&$Taxable<60250} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>60250&&$Taxable<62750} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>62750&&$Taxable<65250} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>65250&&$Taxable<67750} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>67750&&$Taxable<70250} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>70250&&$Taxable<72750} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>72750} {::set Tax [::expr $Tax+200]}; } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable>78500} { ::if {$Taxable>78500&&$Taxable<82500} {::set Tax [::expr $Tax+32]}; ::if {$Taxable>82500&&$Taxable<86500} {::set Tax [::expr $Tax+64]}; ::if {$Taxable>86500&&$Taxable<90500} {::set Tax [::expr $Tax+96]}; ::if {$Taxable>90500&&$Taxable<94500} {::set Tax [::expr $Tax+128]}; ::if {$Taxable>94500&&$Taxable<98500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>98500&&$Taxable<102500} {::set Tax [::expr $Tax+192]}; ::if {$Taxable>102500&&$Taxable<106500} {::set Tax [::expr $Tax+224]}; ::if {$Taxable>106500&&$Taxable<100500} {::set Tax [::expr $Tax+256]}; ::if {$Taxable>110500&&$Taxable<114500} {::set Tax [::expr $Tax+288]}; ::if {$Taxable>114500} {::set Tax [::expr $Tax+320]}; } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable>100500} { ::if {$Taxable>100500&&$Taxable<105500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>105500&&$Taxable<110500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>110500&&$Taxable<115500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>115500&&$Taxable<120500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>120500&&$Taxable<125500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>125500&&$Taxable<130500} {::set Tax [::expr $Tax+240]}; ::if {$Taxable>130500&&$Taxable<135500} {::set Tax [::expr $Tax+280]}; ::if {$Taxable>135500&&$Taxable<140500} {::set Tax [::expr $Tax+320]}; ::if {$Taxable>140500&&$Taxable<145500} {::set Tax [::expr $Tax+360]}; ::if {$Taxable>145000} {::set Tax [::expr $Tax+400]}; } } ::if {$MaritalStatus eq "single"} { ::if {$Taxable>56500} { ::if {$Taxable>56500&&$Taxable<61500} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>61500&&$Taxable<66500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>66500&&$Taxable<71500} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>71500&&$Taxable<76500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>76500&&$Taxable<81500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>81500&&$Taxable<86500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>86500&&$Taxable<91500} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>91500&&$Taxable<96500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>96500&&$Taxable<101500} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>101500} {::set Tax [::expr $Tax+200]}; } } ::set Recapture 0; ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "single" \ } { ::if {$Taxable >200000} { ::set Recapture [::expr $Taxable-200000]; ::set Recapture [::expr $Recapture/5000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*75]; ::if {$Recapture>=2250} { ::set Recapture 2250; } } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable >320000} { ::set Recapture [::expr $Taxable-320000]; ::set Recapture [::expr $Recapture/8000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*120]; ::if {$Recapture>=3600} { ::set Recapture 3600; } } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable >400000} { ::set Recapture [::expr $Taxable-400000]; ::set Recapture [::expr $Recapture/10000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*150]; ::if {$Recapture>=4500} { ::set Recapture 4500; } } } ::set Tax [::expr $Tax+$Recapture]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$Tmp1>12} {::set Credit .75}; ::if {$Tmp1>15} {::set Credit .7}; ::if {$Tmp1>15.5} {::set Credit .65}; ::if {$Tmp1>16} {::set Credit .6}; ::if {$Tmp1>16.5} {::set Credit .55}; ::if {$Tmp1>17} {::set Credit .5}; ::if {$Tmp1>17.5} {::set Credit .45}; ::if {$Tmp1>18} {::set Credit .4}; ::if {$Tmp1>18.5} {::set Credit .35}; ::if {$Tmp1>20} {::set Credit .3}; ::if {$Tmp1>20.5} {::set Credit .25}; ::if {$Tmp1>21} {::set Credit .2}; ::if {$Tmp1>21.5} {::set Credit .15}; ::if {$Tmp1>25} {::set Credit .14}; ::if {$Tmp1>25.5} {::set Credit .13}; ::if {$Tmp1>26} {::set Credit .12}; ::if {$Tmp1>26.5} {::set Credit .11}; ::if {$Tmp1>27} {::set Credit .1}; ::if {$Tmp1>48} {::set Credit .09}; ::if {$Tmp1>48.5} {::set Credit .08}; ::if {$Tmp1>49} {::set Credit .07}; ::if {$Tmp1>49.5} {::set Credit .06}; ::if {$Tmp1>50} {::set Credit .05}; ::if {$Tmp1>50.5} {::set Credit .04}; ::if {$Tmp1>51} {::set Credit .03}; ::if {$Tmp1>51.5} {::set Credit .02}; ::if {$Tmp1>52.0} {::set Credit .01}; ::if {$Tmp1>52.5} {::set Credit .0}; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Tmp1>19} {::set Credit .75}; ::if {$Tmp1>24} {::set Credit .7}; ::if {$Tmp1>24.5} {::set Credit .65}; ::if {$Tmp1>25} {::set Credit .6}; ::if {$Tmp1>25.5} {::set Credit .55}; ::if {$Tmp1>26} {::set Credit .5}; ::if {$Tmp1>26.5} {::set Credit .45}; ::if {$Tmp1>27} {::set Credit .4}; ::if {$Tmp1>27.5} {::set Credit .35}; ::if {$Tmp1>34} {::set Credit .3}; ::if {$Tmp1>34.5} {::set Credit .25}; ::if {$Tmp1>35} {::set Credit .2}; ::if {$Tmp1>35.5} {::set Credit .15}; ::if {$Tmp1>44} {::set Credit .14}; ::if {$Tmp1>44.5} {::set Credit .13}; ::if {$Tmp1>45} {::set Credit .12}; ::if {$Tmp1>45.5} {::set Credit .11}; ::if {$Tmp1>46} {::set Credit .1}; ::if {$Tmp1>74} {::set Credit .09}; ::if {$Tmp1>74.5} {::set Credit .08}; ::if {$Tmp1>75} {::set Credit .07}; ::if {$Tmp1>75.5} {::set Credit .06}; ::if {$Tmp1>76} {::set Credit .05}; ::if {$Tmp1>76.5} {::set Credit .04}; ::if {$Tmp1>77} {::set Credit .03}; ::if {$Tmp1>77.5} {::set Credit .02}; ::if {$Tmp1>78} {::set Credit .01}; ::if {$Tmp1>78.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Tmp1>24} {::set Credit .75}; ::if {$Tmp1>30} {::set Credit .7}; ::if {$Tmp1>30.5} {::set Credit .65}; ::if {$Tmp1>31} {::set Credit .6}; ::if {$Tmp1>31.5} {::set Credit .55}; ::if {$Tmp1>32} {::set Credit .5}; ::if {$Tmp1>32.5} {::set Credit .45}; ::if {$Tmp1>33} {::set Credit .4}; ::if {$Tmp1>33.5} {::set Credit .35}; ::if {$Tmp1>40} {::set Credit .3}; ::if {$Tmp1>40.5} {::set Credit .25}; ::if {$Tmp1>41} {::set Credit .2}; ::if {$Tmp1>41.5} {::set Credit .15}; ::if {$Tmp1>50} {::set Credit .14}; ::if {$Tmp1>50.5} {::set Credit .13}; ::if {$Tmp1>51} {::set Credit .12}; ::if {$Tmp1>51.5} {::set Credit .11}; ::if {$Tmp1>52} {::set Credit .1}; ::if {$Tmp1>96} {::set Credit .09}; ::if {$Tmp1>96.5} {::set Credit .08}; ::if {$Tmp1>97} {::set Credit .07}; ::if {$Tmp1>97.5} {::set Credit .06}; ::if {$Tmp1>98} {::set Credit .05}; ::if {$Tmp1>98.5} {::set Credit .04}; ::if {$Tmp1>99} {::set Credit .03}; ::if {$Tmp1>99.5} {::set Credit .02}; ::if {$Tmp1>100} {::set Credit .01}; ::if {$Tmp1>100.5} {::set Credit .0}; } ::if {$MaritalStatus eq "single"} { ::if {$Tmp1>15.0} {::set Credit .75}; ::if {$Tmp1>18.8} {::set Credit .70}; ::if {$Tmp1>19.3} {::set Credit .65}; ::if {$Tmp1>19.8} {::set Credit .60}; ::if {$Tmp1>20.3} {::set Credit .55}; ::if {$Tmp1>20.8} {::set Credit .50}; ::if {$Tmp1>21.3} {::set Credit .45}; ::if {$Tmp1>21.8} {::set Credit .40}; ::if {$Tmp1>22.3} {::set Credit .35}; ::if {$Tmp1>25.0} {::set Credit .30}; ::if {$Tmp1>25.5} {::set Credit .25}; ::if {$Tmp1>26.0} {::set Credit .20}; ::if {$Tmp1>26.5} {::set Credit .15}; ::if {$Tmp1>31.3} {::set Credit .14}; ::if {$Tmp1>31.8} {::set Credit .13}; ::if {$Tmp1>32.3} {::set Credit .12}; ::if {$Tmp1>32.8} {::set Credit .11}; ::if {$Tmp1>33.3} {::set Credit .10}; ::if {$Tmp1>60.0} {::set Credit .09}; ::if {$Tmp1>60.5} {::set Credit .08}; ::if {$Tmp1>61.0} {::set Credit .07}; ::if {$Tmp1>61.5} {::set Credit .06}; ::if {$Tmp1>62.0} {::set Credit .05}; ::if {$Tmp1>62.5} {::set Credit .04}; ::if {$Tmp1>63.0} {::set Credit .03}; ::if {$Tmp1>63.5} {::set Credit .02}; ::if {$Tmp1>64.0} {::set Credit .01}; ::if {$Tmp1>64.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Credit 0.00; } ;# Exempt ::if {$MaritalStatus eq "exempt"} { ::set Credit 1; ;#// (This will cause credit to be 0%) } ::set Credit [::expr 1-$Credit]; ::set Tax [::expr $Tax*$Credit]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Tax<0} { ::set Tax 0; } ::set Result [round2 $Tax]; ::return $Result; } method DC-20150101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20150101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1725; ::if {($MaritalStatus eq "married-filing-separately")} {::set MaritalStatus "single";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .0600;::set FLAT 200.00;} ::if {$TAXABLE>=20000} {::set BASE 20000;::set RATE .0650;::set FLAT 1100.00;} ::if {$TAXABLE>=30000} {::set BASE 30000;::set RATE .0850;::set FLAT 1750.00;} ::if {$TAXABLE>=175000} {::set BASE 175000;::set RATE .0875;::set FLAT 14075.00;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0895;::set FLAT 42512.50;} } ::if {$MaritalStatus eq "married-filing-jointly"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0650;::set FLAT 2200.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0850;::set FLAT 3500.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0875;::set FLAT 28150.00;} ::if {$TAXABLE>=1000000} {::set BASE 1000000;::set RATE .0895;::set FLAT 82025.00;} } ::if {$MaritalStatus eq "head-of-household"} { ::if {$TAXABLE>=7831.3} {::set BASE 7831.3;::set RATE .0600;::set FLAT 313.25;} ::if {$TAXABLE>=31325.2} {::set BASE 31325.2;::set RATE .0650;::set FLAT 1722.89;} ::if {$TAXABLE>=46987.8} {::set BASE 46987.8;::set RATE .0850;::set FLAT 2740.96;} ::if {$TAXABLE>=274095.5} {::set BASE 274095.5;::set RATE .0875;::set FLAT 22045.11;} ::if {$TAXABLE>=783130.0} {::set BASE 783130.0;::set RATE .0895;::set FLAT 66585.63;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method IN-20150101 {TaxableWages} { debugLog "--- Indiana Tax Calculation (20150101) ---"; ::set DESC "Indiana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .033; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $DEDUCT * 1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20150101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 6300; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 12600; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 9250; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 6300; } else { ::set MaritalStatus "single"; ::set STANDARD 6300; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1000} {::set BASE 1000;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2000} {::set BASE 2000;::set RATE .025;::set FLAT [::expr $FLAT+20];} ::if {$TAXABLE>3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>4000} {::set BASE 4000;::set RATE .035;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE .040;::set FLAT [::expr $FLAT+35];} ::if {$TAXABLE>6000} {::set BASE 6000;::set RATE .045;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>7000} {::set BASE 7000;::set RATE .050;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>8000} {::set BASE 8000;::set RATE .055;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>9000} {::set BASE 9000;::set RATE .060;::set FLAT [::expr $FLAT+55];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method NC-20150101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::switch $MaritalStatus { "married-filing-jointly" { ::set STANDARD 15000; } "head-of-household" { ::set STANDARD 12000; } default { ::set STANDARD 7500; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .0575; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ND-20150101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 4000; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4300} {::set BASE 4300;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=41000} {::set BASE 41000;::set RATE 0.0227;::set FLAT 447.74;} ::if {$TAXABLE>=83000} {::set BASE 83000;::set RATE 0.0252;::set FLAT 1401.14;} ::if {$TAXABLE>=191000} {::set BASE 191000;::set RATE 0.0293;::set FLAT 4122.74;} ::if {$TAXABLE>=411000} {::set BASE 411000;::set RATE 0.0322;::set FLAT 10568.74;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=71000} {::set BASE 71000;::set RATE 0.0227;::set FLAT 744.20;} ::if {$TAXABLE>=134000} {::set BASE 134000;::set RATE 0.0252;::set FLAT 2174.30;} ::if {$TAXABLE>=239000} {::set BASE 239000;::set RATE 0.0293;::set FLAT 4820.30;} ::if {$TAXABLE>=418000} {::set BASE 418000;::set RATE 0.0322;::set FLAT 10065.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NM-20150101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20150101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 4000; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=2300} {::set Base 2300;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=7800} {::set Base 7800;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=13300} {::set Base 13300;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=18300} {::set Base 18300;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=8600} {::set Base 8600;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=16600} {::set Base 16600;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=24600} {::set Base 24600;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=32600} {::set Base 32600;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method OH-20150101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0;::set RATE 0.00574;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE 0.01148;::set FLAT 28.70;} ::if {$TAXABLE>10000} {::set BASE 10000;::set RATE 0.02297;::set FLAT 86.10;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.02871;::set FLAT 200.95;} ::if {$TAXABLE>20000} {::set BASE 20000;::set RATE 0.03445;::set FLAT 344.50;} ::if {$TAXABLE>40000} {::set BASE 40000;::set RATE 0.04019;::set FLAT 1033.50;} ::if {$TAXABLE>80000} {::set BASE 80000;::set RATE 0.04593;::set FLAT 2641.10;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.05741;::set FLAT 3559.70;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method OK-20150101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (2015101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>6300} {::set BASE 6300;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>7300} {::set BASE 7300;::set RATE 0.010;::set FLAT 5.00;} ::if {$TAXABLE>8800} {::set BASE 8800;::set RATE 0.020;::set FLAT 20.00;} ::if {$TAXABLE>10050} {::set BASE 10050;::set RATE 0.030;::set FLAT 45.00;} ::if {$TAXABLE>11200} {::set BASE 11200;::set RATE 0.040;::set FLAT 79.50;} ::if {$TAXABLE>13500} {::set BASE 13500;::set RATE 0.050;::set FLAT 171.50;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.0525;::set FLAT 246.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>12600} {::set BASE 12600;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>14600} {::set BASE 14600;::set RATE 0.010;::set FLAT 10.00;} ::if {$TAXABLE>17600} {::set BASE 17600;::set RATE 0.020;::set FLAT 40.00;} ::if {$TAXABLE>20100} {::set BASE 20100;::set RATE 0.030;::set FLAT 90.00;} ::if {$TAXABLE>22400} {::set BASE 22400;::set RATE 0.040;::set FLAT 159.00;} ::if {$TAXABLE>24800} {::set BASE 24800;::set RATE 0.050;::set FLAT 255.00;} ::if {$TAXABLE>27600} {::set BASE 27600;::set RATE 0.0525;::set FLAT 395.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20150101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20150101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6450.00; ::set PERSONAL 194.00; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2145; ::if {$Annual>=125000} {::set MAXIMUM 5150;} ::if {$Annual>=130000} {::set MAXIMUM 3850;} ::if {$Annual>=135000} {::set MAXIMUM 2550;} ::if {$Annual>=140000} {::set MAXIMUM 1250;} ::if {$Annual>=145000} {::set MAXIMUM 0;} } "married" { ::set STANDARD 4295; ::if {$Annual>=250000} {::set MAXIMUM 5150;} ::if {$Annual>=260000} {::set MAXIMUM 3850;} ::if {$Annual>=270000} {::set MAXIMUM 2550;} ::if {$Annual>=180000} {::set MAXIMUM 1250;} ::if {$Annual>=190000} {::set MAXIMUM 0;} } } ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3350} {::set BASE 3350;::set RATE 0.07;::set FLAT 362;} ::if {$TAXABLE>8400} {::set BASE 8400;::set RATE 0.09;::set FLAT 715;} } else { ::if {$TAXABLE>6700} {::set BASE 6700;::set RATE 0.07;::set FLAT 529;} ::if {$TAXABLE>16800} {::set BASE 16800;::set RATE 0.09;::set FLAT 1236;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41405} {::set BASE 8400;::set RATE 0.09;::set FLAT 521;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11015;} } else { ::if {$TAXABLE>39255} {::set BASE 16800;::set RATE 0.09;::set FLAT 1042;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22030;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method VT-20150101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20150101) ---"; ::set ALLOW 4000; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2650} {::set BASE 2650;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=39750} {::set BASE 39750;::set RATE 0.0680;::set FLAT 1317.05;} ::if {$TAXABLE>=93750} {::set BASE 93750;::set RATE 0.0780;::set FLAT 4941.45;} ::if {$TAXABLE>=191600} {::set BASE 191600;::set RATE 0.0880;::set FLAT 12628.35;} ::if {$TAXABLE>=413800} {::set BASE 413800;::set RATE 0.0895;::set FLAT 32181.95;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=68700} {::set BASE 68700;::set RATE 0.0680;::set FLAT 2154.85;} ::if {$TAXABLE>=159800} {::set BASE 159800;::set RATE 0.0780;::set FLAT 8349.65;} ::if {$TAXABLE>=239050} {::set BASE 239050;::set RATE 0.0880;::set FLAT 14531.15;} ::if {$TAXABLE>=420100} {::set BASE 420100;::set RATE 0.0895;::set FLAT 30463.55;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 10-20150101 {TaxableWages} { ::set DESC "County Tax"; ::set DEDUCT "1000"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $DEDUCT*1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ;#// changed 2 to 0 ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set RATE [payCodeValueNumber ".percent"]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method WI-20140401 {TaxableWages} { ::set DESC "WI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 22; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=5731} {::set BASE 5731;::set RATE .04000;::set FLAT 0;} ::if {$TAXABLE>=15201} {::set BASE 15201;::set RATE .04480;::set FLAT 378.80;} ::if {$TAXABLE>=16487} {::set BASE 16487;::set RATE .065408;::set FLAT 436.41;} ::if {$TAXABLE>=26228} {::set BASE 26228;::set RATE .070224;::set FLAT 1073.55;} ::if {$TAXABLE>=62951} {::set BASE 62951;::set RATE .06270;::set FLAT 3652.39;} ::if {$TAXABLE>=240191} {::set BASE 240191;::set RATE .07650;::set FLAT 14765.34;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7871} {::set BASE 7871;::set RATE .04000;::set FLAT 0;} ::if {$TAXABLE>=18781} {::set BASE 18781;::set RATE .05840; ::set FLAT 436.40;} ::if {$TAXABLE>=21401} {::set BASE 21401;::set RATE .07008; ::set FLAT 589.41;} ::if {$TAXABLE>=28309} {::set BASE 28309;::set RATE .07524; ::set FLAT 1073.52;} ::if {$TAXABLE>=60751} {::set BASE 60751;::set RATE .06270; ::set FLAT 3514.46;} ::if {$TAXABLE>=340191} {::set BASE 340191;::set RATE .07650;::set FLAT 14765.35;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT [ ::expr $Exemptions*$EXEMPT]; ::set TAX [::expr $TAX-$EXEMPT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20140101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20140101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2250 0.100 0.00} {11325 0.150 907.50} {39150 0.250 5081.25} {91600 0.280 18193.75} {188600 0.330 45353.75} {407350 0.350 117541.25} {409000 0.396 118118.75} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8450 0.100 0.00} {26600 0.150 1815.00} {82250 0.250 10162.50} {157300 0.280 28925.00} {235300 0.330 50765.00} {413550 0.350 109587.50} {466050 0.396 127962.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method CA-20140101 {TaxableWages} { debugLog "--- California Tax Calculation (20140101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=12997} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=25994} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=12997} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=25994} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 3906;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 7812;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 3906; } else { ::set Standard 7812; } } ::set Regular 116.60; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::foreach Range { {0 0.0110 0} {7582 0.0220 83.40} {17976 0.0440 312.07} {28371 0.0660 769.45} {39384 0.0880 1496.31} {49774 0.1023 2410.63} {254250 0.1133 23328.52} {305100 0.1243 29089.83} {508500 0.1353 54372.45} {1000000 0.1463 120872.40} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {0 0.0110 0} {15164 0.0220 166.80} {35952 0.0440 624.14} {56742 0.0660 1538.90} {78768 0.0880 2992.62} {99548 0.1023 4821.26} {508500 0.1133 46657.05} {610200 0.1243 58179.66} {1000000 0.1353 106631.80} {1017000 0.1463 108931.90} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "head-of-household" { ::foreach Range { {0 0.0110 0} {15174 0.0220 166.91} {35952 0.0440 624.03} {46346 0.0660 1081.37} {57359 0.0880 1808.23} {67751 0.1023 2722.73} {345780 0.1133 31165.10} {414936 0.1243 39000.47} {691560 0.1353 73384.83} {1000000 0.1463 115116.76} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method KS-20140101 {TaxableWages} { debugLog "--- Kansas Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2250; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .0270;::set FLAT 0.00;} ::if {$TAXABLE>=18000} {::set BASE 18000;::set RATE .0480;::set FLAT 405.00;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=6000} {::set BASE 6000;::set RATE .0270;::set FLAT 0.00;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .0480;::set FLAT 810.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20140101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2400; ::set CREDIT 10; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20140101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20140101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 3950; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=8550} {::set Base 8550;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=24250} {::set Base 24250;::set Rate 0.0795;::set Flat 1021;} } "married" { ::if {$Taxable>=20000} {::set Base 20000;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=51400} {::set Base 51400;::set Rate 0.0795;::set Flat 2041;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Taxable [::expr $Supp * .05]; ::set Tax [::expr $Tax+$Taxable]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $Tax]; ::return $Result; } method MN-20140101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 3950; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2250} {::set BASE 2250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=26930} {::set BASE 26930;::set RATE 0.0705;::set FLAT 1320.38;} ::if {$TAXABLE>=83330} {::set BASE 83330;::set RATE 0.0785;::set FLAT 5296.58;} ::if {$TAXABLE>=154790} {::set BASE 154790;::set RATE 0.0985;::set FLAT 10906.19;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=6400} {::set BASE 6400;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=42480} {::set BASE 42480;::set RATE 0.0705;::set FLAT 1930.28;} ::if {$TAXABLE>=149750} {::set BASE 149750;::set RATE 0.0785;::set FLAT 9492.82;} ::if {$TAXABLE>=260640} {::set BASE 260640;::set RATE 0.0985;::set FLAT 18197.69;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NC-20140101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; ;#// Withholding Allowance ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 12000; } else { ::set STANDARD 7500; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .058; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20140101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20140101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 3950; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=2250} {::set Base 2250;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=7750} {::set Base 7750;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=13250} {::set Base 13250;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=18250} {::set Base 18250;::set Rate 0.049;::set Flat 504.50;} } "married" { ::if {$Taxable>=8450} {::set Base 8450;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=16450} {::set Base 16450;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=24450} {::set Base 24450;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=32450} {::set Base 32450;::set Rate 0.049;::set Flat 768.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method NY-20140101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20140101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set Allow 7250;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set Allow 7750;} ;#// "M" Deduction Allowance ::set Exempt 1000; ;#// Allowance per exemption ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable-$Allow]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8300 .0450 332} {11450 .0525 474} {13550 .0590 584} {20850 .0645 1015} {78400 .0665 4727} {94100 .0758 5771} {104600 .0808 6567} {156900 .0715 10792} {209250 .0815 14535} {261550 .0735 18798} {1046350 .4902 76481} {1098700 .0962 102143} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8300 .0450 332} {11450 .0525 474} {13550 .0590 584} {20850 .0645 1015} {78400 .0665 4727} {94100 .0728 5771} {104600 .0778 6535} {156900 .0808 10604} {209250 .0715 14834} {313850 .0815 22313} {366200 .0735 26579} {1046350 .0765 76570} {2092800 .8842 156624} {2145150 .0962 202912} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $Tax]; } method 50-20140101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20140101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7250;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7750;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set Taxable [::expr $Taxable-$ALLOW]; ::set Taxable [::expr $Taxable+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set Taxable [::expr $Taxable-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$Taxable<=0.0} { ::return 0.0; } ::if {$MaritalStatus eq "single"} { ::foreach Range { {0 .0400 0} {8300 .0450 332} {11450 .0525 474} {13550 .0590 584} {20850 .0645 1015} {78400 .0665 4727} {94100 .0758 5771} {104600 .0808 6567} {156900 .0715 10792} {209250 .0815 14535} {261550 .0735 18798} {1046350 .4902 76481} {1098700 .0962 102143} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::if {$MaritalStatus eq "married"} { ::foreach Range { {0 .0400 0} {8300 .0450 332} {11450 .0525 474} {13550 .0590 584} {20850 .0645 1015} {78400 .0665 4727} {94100 .0728 5771} {104600 .0778 6535} {156900 .0808 10604} {209250 .0715 14834} {313850 .0815 22313} {366200 .0735 26579} {1046350 .0765 76570} {2092800 .8842 156624} {2145150 .0962 202912} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$Taxable>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } ::set Taxable [::expr $Taxable-$Base]; ::set TAX [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$Flat]; ::set TAX [::expr $TAX * .15]; ;#// 15% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$Taxable>=0} { ::if {$Taxable>=4000} {::set BASE 3000;} ::if {$Taxable>=10000} {::set BASE 2000;} ::if {$Taxable>=20000} {::set BASE 1000;} ::if {$Taxable>=30000} {::set BASE 0;} ::set Taxable [::expr $Taxable-$BASE]; ::set TAX [::expr $Taxable*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method OH-20140101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0;::set RATE 0.00581;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE 0.01161;::set FLAT 29.05;} ::if {$TAXABLE>10000} {::set BASE 10000;::set RATE 0.02311;::set FLAT 87.10;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.02903;::set FLAT 203.20;} ::if {$TAXABLE>20000} {::set BASE 20000;::set RATE 0.03483;::set FLAT 348.35;} ::if {$TAXABLE>40000} {::set BASE 40000;::set RATE 0.04064;::set FLAT 1044.95;} ::if {$TAXABLE>80000} {::set BASE 80000;::set RATE 0.04644;::set FLAT 2670.55;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.05805;::set FLAT 3599.35;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method RI-20140101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20140101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>211300} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=59600} {::set BASE 59600;::set RATE 0.0475;::set FLAT 2235.00;} ::if {$TAXABLE>=135500} {::set BASE 135500;::set RATE 0.0599;::set FLAT 5840.25} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method CT-20140101 {TaxableWages} { debugLog "--- Connecticut Tax Calculation (20140101) ---"; ::set Desc "CT Tax"; ::set Rate 0.030; ::set Flat 0; ::set BaseTax 0; ::set Credit 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CT-20140101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::set Exemption 0; ::if {($MaritalStatus eq "married-filing-jointly-both-spouses-working24} {::set Exemption 11}; ::if {$Tmp1>25} {::set Exemption 10}; ::if {$Tmp1>26} {::set Exemption 9}; ::if {$Tmp1>27} {::set Exemption 8}; ::if {$Tmp1>28} {::set Exemption 7}; ::if {$Tmp1>29} {::set Exemption 6}; ::if {$Tmp1>30} {::set Exemption 5}; ::if {$Tmp1>31} {::set Exemption 4}; ::if {$Tmp1>32} {::set Exemption 3}; ::if {$Tmp1>33} {::set Exemption 2}; ::if {$Tmp1>34} {::set Exemption 1}; ::if {$Tmp1>35} {::set Exemption 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::set Base 16000; ::set Exemption 19; ::if {$Tmp1>38} {::set Exemption 18}; ::if {$Tmp1>39} {::set Exemption 17}; ::if {$Tmp1>40} {::set Exemption 16}; ::if {$Tmp1>41} {::set Exemption 15}; ::if {$Tmp1>42} {::set Exemption 14}; ::if {$Tmp1>43} {::set Exemption 13}; ::if {$Tmp1>44} {::set Exemption 12}; ::if {$Tmp1>45} {::set Exemption 11}; ::if {$Tmp1>46} {::set Exemption 10}; ::if {$Tmp1>47} {::set Exemption 9}; ::if {$Tmp1>48} {::set Exemption 8}; ::if {$Tmp1>49} {::set Exemption 7}; ::if {$Tmp1>50} {::set Exemption 6}; ::if {$Tmp1>51} {::set Exemption 5}; ::if {$Tmp1>52} {::set Exemption 4}; ::if {$Tmp1>53} {::set Exemption 3}; ::if {$Tmp1>54} {::set Exemption 2}; ::if {$Tmp1>55} {::set Exemption 1}; ::if {$Tmp1>56} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::set Base 20000; ::set Exemption 24; ::if {$Tmp1>48} {::set Exemption 23}; ::if {$Tmp1>49} {::set Exemption 22}; ::if {$Tmp1>50} {::set Exemption 21}; ::if {$Tmp1>51} {::set Exemption 20}; ::if {$Tmp1>52} {::set Exemption 19}; ::if {$Tmp1>53} {::set Exemption 18}; ::if {$Tmp1>54} {::set Exemption 17}; ::if {$Tmp1>55} {::set Exemption 16}; ::if {$Tmp1>56} {::set Exemption 15}; ::if {$Tmp1>57} {::set Exemption 14}; ::if {$Tmp1>58} {::set Exemption 13}; ::if {$Tmp1>59} {::set Exemption 12}; ::if {$Tmp1>60} {::set Exemption 11}; ::if {$Tmp1>61} {::set Exemption 10}; ::if {$Tmp1>62} {::set Exemption 9}; ::if {$Tmp1>63} {::set Exemption 8}; ::if {$Tmp1>64} {::set Exemption 7}; ::if {$Tmp1>65} {::set Exemption 6}; ::if {$Tmp1>66} {::set Exemption 5}; ::if {$Tmp1>67} {::set Exemption 4}; ::if {$Tmp1>68} {::set Exemption 3}; ::if {$Tmp1>69} {::set Exemption 2}; ::if {$Tmp1>70} {::set Exemption 1}; ::if {$Tmp1>71} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Base 10000; ::set Exemption 0; } ::if {$MaritalStatus eq "single"} { ::set Base 10000; ::set Exemption 14.5; ::if {$Tmp1>29.0} {::set Exemption 13.5}; ::if {$Tmp1>30.0} {::set Exemption 12.5}; ::if {$Tmp1>31.0} {::set Exemption 11.5}; ::if {$Tmp1>32.0} {::set Exemption 10.5}; ::if {$Tmp1>33.0} {::set Exemption 9.5}; ::if {$Tmp1>34.0} {::set Exemption 8.5}; ::if {$Tmp1>35.0} {::set Exemption 7.5}; ::if {$Tmp1>36.0} {::set Exemption 6.5}; ::if {$Tmp1>37.0} {::set Exemption 5.5}; ::if {$Tmp1>38.0} {::set Exemption 4.5}; ::if {$Tmp1>39.0} {::set Exemption 3.5}; ::if {$Tmp1>40.0} {::set Exemption 2.5}; ::if {$Tmp1>41.0} {::set Exemption 1.5}; ::if {$Tmp1>42.0} {::set Exemption 0.5}; ::if {$Tmp1>43.0} {::set Exemption 0}; } ::set Exemption [::expr $Exemption * 1000]; ::set Taxable [::expr $Taxable-$Exemption]; ;#// (6) Annual Taxable Income ::set Tax 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable<=10000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>10000} {::set Base 10000; ::set Rate 0.05; ::set Flat 300;} ::if {$Taxable>50000} {::set Base 50000; ::set Rate 0.055; ::set Flat 2300;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.06; ::set Flat 5050;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.065; ::set Flat 11050;} ::if {$Taxable>250000} {::set Base 250000; ::set Rate 0.067; ::set Flat 14300;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable<=16000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>16000} {::set Base 16000; ::set Rate 0.05; ::set Flat 480;} ::if {$Taxable>80000} {::set Base 80000; ::set Rate 0.055; ::set Flat 3680;} ::if {$Taxable>160000} {::set Base 160000; ::set Rate 0.06; ::set Flat 8080;} ::if {$Taxable>320000} {::set Base 320000; ::set Rate 0.065; ::set Flat 17680;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.067; ::set Flat 22880;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable<=20000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>20000} {::set Base 20000; ::set Rate 0.05; ::set Flat 600;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.055; ::set Flat 4600;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.06; ::set Flat 10100;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.065; ::set Flat 22100;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.067; ::set Flat 28600;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "exempt"} { ::set Tax 0; } ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable>50250} { ::if {$Taxable>50250&&$Taxable<52750} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>52750&&$Taxable<55250} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>55250&&$Taxable<57750} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>57750&&$Taxable<60250} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>60250&&$Taxable<62750} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>62750&&$Taxable<65250} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>65250&&$Taxable<67750} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>67750&&$Taxable<70250} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>70250&&$Taxable<72750} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>72750} {::set Tax [::expr $Tax+200]}; } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable>78500} { ::if {$Taxable>78500&&$Taxable<82500} {::set Tax [::expr $Tax+32]}; ::if {$Taxable>82500&&$Taxable<86500} {::set Tax [::expr $Tax+64]}; ::if {$Taxable>86500&&$Taxable<90500} {::set Tax [::expr $Tax+96]}; ::if {$Taxable>90500&&$Taxable<94500} {::set Tax [::expr $Tax+128]}; ::if {$Taxable>94500&&$Taxable<98500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>98500&&$Taxable<102500} {::set Tax [::expr $Tax+192]}; ::if {$Taxable>102500&&$Taxable<106500} {::set Tax [::expr $Tax+224]}; ::if {$Taxable>106500&&$Taxable<100500} {::set Tax [::expr $Tax+256]}; ::if {$Taxable>110500&&$Taxable<114500} {::set Tax [::expr $Tax+288]}; ::if {$Taxable>114500} {::set Tax [::expr $Tax+320]}; } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable>100500} { ::if {$Taxable>100500&&$Taxable<105500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>105500&&$Taxable<110500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>110500&&$Taxable<115500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>115500&&$Taxable<120500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>120500&&$Taxable<125500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>125500&&$Taxable<130500} {::set Tax [::expr $Tax+240]}; ::if {$Taxable>130500&&$Taxable<135500} {::set Tax [::expr $Tax+280]}; ::if {$Taxable>135500&&$Taxable<140500} {::set Tax [::expr $Tax+320]}; ::if {$Taxable>140500&&$Taxable<145500} {::set Tax [::expr $Tax+360]}; ::if {$Taxable>145000} {::set Tax [::expr $Tax+400]}; } } ::if {$MaritalStatus eq "single"} { ::if {$Taxable>56500} { ::if {$Taxable>56500&&$Taxable<61500} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>61500&&$Taxable<66500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>66500&&$Taxable<71500} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>71500&&$Taxable<76500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>76500&&$Taxable<81500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>81500&&$Taxable<86500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>86500&&$Taxable<91500} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>91500&&$Taxable<96500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>96500&&$Taxable<101500} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>101500} {::set Tax [::expr $Tax+200]}; } } ::set Recapture 0; ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "single" \ } { ::if {$Taxable >200000} { ::set Recapture [::expr $Taxable-200000]; ::set Recapture [::expr $Recapture/5000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*75]; ::if {$Recapture>=2250} { ::set Recapture 2250; } } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable >320000} { ::set Recapture [::expr $Taxable-320000]; ::set Recapture [::expr $Recapture/8000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*120]; ::if {$Recapture>=3600} { ::set Recapture 3600; } } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable >400000} { ::set Recapture [::expr $Taxable-400000]; ::set Recapture [::expr $Recapture/10000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*150]; ::if {$Recapture>=4500} { ::set Recapture 4500; } } } ::set Tax [::expr $Tax+$Recapture]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$Tmp1>12} {::set Credit .75}; ::if {$Tmp1>15} {::set Credit .7}; ::if {$Tmp1>15.5} {::set Credit .65}; ::if {$Tmp1>16} {::set Credit .6}; ::if {$Tmp1>16.5} {::set Credit .55}; ::if {$Tmp1>17} {::set Credit .5}; ::if {$Tmp1>17.5} {::set Credit .45}; ::if {$Tmp1>18} {::set Credit .4}; ::if {$Tmp1>18.5} {::set Credit .35}; ::if {$Tmp1>20} {::set Credit .3}; ::if {$Tmp1>20.5} {::set Credit .25}; ::if {$Tmp1>21} {::set Credit .2}; ::if {$Tmp1>21.5} {::set Credit .15}; ::if {$Tmp1>25} {::set Credit .14}; ::if {$Tmp1>25.5} {::set Credit .13}; ::if {$Tmp1>26} {::set Credit .12}; ::if {$Tmp1>26.5} {::set Credit .11}; ::if {$Tmp1>27} {::set Credit .1}; ::if {$Tmp1>48} {::set Credit .09}; ::if {$Tmp1>48.5} {::set Credit .08}; ::if {$Tmp1>49} {::set Credit .07}; ::if {$Tmp1>49.5} {::set Credit .06}; ::if {$Tmp1>50} {::set Credit .05}; ::if {$Tmp1>50.5} {::set Credit .04}; ::if {$Tmp1>51} {::set Credit .03}; ::if {$Tmp1>51.5} {::set Credit .02}; ::if {$Tmp1>52.0} {::set Credit .01}; ::if {$Tmp1>52.5} {::set Credit .0}; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Tmp1>19} {::set Credit .75}; ::if {$Tmp1>24} {::set Credit .7}; ::if {$Tmp1>24.5} {::set Credit .65}; ::if {$Tmp1>25} {::set Credit .6}; ::if {$Tmp1>25.5} {::set Credit .55}; ::if {$Tmp1>26} {::set Credit .5}; ::if {$Tmp1>26.5} {::set Credit .45}; ::if {$Tmp1>27} {::set Credit .4}; ::if {$Tmp1>27.5} {::set Credit .35}; ::if {$Tmp1>34} {::set Credit .3}; ::if {$Tmp1>34.5} {::set Credit .25}; ::if {$Tmp1>35} {::set Credit .2}; ::if {$Tmp1>35.5} {::set Credit .15}; ::if {$Tmp1>44} {::set Credit .14}; ::if {$Tmp1>44.5} {::set Credit .13}; ::if {$Tmp1>45} {::set Credit .12}; ::if {$Tmp1>45.5} {::set Credit .11}; ::if {$Tmp1>46} {::set Credit .1}; ::if {$Tmp1>74} {::set Credit .09}; ::if {$Tmp1>74.5} {::set Credit .08}; ::if {$Tmp1>75} {::set Credit .07}; ::if {$Tmp1>75.5} {::set Credit .06}; ::if {$Tmp1>76} {::set Credit .05}; ::if {$Tmp1>76.5} {::set Credit .04}; ::if {$Tmp1>77} {::set Credit .03}; ::if {$Tmp1>77.5} {::set Credit .02}; ::if {$Tmp1>78} {::set Credit .01}; ::if {$Tmp1>78.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Tmp1>24} {::set Credit .75}; ::if {$Tmp1>30} {::set Credit .7}; ::if {$Tmp1>30.5} {::set Credit .65}; ::if {$Tmp1>31} {::set Credit .6}; ::if {$Tmp1>31.5} {::set Credit .55}; ::if {$Tmp1>32} {::set Credit .5}; ::if {$Tmp1>32.5} {::set Credit .45}; ::if {$Tmp1>33} {::set Credit .4}; ::if {$Tmp1>33.5} {::set Credit .35}; ::if {$Tmp1>40} {::set Credit .3}; ::if {$Tmp1>40.5} {::set Credit .25}; ::if {$Tmp1>41} {::set Credit .2}; ::if {$Tmp1>41.5} {::set Credit .15}; ::if {$Tmp1>50} {::set Credit .14}; ::if {$Tmp1>50.5} {::set Credit .13}; ::if {$Tmp1>51} {::set Credit .12}; ::if {$Tmp1>51.5} {::set Credit .11}; ::if {$Tmp1>52} {::set Credit .1}; ::if {$Tmp1>96} {::set Credit .09}; ::if {$Tmp1>96.5} {::set Credit .08}; ::if {$Tmp1>97} {::set Credit .07}; ::if {$Tmp1>97.5} {::set Credit .06}; ::if {$Tmp1>98} {::set Credit .05}; ::if {$Tmp1>98.5} {::set Credit .04}; ::if {$Tmp1>99} {::set Credit .03}; ::if {$Tmp1>99.5} {::set Credit .02}; ::if {$Tmp1>100} {::set Credit .01}; ::if {$Tmp1>100.5} {::set Credit .0}; } ::if {$MaritalStatus eq "single"} { ::if {$Tmp1>14.5} {::set Credit .75}; ::if {$Tmp1>18.1} {::set Credit .70}; ::if {$Tmp1>18.6} {::set Credit .65}; ::if {$Tmp1>19.1} {::set Credit .60}; ::if {$Tmp1>19.6} {::set Credit .55}; ::if {$Tmp1>20.1} {::set Credit .50}; ::if {$Tmp1>20.6} {::set Credit .45}; ::if {$Tmp1>21.1} {::set Credit .40}; ::if {$Tmp1>21.6} {::set Credit .35}; ::if {$Tmp1>24.2} {::set Credit .30}; ::if {$Tmp1>24.7} {::set Credit .25}; ::if {$Tmp1>25.2} {::set Credit .20}; ::if {$Tmp1>25.7} {::set Credit .15}; ::if {$Tmp1>30.2} {::set Credit .14}; ::if {$Tmp1>30.7} {::set Credit .13}; ::if {$Tmp1>31.2} {::set Credit .12}; ::if {$Tmp1>31.7} {::set Credit .11}; ::if {$Tmp1>32.2} {::set Credit .10}; ::if {$Tmp1>58.0} {::set Credit .09}; ::if {$Tmp1>58.5} {::set Credit .08}; ::if {$Tmp1>59.0} {::set Credit .07}; ::if {$Tmp1>59.5} {::set Credit .06}; ::if {$Tmp1>60.0} {::set Credit .05}; ::if {$Tmp1>60.5} {::set Credit .04}; ::if {$Tmp1>61.0} {::set Credit .03}; ::if {$Tmp1>61.5} {::set Credit .02}; ::if {$Tmp1>62.0} {::set Credit .01}; ::if {$Tmp1>62.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Credit 0.00; } ;# Exempt ::if {$MaritalStatus eq "exempt"} { ::set Credit 1; ;#// (This will cause credit to be 0%) } ::set Credit [::expr 1-$Credit]; ::set Tax [::expr $Tax*$Credit]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Tax<0} { ::set Tax 0; } ::set Result [round2 $Tax]; ::return $Result; } method DE-20140101 {TaxableWages} { debugLog "--- Delaware Tax Calculation (20140101) ---"; ::set DESC "Delaware Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 110; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set STANDARD 3250; # Assume single ::if {$MaritalStatus eq "single-standard-deduction"} {::set STANDARD 3250;} ;#// Single Standard Deduction. Was S ::if {$MaritalStatus eq "married-standard-deduction"} {::set STANDARD 6500;} ;#// Married Standard Deduction. Was J ::if {$MaritalStatus eq "married-both-filing-standard-deduction"} {::set STANDARD 3250;} ;#// Married both filing Standard Deduction. Was M ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0000;::set FLAT 0.00;} ::if {$TAXABLE>=2000} {::set BASE 2000;::set RATE .0220;::set FLAT 0.00;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .0390;::set FLAT 66.00;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0480;::set FLAT 261.00;} ::if {$TAXABLE>=20000} {::set BASE 20000;::set RATE .0520;::set FLAT 741.00;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0555;::set FLAT 1001.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0660;::set FLAT 2943.50;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#//Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAX [::expr $TAX-$EXEMPT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method IL-20140101 {TaxableWages} { debugLog "--- Illinois Tax Calculation (20140101) ---"; ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .05; ::set EXEMPT1 2125; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MA-20140101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::qw::number::var::negative Total_FICA_MEDI; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD $MAXIMUM; } else { ::set STANDARD $Total_FICA_MEDI; } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0520]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MI-20140101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20140101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 4000.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20140101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 6200; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 12400; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 9100; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 6200; } else { ::set MaritalStatus single; ::set STANDARD 6200; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1000} {::set BASE 1000;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2000} {::set BASE 2000;::set RATE .025;::set FLAT [::expr $FLAT+20];} ::if {$TAXABLE>3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>4000} {::set BASE 4000;::set RATE .035;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE .040;::set FLAT [::expr $FLAT+35];} ::if {$TAXABLE>6000} {::set BASE 6000;::set RATE .045;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>7000} {::set BASE 7000;::set RATE .050;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>8000} {::set BASE 8000;::set RATE .055;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>9000} {::set BASE 9000;::set RATE .060;::set FLAT [::expr $FLAT+55];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ND-20140101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 3950; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4200} {::set BASE 4200;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE 0.0227;::set FLAT 436.76;} ::if {$TAXABLE>=82000} {::set BASE 82000;::set RATE 0.0252;::set FLAT 1390.16;} ::if {$TAXABLE>=188000} {::set BASE 188000;::set RATE 0.0293;::set FLAT 4061.36;} ::if {$TAXABLE>=405000} {::set BASE 405000;::set RATE 0.0322;::set FLAT 10419.46;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=70000} {::set BASE 70000;::set RATE 0.0227;::set FLAT 732.00;} ::if {$TAXABLE>=132000} {::set BASE 132000;::set RATE 0.0252;::set FLAT 2139.40;} ::if {$TAXABLE>=235000} {::set BASE 235000;::set RATE 0.0293;::set FLAT 4735.00;} ::if {$TAXABLE>=412000} {::set BASE 412000;::set RATE 0.0322;::set FLAT 9921.10;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OK-20140101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (2014101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>6200} {::set BASE 6200;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>7200} {::set BASE 7200;::set RATE 0.010;::set FLAT 5.00;} ::if {$TAXABLE>8700} {::set BASE 8700;::set RATE 0.020;::set FLAT 20.00;} ::if {$TAXABLE>9950} {::set BASE 9950;::set RATE 0.030;::set FLAT 45.00;} ::if {$TAXABLE>11100} {::set BASE 11100;::set RATE 0.040;::set FLAT 79.50;} ::if {$TAXABLE>13400} {::set BASE 13400;::set RATE 0.050;::set FLAT 171.50;} ::if {$TAXABLE>14900} {::set BASE 14900;::set RATE 0.0525;::set FLAT 246.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>12400} {::set BASE 12400;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>14400} {::set BASE 14400;::set RATE 0.010;::set FLAT 10.00;} ::if {$TAXABLE>17400} {::set BASE 17400;::set RATE 0.020;::set FLAT 40.00;} ::if {$TAXABLE>19900} {::set BASE 19900;::set RATE 0.030;::set FLAT 90.00;} ::if {$TAXABLE>22200} {::set BASE 22200;::set RATE 0.040;::set FLAT 159.00;} ::if {$TAXABLE>24600} {::set BASE 24600;::set RATE 0.050;::set FLAT 255.00;} ::if {$TAXABLE>27400} {::set BASE 27400;::set RATE 0.0525;::set FLAT 395.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20140101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20140101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6350.00; ::set PERSONAL 191.00; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2115; } "married" { ::set STANDARD 4230; } "married-filing-separately" { ::set STANDARD 2080; } } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3300} {::set BASE 3300;::set RATE 0.07;::set FLAT 356;} ::if {$TAXABLE>8250} {::set BASE 8250;::set RATE 0.09;::set FLAT 703;} } else { ::if {$TAXABLE>6600} {::set BASE 6600;::set RATE 0.07;::set FLAT 521;} ::if {$TAXABLE>16500} {::set BASE 16500;::set RATE 0.09;::set FLAT 1214;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41535} {::set BASE 8250;::set RATE 0.09;::set FLAT 512;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11019;} } else { ::if {$TAXABLE>39420} {::set BASE 16500;::set RATE 0.09;::set FLAT 1023;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22038;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method VT-20140101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20140101) ---"; ::set ALLOW 3950; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2650} {::set BASE 2650;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=39150} {::set BASE 39150;::set RATE 0.0680;::set FLAT 1295.75;} ::if {$TAXABLE>=91600} {::set BASE 91600;::set RATE 0.0780;::set FLAT 4862.35;} ::if {$TAXABLE>=188600} {::set BASE 188600;::set RATE 0.0880;::set FLAT 12428.35;} ::if {$TAXABLE>=407350} {::set BASE 407350;::set RATE 0.0895;::set FLAT 31678.35;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=68600} {::set BASE 68600;::set RATE 0.0680;::set FLAT 2151.30;} ::if {$TAXABLE>=157300} {::set BASE 157300;::set RATE 0.0780;::set FLAT 8182.90;} ::if {$TAXABLE>=235300} {::set BASE 235300;::set RATE 0.0880;::set FLAT 14266.90;} ::if {$TAXABLE>=413550} {::set BASE 413550;::set RATE 0.0895;::set FLAT 29952.90;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method AL-20130701 {TaxableWages} { debugLog "--- Alabama Tax Calculation (20130701) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::switch -- $MaritalStatus { "married" {::set MaritalStatus "married-filing-jointly";} "head-of-household" {::set MaritalStatus "head-of-family";} "zero" {::set MaritalStatus "single";} } ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AL"] ""]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { "single" { ::if {$Taxable<=20499} { ::set STANDARD "2500"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*25]; ::set STANDARD [::expr 2500-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-separately" { ::if {$Taxable<=10249} { ::set STANDARD "3750"; } else { ::if {$Taxable <= 15000} { ::set Tmp1 [::expr $Taxable-10249]; ::set Tmp1 [::expr round(($Tmp1/250.0)+.5)]; ::set Tmp1 [::expr $Tmp1*88]; ::set STANDARD [::expr 3750-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-jointly" { ::if {$Taxable<=20499} { ::set STANDARD "7500"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*175]; ::set STANDARD [::expr 7500-$Tmp1]; } else { ::set STANDARD 4000; } } } "head-of-family" { ::if {$Taxable<=20499} { ::set STANDARD "4700"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*135]; ::set STANDARD [::expr 4700-$Tmp1]; } else { ::set STANDARD 2000; } } } } ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::switch -- $MaritalStatus { "zero" {::set PERSONAL 0.00;} "single" - "married-filing-separately" {::set PERSONAL 1500;} "head-of-family" - "married-filing-jointly" {::set PERSONAL 3000;} }; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 0.0; ::if {$Taxable<=20000} { ::set DEPEND [::expr $Exemptions*1000]; } else { ::if {$Taxable<=100000} { ::set DEPEND [::expr $Exemptions*500]; } else { ::set DEPEND [::expr $Exemptions*300]; } } ::set Taxable [::expr $Taxable-$STANDARD]; ;#// A - Standard Deduction ::set Taxable [::expr $Taxable-$FEDERAL]; ;#// B - Federal Tax ::set Taxable [::expr $Taxable-$PERSONAL]; ;#// C - Personal Exemption ::set Taxable [::expr $Taxable-$DEPEND]; ;#// D - Dependants ::if {$Taxable<=0.00} {::return 0.00;} ::set BASE 0;::set RATE 0.02;::set FLAT 0; ::switch -- $MaritalStatus { "zero" - "single" - "married-filing-separately" - "head-of-family" { ::if {$Taxable>500} {::set BASE 500;::set RATE .04;::set FLAT [::expr $FLAT+10];} ::if {$Taxable>3000} {::set BASE 3000;::set RATE .05;::set FLAT [::expr $FLAT+110];} } "married-filing-jointly" { ::if {$Taxable>1000} {::set BASE 1000;::set RATE .04;::set FLAT [::expr $FLAT+20];} ::if {$Taxable>6000} {::set BASE 6000;::set RATE .05;::set FLAT [::expr $FLAT+220];} } }; ::set Result [::expr $Taxable-$BASE]; ::set Result [::expr $Result*$RATE]; ::set Result [::expr $Result+$FLAT]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method ID-20130701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20130701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3900; # Amount per exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; # Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=2200} {::set Base 2200;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=3609} {::set Base 3609;::set Rate 0.036;::set Flat 23}; ::if {$Taxable>=5018} {::set Base 5018;::set Rate 0.041;::set Flat 74}; ::if {$Taxable>=6427} {::set Base 6427;::set Rate 0.051;::set Flat 132}; ::if {$Taxable>=7836} {::set Base 7836;::set Rate 0.061;::set Flat 204}; ::if {$Taxable>=9245} {::set Base 9245;::set Rate 0.071;::set Flat 290}; ::if {$Taxable>=12768} {::set Base 12768;::set Rate 0.074;::set Flat 540}; } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=8300} {::set Base 8300;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=11118} {::set Base 11118;::set Rate 0.036;::set Flat 45}; ::if {$Taxable>=13936} {::set Base 13936;::set Rate 0.041;::set Flat 146}; ::if {$Taxable>=16754} {::set Base 16754;::set Rate 0.051;::set Flat 262}; ::if {$Taxable>=19572} {::set Base 19572;::set Rate 0.061;::set Flat 406}; ::if {$Taxable>=22390} {::set Base 22390;::set Rate 0.071;::set Flat 578}; ::if {$Taxable>=29436} {::set Base 29436;::set Rate 0.074;::set Flat 1078}; } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method US-20130101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20130101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2200 0.100 0.00} {11125 0.150 892.50} {38450 0.250 4991.25} {90050 0.280 17891.25} {185450 0.330 44603.25} {400550 0.350 115586.25} {402200 0.396 116163.75} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8300 0.100 0.00} {26150 0.150 1785.00} {80800 0.250 9982.50} {154700 0.280 28457.50} {231350 0.330 49919.50} {406650 0.350 107768.50} {458300 0.396 125846.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method 50-20130101 {TaxableWages} { debugLog "--- Yonkers Tax Calculation (20130101) ---"; ::set DESC "Yonkers Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set S401K [earningsOfType "401K"]; ::if {$RESIDENCE ne "non-resident" && $RESIDENCE ne "resident"} {::set RESIDENCE "resident";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} {::set ALLOW 7150;} ;# "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7650;} ;# "M" Deduction Allowance ::set EXEMPT 1000; # Allowance per exemption ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAXABLE [::expr $TAXABLE+$S401K]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; # Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0400;::set FLAT 0;} ::if {$TAXABLE>=8200} {::set BASE 8200;::set RATE .0450;::set FLAT 328;} ::if {$TAXABLE>=11300} {::set BASE 11300;::set RATE .0525;::set FLAT 468;} ::if {$TAXABLE>=13350} {::set BASE 13350;::set RATE .0590;::set FLAT 575;} ::if {$TAXABLE>=20550} {::set BASE 20550;::set RATE .0645;::set FLAT 1000;} ::if {$TAXABLE>=77150} {::set BASE 77150;::set RATE .0665;::set FLAT 4651;} ::if {$TAXABLE>=92600} {::set BASE 92600;::set RATE .0758;::set FLAT 5678;} ::if {$TAXABLE>=102900} {::set BASE 102900;::set RATE .0808;::set FLAT 6459;} ::if {$TAXABLE>=154350} {::set BASE 154350;::set RATE .0715;::set FLAT 10616;} ::if {$TAXABLE>=205850} {::set BASE 205850;::set RATE .0815;::set FLAT 14298;} ::if {$TAXABLE>=257300} {::set BASE 257300;::set RATE .0735;::set FLAT 18491;} ::if {$TAXABLE>=1029250} {::set BASE 1029250;::set RATE .4902;::set FLAT 75230;} ::if {$TAXABLE>=1080750} {::set BASE 1080750;::set RATE .0962;::set FLAT 100475;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0400;::set FLAT 0;} ::if {$TAXABLE>=8200} {::set BASE 8200;::set RATE .0450;::set FLAT 328;} ::if {$TAXABLE>=11300} {::set BASE 11300;::set RATE .0525;::set FLAT 468;} ::if {$TAXABLE>=13350} {::set BASE 13350;::set RATE .0590;::set FLAT 575;} ::if {$TAXABLE>=20550} {::set BASE 20550;::set RATE .0645;::set FLAT 1000;} ::if {$TAXABLE>=77150} {::set BASE 77150;::set RATE .0665;::set FLAT 4651;} ::if {$TAXABLE>=92600} {::set BASE 92600;::set RATE .0728;::set FLAT 5678;} ::if {$TAXABLE>=102900} {::set BASE 102900;::set RATE .0778;::set FLAT 6428;} ::if {$TAXABLE>=154350} {::set BASE 154350;::set RATE .0808;::set FLAT 10431;} ::if {$TAXABLE>=205850} {::set BASE 205850;::set RATE .0715;::set FLAT 14592;} ::if {$TAXABLE>=308750} {::set BASE 308750;::set RATE .0815;::set FLAT 21949;} ::if {$TAXABLE>=360250} {::set BASE 360250;::set RATE .0735;::set FLAT 26147;} ::if {$TAXABLE>=1029250} {::set BASE 1029250;::set RATE .0765;::set FLAT 75318;} ::if {$TAXABLE>=2058550} {::set BASE 2058550;::set RATE .8842;::set FLAT 154059;} ::if {$TAXABLE>=2110050} {::set BASE 2110050;::set RATE .0962;::set FLAT 199596;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX * .15]; ;#// 15% of State tax ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::if {$RESIDENCE eq "non-resident"} { ::set RATE .0050; ::set BASE 4000; } ::if {$TAXABLE>=0} { ::if {$TAXABLE>=4000} {::set BASE 3000;} ::if {$TAXABLE>=10000} {::set BASE 2000;} ::if {$TAXABLE>=20000} {::set BASE 1000;} ::if {$TAXABLE>=30000} {::set BASE 0;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = (Taxable-Base)*Rate\Periods (nonresidents) ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [round2 $TAX]; } else { ::set TAX 0; } } ::return $TAX; } method NY-20130101 {TaxableWages} { debugLog "--- New York State Tax Calculation (20130101) ---"; ::set DESC "NYS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Allow 0; ::if {$MaritalStatus eq "single"} {::set ALLOW 7150;} ;#// "S" Deduction Allowance ::if {$MaritalStatus eq "married"} {::set ALLOW 7650;} ;#// "M" Deduction Allowance ::set EXEMPT 1000; ;#// Allowance per exemption ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; # Taxable = (Periods*Paysum)-Allowance-(Xemp*Exempt) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0400;::set FLAT 0;} ::if {$TAXABLE>=8200} {::set BASE 8200;::set RATE .0450;::set FLAT 328;} ::if {$TAXABLE>=11300} {::set BASE 11300;::set RATE .0525;::set FLAT 468;} ::if {$TAXABLE>=13350} {::set BASE 13350;::set RATE .0590;::set FLAT 575;} ::if {$TAXABLE>=20550} {::set BASE 20550;::set RATE .0645;::set FLAT 1000;} ::if {$TAXABLE>=77150} {::set BASE 77150;::set RATE .0665;::set FLAT 4651;} ::if {$TAXABLE>=92600} {::set BASE 92600;::set RATE .0758;::set FLAT 5678;} ::if {$TAXABLE>=102900} {::set BASE 102900;::set RATE .0808;::set FLAT 6459;} ::if {$TAXABLE>=154350} {::set BASE 154350;::set RATE .0715;::set FLAT 10616;} ::if {$TAXABLE>=205850} {::set BASE 205850;::set RATE .0815;::set FLAT 14298;} ::if {$TAXABLE>=257300} {::set BASE 257300;::set RATE .0735;::set FLAT 18491;} ::if {$TAXABLE>=1029250} {::set BASE 1029250;::set RATE .4902;::set FLAT 75230;} ::if {$TAXABLE>=1080750} {::set BASE 1080750;::set RATE .0962;::set FLAT 100475;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0400;::set FLAT 0;} ::if {$TAXABLE>=8200} {::set BASE 8200;::set RATE .0450;::set FLAT 328;} ::if {$TAXABLE>=11300} {::set BASE 11300;::set RATE .0525;::set FLAT 468;} ::if {$TAXABLE>=13350} {::set BASE 13350;::set RATE .0590;::set FLAT 575;} ::if {$TAXABLE>=20550} {::set BASE 20550;::set RATE .0645;::set FLAT 1000;} ::if {$TAXABLE>=77150} {::set BASE 77150;::set RATE .0665;::set FLAT 4651;} ::if {$TAXABLE>=92600} {::set BASE 92600;::set RATE .0728;::set FLAT 5678;} ::if {$TAXABLE>=102900} {::set BASE 102900;::set RATE .0778;::set FLAT 6428;} ::if {$TAXABLE>=154350} {::set BASE 154350;::set RATE .0808;::set FLAT 10431;} ::if {$TAXABLE>=205850} {::set BASE 205850;::set RATE .0715;::set FLAT 14592;} ::if {$TAXABLE>=308750} {::set BASE 308750;::set RATE .0815;::set FLAT 21949;} ::if {$TAXABLE>=360250} {::set BASE 360250;::set RATE .0735;::set FLAT 26147;} ::if {$TAXABLE>=1029250} {::set BASE 1029250;::set RATE .0765;::set FLAT 75318;} ::if {$TAXABLE>=2058550} {::set BASE 2058550;::set RATE .8842;::set FLAT 154059;} ::if {$TAXABLE>=2110050} {::set BASE 2110050;::set RATE .0962;::set FLAT 199596;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// TAX = {(Taxable-Base)*Rate+Flat}\Periods ::return [round2 $TAX]; } method CA-20130101 {TaxableWages} { debugLog "--- California Tax Calculation (20130101) ---"; ::set Desc "CA Tax"; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Standard 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Estimate 1000; ;#// Estimated Deduction Amount ::set Addition 0; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes] == 1} { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition 0; } else { ::set Exemptions [stringToNumber [::lindex $ExemptionTypes 0]] ::set Addition [stringToNumber [::lindex $ExemptionTypes 1]] } } ::if {$MaritalStatus eq "single" && $Taxable<=12769} {::return 0.0;} ::if {$MaritalStatus eq "head-of-household" && $Taxable<=25537} {::return 0.0;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2 && $Taxable<=12769} {::return 0.0;} ::if {$Exemptions>=2 &&$Taxable<=25537} {::return 0.0;} } ::if {$MaritalStatus eq "single"} {::set Standard 3841;} ::if {$MaritalStatus eq "head-of-household"} {::set Standard 7682;} ::if {$MaritalStatus eq "married"} { ::if {$Exemptions<2} { ::set Standard 3841; } else { ::set Standard 7682; } } ::set Regular 114.40; ::set Estimate [::expr $Addition*$Estimate]; ::set Taxable [::expr $Taxable-$Estimate]; ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::return 0.00;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.01100;::set Flat 0;} ::if {$Taxable>=7455} {::set Base 7455;::set Rate 0.02200;::set Flat 82.01;} ::if {$Taxable>=17676} {::set Base 17676;::set Rate 0.04400;::set Flat 306.87;} ::if {$Taxable>=27897} {::set Base 27897;::set Rate 0.06600;::set Flat 756.59;} ::if {$Taxable>=38726} {::set Base 38726;::set Rate 0.08800;::set Flat 1471.30;} ::if {$Taxable>=48942} {::set Base 48942;::set Rate 0.10230;::set Flat 2370.31;} ::if {$Taxable>=250000} {::set Base 250000;::set Rate 0.11330;::set Flat 22938.54;} ::if {$Taxable>=300000} {::set Base 300000;::set Rate 0.12430;::set Flat 28603.54;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate 0.13530;::set Flat 53463.54;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate 0.14630;::set Flat 121113.54;} } "married" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.01100;::set Flat 0;} ::if {$Taxable>=14910} {::set Base 14910;::set Rate 0.02200;::set Flat 164.01;} ::if {$Taxable>=35352} {::set Base 35352;::set Rate 0.04400;::set Flat 613.73;} ::if {$Taxable>=55794} {::set Base 55794;::set Rate 0.06600;::set Flat 1513.18;} ::if {$Taxable>=77452} {::set Base 77452;::set Rate 0.08800;::set Flat 2942.61;} ::if {$Taxable>=97884} {::set Base 97884;::set Rate 0.10230;::set Flat 4740.63;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate 0.11330;::set Flat 45877.10;} ::if {$Taxable>=600000} {::set Base 600000;::set Rate 0.12430;::set Flat 57207.10;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate 0.14630;::set Flat 106927.10;} } "head-of-household" { ::if {$Taxable>=0} {::set Base 0;::set Rate 0.01100;::set Flat 0;} ::if {$Taxable>=14920} {::set Base 14920;::set Rate 0.02200;::set Flat 164.12;} ::if {$Taxable>=35351} {::set Base 35351;::set Rate 0.04400;::set Flat 613.60;} ::if {$Taxable>=45571} {::set Base 45571;::set Rate 0.06600;::set Flat 1063.28;} ::if {$Taxable>=56400} {::set Base 56400;::set Rate 0.08800;::set Flat 1777.99;} ::if {$Taxable>=66618} {::set Base 66618;::set Rate 0.10230;::set Flat 2677.17;} ::if {$Taxable>=340000} {::set Base 340000;::set Rate 0.11330;::set Flat 30644.15;} ::if {$Taxable>=408000} {::set Base 408000;::set Rate 0.12430;::set Flat 38348.55;} ::if {$Taxable>=680000} {::set Base 680000;::set Rate 0.13530;::set Flat 72158.15;} ::if {$Taxable>=1000000} {::set Base 1000000;::set Rate 0.14630;::set Flat 115454.15;} } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax+$Flat]; ::set Regular [::expr $Exemptions*$Regular]; ::set Tax [::expr $Tax-$Regular]; ::if {$Tax<0.0} {::return 0.0;} ::set Tax [round2 $Tax]; ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method CO-20130101 {TaxableWages} { debugLog "--- Colorado Tax Calculation (20130101) ---"; ::set ALLOW 3900; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CO-20130101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "single"} {::set BASE 2200;} ::if {$MaritalStatus eq "married"} {::set BASE 8300;} ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=$BASE} { ::set TAX 0; } else { ::set TAXABLE [::expr $TAXABLE - $BASE]; ::set TAX [::expr $TAXABLE * .0463]; ;#// Tax=(Taxable-Base)\Periods } ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $TAX]; ::return $Result; } method CT-20130101 {TaxableWages} { debugLog "--- Connecticut Tax Calculation (20130101) ---"; ::set Desc "CT Tax"; ::set Rate 0.030; ::set Flat 0; ::set BaseTax 0; ::set Credit 0; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::qw::payrun::debug_puts "CT-20130101 MaritalStatus==\"$MaritalStatus\""; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "CT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::set Exemption 0; ::if {($MaritalStatus eq "married-filing-jointly-both-spouses-working24} {::set Exemption 11}; ::if {$Tmp1>25} {::set Exemption 10}; ::if {$Tmp1>26} {::set Exemption 9}; ::if {$Tmp1>27} {::set Exemption 8}; ::if {$Tmp1>28} {::set Exemption 7}; ::if {$Tmp1>29} {::set Exemption 6}; ::if {$Tmp1>30} {::set Exemption 5}; ::if {$Tmp1>31} {::set Exemption 4}; ::if {$Tmp1>32} {::set Exemption 3}; ::if {$Tmp1>33} {::set Exemption 2}; ::if {$Tmp1>34} {::set Exemption 1}; ::if {$Tmp1>35} {::set Exemption 0}; } ::if {$MaritalStatus eq "head-of-household"} { ::set Base 16000; ::set Exemption 19; ::if {$Tmp1>38} {::set Exemption 18}; ::if {$Tmp1>39} {::set Exemption 17}; ::if {$Tmp1>40} {::set Exemption 16}; ::if {$Tmp1>41} {::set Exemption 15}; ::if {$Tmp1>42} {::set Exemption 14}; ::if {$Tmp1>43} {::set Exemption 13}; ::if {$Tmp1>44} {::set Exemption 12}; ::if {$Tmp1>45} {::set Exemption 11}; ::if {$Tmp1>46} {::set Exemption 10}; ::if {$Tmp1>47} {::set Exemption 9}; ::if {$Tmp1>48} {::set Exemption 8}; ::if {$Tmp1>49} {::set Exemption 7}; ::if {$Tmp1>50} {::set Exemption 6}; ::if {$Tmp1>51} {::set Exemption 5}; ::if {$Tmp1>52} {::set Exemption 4}; ::if {$Tmp1>53} {::set Exemption 3}; ::if {$Tmp1>54} {::set Exemption 2}; ::if {$Tmp1>55} {::set Exemption 1}; ::if {$Tmp1>56} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::set Base 20000; ::set Exemption 24; ::if {$Tmp1>48} {::set Exemption 23}; ::if {$Tmp1>49} {::set Exemption 22}; ::if {$Tmp1>50} {::set Exemption 21}; ::if {$Tmp1>51} {::set Exemption 20}; ::if {$Tmp1>52} {::set Exemption 19}; ::if {$Tmp1>53} {::set Exemption 18}; ::if {$Tmp1>54} {::set Exemption 17}; ::if {$Tmp1>55} {::set Exemption 16}; ::if {$Tmp1>56} {::set Exemption 15}; ::if {$Tmp1>57} {::set Exemption 14}; ::if {$Tmp1>58} {::set Exemption 13}; ::if {$Tmp1>59} {::set Exemption 12}; ::if {$Tmp1>60} {::set Exemption 11}; ::if {$Tmp1>61} {::set Exemption 10}; ::if {$Tmp1>62} {::set Exemption 9}; ::if {$Tmp1>63} {::set Exemption 8}; ::if {$Tmp1>64} {::set Exemption 7}; ::if {$Tmp1>65} {::set Exemption 6}; ::if {$Tmp1>66} {::set Exemption 5}; ::if {$Tmp1>67} {::set Exemption 4}; ::if {$Tmp1>68} {::set Exemption 3}; ::if {$Tmp1>69} {::set Exemption 2}; ::if {$Tmp1>70} {::set Exemption 1}; ::if {$Tmp1>71} {::set Exemption 0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Base 10000; ::set Exemption 0; } ::if {$MaritalStatus eq "single"} { ::set Base 10000; ::set Exemption 13.5; ::if {$Tmp1>27.0} {::set Exemption 12.5}; ::if {$Tmp1>28.0} {::set Exemption 11.5}; ::if {$Tmp1>29.0} {::set Exemption 10.5}; ::if {$Tmp1>30.0} {::set Exemption 9.5}; ::if {$Tmp1>31.0} {::set Exemption 8.5}; ::if {$Tmp1>32.0} {::set Exemption 7.5}; ::if {$Tmp1>33.0} {::set Exemption 6.5}; ::if {$Tmp1>34.0} {::set Exemption 5.5}; ::if {$Tmp1>35.0} {::set Exemption 4.5}; ::if {$Tmp1>36.0} {::set Exemption 3.5}; ::if {$Tmp1>37.0} {::set Exemption 2.5}; ::if {$Tmp1>38.0} {::set Exemption 1.5}; ::if {$Tmp1>39.0} {::set Exemption 0.5}; ::if {$Tmp1>40.0} {::set Exemption 0}; } ::set Exemption [::expr $Exemption * 1000]; ::set Taxable [::expr $Taxable-$Exemption]; ;#// (6) Annual Taxable Income ::set Tax 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable<=10000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>10000} {::set Base 10000; ::set Rate 0.05; ::set Flat 300;} ::if {$Taxable>50000} {::set Base 50000; ::set Rate 0.055; ::set Flat 2300;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.06; ::set Flat 5050;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.065; ::set Flat 11050;} ::if {$Taxable>250000} {::set Base 250000; ::set Rate 0.067; ::set Flat 14300;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable<=16000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>16000} {::set Base 16000; ::set Rate 0.05; ::set Flat 480;} ::if {$Taxable>80000} {::set Base 80000; ::set Rate 0.055; ::set Flat 3680;} ::if {$Taxable>160000} {::set Base 160000; ::set Rate 0.06; ::set Flat 8080;} ::if {$Taxable>320000} {::set Base 320000; ::set Rate 0.065; ::set Flat 17680;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.067; ::set Flat 22880;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable<=20000} {::set Base 0; ::set Rate 0.03; ::set Flat 0;} ::if {$Taxable>20000} {::set Base 20000; ::set Rate 0.05; ::set Flat 600;} ::if {$Taxable>100000} {::set Base 100000; ::set Rate 0.055; ::set Flat 4600;} ::if {$Taxable>200000} {::set Base 200000; ::set Rate 0.06; ::set Flat 10100;} ::if {$Taxable>400000} {::set Base 400000; ::set Rate 0.065; ::set Flat 22100;} ::if {$Taxable>500000} {::set Base 500000; ::set Rate 0.067; ::set Flat 28600;} ::set Tax [::expr $Taxable-$Base]; ::set Tax [::expr $Tax*$Rate]; ::set Tax [::expr $Tax+$Flat]; } ::if {$MaritalStatus eq "exempt"} { ::set Tax 0; } ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ } { ::if {$Taxable>50250} { ::if {$Taxable>50250&&$Taxable<52750} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>52750&&$Taxable<55250} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>55250&&$Taxable<57750} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>57750&&$Taxable<60250} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>60250&&$Taxable<62750} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>62750&&$Taxable<65250} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>65250&&$Taxable<67750} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>67750&&$Taxable<70250} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>70250&&$Taxable<72750} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>72750} {::set Tax [::expr $Tax+200]}; } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable>78500} { ::if {$Taxable>78500&&$Taxable<82500} {::set Tax [::expr $Tax+32]}; ::if {$Taxable>82500&&$Taxable<86500} {::set Tax [::expr $Tax+64]}; ::if {$Taxable>86500&&$Taxable<90500} {::set Tax [::expr $Tax+96]}; ::if {$Taxable>90500&&$Taxable<94500} {::set Tax [::expr $Tax+128]}; ::if {$Taxable>94500&&$Taxable<98500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>98500&&$Taxable<102500} {::set Tax [::expr $Tax+192]}; ::if {$Taxable>102500&&$Taxable<106500} {::set Tax [::expr $Tax+224]}; ::if {$Taxable>106500&&$Taxable<100500} {::set Tax [::expr $Tax+256]}; ::if {$Taxable>110500&&$Taxable<114500} {::set Tax [::expr $Tax+288]}; ::if {$Taxable>114500} {::set Tax [::expr $Tax+320]}; } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable>100500} { ::if {$Taxable>100500&&$Taxable<105500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>105500&&$Taxable<110500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>110500&&$Taxable<115500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>115500&&$Taxable<120500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>120500&&$Taxable<125500} {::set Tax [::expr $Tax+200]}; ::if {$Taxable>125500&&$Taxable<130500} {::set Tax [::expr $Tax+240]}; ::if {$Taxable>130500&&$Taxable<135500} {::set Tax [::expr $Tax+280]}; ::if {$Taxable>135500&&$Taxable<140500} {::set Tax [::expr $Tax+320]}; ::if {$Taxable>140500&&$Taxable<145500} {::set Tax [::expr $Tax+360]}; ::if {$Taxable>145000} {::set Tax [::expr $Tax+400]}; } } ::if {$MaritalStatus eq "single"} { ::if {$Taxable>56500} { ::if {$Taxable>56500&&$Taxable<61500} {::set Tax [::expr $Tax+20]}; ::if {$Taxable>61500&&$Taxable<66500} {::set Tax [::expr $Tax+40]}; ::if {$Taxable>66500&&$Taxable<71500} {::set Tax [::expr $Tax+60]}; ::if {$Taxable>71500&&$Taxable<76500} {::set Tax [::expr $Tax+80]}; ::if {$Taxable>76500&&$Taxable<81500} {::set Tax [::expr $Tax+100]}; ::if {$Taxable>81500&&$Taxable<86500} {::set Tax [::expr $Tax+120]}; ::if {$Taxable>86500&&$Taxable<91500} {::set Tax [::expr $Tax+140]}; ::if {$Taxable>91500&&$Taxable<96500} {::set Tax [::expr $Tax+160]}; ::if {$Taxable>96500&&$Taxable<101500} {::set Tax [::expr $Tax+180]}; ::if {$Taxable>101500} {::set Tax [::expr $Tax+200]}; } } ::set Recapture 0; ::if {$MaritalStatus eq "married-filing-separately" \ ||$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling" \ ||$MaritalStatus eq "single" \ } { ::if {$Taxable >200000} { ::set Recapture [::expr $Taxable-200000]; ::set Recapture [::expr $Recapture/5000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*75]; ::if {$Recapture>=2250} { ::set Recapture 2250; } } } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Taxable >320000} { ::set Recapture [::expr $Taxable-320000]; ::set Recapture [::expr $Recapture/8000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*120]; ::if {$Recapture>=3600} { ::set Recapture 3600; } } } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Taxable >400000} { ::set Recapture [::expr $Taxable-400000]; ::set Recapture [::expr $Recapture/10000]; ::set Recapture [::format %.2f $Recapture]; ::set Recapture [::expr $Recapture*150]; ::if {$Recapture>=4500} { ::set Recapture 4500; } } } ::set Tax [::expr $Tax+$Recapture]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set Tmp1 [::expr $Taxable / 1000.0]; ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$Tmp1>12} {::set Credit .75}; ::if {$Tmp1>15} {::set Credit .7}; ::if {$Tmp1>15.5} {::set Credit .65}; ::if {$Tmp1>16} {::set Credit .6}; ::if {$Tmp1>16.5} {::set Credit .55}; ::if {$Tmp1>17} {::set Credit .5}; ::if {$Tmp1>17.5} {::set Credit .45}; ::if {$Tmp1>18} {::set Credit .4}; ::if {$Tmp1>18.5} {::set Credit .35}; ::if {$Tmp1>20} {::set Credit .3}; ::if {$Tmp1>20.5} {::set Credit .25}; ::if {$Tmp1>21} {::set Credit .2}; ::if {$Tmp1>21.5} {::set Credit .15}; ::if {$Tmp1>25} {::set Credit .14}; ::if {$Tmp1>25.5} {::set Credit .13}; ::if {$Tmp1>26} {::set Credit .12}; ::if {$Tmp1>26.5} {::set Credit .11}; ::if {$Tmp1>27} {::set Credit .1}; ::if {$Tmp1>48} {::set Credit .09}; ::if {$Tmp1>48.5} {::set Credit .08}; ::if {$Tmp1>49} {::set Credit .07}; ::if {$Tmp1>49.5} {::set Credit .06}; ::if {$Tmp1>50} {::set Credit .05}; ::if {$Tmp1>50.5} {::set Credit .04}; ::if {$Tmp1>51} {::set Credit .03}; ::if {$Tmp1>51.5} {::set Credit .02}; ::if {$Tmp1>52.0} {::set Credit .01}; ::if {$Tmp1>52.5} {::set Credit .0}; } ::if {$MaritalStatus eq "head-of-household"} { ::if {$Tmp1>19} {::set Credit .75}; ::if {$Tmp1>24} {::set Credit .7}; ::if {$Tmp1>24.5} {::set Credit .65}; ::if {$Tmp1>25} {::set Credit .6}; ::if {$Tmp1>25.5} {::set Credit .55}; ::if {$Tmp1>26} {::set Credit .5}; ::if {$Tmp1>26.5} {::set Credit .45}; ::if {$Tmp1>27} {::set Credit .4}; ::if {$Tmp1>27.5} {::set Credit .35}; ::if {$Tmp1>34} {::set Credit .3}; ::if {$Tmp1>34.5} {::set Credit .25}; ::if {$Tmp1>35} {::set Credit .2}; ::if {$Tmp1>35.5} {::set Credit .15}; ::if {$Tmp1>44} {::set Credit .14}; ::if {$Tmp1>44.5} {::set Credit .13}; ::if {$Tmp1>45} {::set Credit .12}; ::if {$Tmp1>45.5} {::set Credit .11}; ::if {$Tmp1>46} {::set Credit .1}; ::if {$Tmp1>74} {::set Credit .09}; ::if {$Tmp1>74.5} {::set Credit .08}; ::if {$Tmp1>75} {::set Credit .07}; ::if {$Tmp1>75.5} {::set Credit .06}; ::if {$Tmp1>76} {::set Credit .05}; ::if {$Tmp1>76.5} {::set Credit .04}; ::if {$Tmp1>77} {::set Credit .03}; ::if {$Tmp1>77.5} {::set Credit .02}; ::if {$Tmp1>78} {::set Credit .01}; ::if {$Tmp1>78.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-spouse-not-working"} { ::if {$Tmp1>24} {::set Credit .75}; ::if {$Tmp1>30} {::set Credit .7}; ::if {$Tmp1>30.5} {::set Credit .65}; ::if {$Tmp1>31} {::set Credit .6}; ::if {$Tmp1>31.5} {::set Credit .55}; ::if {$Tmp1>32} {::set Credit .5}; ::if {$Tmp1>32.5} {::set Credit .45}; ::if {$Tmp1>33} {::set Credit .4}; ::if {$Tmp1>33.5} {::set Credit .35}; ::if {$Tmp1>40} {::set Credit .3}; ::if {$Tmp1>40.5} {::set Credit .25}; ::if {$Tmp1>41} {::set Credit .2}; ::if {$Tmp1>41.5} {::set Credit .15}; ::if {$Tmp1>50} {::set Credit .14}; ::if {$Tmp1>50.5} {::set Credit .13}; ::if {$Tmp1>51} {::set Credit .12}; ::if {$Tmp1>51.5} {::set Credit .11}; ::if {$Tmp1>52} {::set Credit .1}; ::if {$Tmp1>96} {::set Credit .09}; ::if {$Tmp1>96.5} {::set Credit .08}; ::if {$Tmp1>97} {::set Credit .07}; ::if {$Tmp1>97.5} {::set Credit .06}; ::if {$Tmp1>98} {::set Credit .05}; ::if {$Tmp1>98.5} {::set Credit .04}; ::if {$Tmp1>99} {::set Credit .03}; ::if {$Tmp1>99.5} {::set Credit .02}; ::if {$Tmp1>100} {::set Credit .01}; ::if {$Tmp1>100.5} {::set Credit .0}; } ::if {$MaritalStatus eq "single"} { ::if {$Tmp1>14.0} {::set Credit .75}; ::if {$Tmp1>17.5} {::set Credit .70}; ::if {$Tmp1>18.0} {::set Credit .65}; ::if {$Tmp1>18.5} {::set Credit .60}; ::if {$Tmp1>19.0} {::set Credit .55}; ::if {$Tmp1>19.5} {::set Credit .50}; ::if {$Tmp1>20.0} {::set Credit .45}; ::if {$Tmp1>20.5} {::set Credit .40}; ::if {$Tmp1>21.0} {::set Credit .35}; ::if {$Tmp1>23.3} {::set Credit .30}; ::if {$Tmp1>23.8} {::set Credit .25}; ::if {$Tmp1>24.3} {::set Credit .20}; ::if {$Tmp1>24.8} {::set Credit .15}; ::if {$Tmp1>29.2} {::set Credit .14}; ::if {$Tmp1>29.7} {::set Credit .13}; ::if {$Tmp1>30.2} {::set Credit .12}; ::if {$Tmp1>30.7} {::set Credit .11}; ::if {$Tmp1>31.2} {::set Credit .10}; ::if {$Tmp1>56.0} {::set Credit .09}; ::if {$Tmp1>56.5} {::set Credit .08}; ::if {$Tmp1>57.0} {::set Credit .07}; ::if {$Tmp1>57.5} {::set Credit .06}; ::if {$Tmp1>58.0} {::set Credit .05}; ::if {$Tmp1>58.5} {::set Credit .04}; ::if {$Tmp1>59.0} {::set Credit .03}; ::if {$Tmp1>59.5} {::set Credit .02}; ::if {$Tmp1>60.0} {::set Credit .01}; ::if {$Tmp1>60.5} {::set Credit .0}; } ::if {$MaritalStatus eq "married-filing-jointly-both-spouses-working>ceiling"} { ::set Credit 0.00; } ;# Exempt ::if {$MaritalStatus eq "exempt"} { ::set Credit 1; ;#// (This will cause credit to be 0%) } ::set Credit [::expr 1-$Credit]; ::set Tax [::expr $Tax*$Credit]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Tax<0} { ::set Tax 0; } ::set Result [round2 $Tax]; ::return $Result; } method GA-20130101 {TaxableWages} { ::set DESC "Georgia Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "GA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Standard 0; ::set Personal 3000; ::set Dependant 3000; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set TotalAllowance 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Taxable [::expr $Taxable+$Supp]; ::switch -- $MaritalStatus { zero - single - head-of-household {::set Standard 2300;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Standard 1500;} married-filing-jointly-one-spouse-working {::set Standard 3000;} } ::switch -- $MaritalStatus { zero - single - head-of-household {::set Personal 2700;} married-filing-separately - married-filing-jointly-both-spouses-working {::set Personal 3700;} married-filing-jointly-one-spouse-working {::set Personal 7400;} } ::set TotalAllowance [::expr $Personal+$Exemptions*$Dependant]; ::if {$MaritalStatus eq "zero"} { ::set Taxable [::expr $Taxable-$Standard]; } else { ::set Taxable [::expr $Taxable-$Standard-$TotalAllowance]; } ::if {$Taxable<0} { ::set Taxable 0 }; ::switch -- $MaritalStatus { zero - single { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0.00}; ::if {$Taxable>=750} {::set Base 750;::set Rate .02;::set Flat 7.50}; ::if {$Taxable>=2250} {::set Base 2250;::set Rate .03;::set Flat 37.50}; ::if {$Taxable>=3750} {::set Base 3750;::set Rate .04;::set Flat 82.50}; ::if {$Taxable>=5250} {::set Base 5250;::set Rate .05;::set Flat 142.50}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .06;::set Flat 230.00}; } married-filing-separately - married-filing-jointly-both-spouses-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=500} {::set Base 500;::set Rate .02;::set Flat 5}; ::if {$Taxable>=1500} {::set Base 1500;::set Rate .03;::set Flat 25}; ::if {$Taxable>=2500} {::set Base 2500;::set Rate .04;::set Flat 55}; ::if {$Taxable>=3500} {::set Base 3500;::set Rate .05;::set Flat 95}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .06;::set Flat 170}; } head-of-household - married-filing-jointly-one-spouse-working { ::if {$Taxable>=0} {::set Base 0;::set Rate .01;::set Flat 0}; ::if {$Taxable>=1000} {::set Base 1000;::set Rate .02;::set Flat 10}; ::if {$Taxable>=3000} {::set Base 3000;::set Rate .03;::set Flat 50}; ::if {$Taxable>=5000} {::set Base 5000;::set Rate .04;::set Flat 110}; ::if {$Taxable>=7000} {::set Base 7000;::set Rate .05;::set Flat 190}; ::if {$Taxable>=10000} {::set Base 10000;::set Rate .06;::set Flat 340}; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax/$_pay_frequency]; ::if {$Taxable<0} {::set Taxable 0;} ::set Result [round2 $Tax]; ::return $Result; } method IL-20130101 {TaxableWages} { ::set DESC "Illinois Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IL"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .05; ::set EXEMPT1 2100; ::set EXEMPT2 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions .]; ::if {[::llength $ExemptionTypes]==1} { ::set E1 $ExemptionTypes; ::set E2 0; } else { ::set E1 [stringToNumber [::lindex $ExemptionTypes 0]] ::set E2 [stringToNumber [::lindex $ExemptionTypes 1]] } } ::set EXEMPT1 [::expr {$E1*$EXEMPT1}]; ::set EXEMPT2 [::expr {$E2*$EXEMPT2}]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT1]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT2]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KS-20130101 {TaxableWages} { ::set DESC "Kansas Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 2250; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; # Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .0300;::set FLAT 0.00;} ::if {$TAXABLE>=18000} {::set BASE 18000;::set RATE .0490;::set FLAT 450.00;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=6000} {::set BASE 6000;::set RATE .0300;::set FLAT 0.00;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .0490;::set FLAT 900.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method KY-20130101 {TaxableWages} { debugLog "--- Kentucky Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "KY"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set STANDARD 2360; ::set CREDIT 20; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ;#// Taxable = Paysum*Periods-Standard ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .020;::set FLAT [::expr $FLAT+0];} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+60];} ::if {$TAXABLE>=4000} {::set BASE 4000;::set RATE .040;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .050;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .058;::set FLAT [::expr $FLAT+150];} ::if {$TAXABLE>=75000} {::set BASE 75000;::set RATE .060;::set FLAT [::expr $FLAT+3886];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX1 [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat-(Xemp*Credit)}\Periods ::set TAX1 [::expr $TAX1+$FLAT]; ::set CREDIT [::expr $Exemptions*$CREDIT]; ::set TAX1 [::expr $TAX1-$CREDIT]; ::if {$TAX1<0} {::set TAX1 0;} ::set TAX [::expr $TAX1/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ME-20130101 {TaxableWages} { debugLog "--- Maine Tax Calculation (20130101) ---"; ::set Desc "Maine Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ME"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 3900; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $Taxable*$_pay_frequency]; ::set Taxable [::expr $Taxable+$Supp]; ::set Allow [::expr $Exemptions*$Allow]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ;#// Ver 5. Handle negative taxable income ::if {$MaritalStatus eq "married-filing-jointly"} { debugLog "Note: Employee marital status \"married-filing-jointly\" is unavailable for 2007, using \"married\" instead."; ::set MaritalStatus "married"; } ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=8450} {::set Base 8450;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=24150} {::set Base 24150;::set Rate 0.0795;::set Flat 1021;} } "married" { ::if {$Taxable>=17750} {::set Base 17750;::set Rate 0.0650;::set Flat 0;} ::if {$Taxable>=49150} {::set Base 49150;::set Rate 0.0795;::set Flat 2041;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing Maine state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = (Taxable-Base)*Rate+Flat\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ;#// No negative tax ::if {$Tax<40} {::set Tax 0;} ;#// Annualized tax amt < 40 so zero ::set Tax [::expr $Tax/$_pay_frequency]; ::set Taxable [::expr $Supp * .05]; ::set Tax [::expr $Tax+$Taxable]; ;#// Tax = Tax+(5% of supplemental wages) ::set Result [round2 $Tax]; ::return $Result; } method MI-20130101 {TaxableWages} { debugLog "--- Michigan Tax Calculation (20130101) ---"; ::set DESC "Michigan Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE 0.0425; ::set ALLOW 3950.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set DateOfBirth [employeeInfoGet ".date_of_birth"]; ::if {$DateOfBirth ne "" \ &&[::qw::date::difference $DateOfBirth 19460101 day]>=0 \ &&[::qw::date::difference $DateOfBirth 19521231 day]<=0 \ } { ::switch $MaritalStatus { "" {::set PensionAllow 0.0;} single {::set PensionAllow 1666.67;} married {::set PensionAllow 3333.33;} } ::set TAXABLE [::expr $TAXABLE-$PensionAllow]; } ::if {$Exemptions<100} { ::set ALLOW [::expr $Exemptions*$ALLOW]; } else { ::set ALLOW $Exemptions; } ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MN-20130101 {TaxableWages} { debugLog "--- Minnesota Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 3900; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2200} {::set BASE 2200;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=26470} {::set BASE 26470;::set RATE 0.0705;::set FLAT 1298.45;} ::if {$TAXABLE>=81930} {::set BASE 81930;::set RATE 0.0785;::set FLAT 5208.38;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=6250} {::set BASE 6250;::set RATE 0.0535;::set FLAT 0;} ::if {$TAXABLE>=41730} {::set BASE 41730;::set RATE 0.0705;::set FLAT 1898.18;} ::if {$TAXABLE>=147210} {::set BASE 147210;::set RATE 0.0785;::set FLAT 9334.52;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0}; ::set TAX [::expr $TAX /$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method ND-20130101 {TaxableWages} { debugLog "--- North Dakota Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ND"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Perc [payCodeValueGet ".percent"]; ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$Perc eq "Y"} { ::set TAX [::expr $FEDERAL * 0.21]; ::set TAX [round2 $TAX]; ::return $TAX; } ::set ALLOW 3900; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4100} {::set BASE 4100;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=39000} {::set BASE 39000;::set RATE 0.0227;::set FLAT 425.78;} ::if {$TAXABLE>=81000} {::set BASE 81000;::set RATE 0.0252;::set FLAT 1379.18;} ::if {$TAXABLE>=185000} {::set BASE 185000;::set RATE 0.0293;::set FLAT 3999.98;} ::if {$TAXABLE>=400000} {::set BASE 400000;::set RATE 0.0322;::set FLAT 10299.48;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE 0.0122;::set FLAT 0.00;} ::if {$TAXABLE>=69000} {::set BASE 69000;::set RATE 0.0227;::set FLAT 719.80;} ::if {$TAXABLE>=130000} {::set BASE 130000;::set RATE 0.0252;::set FLAT 2104.50;} ::if {$TAXABLE>=231000} {::set BASE 231000;::set RATE 0.0293;::set FLAT 4649.70;} ::if {$TAXABLE>=405000} {::set BASE 405000;::set RATE 0.0322;::set FLAT 9747.90;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Periods*Paysum-(Xemp*Allow)-Base) *Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::if {$TAX<1} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method NE-20130101 {TaxableWages} { debugLog "--- Nebraska Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 1900; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TaxableWages [::expr $TaxableWages-$SUPP]; ::set TaxableWages [::expr $_pay_frequency*$TaxableWages]; ::set TaxableWages [::expr $TaxableWages+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TaxableWages-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2975} {::set BASE 2975;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=5325} {::set BASE 5325;::set RATE 0.0322;::set FLAT 53.11;} ::if {$TAXABLE>=17275} {::set BASE 17275;::set RATE 0.0491;::set FLAT 437.90;} ::if {$TAXABLE>=25025} {::set BASE 25025;::set RATE 0.0620;::set FLAT 818.43;} ::if {$TAXABLE>=31775} {::set BASE 31775;::set RATE 0.0659;::set FLAT 1236.93;} ::if {$TAXABLE>=59675} {::set BASE 59675;::set RATE 0.0695;::set FLAT 3075.54;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=7100} {::set BASE 7100;::set RATE 0.0226;::set FLAT 0;} ::if {$TAXABLE>=10300} {::set BASE 10300;::set RATE 0.0322;::set FLAT 72.32;} ::if {$TAXABLE>=25650} {::set BASE 25650;::set RATE 0.0491;::set FLAT 566.59;} ::if {$TAXABLE>=39900} {::set BASE 39900;::set RATE 0.0620;::set FLAT 1266.27;} ::if {$TAXABLE>=49500} {::set BASE 49500;::set RATE 0.0659;::set FLAT 1861.47;} ::if {$TAXABLE>=65650} {::set BASE 65650;::set RATE 0.0695;::set FLAT 2925.76;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * .05]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// Tax = Tax+(5% of supplemental wages) ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OK-20130101 {TaxableWages} { debugLog "--- Oklahoma Sate Tax Calculation (2013101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OK"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::switch -- $MaritalStatus { "single" - "surviving-spouse" - "married-filing-separately" - "head-of-household" { ::set MaritalStatus "single"; } "married" - "married-filing-jointly" - "married-both-spouses-working" { ::set MaritalStatus "married"; } default { ::set MaritalStatus "single"; } } ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>6100} {::set BASE 6100;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>7100} {::set BASE 7100;::set RATE 0.010;::set FLAT 5.00;} ::if {$TAXABLE>8600} {::set BASE 8600;::set RATE 0.020;::set FLAT 20.00;} ::if {$TAXABLE>9850} {::set BASE 9850;::set RATE 0.030;::set FLAT 45.00;} ::if {$TAXABLE>11000} {::set BASE 11000;::set RATE 0.040;::set FLAT 79.50;} ::if {$TAXABLE>13300} {::set BASE 13300;::set RATE 0.050;::set FLAT 171.50;} ::if {$TAXABLE>14800} {::set BASE 14800;::set RATE 0.0525;::set FLAT 246.50;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.000;::set FLAT 0.00;} ::if {$TAXABLE>10150} {::set BASE 10150;::set RATE 0.005;::set FLAT 0.00;} ::if {$TAXABLE>12150} {::set BASE 12150;::set RATE 0.010;::set FLAT 10.00;} ::if {$TAXABLE>15150} {::set BASE 15150;::set RATE 0.020;::set FLAT 40.00;} ::if {$TAXABLE>17650} {::set BASE 17650;::set RATE 0.030;::set FLAT 90.00;} ::if {$TAXABLE>19950} {::set BASE 19950;::set RATE 0.040;::set FLAT 159.00;} ::if {$TAXABLE>22350} {::set BASE 22350;::set RATE 0.050;::set FLAT 255.00;} ::if {$TAXABLE>25150} {::set BASE 25150;::set RATE 0.0525;::set FLAT 395.00;} } ::set TAX [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAX*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method OR-20130101 {TaxableWages} { debugLog "--- Oregon Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 6250.00; ::set PERSONAL 188.00; ::switch -- $MaritalStatus { "single" { ::set STANDARD 2080; } "married" { ::set STANDARD 4160; } "married-filing-separately" { ::set STANDARD 2080; } } ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set Annual $TAXABLE; ::set FDEDUCT [::expr $_pay_frequency*$FEDERAL]; ::if {$FDEDUCT>$MAXIMUM} {::set FDEDUCT $MAXIMUM;} ::set TAXABLE [::expr $TAXABLE-$FDEDUCT]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set BASE 0; ::set RATE 0.05; ::set FLAT 0; ::if {$Annual<=50000} { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>3250} {::set BASE 3250;::set RATE 0.07;::set FLAT 351;} ::if {$TAXABLE>8150} {::set BASE 8150;::set RATE 0.09;::set FLAT 694;} } else { ::if {$TAXABLE>6500} {::set BASE 6500;::set RATE 0.07;::set FLAT 513;} ::if {$TAXABLE>16300} {::set BASE 16300;::set RATE 0.09;::set FLAT 1199;} } } else { ::if {$MaritalStatus eq "single" && $Exemptions<3} { ::if {$TAXABLE>41670} {::set BASE 8150;::set RATE 0.09;::set FLAT 506;} ::if {$TAXABLE>125000} {::set BASE 125000;::set RATE 0.099;::set FLAT 11022;} } else { ::if {$TAXABLE>39590} {::set BASE 16300;::set RATE 0.09;::set FLAT 1011;} ::if {$TAXABLE>250000} {::set BASE 250000;::set RATE 0.099;::set FLAT 22044;} } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; ::set TAX [::expr $TAX-$PERSONAL]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method RI-20130101 {TaxableWages} { debugLog "--- Rhode Island Tax Calculation (20130101) ---"; ::set DESC "RI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "RI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Annual [::expr $_pay_frequency*$TaxableWages]; ::if {$Annual>207950} { ::set ALLOW 0.0; } else { ::set ALLOW 1000.00; } ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set TAXABLE [::expr $TAXABLE+$SUPP]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single" \ ||$MaritalStatus eq "married" \ } { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0375;::set FLAT 0.0;} ::if {$TAXABLE>=58600} {::set BASE 58600;::set RATE 0.0475;::set FLAT 2197.50;} ::if {$TAXABLE>=133250} {::set BASE 133250;::set RATE 0.0599;::set FLAT 5743.38} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAXABLE [::expr $SUPP * 0.07]; ::set TAX [::expr $TAX+$TAXABLE]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method PR-20130101 {TaxableWages} { debugLog "--- Puerto Rico Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "PR"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$MaritalStatus eq "married-filing-jointly-claiming-all"} {::set MaritalStatus head-of-household;} ::if {$MaritalStatus eq "married-filing-jointly-claiming-half"} {::set MaritalStatus married-filing-separately-claiming-all;} ::set EXEMPT 0; ::set DEPENDENT 1600; ::set ALLOWANCE 500; ::set TAXABLE [::expr $TaxableWages*$_pay_frequency]; ::if {$MaritalStatus eq "single"} {::set EXEMPT 1300;} ::if {$MaritalStatus eq "head-of-household"} {::set EXEMPT 3000;} ::if {$MaritalStatus eq "married-filing-separately-claiming-all"} {::set EXEMPT 1500;} ::if {$MaritalStatus eq "zero"} {::set EXEMPT 0;} ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set CREDIT [::expr $ALLOWANCE*$Exemptions]; ::set TAXABLE [::expr $TAXABLE-$CREDIT]; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::set RATE 0.07; ::if {$TAXABLE>9000} {::set RATE 0.07;::set FLAT 630;} ::if {$TAXABLE>25000} {::set RATE 0.14;::set FLAT 2380;} ::if {$TAXABLE>41500} {::set RATE 0.25;::set FLAT 6945;} ::if {$TAXABLE>61500} {::set RATE 0.33;::set FLAT 11865;} ::set TAXABLE [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAXABLE-$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method VT-20130101 {TaxableWages} { debugLog "--- Vermont Tax Calculation (20130101) ---"; ::set ALLOW 3900; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ;#//Taxable = (Periods*Paysum)-(Xemp*Allow) ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=2650} {::set BASE 2650;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=38450} {::set BASE 38450;::set RATE 0.0680;::set FLAT 1270.90;} ::if {$TAXABLE>=90050} {::set BASE 90050;::set RATE 0.0780;::set FLAT 4779.70;} ::if {$TAXABLE>=185450} {::set BASE 185450;::set RATE 0.0880;::set FLAT 12220.90;} ::if {$TAXABLE>=400550} {::set BASE 400550;::set RATE 0.0895;::set FLAT 31149.70;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE 0.0355;::set FLAT 0.00;} ::if {$TAXABLE>=67400} {::set BASE 67400;::set RATE 0.0680;::set FLAT 2108.70;} ::if {$TAXABLE>=154700} {::set BASE 154700;::set RATE 0.0780;::set FLAT 8045.10;} ::if {$TAXABLE>=231350} {::set BASE 231350;::set RATE 0.0880;::set FLAT 14023.80;} ::if {$TAXABLE>=406650} {::set BASE 406650;::set RATE 0.0895;::set FLAT 29450.20;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; #// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method MO-20130101 {TaxableWages} { debugLog "--- Missouri Tax Calculation (20130101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MO"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set STANDARD 0; ::if {$MaritalStatus eq "single"} { ::set STANDARD 6100; } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::set STANDARD 12200; } else { ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 8950; } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::set STANDARD 6100; } else { ::set MaritalStatus single; ::set STANDARD 6100; } } } } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set FedDed [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::if {$FedDed>=10000} {::set FedDed 10000;} ;#// Default limit on FIT deduction ::set DEPEND 0; ::if {$MaritalStatus eq "single"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;# Limit on FIT deduction } else { ::if {$MaritalStatus eq "married-both-spouses-working"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} } else { ::if {$MaritalStatus eq "married-one-spouse-working"} { ::if {$Exemptions>1} { ::set DEPEND [::expr $DEPEND+2100]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } } else { ::if {$MaritalStatus eq "head-of-household"} { ::if {$Exemptions>=1} { ::set DEPEND [::expr $DEPEND+3500]; ::if {$Exemptions>1} { ::set Tmp1 [::expr $Exemptions - 1]; ::set Tmp1 [::expr $Tmp1 * 1200]; ::set DEPEND [::expr $DEPEND+$Tmp1]; } } ::if {$FedDed>=5000} {::set FedDed 5000;} ;#// Limit on FIT deduction } } } } ::set TAXABLE [::expr $TAXABLE-$DEPEND]; ::set TAXABLE [::expr $TAXABLE-$FedDed]; ;#// Missouri taxable income ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .015;::set FLAT 0;} ::if {$TAXABLE>1000} {::set BASE 1000;::set RATE .020;::set FLAT [::expr $FLAT+15];} ::if {$TAXABLE>2000} {::set BASE 2000;::set RATE .025;::set FLAT [::expr $FLAT+20];} ::if {$TAXABLE>3000} {::set BASE 3000;::set RATE .030;::set FLAT [::expr $FLAT+25];} ::if {$TAXABLE>4000} {::set BASE 4000;::set RATE .035;::set FLAT [::expr $FLAT+30];} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE .040;::set FLAT [::expr $FLAT+35];} ::if {$TAXABLE>6000} {::set BASE 6000;::set RATE .045;::set FLAT [::expr $FLAT+40];} ::if {$TAXABLE>7000} {::set BASE 7000;::set RATE .050;::set FLAT [::expr $FLAT+45];} ::if {$TAXABLE>8000} {::set BASE 8000;::set RATE .055;::set FLAT [::expr $FLAT+50];} ::if {$TAXABLE>9000} {::set BASE 9000;::set RATE .060;::set FLAT [::expr $FLAT+55];} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method ID-20120701 {TaxableWages} { debugLog "--- Idaho Tax Calculation (20120701) ---"; ::set Desc "Idaho Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "ID"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Exempt 3800; # Amount per exemption ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; # Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set Taxable [::expr $Taxable-$Exempt]; ::if {$Taxable<0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=2150} {::set Base 2150;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=3530} {::set Base 3530;::set Rate 0.036;::set Flat 22}; ::if {$Taxable>=4910} {::set Base 4910;::set Rate 0.041;::set Flat 72}; ::if {$Taxable>=6290} {::set Base 6290;::set Rate 0.051;::set Flat 129}; ::if {$Taxable>=7670} {::set Base 7670;::set Rate 0.061;::set Flat 199}; ::if {$Taxable>=9050} {::set Base 9050;::set Rate 0.071;::set Flat 283}; ::if {$Taxable>=12500} {::set Base 12500;::set Rate 0.074;::set Flat 528}; } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=8100} {::set Base 8100;::set Rate 0.016;::set Flat 0}; ::if {$Taxable>=10860} {::set Base 10860;::set Rate 0.036;::set Flat 44}; ::if {$Taxable>=13620} {::set Base 13620;::set Rate 0.041;::set Flat 143}; ::if {$Taxable>=16380} {::set Base 16380;::set Rate 0.051;::set Flat 256}; ::if {$Taxable>=19140} {::set Base 19140;::set Rate 0.061;::set Flat 397}; ::if {$Taxable>=21900} {::set Base 21900;::set Rate 0.071;::set Flat 565}; ::if {$Taxable>=28800} {::set Base 28800;::set Rate 0.074;::set Flat 1055}; } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax /$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method US-20120101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20120101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2150 0.100 0.00} {10850 0.150 870.00} {37500 0.250 4867.50} {87800 0.280 17442.50} {180800 0.330 43482.50} {390500 0.350 112683.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8100 0.100 0.00} {25500 0.150 1740.00} {78800 0.250 9735.00} {150800 0.280 27735.00} {225550 0.330 48665.00} {396450 0.350 105062.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method DC-20120101 {TaxableWages} { debugLog "--- District of Columbia Tax Calculation (20120101) ---"; ::set DESC "D.C. Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1675; ::if {($MaritalStatus eq "married-filing-jointly")} {::set MaritalStatus "single";} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0850;::set FLAT 2200.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0895;::set FLAT 28550.00;} } ::if {$MaritalStatus eq "married-filing-separately"} { ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0600;::set FLAT 400.00;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .0850;::set FLAT 2200.00;} ::if {$TAXABLE>=350000} {::set BASE 350000;::set RATE .0895;::set FLAT 28550.00;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Result [round2 $TAX]; ::return $Result; } method IA-20120101 {TaxableWages} { debugLog "--- Iowa Tax Calculation (20120101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions < 2} { ::set MAXIMUM 1650; } else { ::set MAXIMUM 4060; } ::set EXEMPT1 40; ::set FEDERAL $_employee_federal_tax_deduction; ::set TAXABLE [::expr $TaxableWages-$FEDERAL]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set STANDARD $MAXIMUM; ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<0} {::return 0.00;} ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0036;::set FLAT 0.00;} ::if {$TAXABLE>=1300} {::set BASE 1300;::set RATE .0072;::set FLAT 4.68;} ::if {$TAXABLE>=2600} {::set BASE 2600;::set RATE .0243;::set FLAT 14.04;} ::if {$TAXABLE>=5200} {::set BASE 5200;::set RATE .0450;::set FLAT 77.22;} ::if {$TAXABLE>=11700} {::set BASE 11700;::set RATE .0612;::set FLAT 369.72;} ::if {$TAXABLE>=19500} {::set BASE 19500;::set RATE .0648;::set FLAT 847.08;} ::if {$TAXABLE>=26000} {::set BASE 26000;::set RATE .0680;::set FLAT 1268.28;} ::if {$TAXABLE>=39000} {::set BASE 39000;::set RATE .0792;::set FLAT 2152.28;} ::if {$TAXABLE>=58500} {::set BASE 58500;::set RATE .0898;::set FLAT 3696.68;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT1 [::expr $EXEMPT1*$Exemptions]; ::set TAX [::expr $TAX-$EXEMPT1]; ::if {$TAX<0} {::return 0.00;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method NM-20120101 {TaxableWages} { debugLog "--- New Mexico Tax Calculation (20120101) ---"; ::set Desc "NM Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NM"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 3800; ::set Extra 0; ::set Base 0; ::set Rate 0; ::set Flat 0; ::set Supp [earningsOfType "SUPPLEMENTAL"]; ::set Taxable [::expr $TaxableWages-$Supp]; ::set Taxable [::expr $_pay_frequency*$Taxable]; ;#// Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Extra [::expr $Supp * .0530]; ;#// Extra = 5.3% of supplemental wages in 2006,7 ::set Allow [::expr $Exemptions*$Allow]; ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<0} {::set Taxable 0;} ::switch -- $MaritalStatus { "single" { ::if {$Taxable>=2150} {::set Base 2150;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=7650} {::set Base 7650;::set Rate 0.032;::set Flat 93.50;} ::if {$Taxable>=13150} {::set Base 13150;::set Rate 0.047;::set Flat 269.50;} ::if {$Taxable>=18150} {::set Base 18150;::set Rate 0.049;::set Flat 504.50;} ::if {$Taxable>=28150} {::set Base 28150;::set Rate 0.049;::set Flat 994.50;} ::if {$Taxable>=44150} {::set Base 44150;::set Rate 0.049;::set Flat 1778.50;} ::if {$Taxable>=67150} {::set Base 67150;::set Rate 0.049;::set Flat 2905.50;} } "married" { ::if {$Taxable>=8100} {::set Base 8100;::set Rate 0.017;::set Flat 0.00;} ::if {$Taxable>=16100} {::set Base 16100;::set Rate 0.032;::set Flat 136.00;} ::if {$Taxable>=24100} {::set Base 24100;::set Rate 0.047;::set Flat 392.00;} ::if {$Taxable>=32100} {::set Base 32100;::set Rate 0.049;::set Flat 768.00;} ::if {$Taxable>=48100} {::set Base 48100;::set Rate 0.049;::set Flat 1552.00;} ::if {$Taxable>=72100} {::set Base 72100;::set Rate 0.049;::set Flat 2728.00;} ::if {$Taxable>=108100} {::set Base 108100;::set Rate 0.049;::set Flat 4492.00;} } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing New Mexico state tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; ;#// Tax = {(Taxable-Base)*Rate+Flat+Extra}\Periods ::set Tax [::expr $Tax+$Flat]; ::set Tax [::expr $Tax+$Extra]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method MA-20120101 {TaxableWages} { debugLog "--- Massachusetts Tax Calculation (20120101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set MAXIMUM 2000; ::set EXEMPT 1000; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$Exemptions>=1} { ::if {$TAXABLE<8000} { # Standard = FICA, up to annual Maximum ::return 0.0; } } ::set YTD_FICA [earningsOfType "FICA" -amount ".amount/year_to_date"]; ::set YTD_MEDI [earningsOfType "MEDI" -amount ".amount/year_to_date"]; ::set Total_FICA_MEDI [::expr $YTD_FICA+$YTD_MEDI]; ::if {$Total_FICA_MEDI>=$MAXIMUM} { ::set STANDARD 0; } else { ::set Deduction_left [::expr $MAXIMUM-$Total_FICA_MEDI]; ::if {$Deduction_left<=$Total_FICA_MEDI} { ::set STANDARD $Deduction_left; } else { ::set STANDARD $Total_FICA_MEDI; } } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$Exemptions eq ""} {::set Exemptions 0;} ::if {$Exemptions>0} { ::if {$Exemptions==1} { ::set EXEMPT 4400; } else { ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set EXEMPT [::expr $EXEMPT+3400]; } ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; } ::if {$TAXABLE<0} { ::set TAXABLE 0; } ::set TAX [::expr $TAXABLE * .0525]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method LA-20120101 {TaxableWages} { ::set DESC "LA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "LA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::if {$Exemptions ne ""} { ::set E1 [::expr {int($Exemptions)}]; ;#// the whole number part ::set E2 [::expr {int(($Exemptions-$E1)*10)}]; ;#// the fraction part ::set A [::expr {0.021*((($E1*4500.0)+($E2*1000.0))/$_pay_frequency)}]; ::set B [::expr {0.016*(((($E1*4500.0)+($E2*1000.0))-12500.0)/$_pay_frequency)}]; ::if {$B<0} { ::set B 0.0; } } ::if {$Exemptions<2} { ::set Rate 0.0160; ::set M1 12500.0; ::set M2 50000.0; } else { ::set Rate 0.0165; ::set M1 25000.0; ::set M2 100000.0; } ::set AnnualIncome [::expr {$TaxableWages*$_pay_frequency}]; ::while 1 { ::if {$AnnualIncome<$M1} { ::set W [::expr {0.021*$TaxableWages-($A+$B)}]; ::break; } ::if {$AnnualIncome<$M2} { ::set W [::expr {0.021*$TaxableWages+$Rate*($TaxableWages-$M1/$_pay_frequency)-($A+$B)}]; ::break; } ::set W [::expr {0.021*$TaxableWages+$Rate*($TaxableWages-$M1/$_pay_frequency)+0.0135*($TaxableWages-$M2/$_pay_frequency)-($A+$B)}]; ::break; } ::if {$W<0} {::set W 0;} ::set Result [round2 $W]; ::return $Result; } method MD-20120101 {TaxableWages} { debugLog "--- Maryland Tax Calculation (20120101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MD"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 3200.00; ::set MINIMUM 1500; ::set MAXIMUM 2000; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set Perc [payCodeValueGet ".percent"]; ::if {$Perc eq ""} {::set Perc 0;} ::set RESIDENCE [employeeInfoGet ".state/current.residence"]; ::set RESIDENCE [codeValidate $RESIDENCE {non-resident resident maryland-residents-employed-in-delaware} resident]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$TAXABLE<5000} {::set TAXABLE 0;} ::set STANDARD [::expr $TAXABLE * 0.15]; ;#// Standard = (15% of Taxable) but not more than Maximum or less than Minimum ::if {$STANDARD>$MAXIMUM} {::set STANDARD $MAXIMUM;} ::if {$STANDARD<$MINIMUM} {::set STANDARD $MINIMUM;} ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Standard-(Xemp*Exempt) ::if {$TAXABLE<=0} {::return 0;} ::if {$RESIDENCE eq "maryland-residents-employed-in-delaware"} { ::set BASE 0; ::set RATE 0.0475; ::set FLAT 0; } else { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.0200;::set FLAT 0;} ::if {$TAXABLE>=5000} {::set BASE 0;::set RATE 0.0600;::set FLAT 0;} } ::if {$RESIDENCE eq "resident"} { ::if {$Perc!=0} { ::set Tmp1 [::expr $BASE*$Perc]; ;#// Add % of base to flat tax amount ::set Tmp1 [::expr $Tmp1 * 0.01]; ::set FLAT [::expr $FLAT+$Tmp1]; ::set Tmp1 [::expr $Perc * 0.01]; ;#// Up the tax rate ::set RATE [::expr $RATE+$Tmp1]; } } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20110101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20110101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2100 0.100 0.00} {10600 0.150 850.00} {36600 0.250 4750.00} {85700 0.280 17025.00} {176500 0.330 42449.00} {381250 0.350 110016.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {7900 0.100 0.00} {24900 0.150 1700.00} {76900 0.250 9500.00} {147250 0.280 27087.50} {220200 0.330 47513.50} {387050 0.350 102574.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*0.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method 40-20110101 {TaxableWages} { debugLog "--- New York City Tax Calculation (20110101) ---"; ::set DESC "NYC Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set DEDUCT 0; ::set EXEMPT 1000; ::if {$MaritalStatus eq "single"} { ::set DEDUCT 5000; ::set EXEMPT 1000; } ::if {$MaritalStatus eq "married"} { ::set DEDUCT 5500; ::set EXEMPT 1000; } ::if {$RESIDENCE eq "non-resident"} { ::set DEDUCT 4000; ::set EXEMPT 0; } ::set S401K [earningsOfType "401K"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE+$S401K]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-Deduct-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$RESIDENCE eq "resident"} { ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0190;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0265;::set FLAT 152;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0310;::set FLAT 171;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0370;::set FLAT 366;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0390;::set FLAT 736;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0400;::set FLAT 2101;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0425;::set FLAT 19701;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0190;::set FLAT 0;} ::if {$TAXABLE>=8000} {::set BASE 8000;::set RATE .0265;::set FLAT 152;} ::if {$TAXABLE>=8700} {::set BASE 8700;::set RATE .0310;::set FLAT 171;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0370;::set FLAT 366;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0390;::set FLAT 736;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0400;::set FLAT 2101;} ::if {$TAXABLE>=500000} {::set BASE 500000;::set RATE .0425;::set FLAT 19701;} } } ::if {$RESIDENCE eq "non-resident"} { ::set TAXABLE [::expr $TAXABLE+$DEDUCT]; ::set RATE .0025; ::set FLAT 0; ::if {$TAXABLE>=0} {::set BASE $TAXABLE;} ::if {$TAXABLE>=3999.99} {::set BASE 3000;} ::if {$TAXABLE>=10000.00} {::set BASE 2000;} ::if {$TAXABLE>=20000.00} {::set BASE 1000;} ::if {$TAXABLE>=30000.00} {::set BASE 0;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method HI-20110101 {TaxableWages} { debugLog "--- Hawaii Tax Calculation (20110101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "HI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 1144; ;#// Amount per exemption ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ;#// Taxable = (Periods*Paysum)-(Xemp*Exempt) ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=2400} {::set BASE 2400;::set RATE .032;::set FLAT 34;} ::if {$TAXABLE>=4800} {::set BASE 4800;::set RATE .055;::set FLAT 110;} ::if {$TAXABLE>=9600} {::set BASE 9600;::set RATE .064;::set FLAT 374;} ::if {$TAXABLE>=14400} {::set BASE 14400;::set RATE .068;::set FLAT 682;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .072;::set FLAT 1008;} ::if {$TAXABLE>=24000} {::set BASE 24000;::set RATE .076;::set FLAT 1354;} ::if {$TAXABLE>=36000} {::set BASE 36000;::set RATE .079;::set FLAT 2266;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .014;::set FLAT 0;} ::if {$TAXABLE>=4800} {::set BASE 4800;::set RATE .032;::set FLAT 67;} ::if {$TAXABLE>=9600} {::set BASE 9600;::set RATE .055;::set FLAT 221;} ::if {$TAXABLE>=19200} {::set BASE 19200;::set RATE .064;::set FLAT 749;} ::if {$TAXABLE>=28800} {::set BASE 28800;::set RATE .068;::set FLAT 1363;} ::if {$TAXABLE>=38400} {::set BASE 38400;::set RATE .072;::set FLAT 2016;} ::if {$TAXABLE>=48000} {::set BASE 48000;::set RATE .076;::set FLAT 2707;} ::if {$TAXABLE>=72000} {::set BASE 72000;::set RATE .079;::set FLAT 4531;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX==0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method AZ-20100701 {TaxableWages} { ::set DESC "Arizona Tax"; ::set RATE [payCodeValueNumber ".percent"]; ::set FIT $TaxableWages; ::set SerialNumber [::sargs::get [[::qw::system] cpp_registration_get] .serial]; ::if {[::string first "NV2-089345" $SerialNumber]==0} { ::set FIT $_employee_federal_tax_deduction; } ::set TAX [::expr $FIT*$RATE]; ::set TAX [::expr $TAX / 100]; ;#// Tax = Federal*Rate\100 Note: Tax rate is specified with "% " paycode ::set Result [round2 $TAX]; ::return $Result; } method US-20100101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20100101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {6050 0.100 0.00} {10425 0.150 437.50} {36050 0.250 4281.25} {67700 0.270 12193.75} {84450 0.300 16716.25} {87700 0.280 17691.25} {173900 0.330 41827.25} {375000 0.350 108421.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {13750 0.100 0.00} {24500 0.150 1075.00} {75750 0.250 8762.50} {94050 0.270 13337.50} {124050 0.250 21437.50} {145050 0.280 26687.50} {217000 0.330 46833.50} {381400 0.350 101085.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20100101 {TaxableWages} { debugLog "--- EIC Calculation (20100101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 35463.00; ::set LIMIT 1830.00; ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8970} {::set Base 8970;::set Rate 0.0;::set Flat 1830.00;} ::if {$TaxableWages>=16450} {::set Base 16450;::set Rate -0.09588;::set Flat 1830.00;} } "married" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8970} {::set Base 8970;::set Rate 0.0;::set Flat 1830.00;} ::if {$TaxableWages>=21460} {::set Base 21460;::set Rate -0.09588;::set Flat 1830.00;} } "both" { ::set ALLOW 38583.00; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4485} {::set Base 4485;::set Rate 0.0;::set Flat 915.00;} ::if {$TaxableWages>=10730} {::set Base 10730;::set Rate -0.09588;::set Flat 915.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; ;#// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method AL-20100101 {TaxableWages} { debugLog "--- Alabama Tax Calculation (20100101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::switch -- $MaritalStatus { "married" {::set MaritalStatus "married-filing-jointly";} "head-of-household" {::set MaritalStatus "head-of-family";} "zero" {::set MaritalStatus "single";} } ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "AL"] ""]; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::switch -- $MaritalStatus { "single" { ::if {$Taxable<=20499} { ::set STANDARD "2500"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*25]; ::set STANDARD [::expr 2500-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-separately" { ::if {$Taxable<=10249} { ::set STANDARD "3750"; } else { ::if {$Taxable <= 15000} { ::set Tmp1 [::expr $Taxable-10249]; ::set Tmp1 [::expr round(($Tmp1/250.0)+.5)]; ::set Tmp1 [::expr $Tmp1*88]; ::set STANDARD [::expr 3750-$Tmp1]; } else { ::set STANDARD 2000; } } } "married-filing-jointly" { ::if {$Taxable<=20499} { ::set STANDARD "7500"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*175]; ::set STANDARD [::expr 7500-$Tmp1]; } else { ::set STANDARD 4000; } } } "head-of-family" { ::if {$Taxable<=20499} { ::set STANDARD "4700"; } else { ::if {$Taxable <= 30000} { ::set Tmp1 [::expr $Taxable-20499]; ::set Tmp1 [::expr round(($Tmp1/500.0)+.5)]; ::set Tmp1 [::expr $Tmp1*135]; ::set STANDARD [::expr 4700-$Tmp1]; } else { ::set STANDARD 2000; } } } } ::set FEDERAL [::expr $_employee_federal_tax_deduction*$_pay_frequency]; ::switch -- $MaritalStatus { "zero" {::set PERSONAL 0.00;} "single" - "married-filing-separately" {::set PERSONAL 1500;} "head-of-family" - "married-filing-jointly" {::set PERSONAL 3000;} }; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set DEPEND 0.0; ::if {$Taxable<=20000} { ::set DEPEND [::expr $Exemptions*1000]; } else { ::if {$Taxable<=100000} { ::set DEPEND [::expr $Exemptions*500]; } else { ::set DEPEND [::expr $Exemptions*300]; } } ::set Taxable [::expr $Taxable-$STANDARD]; ;#// A - Standard Deduction ::set Taxable [::expr $Taxable-$FEDERAL]; ;#// B - Federal Tax ::set Taxable [::expr $Taxable-$PERSONAL]; ;#// C - Personal Exemption ::set Taxable [::expr $Taxable-$DEPEND]; ;#// D - Dependants ::if {$Taxable<=0.00} {::return 0.00;} ::set BASE 0;::set RATE 0.02;::set FLAT 0; ::switch -- $MaritalStatus { "zero" - "single" - "married-filing-separately" - "head-of-family" { ::if {$Taxable>500} {::set BASE 500;::set RATE .04;::set FLAT [::expr $FLAT+10];} ::if {$Taxable>3000} {::set BASE 3000;::set RATE .05;::set FLAT [::expr $FLAT+100];} } "married-filing-jointly" { ::if {$Taxable>1000} {::set BASE 1000;::set RATE .04;::set FLAT [::expr $FLAT+20];} ::if {$Taxable>6000} {::set BASE 6000;::set RATE .05;::set FLAT [::expr $FLAT+200];} } }; ::set Result [::expr $Taxable-$BASE]; ::set Result [::expr $Result*$RATE]; ::set Result [::expr $Result+$FLAT]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method NJ-20100101 {TaxableWages} { debugLog "--- New Jersey Tax Calculation (20100101) ---"; ::set Desc "NJ Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NJ"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Allow 1000; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Allow [::expr $Exemptions*$Allow]; # Taxable = (Periods*Paysum)-(Xemp*Allow) ::set Taxable [::expr $Taxable-$Allow]; ::if {$Taxable<=0} {::set Taxable 0;} ::if {$MaritalStatus eq "single"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .02;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .039;::set Flat 600;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .061;::set Flat 795;} ::if {$Taxable>=75000} {::set Base 75000;::set Rate .07;::set Flat 2930;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 32680;} } ::if {$MaritalStatus eq "married"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .027;::set Flat 900;} ::if {$Taxable>=70000} {::set Base 70000;::set Rate .039;::set Flat 1440;} ::if {$Taxable>=80000} {::set Base 80000;::set Rate .061;::set Flat 1830;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .07;::set Flat 6100;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30600;} } ::if {$MaritalStatus eq "new-jersey-rate-c"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .023;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .028;::set Flat 760;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .035;::set Flat 1040;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1390;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .066;::set Flat 6430;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29530;} } ::if {$MaritalStatus eq "new-jersey-rate-d"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .027;::set Flat 300;} ::if {$Taxable>=40000} {::set Base 40000;::set Rate .034;::set Flat 840;} ::if {$Taxable>=50000} {::set Base 50000;::set Rate .043;::set Flat 1180;} ::if {$Taxable>=60000} {::set Base 60000;::set Rate .056;::set Flat 1610;} ::if {$Taxable>=150000} {::set Base 150000;::set Rate .065;::set Flat 6650;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 29400;} } ::if {$MaritalStatus eq "new-jersey-rate-e"} { ::if {$Taxable>=0} {::set Base 0;::set Rate .015;::set Flat 0;} ::if {$Taxable>=20000} {::set Base 20000;::set Rate .020;::set Flat 300;} ::if {$Taxable>=35000} {::set Base 35000;::set Rate .058;::set Flat 600;} ::if {$Taxable>=100000} {::set Base 100000;::set Rate .065;::set Flat 4370;} ::if {$Taxable>=500000} {::set Base 500000;::set Rate .099;::set Flat 30370;} } ::set Taxable [::expr $Taxable-$Base]; ::set Tax [::expr $Taxable*$Rate]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set Tax [::expr $Tax+$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method DE-20100101 {TaxableWages} { ::set DESC "Delaware Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "DE"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 110; ::set BASE 0; ::set FLAT 0; ::set RATE 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set STANDARD 3250; # Assume single ::if {$MaritalStatus eq "single-standard-deduction"} {::set STANDARD 3250;} ;#// Single Standard Deduction. Was S ::if {$MaritalStatus eq "married-standard-deduction"} {::set STANDARD 6500;} ;#// Married Standard Deduction. Was J ::if {$MaritalStatus eq "married-both-filing-standard-deduction"} {::set STANDARD 3250;} ;#// Married both filing Standard Deduction. Was M ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .0000;::set FLAT 0.00;} ::if {$TAXABLE>=2000} {::set BASE 2000;::set RATE .0220;::set FLAT 0.00;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .0390;::set FLAT 66.00;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .0480;::set FLAT 261.00;} ::if {$TAXABLE>=20000} {::set BASE 20000;::set RATE .0520;::set FLAT 741.00;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .0555;::set FLAT 1001.00;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .0695;::set FLAT 2943.50;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#//Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAX [::expr $TAX-$EXEMPT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::if {$TAX<0} {::set TAX 0;} ::set Result [round2 $TAX]; ::return $Result; } method WI-20091001 {TaxableWages} { ::set DESC "WI Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WI"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 22; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set BASE 0; ::set RATE 0; ::set FLAT 0; ::if {$MaritalStatus eq "single"} { ::if {$TAXABLE>=4001} {::set BASE 4001;::set RATE .04600;::set FLAT 0;} ::if {$TAXABLE>=10621} {::set BASE 10621;::set RATE .05152;::set FLAT 304.52;} ::if {$TAXABLE>=13603} {::set BASE 13603;::set RATE .06888;::set FLAT 458.15;} ::if {$TAXABLE>=22487} {::set BASE 22487;::set RATE .07280;::set FLAT 1070.08;} ::if {$TAXABLE>=43954} {::set BASE 43954;::set RATE .06500;::set FLAT 2632.88;} ::if {$TAXABLE>=149331} {::set BASE 149331;::set RATE .06750;::set FLAT 9482.39;} ::if {$TAXABLE>=219201} {::set BASE 219201;::set RATE .07750;::set FLAT 14198.62;} } ::if {$MaritalStatus eq "married"} { ::if {$TAXABLE>=5501} {::set BASE 5501;::set RATE .04600;::set FLAT 0;} ::if {$TAXABLE>=14951} {::set BASE 14951;::set RATE .06150; ::set FLAT 434.70;} ::if {$TAXABLE>=15376} {::set BASE 15376;::set RATE .07380; ::set FLAT 458.16;} ::if {$TAXABLE>=23668} {::set BASE 23668;::set RATE .07800; ::set FLAT 1070.11;} ::if {$TAXABLE>=42451} {::set BASE 42451;::set RATE .06500; ::set FLAT 2535.18;} ::if {$TAXABLE>=149331} {::set BASE 149331;::set RATE .06750; ::set FLAT 9482.38;} ::if {$TAXABLE>=219201} {::set BASE 219201;::set RATE .07750;::set FLAT 14198.61;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX+$FLAT]; ::set EXEMPT [ ::expr $Exemptions*$EXEMPT]; ::set TAX [::expr $TAX-$EXEMPT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20090401 {TaxableWages} { debugLog "--- Federal Tax Calculation (20090401) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {7180 0.100 0.00} {10400 0.150 322.00} {36200 0.250 4192.00} {66530 0.280 11774.50} {173600 0.330 41754.00} {375000 0.350 108216.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {15750 0.100 0.00} {24450 0.150 870.00} {75650 0.250 8550.00} {118130 0.280 19170.50} {216600 0.330 46741.60} {380700 0.350 100894.60} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20090401 {TaxableWages} { debugLog "--- EIC Calculation (20090401) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 35463.00; ::set LIMIT 1826.00; ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2009 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8950} {::set Base 8950;::set Rate 0.0;::set Flat 1826.00;} ::if {$TaxableWages>=16420} {::set Base 16420;::set Rate -0.09588;::set Flat 1826.00;} } "married" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8950} {::set Base 8950;::set Rate 0.0;::set Flat 1826.00;} ::if {$TaxableWages>=21420} {::set Base 21420;::set Rate -0.09588;::set Flat 1826.00;} } "both" { ::set ALLOW 38583.00; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4475} {::set Base 4475;::set Rate 0.0;::set Flat 913.00;} ::if {$TaxableWages>=10710} {::set Base 10710;::set Rate -0.09588;::set Flat 913.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; ;#// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method US-20090101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20090101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 0.100 0.00} {10400 0.150 775.00} {35400 0.250 4525.00} {84300 0.280 16750.00} {173600 0.330 41754.00} {375000 0.350 108216.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 0.100 0.00} {23950 0.150 1595.00} {75650 0.250 9350.00} {144800 0.280 26637.50} {216600 0.330 46741.50} {380700 0.350 100894.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20090101 {TaxableWages} { debugLog "--- EIC Calculation (20090101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 35463.00; ::set LIMIT 1826.00; ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2009 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8950} {::set Base 8950;::set Rate 0.0;::set Flat 1826.00;} ::if {$TaxableWages>=16420} {::set Base 16420;::set Rate -0.09588;::set Flat 1826.00;} } "married" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8950} {::set Base 8950;::set Rate 0.0;::set Flat 1826.00;} ::if {$TaxableWages>=19540} {::set Base 19540;::set Rate -0.09588;::set Flat 1826.00;} } "both" { ::set ALLOW 38583.00; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4475} {::set Base 4475;::set Rate 0.0;::set Flat 913.00;} ::if {$TaxableWages>=9770} {::set Base 9770;::set Rate -0.09588;::set Flat 913.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; ;#// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method OH-20090101 {TaxableWages} { debugLog "--- Ohio Tax Calculation (20090101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "OH"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set EXEMPT 650; ::set SUPP [earningsOfType "SUPPLEMENTAL"]; ::set TAXABLE [::expr $TaxableWages-$SUPP]; ::set TAXABLE [::expr $_pay_frequency*$TAXABLE]; ::set PAYSUM [::expr $TAXABLE+$SUPP]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>0} {::set BASE 0;::set RATE 0.00638;::set FLAT 0;} ::if {$TAXABLE>5000} {::set BASE 5000;::set RATE 0.01276;::set FLAT 31.90;} ::if {$TAXABLE>10000} {::set BASE 10000;::set RATE 0.02552;::set FLAT 95.70;} ::if {$TAXABLE>15000} {::set BASE 15000;::set RATE 0.03190;::set FLAT 223.30;} ::if {$TAXABLE>20000} {::set BASE 20000;::set RATE 0.03828;::set FLAT 382.80;} ::if {$TAXABLE>40000} {::set BASE 40000;::set RATE 0.04466;::set FLAT 1148.40;} ::if {$TAXABLE>80000} {::set BASE 80000;::set RATE 0.05103;::set FLAT 2934.80;} ::if {$TAXABLE>100000} {::set BASE 100000;::set RATE 0.06379;::set FLAT 3955.40;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}*1.615\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAXABLE [::expr $SUPP * .035]; ::set TAX [::expr $TAX+$TAXABLE]; ;#// 3.5% tax rate on supplemental wages ::set Result [round2 $TAX]; ::return $Result; } method US-20080101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20080101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 0.100 0.00} {10300 0.150 765.00} {33960 0.250 4314.00} {79725 0.280 15755.25} {166500 0.330 40052.25} {359650 0.350 103791.75} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 0.100 0.00} {23550 0.150 1555.00} {72150 0.250 8845.00} {137850 0.280 25270.00} {207700 0.330 44828.00} {365100 0.350 96770.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20080101 {TaxableWages} { debugLog "--- EIC Calculation (20080101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 33241.00; ::set LIMIT 1750.00; ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2008 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8580} {::set Base 8580;::set Rate 0.0;::set Flat 1750.00;} ::if {$TaxableWages>=15740} {::set Base 15740;::set Rate -0.09588;::set Flat 1750.00;} } "married" { ::set ALLOW 35241; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8580} {::set Base 8580;::set Rate 0.0;::set Flat 1750.00;} ::if {$TaxableWages>=18740} {::set Base 18740;::set Rate -0.09588;::set Flat 1750.00;} } "both" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4290} {::set Base 4290;::set Rate 0.0;::set Flat 875.00;} ::if {$TaxableWages>=9370} {::set Base 9370;::set Rate -0.09588;::set Flat 875.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; ;#// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method NC-20080101 {TaxableWages} { debugLog "--- North Carolina Tax Calculation (20080101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "NC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW 2500; # Withholding Allowance ::if {$MaritalStatus eq "single"} { ::set STANDARD 3000; ::if {$TAXABLE>=60000} {::set ALLOW 2000;} } ::if {$MaritalStatus eq "married"} { ::set STANDARD 3000; ::if {$TAXABLE>=50000} {::set ALLOW 2000;} } ::if {$MaritalStatus eq "head-of-household"} { ::set STANDARD 4400; ::if {$TAXABLE>=80000} {::set ALLOW 2000;} } ::if {$MaritalStatus eq "widow"} { ::set STANDARD 3000; ::if {$TAXABLE>=50000} {::set ALLOW 2000;} } ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::set RATE .06; ::set FLAT 0; ::switch -- $MaritalStatus { "single" { ::if {$TAXABLE>=12750} {::set RATE 0.0700;::set FLAT 127.50;} ::if {$TAXABLE>=60000} {::set RATE 0.0775;::set FLAT 577.50;} } "head-of-household" { ::if {$TAXABLE>=17000} {::set RATE 0.0700;::set FLAT 170;} ::if {$TAXABLE>=80000} {::set RATE 0.0775;::set FLAT 770;} } "married" - "widow" { ::if {$TAXABLE>=10625} {::set RATE 0.0700;::set FLAT 106.25;} ::if {$TAXABLE>=50000} {::set RATE 0.0775;::set FLAT 481.25;} } } ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX-$FLAT]; ;# Tax = {Taxable*Rate-Flat} / Periods ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method UT-20080101 {TaxableWages} { debugLog "--- Utah Tax Calculation (20080101) ---"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "UT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Taxable [::expr {$_pay_frequency*$TaxableWages}]; ::if {$Taxable<=0.0} {::set Taxable 0.0;} ::set Line1 $Taxable; ::set Line2 [::expr {$Line1*0.05}]; ::set Line3 $Exemptions; ::set Line4 [::expr {$Line3*125.0}]; ::switch $MaritalStatus { "single" { ::set Line5 250.0; ::set Line7 [::expr {$Line1-12000.0}]; } "married" { ::set Line5 375.0; ::set Line7 [::expr {$Line1-18000.0}]; } } ::if {$Line7<0.0} { ::set Line7 0.0; } ::set Line6 [::expr {$Line4+$Line5}]; ::set Line8 [::expr {$Line7*0.013}]; ::set Line9 [::expr {$Line6-$Line8}]; ::if {$Line9<0.0} { ::set Line9 0.0; } ::set Line10 [::expr {$Line2-$Line9}]; ::if {$Line10<0.0} { ::set Line10 0.0; } ::set Tax [::expr {$Line10/$_pay_frequency}]; ::set Result [round2 $Tax]; ::return $Result; } method VA-20080101 {TaxableWages} { debugLog "--- Virginia Tax Calculation (20080101) ---"; ::set PERSONAL1 930; ;#// Personal & Dependant deductions ::set PERSONAL2 800; ;#// Age 65 and over & Blind exemptions ::set DESC "VA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "VA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE - 3000]; ;#// Taxable = (Periods*Paysum)-3000-(Xemp*Personal) ::if {$Exemptions ne ""} { ::set ExemptionTypes [::split $Exemptions ,]; ::if {[::llength $ExemptionTypes] == 1} { ::set PERSONAL1 [::expr [stringToNumber $ExemptionTypes] *$PERSONAL1]; ::set PERSONAL2 0; } else { ::set PERSONAL1 [::expr [stringToNumber [::lindex $ExemptionTypes 0]]*$PERSONAL1]; ::set PERSONAL2 [::expr [stringToNumber [::lindex $ExemptionTypes 1]]*$PERSONAL2]; } } ::set TAXABLE [::expr $TAXABLE-$PERSONAL1]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL2]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE 0.02;::set FLAT 0;} ::if {$TAXABLE>=3000} {::set BASE 3000;::set RATE 0.03;::set FLAT 60;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE 0.05;::set FLAT 120;} ::if {$TAXABLE>=17000} {::set BASE 17000;::set RATE 0.0575;::set FLAT 720;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; ;#// Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method US-20070101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20070101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 .100 0.00} {10120 .150 747.00} {33520 .250 4257.00} {77075 .280 15145.75} {162800 .330 39148.75} {351650 .350 101469.25} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 .100 0.00} {23350 .150 1535.00} {70700 .250 8637.50} {133800 .280 24412.50} {203150 .330 43830.50} {357000 .350 94601.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20070101 {TaxableWages} { debugLog "--- EIC Calculation (20070101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 33241.00; ::set LIMIT 1712.00; ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2007 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8390} {::set Base 8390;::set Rate 0.0;::set Flat 1712.00;} ::if {$TaxableWages>=15390} {::set Base 15390;::set Rate -0.09588;::set Flat 1712.00;} } "married" { ::set ALLOW 35241; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8390} {::set Base 8390;::set Rate 0.0;::set Flat 1712.00;} ::if {$TaxableWages>=17390} {::set Base 17390;::set Rate -0.09588;::set Flat 1712.00;} } "both" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4195} {::set Base 4195;::set Rate 0.0;::set Flat 856.00;} ::if {$TaxableWages>=8695} {::set Base 8695;::set Rate -0.09588;::set Flat 856.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; #// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method US-20060101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20060101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 .100 0.00} {10000 .150 735.00} {32240 .250 4071.00} {73250 .280 14323.50} {156650 .330 37675.50} {338400 .350 97653.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 .100 0.00} {22900 .150 1490.00} {68040 .250 8261.00} {126900 .280 22976.00} {195450 .330 42170.00} {343550 .350 91043.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20060101 {TaxableWages} { debugLog "--- EIC Calculation (20060101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 32001.00; ;#// Maximum Allowable Earned Income (Annual) from Publication 15 (Circular E) Employer's Tax Guide, page 18. ::set LIMIT 1648.00; ;#// Maximum amount that may be advanced in 2006. See Publication 15 (Circular E) Employer's Tax Guide, page 18. ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2006 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8080} {::set Base 8080;::set Rate 0.0;::set Flat 1648.00;} ::if {$TaxableWages>=14810} {::set Base 14810;::set Rate -0.09588;::set Flat 1648.00;} } "married" { ::set ALLOW 34001; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=8080} {::set Base 8080;::set Rate 0.0;::set Flat 1648.00;} ::if {$TaxableWages>=16810} {::set Base 16810;::set Rate -0.09588;::set Flat 1648.00;} } "both" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=4040} {::set Base 4040;::set Rate 0.0;::set Flat 824.00;} ::if {$TaxableWages>=8405} {::set Base 8405;::set Rate -0.09588;::set Flat 824.00;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; #// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method US-20050101 {TaxableWages} { debugLog "--- Federal Tax Calculation (20050101) ---"; ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 .100 0.00} {9800 .150 715.00} {31500 .250 3970.00} {69750 .280 13532.50} {151950 .330 36548.50} {328250 .350 94727.50} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 .100 0.00} {22600 .150 1460.00} {66200 .250 8000.00} {120750 .280 21637.50} {189600 .330 40915.50} {333250 .350 88320.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method MT-20050101 {TaxableWages} { debugLog "--- Montana Tax Calculation (20050101) ---"; ::set DESC "Montana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MT"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ALLOW 1900; # 1700 in Jan 1,2003 - 1780 in Jan 1,2004 ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set ALLOW [::expr $Exemptions*$ALLOW]; ::set TAXABLE [::expr $TAXABLE-$ALLOW]; ::set BASE 0; ::set RATE .026; ::set FLAT 0; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .018;::set FLAT 0.00;} ::if {$TAXABLE>=7000} {::set BASE 7000;::set RATE .0440;::set FLAT 126.00;} ::if {$TAXABLE>=15000} {::set BASE 15000;::set RATE .0600;::set FLAT 478.00;} ::if {$TAXABLE>=120000} {::set BASE 120000;::set RATE .0660;::set FLAT 6778.00;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Periods*Paysum-(Xemp*Allow)-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method EIC-20050101 {TaxableWages} { debugLog "--- EIC Calculation (20050101) ---"; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 31030.00; ;#// Maximum Allowable Earned Income (Annual) from Publication 15 (Circular E) Employer's Tax Guide, page 17. ::set LIMIT 1597.00; ;#// Maximum amount that may be advanced in 2005. See Publication 15 (Circular E) Employer's Tax Guide, page 16. ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2005 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0.00;} ::if {$TaxableWages>=7830} {::set Base 7830;::set Rate 0.0;::set Flat 1597.00;} ::if {$TaxableWages>=14370} {::set Base 14370;::set Rate -0.09588;::set Flat 1597.00;} } "married" { ::set ALLOW 33030; ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=3915} {::set Base 3915;::set Rate 0.0;::set Flat 799;} ::if {$TaxableWages>=8185} {::set Base 8185;::set Rate -0.09588;::set Flat 799;} } "both" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=3745} {::set Base 3745;::set Rate 0.0;::set Flat 764;} ::if {$TaxableWages>=7365} {::set Base 7365;::set Rate -0.09588;::set Flat 764;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; #// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method US-20040101 {TaxableWages} { ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 .100 0.00} {9700 .150 705.00} {30800 .250 3870.00} {68500 .280 13295.00} {148700 .330 35751.00} {321200 .350 92676.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 .100 0.00} {22300 .150 1430.00} {64750 .250 7797.50} {118050 .280 21222.50} {185550 .330 40022.50} {326100 .350 86404.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method PA-20040101 {TaxableWages} { ::set DESC "PA Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "PA"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .03070; # 0.028 in 2003, 0.03070 in 2004 ::set TAX [::expr $TaxableWages*$RATE]; # Tax = Paysum*Rate ::set Result [round2 $TAX]; ::return $Result; } method WV-20040101 {TaxableWages} { ::set PERSONAL 2000.00; ::set DESC "WV Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "WV"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set PERSONAL [::expr $Exemptions*$PERSONAL]; # Taxable = (Periods*Paysum)-(Xemp*Personal) ::set TAXABLE [::expr $TAXABLE-$PERSONAL]; ::if {$TAXABLE<=0} {::set TAXABLE 0;} ::if {$MaritalStatus eq "married"} {::set MaritalStatus single;} ::if {$MaritalStatus eq "not-applicable"} {::set MaritalStatus single;} ::if {$TAXABLE>=0} { ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .030;::set FLAT 0;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .040;::set FLAT 300;} ::if {$TAXABLE>=25000} {::set BASE 25000;::set RATE .045;::set FLAT 900;} ::if {$TAXABLE>=40000} {::set BASE 40000;::set RATE .060;::set FLAT 1575;} ::if {$TAXABLE>=60000} {::set BASE 60000;::set RATE .065;::set FLAT 2775;} } ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax ={(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 20-20040101 {TaxableWages} { ::set DESC "MD Local Tax"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set EXEMPT 2400; #2004 amount ::set MINIMUM 1500; ::set MAXIMUM 2000; ::set BASE 0; ::set FLAT 0; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::if {$TAXABLE<5000} {::return 0;} ::set STANDARD [::expr $TAXABLE * .15]; # Standard = (15% of Taxable) but not more than Maximum or less than Minimum ::if {$STANDARD>$MAXIMUM} {::set STANDARD $MAXIMUM;} ::if {$STANDARD<$MINIMUM} {::set STANDARD $MINIMUM;} ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; # Taxable = (Periods*Paysum)-Standard-(Xemp*Exempt) ::if {$TAXABLE<0} {::return 0;} ::set RATE [payCodeValueNumber ".percent"]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX / 100]; ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 90-20040101 {TaxableWages} { accountInfoSet ".result.description" "CA SDI YTD = @Y"; ::set SdiMax $_california_sdi_maximum; ::set SdiPerc $_california_sdi_rate; ::set S125 [earningsOfType "S125"]; ::set Subj [::expr $TaxableWages+$S125]; #// Subtract any S125 caf plans ::set Cit [::expr $Subj*$SdiPerc]; #// SDI Amount ::set SdiMax [::expr $SdiPerc*$SdiMax]; #// Maximum SDI to deduct ::set Ytd [accountInfoGet ".amount/year_to_date"]; ::set Tmp1 [::expr $Ytd+$Cit]; ::if {$Tmp1>$SdiMax} { ::set Cit [::expr $SdiMax-$Ytd]; #// Amount short of maximum } ::if {$Cit<0} {::set Cit 0;} ::set Result [round2 $Cit]; ::return $Result; } method EIC-20040101 {TaxableWages} { ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 30338.00; ;#// Maximum Allowable Earned Income (Annual) from CCH, Payroll-Guide 1330, Computing Advance Earned Income Payments ::set LIMIT 1563.00; ;#// Maximum amount that may be advanced in 2004. ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages > $ALLOW} { ::return 0.00; } ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::qw::payrun::debug_puts "EIC-2004 MaritalStatus==$MaritalStatus"; ::switch -- $MaritalStatus { "single" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=7660} {::set Base 7660;::set Rate 0.0;::set Flat 1563;} ::if {$TaxableWages>=14040} {::set Base 14040;::set Rate -0.09588;::set Flat 1563;} } "married" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=3830} {::set Base 3830;::set Rate 0.0;::set Flat 781;} ::if {$TaxableWages>=7520} {::set Base 7520;::set Rate -0.09588;::set Flat 781;} } "both" { ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=3745} {::set Base 0;::set Rate 0.0;::set Flat 764;} ::if {$TaxableWages>=7365} {::set Base 7365;::set Rate -0.09588;::set Flat 764;} } } ::set Limit [::expr $LIMIT - [accountInfoGet ".amount/year_to_date"]]; #// Keep employee from exceeding yearly maximum ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::if {$Result>$Limit} {::set Result $Limit;} ::if {$Result<0.0} {::set Result 0.0;} ::return [round2 $Result]; } method US-20030101 {TaxableWages} { ::set Result 0.0; ::if {$TaxableWages<=0.0} {::return $Result;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set Exemptions [employeeInfoGet ".federal.exemptions"]; ::set FederalAllowance [::expr $Exemptions*$_federal_allowance]; ::set TaxableWages [::expr $TaxableWages-$FederalAllowance]; ::if {$TaxableWages<=0.0} {::return $Result;} ::set Base 0.0; ::set Rate 0.0; ::set Flat 0.0; ::switch $MaritalStatus { "single" { ::foreach Range { {2650 .100 0.00} {9700 .150 705.00} {30800 .250 3870.00} {68500 .280 13295.00} {148700 .330 35751.00} {321200 .350 92676.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } "married" { ::foreach Range { {8000 .100 0.00} {22300 .150 1430.00} {64750 .250 7797.50} {118050 .280 21222.50} {185550 .330 40022.50} {326100 .350 86404.00} } { ::foreach {XBase XRate XFlat} $Range {} ::if {$TaxableWages>$XBase} { ::foreach {Base Rate Flat} $Range {} } else { ::break; } } } default { ::qw::throw [::sargs \ .text "Encountered invalid marital status \"$MaritalStatus\" when computing federal tax for employee [employeeInfoGet .employee_id]." \ .help_id 907020050401081819 \ ]; } } ::set Percent [payCodeValueGet ".percent"]; ::if {$Percent ne ""} { ::set Rate [::expr $Percent*.01]; ::set Base 0.0; ::set Flat 0.0; } ::if {$Rate==0.0} {::return $Result;} ::set Result [::expr $TaxableWages-$Base]; ::set Result [::expr $Result*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::set Result [round2 $Result]; ::return $Result; } method EIC-20030101 {TaxableWages} { ::set MaritalStatus [employeeInfoGet ".federal.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject federal_marital_status_list] ""]; ::set ALLOW 27416.74176; # Maximum Allowable Earned Income (Annual) ::if {$TaxableWages<0.00} {::return 0.00;} ::set TaxableWages [::expr $TaxableWages*$_pay_frequency]; ::if {$TaxableWages>$ALLOW} {::return 0.00;} ::if {($MaritalStatus eq "head-of-household")} {::set MaritalStatus "single";} ::switch $MaritalStatus { "single" - "head-of-household" { ::set ALLOW 27416.74176; # Maximum Allowable Earned Income (Annual) ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=7490} {::set Base 0;::set Rate 0.0;::set Flat 1528;} ::if {$TaxableWages>=13730} {::set Base 13730;::set Rate -0.09588;::set Flat 1528;} } "married" { ::set ALLOW 13708.37088; # Maximum Allowable Earned Income (Annual) ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=7490} {::set Base 0;::set Rate 0.0;::set Flat 1528;} ::if {$TaxableWages>=14730} {::set Base 14730;::set Rate -0.09588;::set Flat 1528;} } "both" { ::set ALLOW 13708.37088; # Maximum Allowable Earned Income (Annual) ::if {$TaxableWages>=0} {::set Base 0;::set Rate 0.2040;::set Flat 0;} ::if {$TaxableWages>=3745} {::set Base 0;::set Rate 0.0;::set Flat 764;} ::if {$TaxableWages>=7365} {::set Base 7365;::set Rate -0.09588;::set Flat 764;} } } ::set TaxableWages [::expr $TaxableWages-$Base]; ::set Result [::expr $TaxableWages*$Rate]; ::set Result [::expr $Result+$Flat]; ::set Result [::expr $Result/$_pay_frequency]; ::return [round2 $Result]; } method IN-20030101 {TaxableWages} { ::set DESC "Indiana Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "IN"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set RATE .034; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $DEDUCT * 1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 0]; ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set TAX [::expr $TAX+0]; ::set Result [round2 $TAX]; ::return $Result; } method MS-20030101 {TaxableWages} { ::set RATE 0; ::set DESC "MS Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "MS"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set ADDITION 1500; ::set RATE [payCodeValueNumber ".rate"]; ::set STANDARD 4600; # 1998, 1999= 4600, 2000= 4600 - set as default if no maritalStatus is given ::if {$MaritalStatus eq "single"} {::set STANDARD 2300;::set PERSONAL 6000;} ;# "S" Exemption Amounts ::if {$MaritalStatus eq "head-of-household"} {::set STANDARD 3400;::set PERSONAL 9500;} ;# "H" Exemption Amounts ::if {$MaritalStatus eq "married-both-spouses-working"} {::set STANDARD 2300;::set PERSONAL 12000;} ;# "B" Exemption Amounts ::if {$MaritalStatus eq "married-one-spouse-working"} {::set STANDARD 2300;::set PERSONAL 12000;} ;# "B" Exemption Amounts ::if {$MaritalStatus eq "married"} {::set STANDARD 4600;::set PERSONAL 12000;} ;# I guess only one spouse works but no mention of this ::if {$Exemptions<0} { # Zero exemption amounts ::set PERSONAL 0; ::set ADDITION 0; } ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set TAXABLE [::expr $TAXABLE-$PERSONAL]; # Taxable = (Periods*Paysum)-Personal-Standard-(Xemp*Addition) ::set TAXABLE [::expr $TAXABLE-$STANDARD]; ::set ADDITION [::expr $Exemptions*$ADDITION]; ::set TAXABLE [::expr $TAXABLE-$ADDITION]; ::if {$TAXABLE<0} {::set TAXABLE 0;} ::if {$TAXABLE>=0} {::set BASE 0;::set RATE .00;::set FLAT 0;} ::if {$TAXABLE>=5000} {::set BASE 5000;::set RATE .00;::set FLAT 0;} ::if {$TAXABLE>=10000} {::set BASE 10000;::set RATE .05;::set FLAT 0;} ::set TAXABLE [::expr $TAXABLE-$BASE]; ::set TAX [::expr $TAXABLE*$RATE]; # Tax = {(Taxable-Base)*Rate+Flat}\Periods ::set TAX [::expr $TAX+$FLAT]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method SC-20030101 {TaxableWages} { ::set Desc "SC Tax"; ::set MaritalStatus [employeeInfoGet ".state/current.marital_status"]; ::set MaritalStatus [codeValidate $MaritalStatus [$_payrollObject state_marital_status_list "SC"] ""]; ::set Exemptions [employeeInfoGet ".state/current.exemptions"]; ::set Base 0; ::set Flat 0; ::set Rate 0; ::set Exempt 2300; ::set Maximum 0; ::if {$Exemptions>=1} {::set Maximum 2600;} ::set Taxable [::expr $_pay_frequency*$TaxableWages]; ::set Exempt [::expr $Exemptions*$Exempt]; ::set Taxable [::expr $Taxable-$Exempt]; ::set Standard [::expr $Taxable * .1]; # 10% Standard deduction (subj to max) ::if {$Standard>$Maximum} {::set Standard $Maximum;} ::set Taxable [::expr $Taxable-$Standard]; ::if {$Taxable<=0} {::set Taxable 0;} ::set Base 0; ::set Rate 0; ::set Flat 0; ::if {$Taxable>=0} {::set Base 0;::set Rate .02;::set Flat 0;} ::if {$Taxable>=2000} {::set Base 2000;::set Rate .03;::set Flat 20;} ::if {$Taxable>=4000} {::set Base 4000;::set Rate .04;::set Flat 60;} ::if {$Taxable>=6000} {::set Base 6000;::set Rate .05;::set Flat 120;} ::if {$Taxable>=8000} {::set Base 8000;::set Rate .06;::set Flat 200;} ::if {$Taxable>=10000} {::set Base 10000;::set Rate .07;::set Flat 300;} ::set Tax [::expr $Taxable*$Rate]; # Tax = {Taxable*Rate-Flat}\Periods ::set Tax [::expr $Tax-$Flat]; ::if {$Tax<0} {::set Tax 0;} ::set Tax [::expr $Tax/$_pay_frequency]; ::set Result [round2 $Tax]; ::return $Result; } method 10-20030101 {TaxableWages} { ::set DESC "County Tax"; ::set DEDUCT "1000"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; # Annualize the wages ::set DEDUCT [truncate $Exemptions 2]; #assumed two decimals ::set DEDUCT [::expr $DEDUCT*1000]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set DEDUCT [truncate $Exemptions 2]; #assumed two decimals ::set DEDUCT [::expr $Exemptions-$DEDUCT]; ::set DEDUCT [::expr $DEDUCT * 10]; ::set DEDUCT [::expr $DEDUCT * 1500]; ::set TAXABLE [::expr $TAXABLE-$DEDUCT]; ::set RATE [payCodeValueNumber ".percent"]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX / 100]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 30-20030101 {TaxableWages} { ::set DESC "City Tax"; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RATE [payCodeValueNumber ".percent"]; ::set RES [employeeInfoGet ".local/current.residence"]; ::set Exempt 0; ::if {$RATE==0} {::set RATE 2.9;} ::if {$RES eq "non-resident"} {::set RATE [::expr $RATE * .5];} ::set RATE [::expr $RATE /100.0]; ::if {$Exempt==0} {::set Exempt 600;} ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set S401K [earningsOfType "401K"]; ::set TAXABLE [::expr $TAXABLE-$S401K]; ::set EXEMPT [::expr $Exemptions*$Exempt]; # Tax = {(Periods*Paysum)-(Xemp*Exempt)} *Rate / Periods ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set TAX [::expr $TAXABLE*$RATE]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; ::set Result [round2 $TAX]; ::return $Result; } method 60-20030101 {TaxableWages} { ::set DESC "School Tax"; ::set MaritalStatus [employeeInfoGet ".local/current.marital_status"]; ::set Exemptions [employeeInfoGet ".local/current.exemptions"]; ::set RESIDENCE [employeeInfoGet ".local/current.residence"]; ::set RATE [payCodeValueNumber ".percent"]; ::set EXEMPT 650.00; ::set TAXABLE [::expr $_pay_frequency*$TaxableWages]; ::set EXEMPT [::expr $Exemptions*$EXEMPT]; # Tax = (Periods*Paysum)-(Xemp*Exempt) *Rate\100\Periods ::set TAXABLE [::expr $TAXABLE-$EXEMPT]; ::set TAX [::expr $TAXABLE*$RATE]; ::set TAX [::expr $TAX / 100.0]; ::if {$TAX<0} {::set TAX 0;} ::set TAX [::expr $TAX/$_pay_frequency]; # Note: Tax rate is specified with "% " paycode ::set Result [round2 $TAX]; ::return $Result; } method 80-20030101 {TaxableWages} { ::set Desc "Denver Tax"; ::set Base 500.00; ;#// Salary cut-in point ::set Flat 5.75; ;#// City tax amount ::set Result 0.0; ::if {$TaxableWages<=$Base} {::return $Result;} ::set Deducted [accountInfoGet ".amount/month_to_date"]; #// Get tax deducted in month ::if {$Deducted!=0.0} {::return $Result;} ::return $Flat; } method 85-20030101 {TaxableWages} { ::set Perc [payCodeValueNumber ".percent"]; ::set Rate [payCodeValueNumber ".annual_limit"]; ::set Desc "NY SDI"; ::set Perc [::expr $Perc / 100.0]; ::set Tmp1 [::expr $TaxableWages*$Perc]; ::if {$Tmp1>$Rate} {::set Tmp1 $Rate;} ::set Cit $Tmp1; ::set Result [round2 $Cit]; ::return $Result; } method 99-20030101 {TaxableWages} { ::set Sit [::expr [earningsOfType "SIT1"]+[earningsOfType "SIT2"]]; ::set Desc "County Tax"; ::set Perc [payCodeValueNumber ".percent"]; ::set Cit [::expr $Sit*$Perc]; ;#// For % of State income tax ::set Cit [::expr $Cit / 100.0]; ::set Result [round2 $Cit]; ::set Result [::qw::number::negative $Result]; ::return $Result; } } }