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 )