# MA pbp section b7 health prof

`medicare_silver.pbp_section_b7_health_prof` · Medicare Advantage, Part D, Medicaid · status partial

Section B7: Health professional services (PCP/specialist) cost-share. Wide schema. Coverage: All years.

**Grain.** One row per Medicare Advantage plan-segment per CMS quarterly PBP release. The 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. 2023 appears as Q1, Q2, Q3, and Q4). Within any single (report_year, quarter), distinct plans == row count, so there is exactly one row per plan-segment in each release.

**How to use it.** Pin a single snapshot per plan-year before aggregating. Example — 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'. This returns PCP ~$0 and specialist ~$35, i.e. what a 2026 MA HMO member typically pays out-of-pocket to see a doctor. Join to other pbp_section_* tables on (contract_id, plan_id, segment_id, report_year, quarter) for full benefit design.

**Traps.**
- GRAIN 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.
- NO 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.
- The 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.
- NULL 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.
- Time 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.
- Sub-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.
- Most 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.

| column | type | meaning |
|---|---|---|
| contract_id | string | CMS MA contract ID (e.g. H0022, R-prefix=regional PPO). 1,966 distinct. Part of the grain key. |
| plan_id | string | Plan ID within the contract (3-char, e.g. '001'). 656 distinct. Identifies the specific plan benefit package. Part of grain. |
| segment_id | string | Plan 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). |
| version | double | CMS 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_year | double | Benefit/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. |
| quarter | double | Which 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_id | string | Equals 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. |
| orgtype | string | CMS 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_cov | string | Benefit-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_type | string | MA 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_max | double |  |
| pbp_b7a_coins_pct_mc_min | double |  |
| pbp_b7a_coins_yn | string |  |
| pbp_b7a_copay_amt_mc_max | double |  |
| pbp_b7a_copay_amt_mc_min | double |  |
| pbp_b7a_copay_yn | string |  |
| pbp_b7a_ded_amt | double |  |
| pbp_b7a_ded_yn | string |  |
| pbp_b7a_ia_nuc_coins_pct_max | double |  |
| pbp_b7a_ia_nuc_coins_pct_min | double |  |
| pbp_b7a_ia_nuc_coins_yn | string |  |
| pbp_b7a_ia_nuc_copay_amt_max | double |  |
| pbp_b7a_ia_nuc_copay_amt_min | double |  |
| pbp_b7a_ia_nuc_copay_yn | string |  |
| pbp_b7a_ia_nuc_yn | string |  |
| pbp_b7a_maxenr_amt | double |  |
| pbp_b7a_maxenr_per | string |  |
| pbp_b7a_maxenr_per_d | string |  |
| pbp_b7a_maxenr_yn | string |  |
| pbp_b7b_addl_service_other | string |  |
| pbp_b7b_auth | string |  |
| pbp_b7b_auth_yn | string |  |
| pbp_b7b_bendesc_amo | string |  |
| pbp_b7b_bendesc_amo_other | string |  |
| pbp_b7b_bendesc_amo_rc | string |  |
| pbp_b7b_bendesc_ehc | string |  |
| pbp_b7b_bendesc_lim_other | string |  |
| pbp_b7b_bendesc_lim_rc | string |  |
| pbp_b7b_bendesc_num_other | double |  |
| pbp_b7b_bendesc_num_rc | double |  |
| pbp_b7b_bendesc_per | string |  |
| pbp_b7b_bendesc_per_other | string |  |
| pbp_b7b_bendesc_per_other_d | string |  |
| pbp_b7b_bendesc_per_rc | string |  |
| pbp_b7b_bendesc_per_rc_d | string |  |
| pbp_b7b_bendesc_rc | string |  |
| pbp_b7b_bendesc_yn | string |  |
| pbp_b7b_coins_ehc | string |  |
| pbp_b7b_coins_pct_cc_max | double |  |
| pbp_b7b_coins_pct_cc_min | double |  |
| pbp_b7b_coins_pct_mc_max | double |  |
| pbp_b7b_coins_pct_mc_min | double |  |
| pbp_b7b_coins_pct_other_max | double |  |
| pbp_b7b_coins_pct_other_min | double |  |
| pbp_b7b_coins_pct_rc_max | double |  |
| pbp_b7b_coins_pct_rc_min | double |  |
| pbp_b7b_coins_yn | string |  |
| pbp_b7b_comb_ben_ehc | string |  |
| pbp_b7b_combined_ben | string |  |
| pbp_b7b_copay_ehc | string |  |
| pbp_b7b_copay_mc_amt_max | double |  |
| pbp_b7b_copay_mc_amt_min | double |  |
| pbp_b7b_copay_other_amt_max | double |  |
| pbp_b7b_copay_other_amt_min | double |  |
| pbp_b7b_copay_rc_amt_max | double |  |
| pbp_b7b_copay_rc_amt_min | double |  |
| pbp_b7b_copay_yn | string |  |
| pbp_b7b_ded_amt | double |  |
| pbp_b7b_ded_yn | string |  |
| pbp_b7b_maxenr_amt | double |  |
| pbp_b7b_maxenr_per | string |  |
| pbp_b7b_maxenr_per_d | string |  |
| pbp_b7b_maxenr_yn | string |  |
| pbp_b7b_maxplan_amt | double |  |
| pbp_b7b_maxplan_per | string |  |
| pbp_b7b_maxplan_per_d | string |  |
| pbp_b7b_maxplan_yn | string |  |
| pbp_b7b_refer_yn | string |  |
| pbp_b7c_auth | string |  |
| pbp_b7c_auth_yn | string |  |
| pbp_b7c_coins_pct_mc | double |  |
| pbp_b7c_coins_pct_mc_max | double |  |
| pbp_b7c_coins_pct_mc_min | double |  |
| pbp_b7c_coins_yn | string |  |
| pbp_b7c_copay_mc_amt | double |  |
| pbp_b7c_copay_mc_amt_max | double |  |
| pbp_b7c_copay_mc_amt_min | double |  |
| pbp_b7c_copay_yn | string |  |
| pbp_b7c_ded_amt | double |  |
| pbp_b7c_ded_yn | string |  |
| pbp_b7c_maxenr_amt | double |  |
| pbp_b7c_maxenr_per | string |  |
| pbp_b7c_maxenr_per_d | string |  |
| pbp_b7c_maxenr_yn | string |  |
| pbp_b7c_mdcr_cov_lmt_yn | string |  |
| pbp_b7c_mm_addl_service_other1 | string |  |
| pbp_b7c_mm_auth | string |  |
| pbp_b7c_mm_auth_yn | string |  |
| pbp_b7c_mm_coins_pct | double |  |
| pbp_b7c_mm_coins_pct_max | double |  |
| pbp_b7c_mm_coins_pct_min | double |  |
| pbp_b7c_mm_coins_yn | string |  |
| pbp_b7c_mm_copay_amt | double |  |
| pbp_b7c_mm_copay_amt_max | double |  |
| pbp_b7c_mm_copay_amt_min | double |  |
| pbp_b7c_mm_copay_yn | string |  |
| pbp_b7c_mm_maxplan_amt | double |  |
| pbp_b7c_mm_maxplan_per | string |  |
| pbp_b7c_mm_maxplan_per_d | string |  |
| pbp_b7c_mm_maxplan_yn | string |  |
| pbp_b7c_mm_nmc_yn | string |  |
| pbp_b7c_mm_refer_yn | string |  |
| pbp_b7c_refer_yn | string |  |
| pbp_b7d_auth | string |  |
| pbp_b7d_auth_yn | string |  |
| pbp_b7d_coins_pct_mc_max | double |  |
| pbp_b7d_coins_pct_mc_min | double |  |
| pbp_b7d_coins_yn | string |  |
| pbp_b7d_copay_amt_mc_max | double |  |
| pbp_b7d_copay_amt_mc_min | double |  |
| pbp_b7d_copay_yn | string |  |
| pbp_b7d_ded_amt | double |  |
| pbp_b7d_ded_yn | string |  |
| pbp_b7d_maxenr_amt | double |  |
| pbp_b7d_maxenr_per | string |  |
| pbp_b7d_maxenr_per_d | string |  |
| pbp_b7d_maxenr_yn | string |  |
| pbp_b7d_refer_yn | string |  |
| pbp_b7e_auth | string |  |
| pbp_b7e_auth_yn | string |  |
| pbp_b7e_coins_ehc | string |  |
| pbp_b7e_coins_mcgs_maxpct | double |  |
| pbp_b7e_coins_mcgs_minpct | double |  |
| pbp_b7e_coins_mcis_maxpct | double |  |
| pbp_b7e_coins_mcis_minpct | double |  |
| pbp_b7e_coins_yn | string |  |
| pbp_b7e_copay_ehc | string |  |
| pbp_b7e_copay_mcgs_maxamt | double |  |
| pbp_b7e_copay_mcgs_minamt | double |  |
| pbp_b7e_copay_mcis_maxamt | double |  |
| pbp_b7e_copay_mcis_minamt | double |  |
| pbp_b7e_copay_yn | string |  |
| pbp_b7e_ded_amt | double |  |
| pbp_b7e_ded_yn | string |  |
| pbp_b7e_maxenr_amt | double |  |
| pbp_b7e_maxenr_per | string |  |
| pbp_b7e_maxenr_per_d | string |  |
| pbp_b7e_maxenr_yn | string |  |
| pbp_b7e_refer_yn | string |  |
| pbp_b7f_auth | string |  |
| pbp_b7f_auth_yn | string |  |
| pbp_b7f_bendecs_yn | string |  |
| pbp_b7f_bendesc_amo_rf | string |  |
| pbp_b7f_bendesc_amt_rf | double |  |
| pbp_b7f_bendesc_lim_rf | string |  |
| pbp_b7f_bendesc_per_rf | string |  |
| pbp_b7f_bendesc_per_rf_d | string |  |
| pbp_b7f_bendesc_rf | string |  |
| pbp_b7f_bendesc_yn | string |  |
| pbp_b7f_coins_ehc | string |  |
| pbp_b7f_coins_pct_mc_max | double |  |
| pbp_b7f_coins_pct_mc_min | double |  |
| pbp_b7f_coins_pct_rf_max | double |  |
| pbp_b7f_coins_pct_rf_min | double |  |
| pbp_b7f_coins_yn | string |  |
| pbp_b7f_copay_ehc | string |  |
| pbp_b7f_copay_mc_amt_max | double |  |
| pbp_b7f_copay_mc_amt_min | double |  |
| pbp_b7f_copay_rf_amt_max | double |  |
| pbp_b7f_copay_rf_amt_min | double |  |
| pbp_b7f_copay_yn | string |  |
| pbp_b7f_ded_amt | double |  |
| pbp_b7f_ded_yn | string |  |
| pbp_b7f_maxenr_amt | double |  |
| pbp_b7f_maxenr_per | string |  |
| pbp_b7f_maxenr_per_d | string |  |
| pbp_b7f_maxenr_yn | string |  |
| pbp_b7f_maxplan_amt | double |  |
| pbp_b7f_maxplan_per | string |  |
| pbp_b7f_maxplan_per_d | string |  |
| pbp_b7f_maxplan_yn | string |  |
| pbp_b7f_refer_yn | string |  |
| pbp_b7g_auth | string |  |
| pbp_b7g_auth_yn | string |  |
| pbp_b7g_coins_max_pct_mc | double |  |
| pbp_b7g_coins_pct_mc | double |  |
| pbp_b7g_coins_yn | string |  |
| pbp_b7g_copay_mc_amt | double |  |
| pbp_b7g_copay_mc_max_amt | double |  |
| pbp_b7g_copay_yn | string |  |
| pbp_b7g_ded_amt | double |  |
| pbp_b7g_ded_yn | string |  |
| pbp_b7g_maxenr_amt | double |  |
| pbp_b7g_maxenr_per | string |  |
| pbp_b7g_maxenr_per_d | string |  |
| pbp_b7g_maxenr_yn | string |  |
| pbp_b7g_refer_yn | string |  |
| pbp_b7h_auth | string |  |
| pbp_b7h_auth_yn | string |  |
| pbp_b7h_coins_ehc | string |  |
| pbp_b7h_coins_mcgs_maxpct | double |  |
| pbp_b7h_coins_mcgs_minpct | double |  |
| pbp_b7h_coins_mcis_maxpct | double |  |
| pbp_b7h_coins_mcis_minpct | double |  |
| pbp_b7h_coins_yn | string |  |
| pbp_b7h_copay_ehc | string |  |
| pbp_b7h_copay_mcgs_maxamt | double |  |
| pbp_b7h_copay_mcgs_minamt | double |  |
| pbp_b7h_copay_mcis_maxamt | double |  |
| pbp_b7h_copay_mcis_minamt | double |  |
| pbp_b7h_copay_yn | string |  |
| pbp_b7h_ded_amt | double |  |
| pbp_b7h_ded_yn | string |  |
| pbp_b7h_maxenr_amt | double |  |
| pbp_b7h_maxenr_per | string |  |
| pbp_b7h_maxenr_per_d | string |  |
| pbp_b7h_maxenr_yn | string |  |
| pbp_b7h_refer_yn | string |  |
| pbp_b7i_auth | string |  |
| pbp_b7i_auth_yn | string |  |
| pbp_b7i_coins_pct_mc | double |  |
| pbp_b7i_coins_pct_mc_max | double |  |
| pbp_b7i_coins_pct_mc_min | double |  |
| pbp_b7i_coins_yn | string |  |
| pbp_b7i_copay_mc_amt | double |  |
| pbp_b7i_copay_mc_amt_max | double |  |
| pbp_b7i_copay_mc_amt_min | double |  |
| pbp_b7i_copay_yn | string |  |
| pbp_b7i_ded_amt | double |  |
| pbp_b7i_ded_yn | string |  |
| pbp_b7i_maxenr_amt | double |  |
| pbp_b7i_maxenr_per | string |  |
| pbp_b7i_maxenr_per_d | string |  |
| pbp_b7i_maxenr_yn | string |  |
| pbp_b7i_mdcr_cov_lmt_yn | string |  |
| pbp_b7i_mm_addl_service_other1 | string |  |
| pbp_b7i_mm_addl_service_other2 | string |  |
| pbp_b7i_mm_auth | string |  |
| pbp_b7i_mm_auth_yn | string |  |
| pbp_b7i_mm_coins_other1_max | double |  |
| pbp_b7i_mm_coins_other1_min | double |  |
| pbp_b7i_mm_coins_other2_max | double |  |
| pbp_b7i_mm_coins_other2_min | double |  |
| pbp_b7i_mm_coins_services | string |  |
| pbp_b7i_mm_coins_yn | string |  |
| pbp_b7i_mm_copay_other1_max | double |  |
| pbp_b7i_mm_copay_other1_min | double |  |
| pbp_b7i_mm_copay_other2_max | double |  |
| pbp_b7i_mm_copay_other2_min | double |  |
| pbp_b7i_mm_copay_services | string |  |
| pbp_b7i_mm_copay_yn | string |  |
| pbp_b7i_mm_maxplan_amt | double |  |
| pbp_b7i_mm_maxplan_per | string |  |
| pbp_b7i_mm_maxplan_per_d | string |  |
| pbp_b7i_mm_maxplan_yn | string |  |
| pbp_b7i_mm_nmc_yn | string |  |
| pbp_b7i_mm_refer_yn | string |  |
| pbp_b7i_mm_services | string |  |
| pbp_b7i_refer_yn | string |  |
| pbp_b7j_auth_yn | string |  |
| pbp_b7j_bendesc_yn | string |  |
| pbp_b7j_coins_pct_mc_max | double |  |
| pbp_b7j_coins_pct_mc_min | double |  |
| pbp_b7j_coins_yn | string |  |
| pbp_b7j_copay_mc_amt_max | double |  |
| pbp_b7j_copay_mc_amt_min | double |  |
| pbp_b7j_copay_yn | string |  |
| pbp_b7j_ded_amt | double |  |
| pbp_b7j_ded_yn | string |  |
| pbp_b7j_maxenr_amt | double |  |
| pbp_b7j_maxenr_per | string |  |
| pbp_b7j_maxenr_per_d | string |  |
| pbp_b7j_maxenr_yn | string |  |
| pbp_b7j_mc_bendesc_cats | string |  |
| pbp_b7j_refer_yn | string |  |
| pbp_b7k_auth_yn | string |  |
| pbp_b7k_coins_max_pct_mc | double |  |
| pbp_b7k_coins_pct_mc | double |  |
| pbp_b7k_coins_yn | string |  |
| pbp_b7k_copay_mc_amt | double |  |
| pbp_b7k_copay_mc_max_amt | double |  |
| pbp_b7k_copay_yn | string |  |
| pbp_b7k_ded_amt | double |  |
| pbp_b7k_ded_yn | string |  |
| pbp_b7k_maxenr_amt | double |  |
| pbp_b7k_maxenr_per | string |  |
| pbp_b7k_maxenr_per_d | string |  |
| pbp_b7k_maxenr_yn | string |  |
| pbp_b7k_refer_yn | string |  |
| observed_period | date | Snapshot/observation date = Jan 1 of report_year. REDUNDANT: equals effective_period_start for 100% of rows. Do not treat as an independent dimension. |
| asserted_at | date | Internal 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_start | date | First 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_end | date | Last day of the benefit year = Dec 31 of report_year. Always a full calendar year. |
| cms_vintage_sequence | int | Integer encoding which quarterly CMS release this snapshot is (1=Q1, 2=Q2, 3=Q3, 4=Q4). Mirrors `quarter`. NOT equal to `version`. |
| parse_revision | int | Internal parser revision number (1 or 2) for the extraction run. Provenance only. |
| parser_artifact_hash | string | SHA-256 of the parser code/config used. Provenance; identical within a parse run. |
| source_url | string | CMS 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_hash | string | FILE-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_yn |  | Utilization-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. |

Tools that read it: get_pbp_benefit

Query it: `query_substrate` with `SELECT ... FROM medicare_silver.pbp_section_b7_health_prof WHERE ... LIMIT 100`; read `describe_data_source("medicare_silver.pbp_section_b7_health_prof")` first.
