Medicare Advantage, Part D, Medicaid

MA pbp section b7 health prof

medicare_silver.pbp_section_b7_health_prof·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)
Rows
N/A
Columns
315
History
2001 (benefit year; effective_period_start 2001-01-01) to 2026 (benefit year; effective_period_start 2026-01-01)
Card
yesgrain, traps, filters
Typed tools
1

What it is

  1. 1A CMS Medicare Advantage Plan Benefit Package (PBP) extract — Section B7 "Health Care Professional Services" — giving the member cost-sharing design (copay, coinsurance, deductible, prior-auth, referral, and benefit limits) that each MA / MA-PD plan charges for visits to doctors and other professionals.
  2. 2It is the official source-of-truth for "what does an MA plan charge a member to see a primary-care doctor, specialist, therapist, chiropractor, podiatrist, mental-health provider, etc." across every contract year 2001-2026.

Grain

KeyGrain
contract_idplan_idsegment_idreport_yearquarter
  1. 1One row per Medicare Advantage plan-segment per CMS quarterly PBP release.
  2. 2The minimal verified key is contract_id x plan_id x segment_id x report_year x quarter (193,488 distinct = exactly the 193,488 row count). report_year is the benefit/contract year the cost-shares apply to; quarter is which quarterly CMS PBP file vintage that snapshot came from (the same plan-year is re-published across multiple quarters, e.g.
  3. 32023 appears as Q1, Q2, Q3, and Q4).
  4. 4Within any single (report_year, quarter), distinct plans == row count, so there is exactly one row per plan-segment in each release.

How to read it

  1. 1Pin a single snapshot per plan-year before aggregating.
  2. 2Example — median primary-care vs specialist copay for 2026 HMO plans: SELECT approx_percentile(pbp_b7a_copay_amt_mc_max,0.5) AS pcp_copay, approx_percentile(pbp_b7d_copay_amt_mc_max,0.5) AS specialist_copay FROM medicare_silver.pbp_section_b7_health_prof WHERE report_year=2026 AND quarter=1 AND pbp_a_plan_type='01' AND pbp_b7a_copay_yn='1'.
  3. 3This returns PCP ~$0 and specialist ~$35, i.e. what a 2026 MA HMO member typically pays out-of-pocket to see a doctor.
  4. 4Join to other pbp_section_* tables on (contract_id, plan_id, segment_id, report_year, quarter) for full benefit design.

Traps

  1. 1GRAIN TRAP — quarter is part of the key, not a refresh. The SAME benefit year is re-published across multiple quarterly snapshots (e.g. 2023 appears as Q1,Q2,Q3,Q4; row counts drift 7752->7747->7751->7755). If you query a plan's PCP copay without pinning a quarter you will multi-count it ~2-4x. For 'the plan year' pick one quarter (e.g. Q1 = initial/as-bid, or MAX(quarter) for the latest correction). There is NO is_current / latest flag in this table.
  2. 2NO row-level hash and NO is_current: sha256_content_hash and source_url each have only 38 distinct values (one per release ZIP), and asserted_at is just the ingest date (2 values). None of these identify or dedupe a row — the only true row identity is contract_id x plan_id x segment_id x report_year x quarter.
  3. 3The profiler's reported grain is a bloated SUPERSET (24 columns incl. several *_maxplan_amt and observed_period). The real minimal key is 5 columns; observed_period (=effective_period_start always), bid_id (=concat of the 3 IDs, NULL pre-2010), and version (a bid-software number, not the snapshot id) are all functionally dependent and must NOT be added to the key.
  4. 4NULL vs 0.0 carries meaning: a 0.0 copay/coinsurance is a real $0 cost-share (PCP is frequently $0); a NULL means the benefit/sub-section was not offered or not reported (older years null whole sub-sections that didn't exist yet). _yn flags are '1'=Yes / '2'=No / NULL=not-applicable — never assume 0/1 boolean.
  5. 5Time coverage is gappy and quarter coverage is uneven: benefit years 2010 and 2011 are entirely missing; quarterly snapshots only start ~2018 (earlier years are Q1-only); and within recent years some quarters are absent (2020 has no Q3, 2024 has no Q2). Do not assume a continuous 4-quarter-per-year panel.
  6. 6Sub-sections are columns, not rows: B7a..B7k (primary care, chiropractic, podiatry, specialist, PT/OT, psychiatric, mental-health, substance-abuse, individual-psych, combined, additional) are encoded as ~430 wide columns per row, each prefixed pbp_b7<letter>_. This differs from long/normalized fact tables — to compare service categories you select different column families, not filter a category column. pbp_b7j_mc_bendesc_cats is a packed semicolon-delimited code list that must be string-parsed.
  7. 7Most amount columns come as min/max PAIRS (or single _amt with a _max ceiling for B7g/B7k) representing a cost-share RANGE within the benefit category, and many cost-shares are split by network/coverage tier suffix: _mc=Medicare-covered, _mcis=Medicare in-network/in-area, _mcgs=gap/out-of-area, _rc/_rf/_other/_cc=supplemental/routine. Pick the right suffix or you mix in-network and out-of-network dollars.

Columns (315)

ColumnTypeMeaning
contract_idstringCMS MA contract ID (e.g. H0022, R-prefix=regional PPO). 1,966 distinct. Part of the grain key.
plan_idstringPlan ID within the contract (3-char, e.g. '001'). 656 distinct. Identifies the specific plan benefit package. Part of grain.
segment_idstringPlan segment (geographic/benefit segment), '0' when unsegmented; up to 27 distinct. REQUIRED for the grain — dropping it collapses 193,488 to 183,933 rows (segmented plans exist).
versiondoubleCMS PBP bid software version number for the record (0-8+). NOT the snapshot identity and NOT equal to cms_vintage_sequence (they match in only ~11% of rows). Functionally dependent on the grain key — does not split rows.
report_yeardoubleBenefit/contract year the cost-shares apply to (2001-2026). Equals year(effective_period_start). Part of grain. NOTE: 2010 and 2011 are entirely absent from the data.
quarterdoubleWhich quarterly CMS PBP release (1-4) this snapshot came from. Part of grain. Earlier years are Q1-only (annual); quarterly snapshots layered on from ~2018. Some quarters are missing (e.g. 2020 has Q1/Q2/Q4 not Q3; 2024 has Q1/Q3/Q4 not Q2).
bid_idstringEquals contract_id||'_'||plan_id||'_'||segment_id when populated (e.g. 'H0022_001_0'); NULL for the 8,316 oldest rows (2001-2009 era). Fully derivable from the ID columns — NOT needed for grain.
orgtypestringCMS organization-type code. 01 dominates (171K rows, Local CCP/HMO-PPO); others: 08 (PDP/regional), 04, 11 (employer/EGWP), 06, 05, 02. Two-digit string.
pbp_a_ben_covstringBenefit-coverage scope flag from PBP Section A: '1'=most plans (188,955), '2'=4,230, NULL=303. Indicates the package's benefit-coverage category (e.g. standard vs reduced/segment-specific).
pbp_a_plan_typestringMA plan-type code (from Section A): 01=HMO (98K), 04=Local PPO (54K), 02=HMOPOS (19K), 20=Regional PPO, 09=PFFS, 31=MSA/other, 18, 48 etc. The most useful plan-design classifier.
pbp_b7a_coins_pct_mc_maxdouble
pbp_b7a_coins_pct_mc_mindouble
pbp_b7a_coins_ynstring
pbp_b7a_copay_amt_mc_maxdouble
pbp_b7a_copay_amt_mc_mindouble
pbp_b7a_copay_ynstring
pbp_b7a_ded_amtdouble
pbp_b7a_ded_ynstring
pbp_b7a_ia_nuc_coins_pct_maxdouble
pbp_b7a_ia_nuc_coins_pct_mindouble
pbp_b7a_ia_nuc_coins_ynstring
pbp_b7a_ia_nuc_copay_amt_maxdouble
pbp_b7a_ia_nuc_copay_amt_mindouble
pbp_b7a_ia_nuc_copay_ynstring
pbp_b7a_ia_nuc_ynstring
pbp_b7a_maxenr_amtdouble
pbp_b7a_maxenr_perstring
pbp_b7a_maxenr_per_dstring
pbp_b7a_maxenr_ynstring
pbp_b7b_addl_service_otherstring
pbp_b7b_authstring
pbp_b7b_auth_ynstring
pbp_b7b_bendesc_amostring
pbp_b7b_bendesc_amo_otherstring
pbp_b7b_bendesc_amo_rcstring
pbp_b7b_bendesc_ehcstring
pbp_b7b_bendesc_lim_otherstring
pbp_b7b_bendesc_lim_rcstring
pbp_b7b_bendesc_num_otherdouble
pbp_b7b_bendesc_num_rcdouble
pbp_b7b_bendesc_perstring
pbp_b7b_bendesc_per_otherstring
pbp_b7b_bendesc_per_other_dstring
pbp_b7b_bendesc_per_rcstring
pbp_b7b_bendesc_per_rc_dstring
pbp_b7b_bendesc_rcstring
pbp_b7b_bendesc_ynstring
pbp_b7b_coins_ehcstring
pbp_b7b_coins_pct_cc_maxdouble
pbp_b7b_coins_pct_cc_mindouble
pbp_b7b_coins_pct_mc_maxdouble
pbp_b7b_coins_pct_mc_mindouble
pbp_b7b_coins_pct_other_maxdouble
pbp_b7b_coins_pct_other_mindouble
pbp_b7b_coins_pct_rc_maxdouble
pbp_b7b_coins_pct_rc_mindouble
pbp_b7b_coins_ynstring
pbp_b7b_comb_ben_ehcstring
pbp_b7b_combined_benstring
pbp_b7b_copay_ehcstring
pbp_b7b_copay_mc_amt_maxdouble
pbp_b7b_copay_mc_amt_mindouble
pbp_b7b_copay_other_amt_maxdouble
pbp_b7b_copay_other_amt_mindouble
pbp_b7b_copay_rc_amt_maxdouble
pbp_b7b_copay_rc_amt_mindouble
pbp_b7b_copay_ynstring
pbp_b7b_ded_amtdouble
pbp_b7b_ded_ynstring
pbp_b7b_maxenr_amtdouble
pbp_b7b_maxenr_perstring
pbp_b7b_maxenr_per_dstring
pbp_b7b_maxenr_ynstring
pbp_b7b_maxplan_amtdouble
pbp_b7b_maxplan_perstring
pbp_b7b_maxplan_per_dstring
pbp_b7b_maxplan_ynstring
pbp_b7b_refer_ynstring
pbp_b7c_authstring
pbp_b7c_auth_ynstring
pbp_b7c_coins_pct_mcdouble
pbp_b7c_coins_pct_mc_maxdouble
pbp_b7c_coins_pct_mc_mindouble
pbp_b7c_coins_ynstring
pbp_b7c_copay_mc_amtdouble
pbp_b7c_copay_mc_amt_maxdouble
pbp_b7c_copay_mc_amt_mindouble
pbp_b7c_copay_ynstring
pbp_b7c_ded_amtdouble
pbp_b7c_ded_ynstring
pbp_b7c_maxenr_amtdouble
pbp_b7c_maxenr_perstring
pbp_b7c_maxenr_per_dstring
pbp_b7c_maxenr_ynstring
pbp_b7c_mdcr_cov_lmt_ynstring
pbp_b7c_mm_addl_service_other1string
pbp_b7c_mm_authstring
pbp_b7c_mm_auth_ynstring
pbp_b7c_mm_coins_pctdouble
pbp_b7c_mm_coins_pct_maxdouble
pbp_b7c_mm_coins_pct_mindouble
pbp_b7c_mm_coins_ynstring
pbp_b7c_mm_copay_amtdouble
pbp_b7c_mm_copay_amt_maxdouble
pbp_b7c_mm_copay_amt_mindouble
pbp_b7c_mm_copay_ynstring
pbp_b7c_mm_maxplan_amtdouble
pbp_b7c_mm_maxplan_perstring
pbp_b7c_mm_maxplan_per_dstring
pbp_b7c_mm_maxplan_ynstring
pbp_b7c_mm_nmc_ynstring
pbp_b7c_mm_refer_ynstring
pbp_b7c_refer_ynstring
pbp_b7d_authstring
pbp_b7d_auth_ynstring
pbp_b7d_coins_pct_mc_maxdouble
pbp_b7d_coins_pct_mc_mindouble
pbp_b7d_coins_ynstring
pbp_b7d_copay_amt_mc_maxdouble
pbp_b7d_copay_amt_mc_mindouble
pbp_b7d_copay_ynstring
pbp_b7d_ded_amtdouble
pbp_b7d_ded_ynstring
pbp_b7d_maxenr_amtdouble
pbp_b7d_maxenr_perstring
pbp_b7d_maxenr_per_dstring
pbp_b7d_maxenr_ynstring
pbp_b7d_refer_ynstring
pbp_b7e_authstring
pbp_b7e_auth_ynstring
pbp_b7e_coins_ehcstring
pbp_b7e_coins_mcgs_maxpctdouble
pbp_b7e_coins_mcgs_minpctdouble
pbp_b7e_coins_mcis_maxpctdouble
pbp_b7e_coins_mcis_minpctdouble
pbp_b7e_coins_ynstring
pbp_b7e_copay_ehcstring
pbp_b7e_copay_mcgs_maxamtdouble
pbp_b7e_copay_mcgs_minamtdouble
pbp_b7e_copay_mcis_maxamtdouble
pbp_b7e_copay_mcis_minamtdouble
pbp_b7e_copay_ynstring
pbp_b7e_ded_amtdouble
pbp_b7e_ded_ynstring
pbp_b7e_maxenr_amtdouble
pbp_b7e_maxenr_perstring
pbp_b7e_maxenr_per_dstring
pbp_b7e_maxenr_ynstring
pbp_b7e_refer_ynstring
pbp_b7f_authstring
pbp_b7f_auth_ynstring
pbp_b7f_bendecs_ynstring
pbp_b7f_bendesc_amo_rfstring
pbp_b7f_bendesc_amt_rfdouble
pbp_b7f_bendesc_lim_rfstring
pbp_b7f_bendesc_per_rfstring
pbp_b7f_bendesc_per_rf_dstring
pbp_b7f_bendesc_rfstring
pbp_b7f_bendesc_ynstring
pbp_b7f_coins_ehcstring
pbp_b7f_coins_pct_mc_maxdouble
pbp_b7f_coins_pct_mc_mindouble
pbp_b7f_coins_pct_rf_maxdouble
pbp_b7f_coins_pct_rf_mindouble
pbp_b7f_coins_ynstring
pbp_b7f_copay_ehcstring
pbp_b7f_copay_mc_amt_maxdouble
pbp_b7f_copay_mc_amt_mindouble
pbp_b7f_copay_rf_amt_maxdouble
pbp_b7f_copay_rf_amt_mindouble
pbp_b7f_copay_ynstring
pbp_b7f_ded_amtdouble
pbp_b7f_ded_ynstring
pbp_b7f_maxenr_amtdouble
pbp_b7f_maxenr_perstring
pbp_b7f_maxenr_per_dstring
pbp_b7f_maxenr_ynstring
pbp_b7f_maxplan_amtdouble
pbp_b7f_maxplan_perstring
pbp_b7f_maxplan_per_dstring
pbp_b7f_maxplan_ynstring
pbp_b7f_refer_ynstring
pbp_b7g_authstring
pbp_b7g_auth_ynstring
pbp_b7g_coins_max_pct_mcdouble
pbp_b7g_coins_pct_mcdouble
pbp_b7g_coins_ynstring
pbp_b7g_copay_mc_amtdouble
pbp_b7g_copay_mc_max_amtdouble
pbp_b7g_copay_ynstring
pbp_b7g_ded_amtdouble
pbp_b7g_ded_ynstring
pbp_b7g_maxenr_amtdouble
pbp_b7g_maxenr_perstring
pbp_b7g_maxenr_per_dstring
pbp_b7g_maxenr_ynstring
pbp_b7g_refer_ynstring
pbp_b7h_authstring
pbp_b7h_auth_ynstring
pbp_b7h_coins_ehcstring
pbp_b7h_coins_mcgs_maxpctdouble
pbp_b7h_coins_mcgs_minpctdouble
pbp_b7h_coins_mcis_maxpctdouble
pbp_b7h_coins_mcis_minpctdouble
pbp_b7h_coins_ynstring
pbp_b7h_copay_ehcstring
pbp_b7h_copay_mcgs_maxamtdouble
pbp_b7h_copay_mcgs_minamtdouble
pbp_b7h_copay_mcis_maxamtdouble
pbp_b7h_copay_mcis_minamtdouble
pbp_b7h_copay_ynstring
pbp_b7h_ded_amtdouble
pbp_b7h_ded_ynstring
pbp_b7h_maxenr_amtdouble
pbp_b7h_maxenr_perstring
pbp_b7h_maxenr_per_dstring
pbp_b7h_maxenr_ynstring
pbp_b7h_refer_ynstring
pbp_b7i_authstring
pbp_b7i_auth_ynstring
pbp_b7i_coins_pct_mcdouble
pbp_b7i_coins_pct_mc_maxdouble
pbp_b7i_coins_pct_mc_mindouble
pbp_b7i_coins_ynstring
pbp_b7i_copay_mc_amtdouble
pbp_b7i_copay_mc_amt_maxdouble
pbp_b7i_copay_mc_amt_mindouble
pbp_b7i_copay_ynstring
pbp_b7i_ded_amtdouble
pbp_b7i_ded_ynstring
pbp_b7i_maxenr_amtdouble
pbp_b7i_maxenr_perstring
pbp_b7i_maxenr_per_dstring
pbp_b7i_maxenr_ynstring
pbp_b7i_mdcr_cov_lmt_ynstring
pbp_b7i_mm_addl_service_other1string
pbp_b7i_mm_addl_service_other2string
pbp_b7i_mm_authstring
pbp_b7i_mm_auth_ynstring
pbp_b7i_mm_coins_other1_maxdouble
pbp_b7i_mm_coins_other1_mindouble
pbp_b7i_mm_coins_other2_maxdouble
pbp_b7i_mm_coins_other2_mindouble
pbp_b7i_mm_coins_servicesstring
pbp_b7i_mm_coins_ynstring
pbp_b7i_mm_copay_other1_maxdouble
pbp_b7i_mm_copay_other1_mindouble
pbp_b7i_mm_copay_other2_maxdouble
pbp_b7i_mm_copay_other2_mindouble
pbp_b7i_mm_copay_servicesstring
pbp_b7i_mm_copay_ynstring
pbp_b7i_mm_maxplan_amtdouble
pbp_b7i_mm_maxplan_perstring
pbp_b7i_mm_maxplan_per_dstring
pbp_b7i_mm_maxplan_ynstring
pbp_b7i_mm_nmc_ynstring
pbp_b7i_mm_refer_ynstring
pbp_b7i_mm_servicesstring
pbp_b7i_refer_ynstring
pbp_b7j_auth_ynstring
pbp_b7j_bendesc_ynstring
pbp_b7j_coins_pct_mc_maxdouble
pbp_b7j_coins_pct_mc_mindouble
pbp_b7j_coins_ynstring
pbp_b7j_copay_mc_amt_maxdouble
pbp_b7j_copay_mc_amt_mindouble
pbp_b7j_copay_ynstring
pbp_b7j_ded_amtdouble
pbp_b7j_ded_ynstring
pbp_b7j_maxenr_amtdouble
pbp_b7j_maxenr_perstring
pbp_b7j_maxenr_per_dstring
pbp_b7j_maxenr_ynstring
pbp_b7j_mc_bendesc_catsstring
pbp_b7j_refer_ynstring
pbp_b7k_auth_ynstring
pbp_b7k_coins_max_pct_mcdouble
pbp_b7k_coins_pct_mcdouble
pbp_b7k_coins_ynstring
pbp_b7k_copay_mc_amtdouble
pbp_b7k_copay_mc_max_amtdouble
pbp_b7k_copay_ynstring
pbp_b7k_ded_amtdouble
pbp_b7k_ded_ynstring
pbp_b7k_maxenr_amtdouble
pbp_b7k_maxenr_perstring
pbp_b7k_maxenr_per_dstring
pbp_b7k_maxenr_ynstring
pbp_b7k_refer_ynstring
observed_perioddateSnapshot/observation date = Jan 1 of report_year. REDUNDANT: equals effective_period_start for 100% of rows. Do not treat as an independent dimension.
asserted_atdateInternal ingest/processing date (2026-05-16 or 2026-05-20 only) — when Vlada parsed the file, NOT a CMS data date. Useless for time-series; ignore for analytics.
effective_period_startdateFirst day the benefit year is effective = Jan 1 of report_year (2001-01-01 .. 2026-01-01). The canonical time axis; periodicity is annual by benefit year.
effective_period_enddateLast day of the benefit year = Dec 31 of report_year. Always a full calendar year.
cms_vintage_sequenceintInteger encoding which quarterly CMS release this snapshot is (1=Q1, 2=Q2, 3=Q3, 4=Q4). Mirrors `quarter`. NOT equal to `version`.
parse_revisionintInternal parser revision number (1 or 2) for the extraction run. Provenance only.
parser_artifact_hashstringSHA-256 of the parser code/config used. Provenance; identical within a parse run.
source_urlstringCMS download URL of the source ZIP, e.g. https://www.cms.gov/files/zip/pbp-benefits-2022-quarter-2.zip. Exactly 38 distinct values = the 38 (year,quarter) releases ingested.
sha256_content_hashstringFILE-LEVEL hash of the source release, NOT a per-row hash — only 38 distinct values across 193,488 rows (one per release ZIP). Do NOT use it to dedupe or identify rows.
pbp_b7a_* (copay/coins/ded/maxenr + ia_nuc_*)Sub-section B7a = PRIMARY CARE PHYSICIAN services. _copay_amt_mc_min/_max = low/high end of the member copay range for Medicare-covered (_mc) PCP visits; _coins_pct_* = coinsurance %; _ded_* = deductible; _yn flags (1=Yes,2=No) gate whether each applies; ia_nuc_* = a PCP sub-benefit. VALIDATED: 2026 median PCP copay = $0 (range $0-$55).
pbp_b7b_* (copay/coins/ded + bendesc_* + maxplan_*)Sub-section B7b = CHIROPRACTIC services (Medicare-covered + supplemental). Carries the richest extra-benefit description block: _bendesc_* (limits/amounts/periods for supplemental coverage), _coins/_copay split by _mc (Medicare-covered) / _rc (routine-care/supplemental) / _other / _cc, plus _maxplan_* and _maxenr_* benefit-maximum caps. VALIDATED: 2026 copay seen at $20.
pbp_b7c_* (incl pbp_b7c_mm_*)Sub-section B7c = PODIATRY services. Standard copay/coins/ded/maxenr/auth/referral set for Medicare-covered podiatry; the _mm_ variant block = supplemental/routine (mandatory+optional) podiatry with its own copay/coins/maxplan and mdcr_cov_lmt_yn (Medicare-coverage-limit flag).
pbp_b7d_* (copay/coins/ded/maxenr/auth/refer)Sub-section B7d = OTHER HEALTH CARE PROFESSIONAL / SPECIALIST services. _copay_amt_mc_min/_max = specialist visit copay range. VALIDATED: 2026 median specialist copay ~$35 (vs $0 PCP) — confirms b7a=PCP, b7d=specialist.
pbp_b7e_* (coins/copay split mcis/mcgs, ded, maxenr)Sub-section B7e = PHYSICAL/OCCUPATIONAL THERAPY. Cost-share is split into mcis (Medicare-covered in-area/in-network) vs mcgs (gap/out-of-area) min/max amounts and pcts — e.g. copay_mcis_maxamt. VALIDATED: 2026 median PT copay ~$27.
pbp_b7f_* (copay/coins split mc/rf, bendesc_*, maxplan_*)Sub-section B7f = PSYCHIATRIC services. Cost-share split by _mc (Medicare-covered) vs _rf (referral/supplemental); _bendesc_* describes supplemental limits; _maxplan_*/_maxenr_* = benefit caps; auth/referral flags.
pbp_b7g_* (coins_pct_mc + coins_max_pct_mc, copay_mc_amt + copay_mc_max_amt, ded, maxenr)Sub-section B7g = PSYCHOLOGICAL / MENTAL HEALTH SPECIALTY services (point cost-share style: single _copay_mc_amt with a _copay_mc_max_amt ceiling rather than a min/max range pair).
pbp_b7h_* (coins/copay split mcis/mcgs, ded, maxenr)Sub-section B7h = OUTPATIENT SUBSTANCE-ABUSE / partial-hospitalization-style professional services, cost-share split mcis (in-network) vs mcgs (gap) like B7e.
pbp_b7i_* (copay/coins/ded/maxenr + pbp_b7i_mm_*)Sub-section B7i = INDIVIDUAL psychiatric/mental-health (Medicare-covered) PLUS the _mm_ block for supplemental services with up to two 'other' service tiers (coins_other1/other2, copay_other1/other2, services labels) and mdcr_cov_lmt_yn. VALIDATED: 2026 median copay ~$32.
pbp_b7j_* (copay/coins/ded/maxenr + pbp_b7j_mc_bendesc_cats)Sub-section B7j = a COMBINED / grouped professional-services cost-share. pbp_b7j_mc_bendesc_cats is a SEMICOLON-DELIMITED packed list of the other PBP benefit-category codes this grouping spans (e.g. '4b;7a;7d;7e1;7e2;7h1;7h2;9c1;9c2;'). Not atomic — must be parsed to know which services share this cost-share/limit.
pbp_b7k_* (coins_pct_mc + coins_max_pct_mc, copay_mc_amt + copay_mc_max_amt, ded, maxenr)Sub-section B7k = an ADDITIONAL professional-services group (point cost-share with a max ceiling, same shape as B7g). auth/referral/deductible/enrollee-max fields included.
*_yn (every sub-section)Yes/No applicability flag, encoded '1'=Yes, '2'=No, NULL=not applicable/not collected. Gates whether the adjacent copay/coins/ded/auth/referral applies. A NULL on a _yn is meaningful: the benefit detail was not reported for that sub-section/year (older years null many sub-sections that didn't exist yet).
*_amt / *_min / *_max (doubles)Dollar amounts (copay, deductible, benefit max) and the low/high bounds of a cost-share range. NULL when the corresponding _yn is No/null. A 0.0 is a real $0 cost-share (common for PCP) — distinct from NULL (not offered).
*_pct / *_minpct / *_maxpct (doubles)Coinsurance percentages (member share). Paired min/max give the % range.
*_per / *_per_d / *_maxenr_per[_d]Period code and its decoded text for limits/maximums (e.g. per-visit, per-year). _per = code, _per_d = human-readable decode. _maxenr_* = per-enrollee benefit maximum; _maxplan_* = per-plan benefit maximum.
*_auth / *_auth_yn / *_refer_ynUtilization-management flags: _auth_yn (1=prior authorization required), _refer_yn (1=referral required), _auth = free-text/coded auth detail. Per sub-section.
*_ehc (coins_ehc/copay_ehc/bendesc_ehc)Enhanced/equivalent-health-coverage code strings (e.g. '010','11','01') describing the cost-share structure variant; coded values from the PBP, not free numbers.

Query it

describe_data_source(source_fqn="medicare_silver.pbp_section_b7_health_prof")     # the card, live
query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_b7_health_prof WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_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_b7_health_prof")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_section_b7_health_prof
NoteGrain-governed; live in Glue / query_substrate. Source family pbp_benefits.

This page as markdown: /docs-md/data/medicare_silver_pbp_section_b7_health_prof.md · every page in one file: /llms-full.txt