Business-Tax-US-Form_1040-Worksheets
view release on metacpan or search on metacpan
lib/Business/Tax/US/Form_1040/Worksheets.pm view on Meta::CPAN
Scalar holding taxable social security benefits in dollars and two cents,
I<e.g.,> C<289.73>.
=back
=cut
my %data_2022_ssb = (
worksheet_line_count => 18,
ssa_percentage => 0.5,
percentage_a => 0.85,
percentage_b => 0.85,
percentage_c => 0.85,
married_amt_a => 32000,
single_amt_a => 25000,
married_amt_b => 12000,
single_amt_b => 9000,
other_percentage => 0.5,
);
# inspection of 2023 Soc Sec worksheet indicates no change in
# parameters
my %data_2023_ssb = map { $_ => $data_2022_ssb{$_} } keys %data_2022_ssb;
our %params = (
ssb => {
2022 => { %data_2022_ssb },
2023 => { %data_2023_ssb },
},
qd => {
2022 => {
worksheet_line_count => 21,
single_or_married_sep_amt_a => 41675,
married_amt_a => 83350,
head_of_household_amt_a => 55800,
single_amt_b => 459750,
married_sep_amt_b => 258600,
married_amt_b => 517200,
head_of_household_amt_b => 488500,
percentage_a => 0.15,
percentage_b => 0.20,
},
2023 => {
worksheet_line_count => 21,
single_or_married_sep_amt_a => 44625,
married_amt_a => 89250,
head_of_household_amt_a => 59750,
single_amt_b => 492300,
married_sep_amt_b => 276900,
married_amt_b => 553850,
head_of_household_amt_b => 523050,
percentage_a => 0.15,
percentage_b => 0.20,
},
},
);
sub social_security_benefits {
my ($inputs) = @_;
my $rv = _social_security_benefits_engine($inputs);
return $rv->{taxable_benefits};
}
lib/Business/Tax/US/Form_1040/Worksheets.pm view on Meta::CPAN
unless (defined $inputs->{status} and $permitted_statuses{$inputs->{status}});
my $data = {};
for my $el (@numerics) {
$data->{$el} = $inputs->{$el} // 0;
}
$data->{status} = $inputs->{status};
my $filing_year = $inputs->{filing_year}; # TODO add test for numeric; required element
my @lines = (undef, (undef) x $params{ssb}{$filing_year}{worksheet_line_count});
my $formatted_lines;
$lines[1] = $data->{box5};
$lines[2] = $lines[1] * $params{ssb}{$filing_year}{ssa_percentage};
$lines[3] =
$data->{l1z} +
$data->{l2b} +
$data->{l3b} +
$data->{l4b} +
$data->{l5b} +
$data->{l7} +
$data->{l8};
$lines[4] = $data->{l2a};
$lines[5] = $lines[2] + $lines[3] + $lines[4];
lib/Business/Tax/US/Form_1040/Worksheets.pm view on Meta::CPAN
$data->{s1l25};
if (! ($lines[6] < $lines[5]) ) {
$formatted_lines = decimal_lines(\@lines);
return {
taxable_benefits => 0,
worksheet_data => $formatted_lines,
};
}
$lines[7] = $lines[5] - $lines[6];
if ($data->{status} eq 'married_sep') {
$lines[16] = $lines[7] * $params{ssb}{$filing_year}{percentage_b};
$lines[17] = $lines[1] * $params{ssb}{$filing_year}{percentage_c};
$lines[18] = min($lines[16], $lines[17]);
$formatted_lines = decimal_lines(\@lines);
return {
taxable_benefits => $lines[18],
worksheet_data => $formatted_lines,
};
}
$lines[8] = $data->{status} eq 'married'
? $params{ssb}{$filing_year}{married_amt_a}
: $params{ssb}{$filing_year}{single_amt_a};
lib/Business/Tax/US/Form_1040/Worksheets.pm view on Meta::CPAN
worksheet_data => $formatted_lines,
};
}
$lines[9] = $lines[7] - $lines[8];
$lines[10] = $data->{status} eq 'married'
? $params{ssb}{$filing_year}{married_amt_b}
: $params{ssb}{$filing_year}{single_amt_b};
my $diff = $lines[9] - $lines[10];
$lines[11] = $diff > 0 ? $diff : 0;
$lines[12] = min($lines[9], $lines[10]);
$lines[13] = $lines[12] * $params{ssb}{$filing_year}{other_percentage};
$lines[14] = min($lines[2], $lines[13]);
my $x = $lines[11] * $params{ssb}{$filing_year}{percentage_a};
$lines[15] = $x > 0 ? $x : 0;
$lines[16] = $lines[14] + $lines[15];
$lines[17] = $lines[1] * $params{ssb}{$filing_year}{percentage_c};
$lines[18] = min($lines[16], $lines[17]);
$formatted_lines = decimal_lines(\@lines);
return {
taxable_benefits => $lines[18],
worksheet_data => $formatted_lines,
};
}
=head2 C<pp_ssbw()>
lib/Business/Tax/US/Form_1040/Worksheets.pm view on Meta::CPAN
: $inputs->{status2} eq 'married_sep'
? $params{qd}{$filing_year}{married_sep_amt_b}
: $inputs->{status2} eq 'married'
? $params{qd}{$filing_year}{married_amt_b}
: $params{qd}{$filing_year}{head_of_household_amt_b};
$lines[14] = min($lines[1], $lines[13]);
$lines[15] = $lines[5] + $lines[9];
my $diff1 = $lines[14] - $lines[15];
$lines[16] = $diff1 > 0 ? $diff1 : 0;
$lines[17] = min($lines[12], $lines[16]);
$lines[18] = $lines[17] * $params{qd}{$filing_year}{percentage_a};
$lines[19] = $lines[9] + $lines[17];
$lines[20] = $lines[10] - $lines[19];
$lines[21] = $lines[20] * $params{qd}{$filing_year}{percentage_b};
# We will need to use 5, 18, 21, 22 and 1
my @formatted_lines = (
$lines[0], # undef
map { sprintf("%.2f" => $lines[$_]) } (1..$#lines),
);
return \@formatted_lines;
}
=head2 C<pp_qdcgtw()>
( run in 0.384 second using v1.01-cache-2.11-cpan-709fd43a63f )