TaxFormTracker
Vendors over the reporting threshold, with W-9 and TIN-match state.
npx shadcn add @lopifi/tax-form-trackerExamples
The same component, case by case. Each stage is the shipped code with the props it shows; switch to Code for the usage.
How it behaves
What it renders, what it refuses to render, and why. The same paragraphs as the family spec, so the two can’t disagree.
Vendors paid over a reporting threshold, and what stands between each of them and a filed information return: total paid, reportable amount, W-9 state, TIN-match result, form type, delivery and filing.
The threshold is a prop and is printed in the header. "Vendors paid at least $2,000 in reportable payments · tax year 2026". The figure changes by law and by year (procure to pay keeps it as a dated table), and so does its wording: comparison: "at-least" | "more-than" has no default, because whether a vendor paid exactly the threshold is in or out depends on the rule's own text. Vendors under the threshold are counted ("1 under it, not listed"), not silently dropped.
Reportable is not total paid. Payments by card or through a third-party network are typically reported by the processor, not the payer, so the threshold is tested against reportableAmount, and both columns are shown.
Rows that need work sort first: a W-9 that's missing or requested, a TIN mismatch, an undetermined form, an undeliverable copy, a rejected filing. The header alert counts missing W-9s and mismatches, because before year-end they're still fixable.
Refuses to render: a full TIN. The list shows the last four at most, masked, with spoken text "TIN ending 4471".
Accessibility: every state is a glyph plus a word (Matched, Mismatch, Not run). The table has a caption naming the tax year.
The accounting it encodes
The concepts this component renders, each defined once in the lexicon.
More in Tax & compliance
See also
Where this component is specified, defined and running.
Elsewhere in the system
The live section TaxFormTracker renders in, the calculators behind its figures, and the ledger payloads that feed it.
- TaxFormTracker, runningThe compliance showcase — live, with theme, density, grayscale and reduced-motion switches.
- Tax & complianceControlTestResult sits beside them and speaks their idiom. Every component in this family takes an explicit asOf. "Today" is never the client clock, so a server render, a printed copy and a screenshot agree on what is late. Shared types live in src/ledger/lib/compliance.types.ts; the tax-ID checks l
Components are copied into your repository and meant to be edited. Rounding policy, fiscal calendar and compliance copy differ per company.
Release notes
Get an email when Tax & compliance changes
Your copy doesn’t update itself when we fix something here.
- One email when a Tax & compliance component needs a migration
- Nothing when nothing changes
Or install it now
npx shadcn add @lopifi/tax-form-tracker