Medicare Advantage, Part D, Medicaid
MA pbp section c oon
medicare_silver.pbp_section_c_oon·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)Rows
N/A
Columns
50
History
2007 (report_year=2007, effective_period_start 2007-01-01) to 2026 (report_year=2026, effective_period_start 2026-01-01; only Q1 present so far, 192,364 rows across 20 bid versions)
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1CMS Medicare Advantage Plan Benefit Package (PBP) Section C — out-of-network (OON) outpatient cost-sharing.
- 2One row per OON benefit cost-share group within an MA plan, giving the member's out-of-network coinsurance %, copay $, deductible, and per-benefit maximum for outpatient services.
- 3Sourced from CMS quarterly PBP-benefits ZIP releases (e.g. pbp-benefits-2020-quarter-2.zip).
- 4Applies to plan types that permit out-of-network use (Local PPO, Regional PPO, PFFS);
- 5HMOs barely appear.
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idpbp_c_oon_outpt_group_num_idreport_yearquarter |
|
How to read it
- 1Get the 2024 out-of-network member cost-share for each PPO plan, de-duplicated across the quarterly republications: SELECT contract_id, plan_id, segment_id, pbp_c_oon_outpt_group_num_id, pbp_c_oon_outpt_grp_lbl, pbp_c_oon_outpt_coins_max_pct, pbp_c_oon_outpt_copay_max_amt FROM pbp_section_c_oon WHERE report_year=2024 AND quarter=(SELECT max(quarter) FROM pbp_section_c_oon WHERE report_year=2024) AND pbp_a_plan_type IN ('04','31') -- Local/Regional PPO.
- 2This answers 'what does a member pay out of network for outpatient services in each PPO plan', one row per OON cost-share group, without quarter-driven double counting.
Traps
- 1QUARTER IS A REPUBLICATION SNAPSHOT, NOT A KEY YOU CAN SUM OVER. For 2018-2020 the same annual bid was republished in Q1-Q4 with ~identical values (of 13,082 multi-quarter plan+group keys in 2020, only 13 had any coinsurance change). A query like WHERE report_year=2020 without pinning one quarter double/triple-counts every plan. Pick a single quarter (e.g. the max quarter per plan-year), or dedup on the 6-col grain minus quarter, before aggregating. Note row counts per year reflect this: 2026 is huge (192K) because it has many bid VERSIONS in Q1, while 2018-2020 are inflated by 4x quarterly republication.
- 2version IS in the grain via year+quarter but is a RED HERRING as a standalone dedup axis. Within one (report_year, quarter) each plan has exactly ONE version, and different versions hold different plans — version is the CMS bid-submission counter, not competing snapshots of one plan. Do NOT filter to 'version=latest' to dedup a plan; that would drop most plans entirely.
- 3Many money/flag columns are NULL-because-not-applicable, not missing data. ded_amt is null unless ded_yn='1' (only 1,637 rows). maxplan_amt/maxplan_per are null unless maxplan_yn='1' (34K rows, mostly supplemental benefits). The entire cs_* family and cost_share/coins_cov are ~99% null — they exist only for a tiny set of plans with secondary/tiered structures. coins_*pct is null where coins_yn!='1', copay_*amt null where copay_yn!='1'. Always gate on the matching _yn flag before reading the amount.
- 4bid_id is 100% derivable (contract_id||'_'||plan_id||'_'||segment_id) and observed_period/effective_period_start/effective_period_end are 100% derivable from report_year — none add information; do not treat them as independent dimensions or join keys.
- 5This is the OUT-OF-NETWORK table (PPO/PFFS only). Sibling tables in medicare_silver are pbp_section_c (main Section C / in-network outpatient benefits) and pbp_section_c_pos (point-of-service). To compare in- vs out-of-network member cost you must join this to pbp_section_c on contract_id+plan_id+segment_id+report_year(+quarter). HMOs (plan_type 01) are nearly absent here because they generally cover no out-of-network outpatient benefit.
- 6Benefit applicability lives in semicolon-delimited code LISTS (pbp_c_oon_out_mc_bendesc_cats for Medicare-covered, _nmc_ for supplemental), using the CMS PBP benefit-category code system (e.g. 10a1=ambulance, 15=Part B drugs, 17a=eye exam). You cannot filter to 'ambulance OON cost' by a single column — you must string-match the category code within these list fields. grp_lbl is free text (plan-chosen, e.g. '30%', 'Dental') and is not a reliable controlled vocabulary.
Columns (50)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS MA contract ID (e.g. H0088). 492 distinct. Part of grain. Join key to plan/enrollment/Stars tables. |
plan_id | string | Plan ID within the contract (3-char, e.g. '001'). 655 distinct values overall (not unique alone). Part of grain. |
segment_id | string | Plan segment ('0' for non-segmented; up to 25 distinct). Part of grain. Most plans are segment '0'. |
pbp_c_oon_outpt_group_num_id | string | Sequence number (string '1'..'196', 122 distinct) of the OON outpatient cost-share group within the plan. THIS is what makes a plan have many rows. Part of grain. Not globally meaningful — only orders groups inside one plan. |
pbp_c_oon_outpt_bendesc_cats | string | Benefit-description category field; observed empty-string '' or null in nearly all rows — effectively unused/legacy. Real category content lives in the mc/nmc variants below. |
version | double | CMS bid/submission version for that plan-year (double, 1..26). Functionally determined by the grain (one version per plan per year+quarter), so NOT needed in the key. Higher versions = later bid submissions; row counts taper off at high versions. Different versions within a (year,quarter) hold DIFFERENT plans, not competing snapshots of the same plan. |
report_year | double | Benefit/contract year (double, 2007-2026). Maps 1:1 to effective_period_start/end. The primary time dimension. Part of grain. |
quarter | double | CMS release quarter (double, 1-4). Part of grain BUT a republication-snapshot axis: 2018-2020 republished the same annual bid in Q1-Q4 (data is ~identical across quarters); 2007-2017 and 2021+ are largely Q1-only. See gotchas — summing across quarters double/quadruple-counts plans. |
bid_id | string | Composite ID, 100% equal to contract_id||'_'||plan_id||'_'||segment_id (verified on all 658,957 rows). Fully redundant convenience key, carries no new information. |
orgtype | string | CMS organization type code (string). 01=Local CCP dominates (608K); 11=Regional PPO area, 04=PFFS, plus rare 05/14. Correlates with pbp_a_plan_type. |
pbp_a_ben_cov | string | Benefit-coverage scope flag from Section A. '1' = original-Medicare-covered scope (652K), '2' = supplemental/other (7K). |
pbp_a_plan_type | string | MA plan type code. 04=Local PPO (605K), 31=Regional PPO (30K), 09=PFFS (21K), 01=HMO (rare, 2.7K), etc. These are exactly the plan types that allow out-of-network use — HMOs barely appear because they generally have no OON benefit. |
pbp_c_oon_out_mc_bendesc_cats | string | Semicolon-delimited list of Medicare-covered PBP benefit-category codes this OON group applies to (e.g. '10a1;10a2'=ambulance, '15'=Part B drugs, '17a'=eye exam, '3-1..8b'=outpatient hospital/surgery). The benefit map for the group. |
pbp_c_oon_out_nmc_bendesc_cats | string | Same code system but for NON-Medicare-covered (supplemental) benefit categories the group covers (e.g. '9d_2','13c','14b'). Often null when the group is Medicare-covered only. |
pbp_c_oon_outpt_bendesc_ben | string | Benefit-type code for the group: '01' (Medicare-covered, 377K) most common, '10'/'11' (supplemental/optional benefit) next; ~42K null. Distinguishes a Medicare-covered OON group from a supplemental one. |
pbp_c_oon_outpt_coins_cov | string | Coinsurance-coverage qualifier code (string, ~98% null). Rare values 1,2,3,6 indicate special coverage handling; usually irrelevant. |
pbp_c_oon_outpt_coins_max_pct | double | |
pbp_c_oon_outpt_coins_min_pct | double | |
pbp_c_oon_outpt_coins_yn | string | Does this OON group charge coinsurance? '1'=Yes (338K), '2'=No (307K), null (14K). CMS Y/N convention 1=Yes 2=No. |
pbp_c_oon_outpt_copay_max_amt | double | |
pbp_c_oon_outpt_copay_min_amt | double | |
pbp_c_oon_outpt_copay_yn | string | Does this OON group charge a flat copay? '2'=No (354K) is most common, '1'=Yes (291K), null (14K). |
pbp_c_oon_outpt_cost_share | string | Cost-share structure type code (string, ~95% null). Sparse values 1/2/3 flag plans with a special/secondary cost-share arrangement; usually null. |
pbp_c_oon_outpt_cs_coins_max | double | |
pbp_c_oon_outpt_cs_coins_min | double | |
pbp_c_oon_outpt_cs_coins_yn | string | |
pbp_c_oon_outpt_cs_copay_max | double | |
pbp_c_oon_outpt_cs_copay_min | double | |
pbp_c_oon_outpt_cs_copay_yn | string | |
pbp_c_oon_outpt_ded_amt | double | OON deductible amount (double, $0-$5,000, median $500) — meaningful only on the ~1,637 rows where ded_yn='1', else null. |
pbp_c_oon_outpt_ded_yn | string | Does an OON deductible apply to this group? Overwhelmingly '2'=No (643K); '1'=Yes only 1,637 rows; null 14K. OON deductibles are rare at the group level. |
pbp_c_oon_outpt_grp_lbl | string | Plan's free-text label for the cost-share group (e.g. '30%', '$0 copay', 'Dental', 'Ambulance', 'Group 1', 'OTC', 'Fitness'). Heterogeneous, ~17% null. Human-readable name, not a controlled code. |
pbp_c_oon_outpt_maxplan_amt | double | Maximum plan benefit / coverage cap dollar amount (double, $0-$7,500, median ~$74) — meaningful only on the 34K rows where maxplan_yn='1' (typically supplemental benefits like OTC, dental, hearing-aid allowances). |
pbp_c_oon_outpt_maxplan_per | string | Period code for the maximum (string 1-7; 5 and 3 most common). ~97% null — only set when maxplan_yn='1'. Encodes per-year/per-visit/etc. cadence of the cap. |
pbp_c_oon_outpt_maxplan_per_d | string | Free-text/description companion to maxplan_per (period detail). Mostly null; populated alongside the per code. |
pbp_c_oon_outpt_maxplan_yn | string | Is there a benefit maximum (plan coverage cap) on this OON group? '2'=No (420K), null (205K), '1'=Yes (34K). When null, no max concept applies to that benefit type. |
observed_period | date | Date = effective_period_start on 100% of rows (always Jan 1 of report_year). Redundant date encoding of report_year. |
asserted_at | date | Pipeline ingestion/parse-batch date (only 2 values: 2026-05-16 and 2026-05-20). NOT a business date — when Vlada loaded this silver table, used for lineage. |
effective_period_start | date | |
effective_period_end | date | |
cms_vintage_sequence | int | Integer lineage stamp ordering CMS source vintages within the pipeline (e.g. 2). Provenance, not a business field. |
parse_revision | int | Integer parser-revision number for the Vlada extraction (e.g. 2). Provenance/QA, not business data. |
parser_artifact_hash | string | SHA-256 of the parser artifact that produced the row. Reproducibility/lineage. |
source_url | string | The CMS source ZIP this row came from (e.g. https://www.cms.gov/files/zip/pbp-benefits-2020-quarter-2.zip). Direct provenance to the official file. |
sha256_content_hash | string | SHA-256 content hash of the source payload for integrity verification. Lineage/dedup. |
pbp_c_oon_outpt_coins_min_pct / pbp_c_oon_outpt_coins_max_pct | OON coinsurance percentage the member pays (double, 0-100). Median max ~32%. min=max for a fixed rate; they differ when the group spans a range. Populated only where coins_yn='1'. | |
pbp_c_oon_outpt_copay_min_amt / pbp_c_oon_outpt_copay_max_amt | OON copay dollar amount the member pays (double, $0-$5,000). Median max ~$41. Populated where copay_yn='1'. min=max for a fixed copay. | |
pbp_c_oon_outpt_cs_coins_yn / cs_coins_min / cs_coins_max | Secondary/tiered coinsurance sub-structure (the 'cs_' prefix). ~99.8% null — populated on only ~1,300 rows that have a layered cost-share. Ignore unless cost_share is set. | |
pbp_c_oon_outpt_cs_copay_yn / cs_copay_min / cs_copay_max | Secondary/tiered copay sub-structure. Also ~99.8% null. Same caveat as cs_coins_*. | |
effective_period_start / effective_period_end | Benefit-year boundaries, always Jan 1 - Dec 31 of report_year. Derived 1:1 from report_year; carry no extra information. |
Query it
describe_data_source(source_fqn="medicare_silver.pbp_section_c_oon") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_c_oon WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND pbp_c_oon_outpt_group_num_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' LIMIT 100")
| Item | Value |
|---|---|
| Typed tools that read it | get_pbp_benefit |
| Identity key | contract_id |
| Join | how_to_join(source_fqn="medicare_silver.pbp_section_c_oon") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.pbp_section_c_oon |
| Note | Grain-governed; live in Glue / query_substrate. Source family pbp_benefits. |
This page as markdown: /docs-md/data/medicare_silver_pbp_section_c_oon.md · every page in one file: /llms-full.txt