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

  1. 1CMS Medicare Advantage Plan Benefit Package (PBP) Section C — out-of-network (OON) outpatient cost-sharing.
  2. 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.
  3. 3Sourced from CMS quarterly PBP-benefits ZIP releases (e.g. pbp-benefits-2020-quarter-2.zip).
  4. 4Applies to plan types that permit out-of-network use (Local PPO, Regional PPO, PFFS);
  5. 5HMOs barely appear.

Grain

KeyGrain
contract_idplan_idsegment_idpbp_c_oon_outpt_group_num_idreport_yearquarter
  1. 1One row per OON benefit cost-share group per plan per CMS snapshot.
  2. 2The MINIMAL verified-unique key is contract_id + plan_id + segment_id + pbp_c_oon_outpt_group_num_id + report_year + quarter (658,957 distinct = exactly the full row_count). version is functionally determined by these (adding it does not change the distinct count) because within any one (report_year, quarter) a given plan has exactly one version.
  3. 3A plan typically has SEVERAL group rows (group_num_id 1..196), each a distinct OON cost-share bundle (e.g. a 30% group, a Dental group, an Ambulance group).

How to read it

  1. 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.
  2. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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)

ColumnTypeMeaning
contract_idstringCMS MA contract ID (e.g. H0088). 492 distinct. Part of grain. Join key to plan/enrollment/Stars tables.
plan_idstringPlan ID within the contract (3-char, e.g. '001'). 655 distinct values overall (not unique alone). Part of grain.
segment_idstringPlan segment ('0' for non-segmented; up to 25 distinct). Part of grain. Most plans are segment '0'.
pbp_c_oon_outpt_group_num_idstringSequence 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_catsstringBenefit-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.
versiondoubleCMS 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_yeardoubleBenefit/contract year (double, 2007-2026). Maps 1:1 to effective_period_start/end. The primary time dimension. Part of grain.
quarterdoubleCMS 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_idstringComposite ID, 100% equal to contract_id||'_'||plan_id||'_'||segment_id (verified on all 658,957 rows). Fully redundant convenience key, carries no new information.
orgtypestringCMS 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_covstringBenefit-coverage scope flag from Section A. '1' = original-Medicare-covered scope (652K), '2' = supplemental/other (7K).
pbp_a_plan_typestringMA 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_catsstringSemicolon-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_catsstringSame 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_benstringBenefit-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_covstringCoinsurance-coverage qualifier code (string, ~98% null). Rare values 1,2,3,6 indicate special coverage handling; usually irrelevant.
pbp_c_oon_outpt_coins_max_pctdouble
pbp_c_oon_outpt_coins_min_pctdouble
pbp_c_oon_outpt_coins_ynstringDoes 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_amtdouble
pbp_c_oon_outpt_copay_min_amtdouble
pbp_c_oon_outpt_copay_ynstringDoes this OON group charge a flat copay? '2'=No (354K) is most common, '1'=Yes (291K), null (14K).
pbp_c_oon_outpt_cost_sharestringCost-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_maxdouble
pbp_c_oon_outpt_cs_coins_mindouble
pbp_c_oon_outpt_cs_coins_ynstring
pbp_c_oon_outpt_cs_copay_maxdouble
pbp_c_oon_outpt_cs_copay_mindouble
pbp_c_oon_outpt_cs_copay_ynstring
pbp_c_oon_outpt_ded_amtdoubleOON 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_ynstringDoes 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_lblstringPlan'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_amtdoubleMaximum 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_perstringPeriod 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_dstringFree-text/description companion to maxplan_per (period detail). Mostly null; populated alongside the per code.
pbp_c_oon_outpt_maxplan_ynstringIs 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_perioddateDate = effective_period_start on 100% of rows (always Jan 1 of report_year). Redundant date encoding of report_year.
asserted_atdatePipeline 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_startdate
effective_period_enddate
cms_vintage_sequenceintInteger lineage stamp ordering CMS source vintages within the pipeline (e.g. 2). Provenance, not a business field.
parse_revisionintInteger parser-revision number for the Vlada extraction (e.g. 2). Provenance/QA, not business data.
parser_artifact_hashstringSHA-256 of the parser artifact that produced the row. Reproducibility/lineage.
source_urlstringThe 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_hashstringSHA-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_pctOON 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_amtOON 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_maxSecondary/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_maxSecondary/tiered copay sub-structure. Also ~99.8% null. Same caveat as cs_coins_*.
effective_period_start / effective_period_endBenefit-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")
ItemValue
Typed tools that read itget_pbp_benefit
Identity keycontract_id
Joinhow_to_join(source_fqn="medicare_silver.pbp_section_c_oon")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_section_c_oon
NoteGrain-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