What we check
Every rule below is rendered directly from the validation engine's rule registry, so this page can never drift from what actually runs. 16 checks across three layers.
L1: Schema conformance
Required fields present on every line item
blocker · HPT-L1-001Every standard charge line item must include a description, at least one billing code and code type, a care setting, and a gross charge. Rows missing any of these can't be matched to a real service.
Citation: 45 CFR 180.50(b); CMS v3.0.0 CSV/JSON data dictionary, required-field list
Remediation: Fill in the description, code, code|type, setting, and standard_charge|gross columns for every row before republishing.
Billing code type is a recognized CMS code type
blocker · HPT-L1-002The code|type column must be one of CMS's recognized billing code systems (CPT, HCPCS, DRG variants, NDC, etc.). An unrecognized value means the code can't be looked up against any real fee schedule.
Citation: CMS v3.0.0 CSV/JSON data dictionary, code_information.type enum
Remediation: Correct the code type to one of the CMS-recognized values, or remove the row if it doesn't map to a billable code.
Setting is a recognized value
blocker · HPT-L1-003The setting column must be one of 'inpatient', 'outpatient', or 'both'. Any other value can't be interpreted by downstream tools or payers reconciling the file.
Citation: CMS v3.0.0 CSV/JSON data dictionary, standard_charges.setting enum
Remediation: Set the setting column to inpatient, outpatient, or both for every row.
Gross charge and discounted cash price are numeric
blocker · HPT-L1-004standard_charge|gross and standard_charge|discounted_cash must be plain numbers. Text, currency symbols, or ranges in these columns break every automated consumer of the file.
Citation: CMS v3.0.0 CSV/JSON data dictionary, standard_charges.gross_charge / discounted_cash (type: number)
Remediation: Store gross charge and discounted cash price as plain decimal numbers with no currency symbols or text.
Methodology is present whenever a negotiated rate is present
blocker · HPT-L1-005Any row with a negotiated_dollar, negotiated_percentage, or negotiated_algorithm value must also state the methodology used to derive it (case rate, fee schedule, percent of total billed charges, etc.).
Citation: CMS v3.0.0 CSV/JSON data dictionary, standard_charges.methodology (required when negotiated fields present)
Remediation: Populate standard_charge|methodology for every row that has a negotiated dollar, percentage, or algorithm value.
JSON file has all required top-level metadata fields
blocker · HPT-L1-006A v3.0.0 JSON MRF must include hospital_name, last_updated_on, version, and an attestation object at the top level. Missing any of these means the file doesn't conform to the CMS JSON schema.
Citation: CMS v3.0.0 JSON schema, top-level required properties
Remediation: Add the missing top-level field(s) (hospital_name, last_updated_on, version, attestation) to the JSON file.
L2: Completeness and plausibility
No placeholder values in price or payer fields
warning · HPT-L2-014Values like 999999999, 'N/A', or an empty payer name are common placeholders hospitals leave in when a real number wasn't ready. They pass schema validation but carry no real pricing information.
Citation: CMS Hospital Price Transparency FAQ, data completeness guidance
Remediation: Replace placeholder values with the real negotiated rate, or omit the row if the rate genuinely doesn't exist for that payer/plan.
Percentile allowed amounts are internally consistent
blocker · HPT-L2-020Where median, 10th percentile, and 90th percentile allowed amounts are reported, the 10th percentile must be less than or equal to the median, which must be less than or equal to the 90th percentile, and the count of amounts behind the calculation must be greater than zero.
Citation: CY2026 OPPS final rule, 45 CFR 180.50(b)(4) — median/10th/90th percentile allowed amounts + count
Remediation: Recompute the percentile fields from the underlying remittance data so 10th <= median <= 90th, and ensure count reflects the number of amounts behind the calculation.
Attestation block is present with a named signing official
blocker · HPT-L2-030The file must encode the CMS attestation statement, an explicit confirmation flag, and the name of the CEO, president, or other senior official affirming the data is true, accurate, and complete. A missing or blank attester name means no one is actually attesting to this file.
Citation: CY2026 OPPS final rule, 45 CFR 180.50(b)(1)(vii) — attestation requirement effective Jan 1 2026, enforced Apr 1 2026
Remediation: Add the CMS attestation statement, set confirm_attestation to true, and fill in attester_name with the signing official's full name.
Type 2 organizational NPIs pass checksum validation
blocker · HPT-L2-040Every Type 2 NPI encoded in the file must be a structurally valid 10-digit National Provider Identifier (the check digit must match). A malformed NPI can't be verified against NPPES and breaks any downstream taxonomy-based lookup.
Citation: CY2026 OPPS final rule — Type 2 NPI requirement for taxonomy codes beginning '27'/'28'
Remediation: Correct the Type 2 NPI to the organization's real, currently-active NPI as registered with NPPES.
Type 2 NPI exists and is active in NPPES
warning · HPT-L2-041A structurally valid Type 2 NPI can still be unregistered, retired, or belong to an individual rather than an organization. This check confirms the NPI resolves to an active organizational record in the NPPES registry.
Citation: CY2026 OPPS final rule — Type 2 NPI must be active as of the most recent update
Remediation: Confirm the Type 2 NPI in NPPES (npiregistry.cms.hhs.gov) and correct it if retired, inactive, or mistyped.
File was updated within the last 12 months
warning · HPT-L2-050last_updated_on should reflect a recent refresh of the underlying charge data. A file that hasn't been updated in over a year is likely showing stale prices, even if it otherwise validates.
Citation: 45 CFR 180.50(c) — MRF must be updated at least annually
Remediation: Regenerate and republish the file with a current last_updated_on date reflecting the actual data refresh.
File has a plausible amount of charge and payer coverage
info · HPT-L2-060A hospital MRF with only a handful of line items or a single payer is very unlikely to represent the hospital's full standard charge list, even if the file otherwise validates cleanly.
Citation: CMS Hospital Price Transparency FAQ, completeness guidance
Remediation: Confirm the file actually contains the hospital's complete chargemaster and all contracted payers, not a partial export.
L3: Discoverability compliance
cms-hpt.txt is present at the domain root and points at a live MRF
blocker · HPT-L3-001Every hospital must publish a cms-hpt.txt file at the root of its public domain listing the location(s) of its machine-readable file(s). Without it, the MRF is effectively undiscoverable to anyone who doesn't already have the direct URL.
Citation: CMS Hospital Price Transparency txt-file FAQ; 45 CFR 180.50(e)
Remediation: Publish a cms-hpt.txt file at https://<your-domain>/cms-hpt.txt listing the full URL(s) of your MRF(s), one per line.
MRF filename follows the CMS naming convention
warning · HPT-L3-002CMS expects the MRF filename to follow <ein>_<hospital-name>_standardcharges.<ext>. A non-conforming filename makes the file harder for automated tools (including CMS's own review process) to identify.
Citation: 45 CFR 180.50(b)(1)(i) — file naming convention
Remediation: Rename the file to <ein>_<hospital-name>_standardcharges.csv (or .json), using the hospital's EIN with no dashes.
MRF is publicly reachable without authentication or a JS wall
blocker · HPT-L3-003The file must be fetchable by an anonymous, unauthenticated HTTP request. A login-gated page, a JavaScript-rendered viewer with no direct file link, or a 403/404 response means automated tools (including this one, CMS, and any payer trying to reconcile rates) can't actually read the file.
Citation: 45 CFR 180.50(b) — MRF must be accessible to the public without barriers
Remediation: Serve the MRF from a plain, unauthenticated URL that returns the raw CSV or JSON file directly, with no login or JavaScript required.