Medicare Advantage, Part D, Medicaid
PBP emergency urgent (cleaned view)
medicare_semantic.vw_pbp_emergency_urgent·live·semantic_view·Hybrid annual-then-quarterly: report_year is the true benefit-year axis (2001 -> 2026). Through 2017 there is one annual filing (quarter is always 1). From 2018 onward CMS issues quarterly PBP refreshes, so quarter takes values 1-4 within a year (some year/quarter combos are missing, e.g. 2020 has no Q3, 2024 has no Q2 — these gaps are real source gaps, not dedup artifacts). Treat report_year as the period for trend analysis and (report_year, quarter) as the snapshot identity.Rows
N/A
Columns
71
History
2001 (report_year 2001, single annual snapshot) to 2026 (report_year 2026, Q1)
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1A semantic, analysis-ready view of Medicare Advantage (Part C) enrollee cost-sharing for emergency and urgent-care benefits, derived from CMS Plan Benefit Package (PBP) Public Use Files sections B4A (emergency room) and B4B (urgently needed services).
- 2One view row tells you, for a given MA plan in a given year/quarter, what an enrollee pays out-of-pocket (copay dollar amount and/or coinsurance percent) for an ER visit or an urgent-care visit, plus the copay-waived-if-admitted rules.
- 3It is part of the Local Market Intelligence (LMI) Medicare benefit substrate used to benchmark plan generosity and member cost exposure.
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idreport_yearquarteremergency_urgent_sub_benefit |
|
How to read it
- 1To compare ER vs urgent-care member cost exposure for current MA plans: SELECT emergency_urgent_sub_benefit, approx_percentile(copay_amount,0.5) AS median_copay, count_if(coinsurance_pct IS NOT NULL) AS plans_using_coinsurance FROM vw_pbp_emergency_urgent WHERE report_year = 2026 AND quarter = 1 GROUP BY emergency_urgent_sub_benefit.
- 2This returns ~$127 median ER copay vs ~$35 median urgent-care copay (2026), and how many plans use coinsurance instead of a flat copay.
- 3Always pin report_year (and quarter for 2018+) and split by emergency_urgent_sub_benefit.
- 4To look up one plan: filter contract_id, plan_id, segment_id, report_year, quarter and you get the two rows (ER and urgent care) with copay_amount/coinsurance_pct plus copay_waived_if_admitted.
Traps
- 1Grain is per-sub-benefit, NOT per-plan: every (contract, plan, segment, year, quarter) yields TWO rows (emergency_room + urgent_care). Always filter emergency_urgent_sub_benefit (or source_pbp_section B4A/B4B) before reasoning about cost — otherwise you double-count plans and blend ~$127 ER copays with ~$35 urgent-care copays. 201,488 plan-period keys -> 402,976 rows.
- 2A large block of columns is 100% NULL placeholders inherited from a shared PBP template and must NOT be used here: auth_required, referral_required, max_oop_applies, the entire limit_* family (limit_text/quantity/unit/period_code/period_label/quantity_per_year), the entire benefit_amount_* family (incl. benefit_amount_pmpm/annualized), normalization_status, normalization_basis, aggregation_policy. The real payload is copay_amount, coinsurance_pct (+min/max), cost_share_string, the copay/coinsurance waiver fields, and the has_* flags.
- 3Many 'metadata' columns are single-value constants across all 402,976 rows and cannot be used as filters/dimensions: benefit_category='emergency_urgent', network_type='in_network', offered_status='offered', numeric_amount_observability='offered_without_numeric_amounts', null_amount_reason='unknown_requires_crosswalk', annualization_policy='not_numeric', combined_limit_policy='none_detected', consumer_document_reconciliation_status='not_checked', confidence_tier='source_faithful', source_silver_table, lmi_authorities. network_type='in_network' for ALL rows because emergency/urgent care is covered at in-network rates by law — there is no out-of-network cost-share dimension to query.
- 4has_deductible NULL carries meaning: it is NULL for every report_year <= 2016 (flag not derivable then) and only true/false from 2017+. Treat pre-2017 NULL as 'unknown', never as 'no deductible'. Similarly has_copay/has_coinsurance are NULL on the oldest rows (~22K) where the flag set could not be derived.
- 5'version' looks like a snapshot key but is already collapsed: exactly one distinct version per plan-period key, so the view is pre-deduped to the winning filing iteration — do NOT add version to your grain or try to filter to a 'latest version'. There is no is_current column; snapshot identity is (report_year, quarter) and source_url/sha256 (40 distinct releases).
- 6Type traps in the waiver fields: copay_waiver_days_per_year, coinsurance_waiver_days_per_year, and max_visits_per_period are STRINGS holding float text like '24.0' (cast before arithmetic), whereas copay_waiver_max_visits_within is a proper double. segment_id has an empty-string '' value (10,148 rows) that is a real key value distinct from '0' — do not coalesce it to NULL. Time axis: the profiler tags 'quarter' as the time column but report_year is the real history (2001-2026); quarter is the intra-year refresh (always 1 pre-2018, 1-4 after, with some genuine missing year/quarter snapshots e.g. 2020-Q3, 2024-Q2).
Columns (71)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS MA contract identifier (H/R/E/S-prefixed, e.g. H0084, E5088). 1,972 distinct. First component of the plan key. |
plan_id | string | Plan benefit package ID within the contract (zero-padded 3-char, e.g. '001','801'). 656 distinct values. Unique only in combination with contract_id (and segment_id). |
segment_id | string | Plan segment (service-area sub-division). Mostly '0' (363K rows = single-segment plans). Note: empty string '' also occurs (10,148 rows) as a distinct value alongside '0','1','2'... — treat '' as its own key value, not as NULL. |
version | double | PBP filing iteration that this row came from (double, 0-27; lower-numbered versions dominate). Snapshot/provenance metadata only — NOT part of the grain. There is exactly one distinct version per plan-period key; the view has already collapsed to the winning iteration, so you do NOT need to (and should not) filter or dedup on version. |
report_year | double | MA benefit/contract year the cost-share applies to (double, 2001-2026). This is the primary time axis; row volume grows over time (~1.5K rows in 2001 to ~62K in 2023). |
quarter | double | Intra-year PBP refresh quarter (double 1-4). Always 1 for years <=2017 (annual filings); 1-4 from 2018+ when CMS went quarterly. Part of the snapshot identity, not a fiscal quarter of cost. The profiler mislabels this as the 'time column' — report_year is the real history axis. |
benefit_category | string | Constant = 'emergency_urgent' for every row. A view-level tag identifying this slice of the PBP semantic layer; carries no per-row information. |
cost_share_string | string | Human-readable cost-share as parsed from the PBP, e.g. '$50.0 copay', '20.0%', '$0 copay'. NULL on ~35.6K rows where no structured cost-share was extracted. Convenience/display field; the machine-usable values live in copay_amount / coinsurance_pct. |
copay_amount | double | Flat-dollar copay the enrollee pays for the visit (double). Populated when the plan uses a copay; NULL when the plan uses coinsurance instead (or neither). Economically distinct by sub-benefit: 2026 ER median ~ $127 (max $150), urgent_care median ~ $35 (max $65). |
coinsurance_pct | double | Percent-of-cost coinsurance the enrollee pays (double, 0-50; median 20). Populated when the plan charges coinsurance instead of a flat copay; mutually-exclusive-ish with copay_amount (some plans have both). |
limit_text | string | ALWAYS NULL in this table (0 non-null rows). Placeholder column inherited from the shared PBP semantic template; emergency/urgent benefits carry no quantity-limit text. Do not use. |
auth_required | boolean | ALWAYS NULL (0 non-null). Prior-authorization flag is not captured for emergency/urgent benefits (CMS does not allow PA for emergencies). Schema-conformance placeholder. |
referral_required | boolean | ALWAYS NULL (0 non-null). Referral flag not applicable/captured for this benefit. Placeholder. |
network_type | varchar(10) | Constant = 'in_network' for every row. Emergency/urgent care is covered at the in-network level by law regardless of where rendered, so there is no out-of-network split here. Not a usable filter. |
max_oop_applies | boolean | ALWAYS NULL (0 non-null). Whether the benefit counts toward the plan MOOP is not populated in this view. Placeholder. |
limit_quantity | double | ALWAYS NULL (0 non-null). No visit/quantity caps modeled for emergency/urgent. Placeholder. |
limit_unit | string | ALWAYS NULL (0 non-null). Companion to limit_quantity; unused here. |
limit_period_code | string | ALWAYS NULL (0 non-null). Period code for a quantity limit; unused for this benefit. |
limit_period_label | string | ALWAYS NULL (0 non-null). Human label for limit_period_code; unused. |
limit_quantity_per_year | double | ALWAYS NULL (0 non-null). Annualized quantity limit; unused for this benefit. |
benefit_amount | double | ALWAYS NULL (0 non-null). This view models enrollee cost-SHARE (what the member pays), not a plan benefit allowance, so the benefit_amount family is empty. Placeholder from the template. |
benefit_amount_kind | string | ALWAYS NULL (0 non-null). Placeholder; see benefit_amount. |
benefit_amount_period_code | string | ALWAYS NULL (0 non-null). Placeholder. |
benefit_amount_period_label | string | ALWAYS NULL (0 non-null). Placeholder. |
benefit_amount_annualized | double | ALWAYS NULL (0 non-null). Placeholder. |
benefit_amount_pmpm | double | ALWAYS NULL (0 non-null). Per-member-per-month benefit value; not applicable to a cost-share view. Placeholder. |
normalization_status | string | ALWAYS NULL (0 non-null). Numeric-normalization status field from the template; this view did not run amount normalization (annualization_policy='not_numeric'). Placeholder. |
normalization_basis | string | ALWAYS NULL (0 non-null). Placeholder. |
aggregation_policy | string | ALWAYS NULL (0 non-null). Placeholder. |
offered_status | varchar(15) | Constant = 'offered' for every row. Every row represents a benefit the plan offers; there are no 'not_offered' rows in this view. |
numeric_amount_observability | varchar(31) | Constant = 'offered_without_numeric_amounts'. A provenance tag meaning: the benefit is offered and cost-share copay/coinsurance are captured, but no normalized numeric benefit allowance exists (consistent with the empty benefit_amount family). |
null_amount_reason | varchar(30) | Constant = 'unknown_requires_crosswalk'. Explains why the benefit_amount fields are null (would need an external crosswalk to value). Constant, so informational only. |
annualization_policy | varchar(17) | Constant = 'not_numeric'. No annualization was applied because there is no numeric benefit amount. Constant. |
combined_limit_policy | varchar(29) | Constant = 'none_detected'. No combined/shared limit across sub-benefits was detected. Constant. |
consumer_document_reconciliation_status | varchar(11) | Constant = 'not_checked'. These rows have not been reconciled against consumer-facing plan documents (EOC/SB). Constant — signals the cost-share is source-faithful to the PBP, not independently verified. |
confidence_tier | varchar(23) | Constant = 'source_faithful'. Data is faithfully reproduced from the CMS PBP source (the highest-fidelity tier here); no inference/imputation applied. Constant. |
coinsurance_max_per_visit_amount | double | |
coinsurance_pct_max | double | Upper bound of the coinsurance percent when the source expresses a range; equals coinsurance_pct when it is a single value. Populated only when coinsurance_pct is populated. |
coinsurance_pct_min | double | Lower bound of the coinsurance range; equals coinsurance_pct for single values. ~1,213 rows have min != max (true ranges). |
coinsurance_waived_if_admitted | boolean | Boolean: the coinsurance is waived if the ER visit results in inpatient admission. Populated only on coinsurance rows; NULL on copay-only rows. |
coinsurance_waiver_admit_window | double | |
coinsurance_waiver_admit_window_unit | string | |
coinsurance_waiver_days_per_year | string | STRING (not numeric) holding the number of days within which admission waives the coinsurance, e.g. '24.0'. Populated on ~80,241 rows. Note the float-in-string typing — cast if used numerically. |
copay_amount_max | double | Upper bound of the copay when expressed as a range; equals copay_amount for single values. Populated only when copay_amount is populated. |
copay_amount_min | double | Lower bound of the copay range; equals copay_amount for single values. |
copay_waived_if_admitted | boolean | Boolean: the ER copay is waived if the visit leads to inpatient admission (a common MA provision). TRUE on the majority of copay rows; NULL on coinsurance-only rows; FALSE where the plan does not waive. |
copay_waiver_admit_window | double | |
copay_waiver_admit_window_unit | string | |
copay_waiver_days_per_year | string | STRING holding the days-window for the copay waiver, e.g. '24.0','0.0','72.0'. NULL where not applicable. Float-in-string — cast for arithmetic. |
copay_waiver_max_visits_within | double | Double: max number of visits within the waiver window for which the copay is waived (commonly 1.0 or 2.0). Populated alongside the copay waiver fields. |
counts_toward_plan_deductible | boolean | |
emergency_urgent_package_id | string | |
emergency_urgent_package_match_basis | string | |
emergency_urgent_package_name | string | |
emergency_urgent_package_type_code | string | |
emergency_urgent_package_type_label | string | |
emergency_urgent_sub_benefit | string | THE row discriminator: 'emergency_room' (from PBP B4A) or 'urgent_care' (from B4B). Exactly splits the table 201,488 / 201,488. Always filter on this to separate ER cost-share from urgent-care cost-share; deterministically 1:1 with source_pbp_section. |
emergency_urgent_targeting | string | |
has_coinsurance | boolean | Boolean convenience flag: plan charges coinsurance for this benefit. Can be NULL on the oldest rows where the flag set wasn't derivable. |
has_copay | boolean | Boolean convenience flag: plan charges a flat copay. ~195K rows are copay-only (has_copay=true, has_coinsurance=false). NULL on the ~22K oldest rows where flags weren't derivable. |
has_deductible | boolean | Boolean: a deductible applies to this benefit. NULL-MEANS-SOMETHING: it is NULL for ALL years <=2016 (the deductible flag was not tracked/extractable then) and only populated true/false from report_year 2017 onward. Do not interpret a pre-2017 NULL as 'no deductible'. |
has_max_enrollee_oop | boolean | Boolean: a max enrollee out-of-pocket applies to this benefit. Almost always FALSE; a small number TRUE. |
max_visits_per_period | string | STRING holding a visit cap per period where one exists (float-in-string). Populated on ~78,013 rows; NULL otherwise. Distinct from the (always-null) limit_quantity family. |
supplemental_benefit_type | string | |
supplemental_benefit_type_code | string | |
worldwide_max_plan_benefit_yn | boolean | |
source_pbp_section | varchar(3) | CMS PBP section the row came from: 'B4A' (=emergency_room) or 'B4B' (=urgent_care). Deterministically redundant with emergency_urgent_sub_benefit (1:1). 3-char varchar. |
source_silver_table | varchar(56) | Constant = 'medicare_silver.pbp_section_b4_emerg_urgent'. The upstream silver table this view is built from; lineage pointer. |
lmi_authorities | string | Constant: pipe-delimited LMI authority document URLs (CY2026 PBP Service Category Descriptions PDF + Part C Bid Review Memorandum) used to define/validate this benefit category. Provenance/citation, identical on every row. |
source_url | string | CMS PBP PUF download URL for the year's release (e.g. .../pbp-benefits-2012.zip). 40 distinct URLs = 40 distinct source releases (one per year/quarter snapshot). Provenance of the raw file. |
sha256_content_hash | string | SHA-256 of the source release file content (40 distinct, 1:1 with source_url). Content-integrity / dedup fingerprint of the ingested PBP file. |
Query it
describe_data_source(source_fqn="medicare_semantic.vw_pbp_emergency_urgent") # the card, live query_substrate(sql="SELECT * FROM medicare_semantic.vw_pbp_emergency_urgent WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' AND emergency_urgent_sub_benefit = '<value>' LIMIT 100")
| Item | Value |
|---|---|
| Typed tools that read it | get_pbp_benefit |
| Identity key | contract_id,plan_id,segment_id |
| Join | how_to_join(source_fqn="medicare_semantic.vw_pbp_emergency_urgent") |
| Raw door | Athena (read-only via query_substrate): medicare_semantic.vw_pbp_emergency_urgent |
| Note | Cleaned PBP reasoning surface (categories/emergency_urgent/contract.yaml); raw is pbp_section_*. |
This page as markdown: /docs-md/data/medicare_semantic_vw_pbp_emergency_urgent.md · every page in one file: /llms-full.txt