Operations
CMS Annual Refresh Runbook
Use this SOP when importing the next CMS year, validating generated data, and updating references across the site.
Annual process2026 baseline
Generated CMS files must remain under `src/data/generated`. Manual edits belong in the hand-authored data files only.
Runbook steps
- 1. Download the new CMS Physician Fee Schedule files and place them in the matching `data/raw` folder.
- 2. Run the year-specific import script for CPT and GPCI data.
- 3. Verify the generated files in `src/data/generated` and compare row counts to the source files.
- 4. Update year labels, conversion factor text, and CMS references in calculators and resource pages.
- 5. Run `npm run typecheck` and the import/data integrity tests before publishing.
- 6. Publish the refreshed data page and record the release date in the resources hub.
Validation gates
| Check | Pass condition |
|---|---|
| CPT import | Generated CPT count matches CMS source totals |
| GPCI import | State and locality counts match source file |
| Conversion factors | Non-QPP and QPP factors updated |
| Page labels | 2026 labels updated to the new release year |
| Reference pages | Resources hub and tool copy reflect the new year |
Rollback plan
Restore the previous generated files from git if import output is malformed.
Rerun the previous stable year import script to repopulate `src/data/generated`.
Keep the raw CMS download alongside the release notes for auditability.
Do not patch generated output by hand; fix the source import instead.
Owner checklist
Source owner: CMS import maintainer
Review owner: product/data maintainer
Release owner: site operator
Evidence: diff, typecheck, data integrity tests, release note