Carrier Crosswalk
The Benefit Plan Standard maintains a carrier crosswalk that maps each issuer’s vocabulary, structure, and terminology into the normalized schema fields.
This ensures that different carriers’ representations of benefits—often inconsistent in naming, structure, and granularity—can be interpreted in a unified, machine-readable way.
Because carriers vary widely in how they describe deductibles, copays, limits, and categories, the crosswalk is a foundational component of the standard.
📊 Crosswalk Matrix
Plan Metadata
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| plan_id | Contract Number | Plan ID | H Number | SBC ID | Plan Number | Policy Number | Contract ID | Not shown on SBC | Not shown on SBC | ||
| carrier | Florida Blue | UF Health / GatorCare | SCAN Health Plan | Aetna | UnitedHealthcare | Cigna | Humana | Health Net of CA (Ambetter product brand) | KAISER PERMANENTE (registered mark in header) | ||
| plan_name | BlueOptions 505 PPO | Prime EPO Plan (document titled "Florida Blue BlueOptions 03768", administrator branding) | Classic | PPO 1500 80/50 | Header plan name (e.g. UHC Choice Plus HSA Gold 1700-4) | Preferred Plan | Gold Plus | Silver 94 Ambetter HMO | Gold 80 HMO | ||
| plan_type | PPO | EPO (SBC header prints PPO) | HMO / MA | PPO | POS / HMO / PPO / MA | PPO / HMO | HMO / MA | HMO | HMO | ||
| year | Coverage Year | Plan Year | Plan Year | SBC Year | Plan Year | Calendar Year | Calendar Year | Beginning on or after MM/DD/YYYY (single date, no end date) | Coverage Period: Beginning on or after MM/DD/YYYY (single date, no end date) | ||
| market | Group or Individual | Self-funded employer group, administered by Florida Blue | Medicare Advantage | Commercial | Small group / Commercial / MA | Commercial | Medicare Advantage | Individual (Coverage for: All Covered Members) | Individual/Family |
Network Tiers
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| tier_id | IN / OUT | IN / OUT | IN | IN / OUT | IN / OUT | IN / OUT | IN | IN / OUT | IN (single tier) | ||
| name | In / Out of Network | GatorCare Tier 1 / BlueOptions Tier 2 / BlueOptions Tier 3 (OON) | In Network | In / Out of Network | Designated Network / Network / Out-of-Network | In / Out Network | In Network | In Network / Out-of-Network Provider | Plan Provider | ||
| description | Network Level | Three tiers; collapses to IN/OUT under v1.1 (tier_class drafted for v1.2) | Plan Network | Network Level | Three columns on SBC; collapses to IN/OUT under v1.1 | Network Tier | Plan Network | OON cells read Not covered on most rows | Non-plan providers not covered |
Accumulators
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| individual_deductible | Individual Deductible | Individual Deductible (stated per tier in one cell: GatorCare Tier 1 / BlueOptions Tier 2) | Usually none | Individual Deductible | Deductible IN/OUT (three networks in one cell: Designated Network and Network / out-of-Network) | Individual Deductible | Mostly none | Not stated in SBC answer block | Overall deductible ($0 on Gold 80) | ||
| family_deductible | Family Deductible | Family Deductible | None | Family Deductible | Family Deductible | Family Deductible | Not used | Not stated | Not stated separately | ||
| individual_oop_max | Individual OOP Max | OOP Max (Ind., stated per tier in one cell) | MOOP | OOP Max (Ind.) | MOOP Ind | OOP Max | MOOP | $1,400 member per calendar year | $9,200 Individual | ||
| family_oop_max | Family OOP Max | OOP Max (Family) | None | OOP Max (Family) | MOOP Fam | Family OOP Max | Not used | $2,800 family per calendar year | $18,400 Family | ||
| oon_individual_deductible | OON Individual Deductible | OON Individual Deductible | N/A | OON Individual Deductible | Deductible OUT | OON Individual Deductible | N/A | N/A (OON not covered) | N/A (single-tier HMO) | ||
| oon_family_deductible | OON Family Deductible | OON Family Deductible | N/A | OON Family Deductible | Family Deductible OUT | OON Family Deductible | N/A | N/A | N/A | ||
| oon_individual_oop_max | OON Individual OOP Max | OON OOP Max (Ind.) | N/A | OON OOP Max (Ind.) | MOOP OUT Ind | OON OOP Max | N/A | N/A | N/A | ||
| oon_family_oop_max | OON Family OOP Max | OON OOP Max (Family) | N/A | OON OOP Max (Family) | MOOP OUT Fam | OON Family OOP Max | N/A | N/A | N/A |
Benefits
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| category | Category Header | Category | Common Medical Event | Medical Event | Category | Benefit Category | Category | Common Medical Event | Common Medical Event | ||
| service_name | PCP Visit | Primary Care Provider | PCP Visit | Primary Care Visit | PCP Office Visit | PCP Visit | Primary Care Physician | Primary care visit to treat an injury or illness | Primary care visit to treat an injury or illness | ||
| place_of_service | Office Visit | Office | Office | Office | Office / Telehealth | Office | Office / Telehealth | Office | Office | ||
| deductible | Deductible Applies? | Deductible does not apply / $X Per Visit Deductible + Deductible | Deductible Waived? | Subject to Deductible | Applies / Waived | Applies | Usually Waived | Standard SBC wording | Standard SBC wording | ||
| copay | Copay | Copayment | Copay | Copay | Copay (pharmacy rows split Retail: $X / Mail-Order: $Y in one cell) | Copay | Copay | $X copay/visit | $X copay/visit | ||
| coinsurance | Coinsurance | Coinsurance | Coins | Coinsurance | Coinsurance | Coinsurance | Coinsurance | X% coinsurance; OON column reads Not covered | X% coinsurance (may carry per-prescription cap, e.g. up to $250/prescription) |
Limits
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| type | Visits / Days | Visits | Days | Visits | Days / Units | Visits | Frequency | Visits | Visits / Days | ||
| value | Visit Limit / Day Limit | Visit Limit (compound: e.g. 75 visits including 26 manipulations) | Day Limit | Visit Limit | Stay Limit | Visit Limit | Allowance | Visit Limit | Visit Limit | ||
| period | Per Year / Per Stay | Annual | Benefit Period | Per Year | Per Stay / Per Year | Per Year | Annual | Per Year | Per Year |
Conditions
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| prior_authorization | Prior Auth | Prior Authorization | Prior Auth | Prior Auth | Prior Auth | Prior Auth | Prior Auth | Prior Auth | Prior Auth | ||
| referral_required | Referral Required | Referral Required | Referral | Referral | Referral Required | Referral Required | Referral Required | Referral Required | Referral Required | ||
| notes | Notes / Limitations | Limitations | Notes | Notes | Limitations | Notes | Plan Notes | Limitations and Exceptions column | Limitations and Exceptions column |
Source Reference
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| page | SBC Page | SBC Page | SBC Page | SBC Page | SBC / EOC Page | SBC Page | SBC/EOC Page | SBC Page | SBC Page | ||
| excerpt | Text Snippet | Text Snippet | Snippet | Snippet | Snippet | Snippet | Snippet | Text Snippet | Text Snippet |
Field Definitions
| Field | Type | Description |
|---|---|---|
| plan_id | string | Normalized unique identifier of the plan |
| carrier | string | Carrier or issuer name |
| plan_name | string | Marketing name |
| plan_type | string | HMO / PPO / EPO / MA |
| year | integer | Coverage year |
| market | string | Commercial, MA, Group, etc. |
| individual_deductible | money | Deductible for individual |
| family_deductible | money | Deductible for family |
Carrier Vocabulary
| Concept | Normalized Term | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Ambetter | Kaiser | Molina (future) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Primary Care Visit | PCP Visit | PCP Office Visit | Primary Care Provider | PCP Visit | Primary Care Visit | PCP Visit | PCP | Primary care visit to treat an injury or illness | Primary care visit to treat an injury or illness | ||
| Specialist Visit | Specialist Visit | Specialist Visit | Specialist | Specialist Visit | Spec Visit | Specialist | Specialist | Specialist visit | Specialist visit |
Pharmacy Tiers
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| tier_id | generic_drugs__preventive; generic_drugs__condition_care_rx; generic_drugs; preferred_brand_drugs__condition_care_rx; preferred_brand_drugs; nonpreferred_brand_drugs; specialty_drugs (Florida Blue, public 2025 SBC) | generic_drugs; preferred_brand_drugs; nonpreferred_brand_drugs; specialty_drugs (UHC Choice Plus HSA Gold 1700-4, verified 2026 SBC) | T1; T2; T3; T4; T5 (Humana, illustrative) | |||||||
| name | Generic Drugs (Preventive; Condition Care Rx; All Other) … Specialty Drugs (Florida Blue, public 2025 SBC) | Tier 1 - Your Lowest-Cost Option; Tier 2 - Your Midrange-Cost Option; Tier 3 - Your Midrange-Cost Option; Tier 4 - Additional High-Cost Option (UHC Essential PDL, verified 2026 SBC) | Tier 1 Preferred Generic … Tier 5 Specialty (Humana, illustrative) | |||||||
| drug_class | Preventive; Condition Care Rx; All Other Generic; All Other Preferred Brand; Non-preferred brand drugs; Specialty drugs (Florida Blue, public 2025 SBC) | generic; preferred_brand; nonpreferred_brand; specialty (normalized from Essential PDL tier labels, verified 2026 SBC) | preferred_generic; generic; preferred_brand; nonpreferred_brand; specialty (Humana, illustrative) | |||||||
| tier_code | zero-cost-share-preventive; generic; preferred-brand; non-preferred-brand; specialty (FHIR DrugTierVS) | generic; preferred-brand; non-preferred-brand; specialty (FHIR DrugTierVS) | preferred-generic; generic; preferred-brand; non-preferred-brand; specialty (FHIR DrugTierVS) |
Pharmacy Networks
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| network_id | retail; mail_order (Florida Blue, public 2025 SBC) | PREF_RETAIL; STD_RETAIL; MAIL_ORDER (Humana, illustrative) | ||||||||
| name | Retail; Mail Order (Florida Blue, public 2025 SBC) | Preferred Retail; Standard Retail; Mail Order (Humana, illustrative) | ||||||||
| network_type | standard_retail; mail_order (Florida Blue, public 2025 SBC) | preferred_retail; standard_retail; mail_order (Humana, illustrative) | ||||||||
| default_day_supply | 30 retail; 90 mail order (Florida Blue, public 2025 SBC) | 30 retail; 90 mail order (Humana, illustrative) |
Coverage Stages
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| stage_id | DEDUCTIBLE; INITIAL; CATASTROPHIC (Humana, illustrative) | |||||||||
| name | Deductible; Initial Coverage; Catastrophic Coverage (Humana, illustrative) | |||||||||
| stage_type | deductible; initial; catastrophic (Humana, illustrative) |
Pharmacy Tier Codes
| drug_class | tier_code (FHIR DrugTierVS) |
|---|---|
| preferred_generic | preferred-generic |
| generic | generic |
| preferred_brand | preferred-brand |
| nonpreferred_brand | non-preferred-brand |
| preferred_specialty | specialty |
| nonpreferred_specialty | specialty |
| preventive | zero-cost-share-preventive |
Kaiser and Ambetter were populated in August 2026 from verified extractions of public 2026 SBCs. Molina and Oscar keep placeholder columns for expansion.
Purpose
Carriers do not use consistent terminology.
For example:
One carrier may label a row “Office Visit - Primary Care (PCP)”,
while another writes “Primary Care Provider: You pay $25”,
and another uses “PCP Copay per encounter”.Deductible applicability might be written as:
- “After deductible”
- “Subject to deductible”
- “Copay does not apply to deductible”
- “Ded waived”
- Combined expressions such as “$25 copay + 20% coinsurance after deductible”
Without a standardized crosswalk, ingestion pipelines must be hand-tuned for every carrier.
The crosswalk solves this by documenting, for each normalized field:
- How each carrier expresses the value
- Semantics that must be preserved
- Parsing notes and exceptions
- Mappings into the normalized JSON structure
Structure of the Crosswalk
The crosswalk contains multiple tabs, including:
Plan Metadata
Maps identifiers such as:
plan_idcarrierplan_typemarket
Network Tiers
Mappings for:
- In-network / out-of-network naming
- Tier structures
- Carrier-specific vocabulary
Accumulators
How each carrier expresses:
individual_deductiblefamily_deductibleindividual_oop_maxfamily_oop_maxoon_individual_deductible(v1.1.0)oon_family_deductible(v1.1.0)oon_individual_oop_max(v1.1.0)oon_family_oop_max(v1.1.0)
Benefits
Mappings for:
- categories
- service names
- copays
- coinsurance expressions
- deductible applicability
Limits
Mappings for:
- visit/day limits
- period definitions (annual, per stay, lifetime, etc.)
Conditions
Mappings for:
- prior authorization
- referral requirements
- contextual notes
Source Reference
Extracts and page references used for ingestion traceability.
Pharmacy Module (draft v0.2.0)
The pharmacy crosswalk tabs render the BPS pharmacy module v0.2.0, a draft module that is not yet wired into the core schema (it targets core v1.2.0). Like the medical tabs, the pharmacy tabs are sourced from a versioned repo file (docs/specification/pharmacy-crosswalk-data.json) and validated against the module's JSON Schema. Carrier data is accuracy-first: the Blue Cross column is populated from a verified extraction of a public 2025 Florida Blue ACA SBC (Coverage Stages remain blank for commercial plans, which have no Part D stages); the Humana column is illustrative (from the public module example); other carriers are intentionally blank pending verified public sources.
The pharmacy module adds crosswalk coverage for the pharmacy concepts that appear in carrier SBCs/EOCs. Because the crosswalk is a carrier-SBC-vocabulary map, only those concepts get carrier-matrix tabs:
- Pharmacy Tiers — formulary tier structure (
tier_id,name,drug_class,tier_code). Maps how each carrier labels its drug tiers (e.g., Tier 1 Preferred Generic … Tier 5 Specialty). - Pharmacy Networks — pharmacy network structure (
network_id,name,network_type,default_day_supply). Distinct from the medical Network Tiers tab; covers preferred retail / standard retail / mail order / specialty pharmacy. - Coverage Stages — Medicare Part D coverage phases (
stage_id,name,stage_type). Post-2025 (IRA redesign): Deductible / Initial Coverage / Catastrophic Coverage. (The pre-2025 Coverage Gap is retained only for historical plan years.) - Pharmacy Tier Codes — a reference table (not a carrier matrix) mapping the module's
drug_classvalues to the canonical FHIR DrugTierVStier_code(e.g.,preferred_brand→preferred-brand,preferred_specialty→specialty,preventive→zero-cost-share-preventive).
Not in the crosswalk: the module's drug-level formulary data — individual drugs (rxcui, drug_name, ndc), utilization-management flags, and indication-dependent coverage_exceptions[]. That data comes from formulary files (CMS QHP / Medicare Part D / FHIR DaVinci US Drug Formulary), not from SBCs/EOCs, so it is documented in the module schema as a field reference rather than mapped here as carrier vocabulary.
Using the Crosswalk
When integrating a new carrier:
1. Identify each benefit entry
Locate the carrier’s terms in the crosswalk (or add them when necessary).
2. Map each value to the normalized field
Examples:
Copay differences
- Blue Cross: “$25 per visit”
- SCAN: “$0 copay, coinsurance does not apply”
These map tobenefits[].cost_shares.copay.
Deductible expressions
- GatorCare lists medical and pharmacy separately
- Aetna merges them
The crosswalk clarifies how to populateindividual_deductible,family_deductible, and related fields.
3. Capture exceptions and conditions
Ambiguous phrasing such as:
- “after facility fee”
- “per admission deductible”
- “ded waived for virtual visits”
should be documented in the crosswalk’s notes column.
4. Extend when necessary
If a carrier introduces:
- new cost-share terminology
- split benefit categories
- multi-tier networks
add a row or column to the versioned crosswalk data files in docs/specification/ and update the ingestion rules accordingly.
Updating the Crosswalk
The versioned repo data files (docs/specification/medical-crosswalk-data.json and docs/specification/pharmacy-crosswalk-data.json) are the canonical source of truth for carrier mappings; changes ship as normal pull requests. The original Google Sheet is retained as a historical reference and is no longer load-bearing.
Updates follow these principles:
- Accuracy first — No changes without verification against the SBC/EOC.
- Non-breaking additions — New carriers and vocabulary should not break prior mappings.
- Schema alignment — Crosswalk rows correspond exactly to the normalized fields.
For contributors assisting with ingestion logic or analysis, changes are proposed as pull requests against the data files.
Summary
The Carrier Crosswalk is essential for:
- Translating carrier-specific formats into a unified schema
- Ensuring ingestion is deterministic and predictable
- Maintaining consistency across carriers
- Supporting extension as new carriers and plan types are analyzed
The live version ensures that the standard remains current, accurate, and interoperable across all benefit plan formats and carriers.