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.
📊 Live Crosswalk Matrix
Plan Metadata
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| plan_id | Contract Number | Plan ID | H Number | SBC ID | Plan Number | Policy Number | Contract ID | |||
| carrier | Florida Blue | UF Health / GatorCare | SCAN Health Plan | Aetna | UnitedHealthcare | Cigna | Humana | |||
| plan_name | BlueOptions 505 PPO | Prime Plus | Classic | PPO 1500 80/50 | MA Plan Name | Preferred Plan | Gold Plus | |||
| plan_type | PPO | PPO | HMO / MA | PPO | HMO / PPO / MA | PPO / HMO | HMO / MA | |||
| year | Coverage Year | Plan Year | Plan Year | SBC Year | Plan Year | Calendar Year | Calendar Year | |||
| market | Group or Individual | Employer Group | Medicare Advantage | Commercial | Commercial / MA | Commercial | Medicare Advantage |
Network Tiers
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| tier_id | IN / OUT | IN / OUT | IN | IN / OUT | IN / OUT | IN / OUT | IN | |||
| name | In / Out of Network | In / Out of Network | In Network | In / Out of Network | Participating / Non-Participating | In / Out Network | In Network | |||
| description | Network Level | Network Level | Plan Network | Network Level | Benefit Level | Network Tier | Plan Network |
Accumulators
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| individual_deductible | Individual Deductible | Individual Deductible | Usually none | Individual Deductible | Deductible IN/OUT | Individual Deductible | Mostly none | |||
| family_deductible | Family Deductible | Family Deductible | None | Family Deductible | Family Deductible | Family Deductible | Not used | |||
| individual_oop_max | Individual OOP Max | OOP Max (Ind.) | MOOP | OOP Max (Ind.) | MOOP Ind | OOP Max | MOOP | |||
| family_oop_max | Family OOP Max | OOP Max (Family) | None | OOP Max (Family) | MOOP Fam | Family OOP Max | Not used | |||
| oon_individual_deductible | OON Individual Deductible | OON Individual Deductible | N/A | OON Individual Deductible | Deductible OUT | OON Individual Deductible | N/A | |||
| oon_family_deductible | OON Family Deductible | OON Family Deductible | N/A | OON Family Deductible | Family Deductible OUT | OON Family Deductible | 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 | |||
| 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 |
Benefits
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| category | Category Header | Category | Common Medical Event | Medical Event | Category | Benefit Category | Category | |||
| service_name | PCP Visit | Primary Care Provider | PCP Visit | Primary Care Visit | PCP Office Visit | PCP Visit | Primary Care Physician | |||
| place_of_service | Office Visit | Office | Office | Office | Office / Telehealth | Office | Office / Telehealth | |||
| deductible | Deductible Applies? | Subject to Deductible | Deductible Waived? | Subject to Deductible | Applies / Waived | Applies | Usually Waived | |||
| copay | Copay | Copayment | Copay | Copay | Copay | Copay | Copay | |||
| coinsurance | Coinsurance | Coinsurance | Coins | Coinsurance | Coinsurance | Coinsurance | Coinsurance |
Limits
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| type | Visits / Days | Visits | Days | Visits | Days / Units | Visits | Frequency | |||
| value | Visit Limit / Day Limit | Visit Limit | Day Limit | Visit Limit | Stay Limit | Visit Limit | Allowance | |||
| period | Per Year / Per Stay | Annual | Benefit Period | Per Year | Per Stay / Per Year | Per Year | Annual |
Conditions
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| prior_authorization | Prior Auth | Prior Authorization | Prior Auth | Prior Auth | Prior Auth | Prior Auth | Prior Auth | |||
| referral_required | Referral Required | Referral Required | Referral | Referral | Referral Required | Referral Required | Referral Required | |||
| notes | Notes / Limitations | Limitations | Notes | Notes | Limitations | Notes | Plan Notes |
Source Reference
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| page | SBC Page | SBC Page | SBC Page | SBC Page | SBC / EOC Page | SBC Page | SBC/EOC Page | |||
| excerpt | Text Snippet | Text Snippet | Snippet | Snippet | Snippet | Snippet | 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
| 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 |
Pharmacy Tiers
| Normalized Field | Blue Cross | GatorCare | SCAN | Aetna | UHC | Cigna | Humana | Kaiser (future) | Molina (future) | Oscar (future) |
|---|---|---|---|---|---|---|---|---|---|---|
| tier_id | T1; T2; T3; T4; T5 (Humana, illustrative) | |||||||||
| name | Tier 1 Preferred Generic … Tier 5 Specialty (Humana, illustrative) | |||||||||
| drug_class | preferred_generic; generic; preferred_brand; nonpreferred_brand; specialty (Humana, illustrative) | |||||||||
| tier_code | 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 | PREF_RETAIL; STD_RETAIL; MAIL_ORDER (Humana, illustrative) | |||||||||
| name | Preferred Retail; Standard Retail; Mail Order (Humana, illustrative) | |||||||||
| network_type | preferred_retail; standard_retail; mail_order (Humana, illustrative) | |||||||||
| default_day_supply | 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 |
Future carriers (e.g., Kaiser, Molina, Oscar, Ambetter) already have 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 Google Sheet 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). Unlike the medical tabs (sourced from the carrier Google Sheet), the pharmacy tabs are sourced from a versioned repo file (docs/specification/pharmacy-crosswalk-data.json) and validated against the module's JSON Schema — Phase 1 of the crosswalk pipeline. Carrier data is illustrative for now: only the Humana column is populated (from the public module example), and other carriers are intentionally blank.
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 Google Sheet and update the ingestion rules accordingly.
Updating the Crosswalk
The Google Sheet is the canonical source of truth for carrier mappings.
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, edit access may be granted through the governance process.
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.