Medicare Advantage, Part D, Medicaid
PBP clinical diagnostic therapeutic (cleaned view)
medicare_semantic.vw_pbp_clinical_diagnostic_therapeutic·live·semantic_view·annualRows
N/A
Columns
64
History
2018 (report_year) to 2026 (report_year; latest snapshot 2026 Q1)
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1A Medicare Advantage Plan Benefit Package (PBP) semantic view giving the member cost-sharing (copay/coinsurance), prior-auth, and referral terms each MA plan files with CMS for clinical diagnostic and therapeutic services (PBP Section B8: complex imaging, diagnostic radiology, therapeutic radiation, lab, basic diagnostic imaging).
- 2It is a benefit-design reference, not a price or paid-claims table.
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idreport_yearquartercdt_sub_benefit |
|
How to read it
- 1To get the current in-network cost share an MA plan charges for MRI/CT (complex imaging) in 2026: SELECT contract_id, plan_id, segment_id, cost_share_string, copay_amount_min, copay_amount_max, coinsurance_pct, auth_required FROM medicare_semantic.vw_pbp_clinical_diagnostic_therapeutic WHERE report_year=2026 AND cdt_sub_benefit='complex_imaging'.
- 2Because 2026 has only Q1 this is already the latest snapshot; for years with multiple quarters add a MAX(quarter)-per-plan filter to avoid counting the same plan-year 2–4 times.
- 3Answers 'what does plan H0028-007 charge a member for complex imaging, and does it need prior auth?'
Traps
- 1report_year is the benefit year; quarter is a QUARTERLY SNAPSHOT of the SAME annual filing, not a distinct benefit period. The same plan-year appears once per released quarter (1–4) AND once per sub-benefit, so a plan-year = up to 20 rows. To dedupe to one view-of-record per plan-year, take MAX(quarter) per report_year (e.g. 2026 only has Q1; 2021/2025 Q1 only; 2020 missing Q3). There is NO is_current column.
- 2copay_amount and coinsurance_pct are the MINIMUM, not a single true value: copay_amount = copay_amount_min and coinsurance_pct = coinsurance_pct_min in 100% of non-null rows. A single row bundles multiple service lines under one sub-benefit, so the _max column often differs (copay max differs from min in 165K rows; e.g. '$0 copay' point but max=$65). Read min AND max to see the real spread; the point column understates the high end.
- 3NULL ≠ zero and NULL ≠ false. 35,490 rows have has_copay/has_coinsurance/cost_share_string/copay/coinsurance all NULL = benefit offered but cost share unknown/unparsed (null_amount_reason='unknown_requires_crosswalk'), NOT free. auth_required/referral_required are NULL in 39,745 rows (NULL ≠ not-required). Also has_copay=true does NOT guarantee a numeric copay_amount (flag is true in 434K rows but the amount is populated in only 355K).
- 4This is a COST-SHARE / benefit-design table (what the member pays per the plan filing), NOT prices, allowed amounts, or paid claims. The entire benefit_amount_* and limit_* dollar/quantity families are 100% NULL here; network_type is constant 'in_network' (no out-of-network); has_deductible is constant false and max_oop_applies constant true. confidence_tier='source_faithful' means as-filed, never reconciled to consumer EOC/SB (consumer_document_reconciliation_status='not_checked').
- 5Identity requires ALL of contract_id + plan_id + segment_id — plan_id is only unique within a contract, and segment_id ('0' for 91%, but 1–16 for segmented plans) is part of the grain. cdt_sub_benefit (5 values) is 1:1 with source_pbp_section and is a required grain axis: each plan-snapshot has exactly 5 rows (one per B8 sub-section, each balanced at 147,678), so cost share for, say, complex_imaging vs diagnostic_lab lives in different rows of the same plan.
Columns (64)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS MA contract ID (e.g. H0028, H0022). 1,270 distinct. First piece of the plan identity. Format H####/R####/etc. |
plan_id | string | Plan ID within the contract (e.g. 001, 007), zero-padded string. 656 distinct values; only unique WITHIN a contract. |
segment_id | string | Plan segment (regional sub-division of a plan offering different benefits by area). String '0' for 91% of rows (non-segmented); '1'..'16' for segmented plans. Part of the grain — do not drop. |
version | double | CMS PBP submission/version number for that plan-year (double 1.0–~12.0). Exactly one value per grain row (already deduped to the filed version); higher = later resubmission within the year. Not part of the grain. |
report_year | double | The benefit/plan year the cost-sharing applies to. Ranges 2018–2026. This is the real time dimension for 'what does the plan charge in year X'. |
quarter | double | Quarterly snapshot (1–4) of the PBP within report_year — the same annual filing republished by CMS each quarter. NOT a different benefit period. Coverage is uneven (e.g. 2021/2025/2026 only have Q1; 2020 missing Q3). To get the definitive view of a year, pick MAX(quarter) per report_year. Part of grain. |
benefit_category | string | Constant = 'clinical_diagnostic_therapeutic' for all 738,390 rows. Identifies which sibling PBP view this is; carries no row-level signal. |
cost_share_string | string | Human-readable cost share as filed, e.g. '20.0%', '$0 copay', '$0 copay + 20.0%', '$60.0 copay'. ~12% NULL (90,416 rows = cost share unknown/unparsed). A plan can carry BOTH a copay and a coinsurance ('$0 copay + 20.0%'). |
copay_amount | double | Member copay in $ — but this is the MINIMUM/representative value: copay_amount = copay_amount_min in 100% of non-null cases. Non-null in 355,289 rows (48%); range $0–$450, avg ~$20.5. NULL ≠ $0 — NULL means no copay parsed (could be coinsurance-based or unknown). |
coinsurance_pct | double | Member coinsurance percent — the MINIMUM/representative value (= coinsurance_pct_min in 100% of non-null cases). Non-null in 317,560 rows (43%); range 0–50%. NULL ≠ 0% (means coinsurance not the basis / unknown). |
limit_text | string | |
auth_required | boolean | Prior authorization required (boolean), NULLABLE. true in 622,099, NULL in 39,745 (NULL ≠ false). Most diagnostic/therapeutic services require auth. Non-null in 698,645 rows. |
referral_required | boolean | Referral required (boolean), NULLABLE. true in 193,310, NULL in 39,745 (same null rows as auth). Non-null 698,645. |
network_type | varchar(10) | CONSTANT 'in_network' for all rows — this view contains only the in-network cost share. (Out-of-network B8 terms are not represented here.) |
max_oop_applies | boolean | Whether this benefit counts toward the plan MOOP — CONSTANT true across all 738,390 rows. No row-level signal for this category. |
limit_quantity | double | |
limit_unit | string | |
limit_period_code | string | |
limit_period_label | string | |
limit_quantity_per_year | double | |
benefit_amount | double | |
benefit_amount_kind | string | |
benefit_amount_period_code | string | |
benefit_amount_period_label | string | |
benefit_amount_annualized | double | |
benefit_amount_pmpm | double | |
normalization_status | string | |
normalization_basis | string | |
aggregation_policy | string | |
offered_status | varchar(15) | CONSTANT 'offered' — this view holds only the offered universe (every plan-snapshot emits all 5 sub-benefits as 'offered'). |
numeric_amount_observability | varchar(31) | CONSTANT 'offered_without_numeric_amounts' — declares that B8 is captured as offered/cost-share but without dollar benefit amounts (consistent with the all-null benefit_amount family). |
null_amount_reason | varchar(30) | CONSTANT 'unknown_requires_crosswalk' — the documented reason benefit_amount is null (B8 has no dollar amount; needs a service-category crosswalk to interpret). |
annualization_policy | varchar(17) | CONSTANT 'not_numeric' — no annualization performed (no numeric benefit amount to annualize). |
combined_limit_policy | varchar(29) | CONSTANT 'none_detected' — no combined/shared limit detected for this category. |
consumer_document_reconciliation_status | varchar(11) | CONSTANT 'not_checked' — these rows have not been reconciled against consumer-facing plan documents (EOC/SB). |
confidence_tier | varchar(23) | CONSTANT 'source_faithful' — values reflect the raw CMS PBP filing as-is (faithful to source, not adjudicated/enriched). |
benefit_layer | string | |
cdt_sub_benefit | varchar(26) | The diagnostic/therapeutic service sub-type. EXACTLY 5 values, 1:1 with source_pbp_section: complex_imaging (B8B_CMC = MRI/CT/PET etc.), therapeutic_radiation (B8B_TMC), diagnostic_radiology_basic (B8B_DRS), diagnostic_imaging_basic (B8A_DMC), diagnostic_lab (B8A_LAB). This is the second axis of the grain — cost share differs per sub-benefit. |
cms_service_name | varchar(71) | |
coinsurance_pct_max | double | Maximum coinsurance % across bundled service lines. Differs from min in 12,852 rows. |
coinsurance_pct_min | double | Minimum coinsurance % across bundled service lines. Equals coinsurance_pct. |
copay_amount_max | double | Maximum copay across the bundled service lines. DIFFERS from min in 165,129 rows — the single row spans a RANGE of copays (e.g. point/min=$0 but max=$65). Use min/max together to see the spread; copay_amount alone understates the high end. |
copay_amount_min | double | Minimum copay across the multiple service lines bundled under this sub-benefit in the PBP. Equals copay_amount. Non-null 355,289. |
deductible_basis | string | |
has_coinsurance | boolean | BOOLEAN, NULLABLE. true=436,689, false=266,211, NULL=35,490 (same unknown rows). Like has_copay, the flag is broader than the parsed numeric value. |
has_copay | boolean | BOOLEAN flag, NULLABLE. true=434,174, false=268,726, NULL=35,490. Caveat: has_copay=true does NOT guarantee a numeric copay_amount (true in 434K rows but copay_amount populated in only 355K). NULL = cost share unknown (the 'requires_crosswalk' rows). |
has_deductible | boolean | BOOLEAN, but CONSTANT false across all 738,390 rows for this category. Carries no signal here. |
has_max_enrollee_oop | boolean | |
label_note | string | |
max_enrollee_oop_amount | double | |
max_enrollee_oop_period_code | string | |
max_enrollee_oop_period_label | string | |
max_enrollee_oop_period_text | string | |
registry_l2_id | string | |
same_day_max_copay_only | boolean | |
service_key | string | |
source_pbp_section | varchar(7) | The CMS PBP section code the row came from. 5 values, 1:1 with cdt_sub_benefit: B8B_CMC, B8B_TMC, B8B_DRS, B8A_DMC, B8A_LAB. Provenance of the sub-benefit. |
source_silver_table | varchar(45) | CONSTANT 'medicare_silver.pbp_section_b8_clin_diag_ther' — the upstream silver table this semantic view is built from. |
lmi_authorities | string | CONSTANT — a single URL to the LMI 'CY 2026 PBP Service Category Descriptions' PDF (the authoritative definitions for these benefit categories). Documentation/definitions pointer, same for every row. |
source_url | string | CMS PBP benefits ZIP the data was extracted from (e.g. https://www.cms.gov/files/zip/pbp-benefits-2021-updated-08022021.zip). One per grain row; multiple distinct URLs per report_year correspond to the quarterly refreshes. |
sha256_content_hash | string | Content hash of the source PBP file for provenance/integrity. One per grain row; tracks 1:1 with source_url within a report_year. |
limit_quantity / limit_unit / limit_period_code / limit_period_label / limit_quantity_per_year / limit_text | Quantity-limit family. 100% NULL for this category — PBP B8 diagnostic/therapeutic benefits carry no parsed quantity limits in this view. Do not rely on these here. | |
benefit_amount / benefit_amount_kind / benefit_amount_period_code / benefit_amount_period_label / benefit_amount_annualized / benefit_amount_pmpm | Dollar-benefit-allowance family. 100% NULL for this category. These services are cost-share (copay/coinsurance) only, not dollar-allowance benefits, so this whole family is unused. | |
normalization_status / normalization_basis / aggregation_policy | Pipeline normalization metadata — 100% NULL for this category (not applied to B8). |
Query it
describe_data_source(source_fqn="medicare_semantic.vw_pbp_clinical_diagnostic_therapeutic") # the card, live query_substrate(sql="SELECT * FROM medicare_semantic.vw_pbp_clinical_diagnostic_therapeutic WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' AND cdt_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_clinical_diagnostic_therapeutic") |
| Raw door | Athena (read-only via query_substrate): medicare_semantic.vw_pbp_clinical_diagnostic_therapeutic |
| Note | Cleaned PBP reasoning surface (categories/clinical_diagnostic_therapeutic/contract.yaml); raw is pbp_section_*. |
This page as markdown: /docs-md/data/medicare_semantic_vw_pbp_clinical_diagnostic_therapeutic.md · every page in one file: /llms-full.txt