Get PBP Benefit
get_pbp_benefitReturns Plan Benefit Package (PBP) benefit detail for an MA plan for a specific category (dental, inpatient_hospital, ER, etc.).
Polymorphic — pass category to route to the right semantic view. All categories share the standard envelope: cost_share_string, copay_amount, coinsurance_pct, limit_text, auth_required, referral_required, network_type, max_oop_applies + category-specific extension fields (e.g., dental_sub_benefit).
Required: contract_id, plan_id, payment_year, category. The category must be one of the 35 live categories (listed below).
The response value is the full benefit-detail object: rows (every matched benefit row, with cost sharing, limits, and category extension fields), row_count, the resolved category/human_label/view_fqn, the audit_chain (CMS source URL + sha256 per row), and a summary sub-field carrying the single-row headline cost_share_string (or the row count when multiple sub-benefit rows match) for a quick read. Plus any methodology-shift caveats (e.g., 'B16 dental restructured CY2025' when querying dental for 2025+). Cross-year queries get cross-shift caveats.
When the full answer would not fit in one response, rows come back compact (row_format: "compact"): fields identical on every row sit once in row_common, and a field absent from a row is null.
Live categories are discovered from the contract registry at load time, so this list cannot drift from what the tool serves; an unknown category is refused (INVALID_INPUT) with this same list, never a failure. The 35 live categories are: ambulance, b19_combined_package, cardiac_pulmonary_rehab, clinical_diagnostic_therapeutic, combined_supplemental, dental, dme, dsnp_cost_share, emergency_urgent, health_professionals, hearing, home_health, inpatient_hospital, inpatient_psychiatric, meals, moop, optional_package, otc, outpatient_hospital, partb_rx_drugs, partd_drugs, partd_tier, partial_hospitalization, plan_deductible, plan_premium, preventive, prior_auth_referral, renal_dialysis, section_c_pos_oon, snf, ssbci, supplemental_other, supplemental_services, transportation, vision. The premium is plan_premium (not 'premium'), the deductible is plan_deductible, the out-of-pocket maximum is moop.
summary.value is the one number a reader asks for: for plan_premium the monthly premium in USD; for plan_deductible the in-network annual deductible in USD (or null with the filed reason); for moop the in-network annual MOOP in USD, which on a D-SNP is the plan design before Medicaid and Extra Help, never what a dual pays. summary.label says which. Limits read in words ("6 visits every year"; 999 is CMS's unlimited sentinel and reads "unlimited"); the filed code is kept in limit_text_raw.
A contract/plan/year/category combination with NO rows is REFUSED with code NO_DATA, not answered with an empty complete: the refusal states what was searched and routes to get_landscape (the plan ids that really exist for that contract and year) and names the valid categories. One view is read, so a nonexistent plan and a plan with nothing in this category cannot be told apart here; the refusal says so.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| plan_id | Yes | ||
| category | Yes | ||
| segment_id | No | ||
| contract_id | Yes | ||
| payment_year | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| as_of | No | ||
| value | Yes | ||
| source | Yes | ||
| status | No | complete | |
| caveats | No | ||
| failure | No | ||
| quality | No | ||
| refusal | No | ||
| vintage | No | as_restated | |
| audit_id | Yes | UUID; ties to medicare_silver.audit_log row. | |
| signature | No | ||
| tenant_id | No | Calling tenant slug, resolved by the binding and stamped via the per-call tenant context. Defaults to the bootstrap 'internal' tenant for local/in-process callers. | |
| timestamp | Yes | ||
| confidence | No | ||
| data_as_of | No | ||
| request_id | Yes | ||
| methodology | No | ||
| snapshot_set | Yes | {table_fqn → iceberg_snapshot_id (int64)}. Per M-2 §2.2. | |
| tool_version | Yes | ||
| response_hash | Yes | SHA-256 of canonicalized form per M-2 §2.4. | |
| result_status | Yes | ||
| vintage_basis | No | default_unmeasured | |
| as_of_asserted | No | ||
| as_of_observed | No | ||
| parse_revision | No | ||
| as_of_effective | No | ||
| freshness_state | No | unknown | |
| methodology_era | No | ||
| confidence_basis | No | ||
| semantic_version | Yes | ||
| invariants_applied | No | ||
| finality_confidence | No | ||
| cms_vintage_sequence | Yes | ||
| parser_artifact_hash | Yes | ||
| methodology_blend_factors | No | ||
| parser_artifact_hash_basis | No | not_evaluated |