Year-end tax filing
/hcm/payroll/year-end is the HR-admin surface for generating,
sealing, and transmitting year-end tax forms — W-2 + W-3
(US wage), 1099-NEC + 1096 (contractors), 1095-C (ACA
coverage), T4 + T4A (Canada), RL-1 (Quebec). The run
follows a strict four-step pattern with 4-eyes SoD on the seal,
step-up-protected transmission, and an AI reasonableness narrative
that catches the typical errors before they reach the IRS.
TL;DR — In January, run Year-end → New run. The engine generates forms + transmits files in supported formats: EFW2 (SSA), FIRE (IRS), CRA Internet File Transfer. A different HR admin seals; a third (or first again) transmits with step-up. Corrections (W-2c / 1099-COR) flow through the same pattern.
Before you start
- All pay runs for the tax year must be closed before generation. A reopened pay run blocks the seal.
- Employees who haven't given § 31.6051-1(j) electronic-delivery consent receive paper copies; the surface lists them.
- For ACA 1095-C generation, the workspace must be an ALE (50+ FTE on average for the prior year). If your workspace isn't, the 1095-C step is skipped.
- The AI reasonableness narrative runs as a check on the generated set — it flags YTD anomalies, missing W-4 changes, reciprocity mismatches. Reviewer signs off before the seal step.
The four-step pattern
1. Initiate the run
Pick the tax year + the jurisdictions to include. Audit log records
HCM_YEAREND_RUN_INITIATED.2. Generate forms
The engine produces every form for every employee + contractor +-applicable plan. Per-form audit codes (one per employee-form) flow through
HCM_YEAREND_FORM_GENERATED.3. Reasonableness review
The AI generates a narrative covering YTD totals, deduction consistency, multi-state allocation, year-over-year change summary. HR admin reviews + signs off. Audit log records
HCM_YEAREND_RUN_REASONABLENESS_REVIEW.4a. Seal (different HR admin than initiator)
The seal locks the run against further changes; corrections after this point use the W-2c / 1099-COR / T4-amended path.
HCM_YEAREND_RUN_SEALEDrecorded.4b. Transmit (step-up + 4-eyes)
Step-up-protected; phishing-resistant proof required. Forms flow to SSA via EFW2, IRS via FIRE, CRA via Internet File Transfer.
HCM_YEAREND_RUN_TRANSMITTEDat critical severity.
4-eyes SoD on seal vs transmit
The admin who initiated the run cannot be the admin who seals it. A third admin (or the first) transmits — but every transmit requires a fresh step-up regardless of identity. This is the strictest 4-eyes pattern the platform offers.
Supported forms
| Field | What it does | Accepted values / default |
|---|---|---|
| W-2 + W-3 (US) | Per-employee wage statement + workspace transmittal. | EFW2 file format for SSA. Per-state W-2 reports for state agencies. |
| 1099-NEC (US) | Contractor non-employee compensation. | FIRE file format for IRS. Includes 1099-MISC where applicable. |
| 1096 (US) | Transmittal for paper 1099s. | Auto-generated; only used for paper-filing employers. |
| 1095-C (US, ACA-applicable) | Employer-provided health-coverage statement. | Required for ALE (50+ FTE). Includes Form 1094-C transmittal. |
| T4 (Canada) | Per-employee statement of remuneration paid. | CRA Internet File Transfer format. |
| T4A (Canada) | Pensions, retiring allowances, scholarships. | CRA IFT format. Generated when applicable. |
| RL-1 (Quebec) | Quebec equivalent of T4; required for QC residents. | Revenu Québec format. Generated automatically alongside T4. |
AI reasonableness narrative
The narrative is a read-side check on the generated forms. The AI never authors filings; it summarizes anomalies for human review.
| Field | What it does | Accepted values / default |
|---|---|---|
| YTD totals reconciliation | Does every employee's W-2 box match the sum of their pay slips for the tax year? | Drift flagged for review. |
| Deduction consistency | Are pre-tax + post-tax categories captured on the right boxes? | FSA / HSA / 401(k) / Roth correctly assigned. |
| Multi-state allocation | Do per-state W-2 boxes sum to the federal total? | Out-of-balance multi-state allocations flagged. |
| Year-over-year change | How does this year compare to last year on aggregate. | Helps spot configuration drift. |
| Consent + delivery posture | Who's on electronic delivery vs paper. | Confirms paper recipients have their forms queued for mailing. |
Corrections (W-2c / 1099-COR / T4-amended)
If an error is discovered after the seal, the correction path:
Open the sealed run
Click + Issue correction.
Pick the form + the box to correct
The system shows the prior-filed amount + accepts the corrected amount.
Sign rationale
Free-text. Stored against the correction record.
Generate the corrected form
Audit log records
HCM_YEAREND_CORRECTION_ISSUED.Transmit the correction
Same step-up + 4-eyes pattern as the original. The correction file format differs (W-2c instead of W-2; same SSA EFW2 with correction marker).
Per-employee detail
Every employee with year-end forms in the run sees:
- A view-only copy of the form on
/hcm/me/tax-forms(after seal). - An electronic-delivery copy if they have § 31.6051-1(j) consent.
- A mailed paper copy if not.
See Pay stubs & tax forms for the employee side.
Every field, explained
| Field | What it does | Accepted values / default |
|---|---|---|
| Tax year | Which calendar year the forms cover. | Cannot run a tax year more than once without explicit reset. |
| Jurisdictions | Which countries / regions are in scope. | US, Canada, Quebec. UK + EU on roadmap. |
| Initiator | HR admin who started the run. | Cannot be the sealer. |
| Sealer | HR admin who locks the run for transmission. | Different from initiator; can be the transmitter. |
| Transmitter | HR admin who completes step-up + transmits. | Step-up always required; identity logged. |
| Form list | Per-form per-employee status. | GENERATED / SEALED / TRANSMITTED / CORRECTED. |
| Correction marker | Indicates a form is a correction. | Flows to W-2c / 1099-COR / T4-amended file formats. |
Audit codes
For SIEM ingestion + compliance review, this surface emits:
See Reference → Audit codes for the
canonical description of each. HCM_YEAREND_RUN_TRANSMITTED is
the critical-severity row — forms go to SSA / IRS / CRA.
Common gotchas
- "Generate ran with errors but the run advanced anyway." The engine generates everything it can; per-form errors surface in the run report. Resolve each before sealing.
- "Initiator can't seal." 4-eyes SoD. A different HR admin seals. The UI hides the seal button for the initiator.
- "Transmit step-up keeps failing." Phishing-resistant
requirement; ensure you have a passkey or hardware key
enrolled (TOTP won't satisfy
YEAREND_TAX_TRANSMIT). - "Corrected W-2 confused the employee." Workspace policy
decides whether the original W-2 stays visible on
/hcm/me/tax-forms. Most workspaces keep both visible; the newer takes precedence for filing purposes. - "State filings show different numbers than federal." A common reciprocity-routing artefact; the federal W-2 sums to the workspace total, but state boxes reflect only the work-state allocation. Confirms multi-state routing is working.
Troubleshooting
| Error code | What it means | Fix |
|---|---|---|
YEAREND_PAYROLL_OPEN | A pay run for the year is still open. | Close all pay runs. |
YEAREND_SEAL_4EYES_VIOLATION | The initiator tried to seal. | Different admin seals. |
YEAREND_TRANSMIT_STEPUP_FAILED | Step-up didn't complete. | Re-attempt with phishing-resistant. |
YEAREND_AI_NARRATIVE_TIMEOUT | The reasonableness AI run timed out. | Retry; if persistent, skip the AI step and do manual review. |
YEAREND_CORRECTION_RUN_LOCKED | The base run isn't sealed yet. | Seal first, then issue corrections. |
Related