Skip to content

Update 1042-S and 1099-NEC templates#1595

Open
nyomanjyotisa wants to merge 2 commits intomainfrom
update-1042-S-template
Open

Update 1042-S and 1099-NEC templates#1595
nyomanjyotisa wants to merge 2 commits intomainfrom
update-1042-S-template

Conversation

@nyomanjyotisa
Copy link
Member

@nyomanjyotisa nyomanjyotisa commented Feb 5, 2026

Issue: https://chat.google.com/room/AAQAWojMDVI/cvwCBw-61Yo/030bMO0dPdk?cls=10

Description

Update tax form PDF templates to 2025 versions and update serializer code to match the new field naming conventions

Problem

  1. The 1042-S and 1099-NEC PDF templates were outdated (2024 versions). The IRS releases new versions of these forms each tax year with updated templates

  2. We don't show "For calendar year" for 1099-DIV, and wrong year format on 1099-NEC

Solution

  1. Updated the 1042-S and 1099-NEC PDF templates to their 2025 versions and modified the corresponding serializers to match the new field naming conventions. 1099-DIV not updated since the current template already the latest template, see https://www.irs.gov/forms-pubs/about-form-1099-div

  2. Updated the "For calendar year" serializer for 1099-DIV and 1099-DEV


Before/After

Before

image

After

1042-S

Screenshot 2026-02-05 at 15 50 52

1099-NEC

image

1099-DIV

image

AI Disclosure

Claude Opus 4.5 for code generation, all code self reviewed.

@nyomanjyotisa nyomanjyotisa marked this pull request as draft February 5, 2026 08:12
"topmostSubform[0].Copy#{tax_form_copy}[0].LeftColumn[0].f1_28[0]" => normalized_tax_field(billing_entity_name),
"topmostSubform[0].Copy#{tax_form_copy}[0].LeftColumn[0].f1_29[0]" => country_code,
"topmostSubform[0].Copy#{tax_form_copy}[0].LeftColumn[0].f1_30[0]" => normalized_street_address,
"topmostSubform[0].Copy#{tax_form_copy}[0].RightColumn[0].f1_31[0]" => normalized_tax_field(full_city_address),
Copy link
Member Author

@nyomanjyotisa nyomanjyotisa Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the new template LeftCol changed to LeftColumn and RightCol changed to RightColumn. And f1_31 moved from LeftColumn to RightColumn


class TaxDocuments::Form1099necSerializer < TaxDocuments::BaseSerializer
TAX_FORM_COPIES = %w[A 1 B 2 C].freeze
TAX_FORM_COPIES = %w[A 1 B 2].freeze
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy C no longer exist

"topmostSubform[0].Copy#{tax_form_copy}[0].LeftCol[0].f#{page_number}_7[0]" => normalized_tax_field(full_city_address),
# Nonemployee compensation
"topmostSubform[0].Copy#{tax_form_copy}[0].RightColumn[0].f#{page_number}_9[0]" => compensation_amount_for_tax_year(tax_year),
"topmostSubform[0].Copy#{tax_form_copy}[0].RightCol[0].f#{page_number}_9[0]" => compensation_amount_for_tax_year(tax_year),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LeftColumn changed to LeftCol and RightColumn changed to RightCol


private
def header_for(tax_form_copy)
case tax_form_copy
Copy link
Member Author

@nyomanjyotisa nyomanjyotisa Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

header_for method no longer needed, all copies now use PgHeader

@nyomanjyotisa nyomanjyotisa marked this pull request as ready for review February 5, 2026 08:20
@nyomanjyotisa nyomanjyotisa requested a review from ershad February 5, 2026 08:20

result = {
"topmostSubform[0].Copy#{tax_form_copy}[0].Copy#{tax_form_copy}Header[0].CalendarYear[0].f#{page_number}_1[0]" => formatted_tax_year,
"topmostSubform[0].Copy#{tax_form_copy}[0].CopyHeader[0].CalendarYear[0].f#{page_number}_1[0]" => tax_year.to_s,
Copy link
Member Author

@nyomanjyotisa nyomanjyotisa Feb 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously we still use the 2023 serializer which the template already has 20 prefix and the label was changed since 2024 template (this still the latest template)

2023:
Image

2025, Before:

Image

2025, After fix:

Image


{
"topmostSubform[0].Copy#{tax_form_copy}[0].#{header_for(tax_form_copy)}Header[0].CalendarYear[0].f#{page_number}_1[0]" => tax_year.to_s.last(2),
"topmostSubform[0].Copy#{tax_form_copy}[0].PgHeader[0].CalendarYear[0].f#{page_number}_1[0]" => tax_year.to_s,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2023:

Image

2025, before:

Image

2025, after:

Image

@ershad
Copy link
Member

ershad commented Feb 6, 2026

@nyomanjyotisa _a

  1. Code looks good to me. Just confirming, we filling the correct boxes with the correct numbers, right? Have we verified every number?
  2. Will we update the currently generated forms?

@neetogit-bot neetogit-bot bot assigned nyomanjyotisa and unassigned ershad Feb 6, 2026
@nyomanjyotisa
Copy link
Member Author

@ershad _a

  1. I have checked and compared the after fix and before fix generated forms and it looks good to me. If you got time, can you help to do a final check? Here are the before after files:
Before Fix After Fix
generated_1099div_before_fix.pdf generated_1099div_after_fix.pdf
generated_1099nec_before_fix.pdf generated_1099nec_after_fix.pdf
generated_1042s_before_fix.pdf generated_1042s_after_fix.pdf
  1. Does the IRS accept the tax filling if we use the old version of the form/template? If so we can just regenerate forms for users that contact the support teams about this issue, otherwise if the IRS only accept the tax filling with the latest version of the form/template we should regenerate all

@neetogit-bot neetogit-bot bot assigned ershad and unassigned nyomanjyotisa Feb 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants