#!/usr/bin/env perl use utf8; ############################################################################### # This program computes employee and employer FICA and FUTA taxes. # # Copyright © 2020 Richard Lesh. All rights reserved. ############################################################################### use Utils; use strict; use warnings; our $SS_TAX_RATE = 0.062; our $SS_LIMIT = 127200.0; our $MEDICARE_TAX_RATE1 = 0.0145; our $MEDICARE_TAX_RATE2 = 0.0235; our $MEDICARE_BREAKPOINT = 200000.0; our $FUTA_TAX_RATE = 0.06; our $FUTA_BREAKPOINT = 7000.0; MAIN: { if (scalar(@ARGV) != 2) { print Utils::messageFormat("Syntax: \{0:s\} annual_wages annual_tips", "FICA3"), "\n"; exit 1; } my $ANNUAL_WAGES = Utils::stodWithDefault($ARGV[0], 0.0); my $ANNUAL_TIPS = Utils::stodWithDefault($ARGV[1], 0.0); my $ANNUAL_EARNINGS = $ANNUAL_WAGES + $ANNUAL_TIPS; my $ss_tax; if ($ANNUAL_EARNINGS < $SS_LIMIT) { $ss_tax = $ANNUAL_EARNINGS * $SS_TAX_RATE; } else { $ss_tax = $SS_LIMIT * $SS_TAX_RATE; } my $medicare_tax; my $employer_medicare_tax; if ($ANNUAL_EARNINGS <= $MEDICARE_BREAKPOINT) { $medicare_tax = $ANNUAL_EARNINGS * $MEDICARE_TAX_RATE1; $employer_medicare_tax = $ANNUAL_EARNINGS * $MEDICARE_TAX_RATE1; } else { $medicare_tax = $MEDICARE_BREAKPOINT * $MEDICARE_TAX_RATE1 + ($ANNUAL_EARNINGS - $MEDICARE_BREAKPOINT) * $MEDICARE_TAX_RATE2; $employer_medicare_tax = $ANNUAL_EARNINGS * $MEDICARE_TAX_RATE1; } my $futa_tax; if ($ANNUAL_EARNINGS <= $FUTA_BREAKPOINT) { $futa_tax = $ANNUAL_EARNINGS * $FUTA_TAX_RATE; } else { $futa_tax = $FUTA_BREAKPOINT * $FUTA_TAX_RATE; } my $NET_EARNINGS = $ANNUAL_EARNINGS - $ss_tax - $medicare_tax; my $EMPLOYER_CONTRIBUTIONS = $ANNUAL_EARNINGS + $ss_tax + $employer_medicare_tax + $futa_tax; print Utils::messageFormat("Annual Earnings: \$\{0:.2f\}", $ANNUAL_EARNINGS), "\n"; print Utils::messageFormat("Social Security Tax: \$\{0:.2f\}", $ss_tax), "\n"; print Utils::messageFormat("Medicare Tax: \$\{0:.2f\}", $medicare_tax), "\n"; print Utils::messageFormat("Employer Social Security Tax: \$\{0:.2f\}", $ss_tax), "\n"; print Utils::messageFormat("Employer Medicare Tax: \$\{0:.2f\}", $employer_medicare_tax), "\n"; print Utils::messageFormat("Federal Unemployment Tax: \$\{0:.2f\}", $futa_tax), "\n"; print Utils::messageFormat("Net Earnings: \$\{0:.2f\}", $NET_EARNINGS), "\n"; print Utils::messageFormat("Employer Contributions: \$\{0:.2f\}", $EMPLOYER_CONTRIBUTIONS), "\n"; }