Data / HCRIS hospital financials / Dictionary

HCRIS Hospital Financials

Description

Full financial and operational detail from the Healthcare Cost Report Information System (HCRIS) — the annual cost report every Medicare-certified hospital in the US is required to file. One row per (CCN × fiscal year); a hospital with 20 years of filing history has 20 rows. This is the underlying cost-report line-item table (charges, costs, revenues, bed counts, workforce, balance sheet), not a search-index summary — it's the full financial history CMS/NBER-cleaned files provide, preferred here over a "latest per CCN" view because bulk-license buyers generally want the time series, not just the current snapshot.

  • Source: CMS Healthcare Cost Report Information System, via CMS/NBER cleaned cost-report files.
  • Refresh cadence: rolling, as CMS posts new/amended cost reports; ingestion cadence is not fixed-calendar.
  • Row count: 173,959
  • Vintage: 2026-05-26 (max ingested_at observed at export time)
  • Coverage: fiscal years 1996–2025, 10,138 distinct CCNs; 846 of them map to a publicly traded operator across 14 tickers (2026-08-29 crosswalk).

Table: hcris_hospital_financials

Snowflake: HEALTHPARSE_DATA.HCRIS_HOSPITAL_FINANCIALS.HCRIS_HOSPITAL_FINANCIALS

Column Type Description Notes
ccn VARCHAR CMS Certification Number — the 6-character federal ID for the hospital (facility-level primary identifier across virtually every CMS dataset). Not unique alone; unique with fy_end.
npi VARCHAR Linked organizational National Provider Identifier, when a match to the hospital's NPI record was made. Populated on 49,696 of 173,959 rows (~29%). Absent doesn't mean the hospital lacks an NPI — it means the ingestion-time link wasn't made.
provider_name VARCHAR Hospital name as filed on the cost report. 7,244 rows (~4%) hold the literal placeholder Unknown where the source file didn't carry a resolvable name.
street / city / state / zip VARCHAR Mailing address on file with the cost report. city/state are null wherever provider_name is Unknown.
fy_begin / fy_end DATE Cost-report fiscal year start/end dates (hospital fiscal years are not calendar-aligned). fy_end is never null; fy_begin can be.
fy_end_year / fy_end_month SMALLINT Denormalized year/month of fy_end, for filtering without a date function.
control_type VARCHAR Ownership/control category from the cost report (e.g. "Voluntary non-profit - Church", "Proprietary", "Government - State"). Mixed encoding: ~96% of rows (166,185) store the raw CMS numeric control-type code (1–13) rather than the text label — no crosswalk table ships with this export. ~1.4% (2,496) are null. Only ~3% carry the human-readable text shown in the description above.
hospital_type VARCHAR Facility type (e.g. "Acute Care Hospitals", "Critical Access Hospitals", "Psychiatric", "Long-term", "Childrens", "Rural Emergency Hospital"). Mostly missing/coded: ~55% of rows (95,044) are null, ~27% (46,206) hold a raw numeric code instead of text, leaving only ~19% with a resolved text label.
total_beds / available_beds INTEGER Licensed / staffed-and-available bed counts as filed.
total_inpatient_days / medicare_inpatient_days / medicaid_inpatient_days BIGINT Total patient-days for the fiscal year, and the Medicare/Medicaid-attributed subsets.
total_outpatient_visits / total_discharges BIGINT Outpatient visit count and total inpatient discharges for the fiscal year.
total_charges / total_costs / total_revenues DOUBLE Hospital-wide gross charges, total costs, and total revenues for the fiscal year, in dollars. Charges ≠ what payers actually pay — see HPT Negotiated Rates for actual negotiated/cash prices.
medicare_charges / medicare_costs / medicaid_charges / medicaid_costs DOUBLE Charges and costs attributable specifically to Medicare and Medicaid patients.
bad_debt DOUBLE Bad debt expense recognized for the fiscal year.
charity_care_charges / uncompensated_care DOUBLE Charges written off as charity care, and total uncompensated care (charity care + bad debt, per CMS worksheet S-10 methodology).
net_income DOUBLE Total revenues minus total costs for the fiscal year. Used to compute operating margin (net_income / total_revenues) in the source app; not pre-computed in this export.
total_assets / total_liabilities / fund_balance DOUBLE Fiscal-year-end balance sheet: total assets, total liabilities, and fund balance (assets − liabilities).
total_salaries / total_fte DOUBLE Total salary expense and total full-time-equivalent staff count for the fiscal year.
resident_count_inpatient / resident_count_outpatient DOUBLE Medical resident FTE counts by inpatient/outpatient rotation, for teaching hospitals. Null for the large majority of non-teaching hospitals.
ownership_change_flag BOOLEAN Whether CMS recorded an ownership/control change (CHOW) affecting this cost-report period. Defaults false; only a small minority are true.
ingested_at TIMESTAMP WITH TIME ZONE When this row was last (re-)ingested into the source database. Distinct from _vintage (a fixed constant) and _exported_at (this Parquet snapshot's export time) — see the README.

Example queries (Snowflake)

-- 1. Financial-distress screen: hospitals with negative net income and
--    high uncompensated care, most recent fiscal year on file per CCN.
SELECT "ccn", "provider_name", "state", "fy_end_year", "total_revenues", "net_income",
       "uncompensated_care"
FROM HEALTHPARSE_DATA.HCRIS_HOSPITAL_FINANCIALS.HCRIS_HOSPITAL_FINANCIALS
WHERE "net_income" < 0
QUALIFY ROW_NUMBER() OVER (PARTITION BY "ccn" ORDER BY "fy_end" DESC) = 1
ORDER BY "uncompensated_care" DESC
LIMIT 100;

-- 2. Operating margin trend for a single hospital across all filed years.
SELECT "ccn", "provider_name", "fy_end_year",
       "total_revenues", "net_income",
       CASE WHEN "total_revenues" > 0 THEN "net_income" / "total_revenues" END AS operating_margin
FROM HEALTHPARSE_DATA.HCRIS_HOSPITAL_FINANCIALS.HCRIS_HOSPITAL_FINANCIALS
WHERE "ccn" = '340001'
ORDER BY "fy_end_year";

-- 3. State-level rollup: total beds and aggregate net income by state,
--    latest fiscal year available per CCN.
SELECT "state", count(DISTINCT "ccn") AS hospitals, sum("total_beds") AS total_beds,
       sum("net_income") AS aggregate_net_income
FROM (
  SELECT *
  FROM HEALTHPARSE_DATA.HCRIS_HOSPITAL_FINANCIALS.HCRIS_HOSPITAL_FINANCIALS
  QUALIFY ROW_NUMBER() OVER (PARTITION BY "ccn" ORDER BY "fy_end" DESC) = 1
)
GROUP BY "state"
ORDER BY hospitals DESC;