Skip to main content

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 FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
plan_idFLBLUE_BLUEOPTIONS_505GATORCARE_PRIME_EPOSCAN_CLASSIC_HMO_LOS_ANGELESAETNA_PPO_1500_80_50UHC_CHOICE_PLUS_HSA_GOLD_1700CIGNA_OAP_BOWDOINHUMANA_GOLD_PLUS_H1036_025_HMOAMBETTER_CA_SILVER_94_HMOKAISER_CA_GOLD_80_HMO
plan_identifiersnot in examplenot in examplecms_contract_plan_segment: H5425-006-0; cms_contract_id: H5425; cms_pbp_id: 006not in examplenot in examplenot in examplecms_contract_plan_segment: H1036-025-000; cms_contract_id: H1036; cms_pbp_id: 025not in examplenot in example
carrierFloridaBlueGatorCareSCAN Health PlanAetnaUnitedHealthcareCignaHumanaAmbetterKaiser
plan_nameFlorida Blue BlueOptions 505Florida Blue BlueOptions 03768 - Prime EPO PlanSCAN Classic (HMO)Aetna FL PPO 1500 80/50 CY V25UnitedHealthcare® UHC Choice Plus HSA Gold 1700-4Bowdoin College: Open Access PlusHumana Gold Plus H1036-025 (HMO)Health Net of CA: Silver 94 Ambetter HMOKAISER PERMANENTE® : Gold 80 HMO
plan_typePPOEPOHMOPPOPOSOAPHMOHMOHMO
plan_year202320262026202620262026202620262026
marketindividualself_fundedmedicare_advantagelarge_groupsmall_grouplarge_groupmedicare_advantageindividualindividual
Network Tiers
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
tier_idIN / OUTIN / OUTIN / OUT / PHARMACY_RETAIL_STANDARDIN / OUTIN / OUTIN / OUTIN / OUT / SITE_PCP_OFFICE / SITE_SPECIALIST_OFFICE / SITE_TELEHEALTH / SITE_URGENT_CARE_CENTER / SITE_OUTPATIENT_HOSPITAL / SITE_AMBULATORY_SURGERY_CENTER / SITE_FREESTANDING_RADIOLOGY / SITE_FREESTANDING_LAB / SITE_MEMBERS_HOME / SITE_COMPREHENSIVE_OUTPATIENT_REHAB / SITE_PHARMACY / SITE_NETWORK_RETAIL_PHARMACY / SITE_DME_PROVIDER / SITE_DIABETIC_SUPPLIER / SITE_MEDICAL_SUPPLIER / SITE_PROSTHETICS_PROVIDER / SITE_PART_D_RETAIL / DESIG_PREFERRED_DIABETIC_SUPPLIERIN / OUTIN / OUT
nameIn Network / Out of NetworkGatorCare Tier 1 In-Network / BlueOptions Tier 3 Out-Of-NetworkIn network / Out of network / Retail, StandardIn Network / Out of NetworkIn-Network / Out-of-NetworkIn Network / Out of NetworkIn network / Out of network / PCP's office / Specialist's office / Telehealth / Urgent care center / Outpatient hospital / Ambulatory surgery center / Freestanding radiological facility / Freestanding laboratory / Member's home / Comprehensive outpatient rehab facility / Pharmacy / Network retail pharmacy / DME provider / Diabetic supplier / Medical supplier / Prosthetics provider / Retail Cost-Sharing / Preferred diabetic supplierIn Network / Out of NetworkPlan Provider / Non-Plan Provider
descriptionNetwork LevelThree tiers; collapses to IN/OUT under v1.1 (tier_class drafted for v1.2)Plan NetworkNetwork LevelThree columns on SBC; collapses to IN/OUT under v1.1Network TierPlan NetworkOON cells read Not covered on most rowsNon-plan providers not covered
Accumulators
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
individual_deductible$3,500$350$0$1,500$1,700$1,000$0not in example$0
family_deductible$10,500$700not in example$3,000$3,400$2,000not in examplenot in examplenot in example
individual_oop_max$3,500$2,700$199$5,500$4,500$3,500$2,000$1,400$9,200
family_oop_max$10,500$5,400not in example$11,000$9,000$7,000not in example$2,800$18,400
oon_individual_deductible$5,500not in examplenot in example$3,000$5,000$1,000not in examplenot in examplenot in example
oon_family_deductible$11,000not in examplenot in example$9,000$10,000$2,000not in examplenot in examplenot in example
oon_individual_oop_max$8,500not in examplenot in example$13,000$10,000$3,500not in examplenot in examplenot in example
oon_family_oop_max$17,000not in examplenot in example$39,000$20,000$7,000not in examplenot in examplenot in example
pharmacy.deductiblenot in examplenot in example$250 (applies_to_tiers: Tier 3, Tier 4, Tier 5)not in examplenot in examplenot in example$615 (applies_to_tiers: Tier 4, Tier 5)not in examplenot in example
pharmacy.out_of_pocket_maxnot in examplenot in example$2,100not in examplenot in examplenot in example$2,100not in examplenot in example
Benefits
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
categoryCategory HeaderCategoryCommon Medical EventMedical EventCategoryBenefit CategoryCategoryCommon Medical EventCommon Medical Event
service_namePrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary CarePrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary Care Provider (PCP)Primary care visit to treat an injury or illnessPrimary care visit to treat an injury or illness
place_of_serviceOffice VisitOfficeOfficeOfficeOffice / TelehealthOfficeOffice / TelehealthOfficeOffice
deductibleDeductible Applies?Deductible does not apply / $X Per Visit Deductible + DeductibleDeductible Waived?Does not apply (applies_to_deductible: false)Applies / WaivedDoes not apply (applies_to_deductible: false)Usually WaivedStandard SBC wordingStandard SBC wording
copayCopayCopaymentCopayCopayCopay (pharmacy rows split Retail: $X / Mail-Order: $Y in one cell)CopayCopay$X copay/visit$X copay/visit
coinsuranceCoinsuranceCoinsuranceCoinsCoinsuranceCoinsuranceCoinsuranceCoinsuranceX% coinsurance; OON column reads Not coveredX% coinsurance (may carry per-prescription cap, e.g. up to $250/prescription)
Limits
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
typevisitsVisitsDaysVisitsDays / UnitsVisitsvisits / hearing_aids / dollars / pairs_of_eyeglasses / days / one_way_trips / meals / occurrences / hoursVisitsVisits / Days
value25 (Chiropractic care)Visit Limit (compound: e.g. 75 visits including 26 manipulations)Day LimitVisit LimitStay LimitVisit LimitAllowanceVisit LimitVisit Limit
periodPer Year / Per StayAnnualBenefit PeriodPer YearPer Stay / Per YearPer YearAnnualPer YearPer Year
Conditions
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
prior_authorizationPrior AuthPrior AuthorizationPrior AuthPrior AuthPrior AuthPrior AuthPrior AuthPrior AuthPrior Auth
referral_requiredReferral RequiredReferral RequiredReferralReferralReferral RequiredReferral RequiredReferral RequiredReferral RequiredReferral Required
notesNotes / LimitationsLimitationsNotesNotesLimitationsNotesPlan NotesLimitations and Exceptions columnLimitations and Exceptions column
Source Reference
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
pageSBC PageSBC PageSummary of Benefits PageSBC PageSBC PageSBC PageSummary of Benefits PageSBC PageSBC Page
excerptText SnippetText SnippetSnippetSnippetSnippetSnippetSnippetText SnippetText Snippet
Field Definitions
FieldTypeDescription
plan_idstringNormalized unique identifier of the plan
carrierstringCarrier or issuer name
plan_namestringMarketing name
plan_typestringFree-form string, no enum in schema v1.1.0. Recommended codes are in vocabularies/plan-types.json, for example HMO, PPO, EPO, POS.
plan_yearintegerCoverage year
marketstringFree-form string, no enum in schema v1.1.0. Recommended codes are in vocabularies/markets.json, for example individual, small_group, large_group, self_funded, medicare_advantage.
individual_deductiblemoneyDeductible for individual
family_deductiblemoneyDeductible for family
Carrier Vocabulary
ConceptNormalized TermBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
Primary Care VisitPCP VisitPrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary CarePrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary care visit to treat an injury or illnessPrimary Care Provider (PCP)Primary care visit to treat an injury or illnessPrimary care visit to treat an injury or illness
Specialist VisitSpecialist VisitSpecialist visitSpecialist visitSpecialistsSpecialist visitSpecialist visitSpecialist visitSpecialistSpecialist visitSpecialist visit
Pharmacy Tiers
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
tier_idnot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
nameGeneric drugs; Preferred brand drugs; Non-preferred brand drugs; Specialty drugsGeneric drugs; Preferred brand drugs; Non-preferred brand drugs; Specialty drugsTier 1 (Preferred Generic); Tier 2 (Generic); Tier 3 (Preferred Brand) Insulin; Tier 3 (Preferred Brand) Other Drugs; Tier 4 (Non-Preferred Drug); Tier 5 (Specialty Tier)Preferred generic drugs; Preferred brand drugs; Specialty drugsTier 1 - Your Lowest- Cost Option; Tier 2 - Your Midrange-Cost Option; Tier 3 - Your Midrange-Cost Option; Tier 4 - Additional High-Cost OptionsGeneric drugs (Tier 1); Preferred brand drugs (Tier 2); Non-preferred brand drugs (Tier 3)Tier 1: Preferred Generic; Tier 2: Generic; Tier 3: Preferred Brand; Tier 4: Non-Preferred Drug; Tier 5: Specialty TierGeneric drugs (Tier 1); Preferred brand drugs (Tier 2); Non-preferred brand drugs (Tier 3); Specialty drugs (Tier 4)Generic drugs (Tier 1); Preferred brand drugs (Tier 2); Non-preferred brand drugs (Tier 2); Specialty drugs (Tier 4)
drug_classnot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
tier_codenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
Pharmacy Networks
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
network_idnot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
namenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
network_typenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
default_day_supplynot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in examplenot in example
Coverage Stages
Normalized FieldBlue CrossGatorCareSCANAetnaUHCCignaHumanaAmbetterKaiser
stage_idnot in examplenot in exampleDEDUCTIBLE; INITIAL; CATASTROPHICnot in examplenot in examplenot in exampleDEDUCTIBLE; INITIAL; CATASTROPHICnot in examplenot in example
namenot in examplenot in examplePart D Deductible; Initial Coverage Stage; Catastrophic Coverage Stagenot in examplenot in examplenot in exampleDEDUCTIBLE; INITIAL COVERAGE; CATASTROPHIC COVERAGEnot in examplenot in example
stage_typenot in examplenot in exampledeductible; initial; catastrophicnot in examplenot in examplenot in exampledeductible; initial; catastrophicnot in examplenot in example
Pharmacy Tier Codes
drug_classtier_code (FHIR DrugTierVS)
preferred_genericpreferred-generic
genericgeneric
preferred_brandpreferred-brand
nonpreferred_brandnon-preferred-brand
preferred_specialtyspecialty
nonpreferred_specialtyspecialty
preventivezero-cost-share-preventive

Each carrier column is read from that carrier's example file in the schema repo's examples/ directory. The Aetna column uses aetna_example.json, one of the two Aetna examples.

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_id
  • carrier
  • plan_type
  • market

Network Tiers​

Mappings for:

  • In-network / out-of-network naming
  • Tier structures
  • Carrier-specific vocabulary

Accumulators​

How each carrier expresses:

  • individual_deductible
  • family_deductible
  • individual_oop_max
  • family_oop_max
  • oon_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.)

In the matrix, the Limits cells describe how each source document lays out its limits. Among the ten examples, the two Summary of Benefits files carry structured limits[] (on 17 benefits for Humana and 18 for SCAN), one SBC file (bluecross_example.json) carries a single visit limit, and the other seven carry none.

Conditions​

Mappings for:

  • prior authorization
  • referral requirements
  • contextual notes

In the matrix, the Conditions cells describe how each source document lays out its conditions. Among the ten examples, only the two Summary of Benefits files carry structured conditions[].

Source Reference​

Extracts and page references used for ingestion traceability.

Pharmacy Module (draft v0.2.0)​

Draft, non-normative

The pharmacy crosswalk tabs render the BPS pharmacy module, a draft module whose shapes the core v1.2.0 draft carries since draft 6. The module schemas are served at their $id addresses, https://benefitplanstandard.org/modules/pharmacy/v0.2.0/pharmacy.schema.json and https://benefitplanstandard.org/modules/pharmacy/v0.2.1/pharmacy.schema.json. Like the medical tabs, the pharmacy tabs are sourced from a versioned repo file (docs/specification/pharmacy-crosswalk-data.json), and each carrier column is read from that carrier's example file in the schema repo's examples/ directory. Pharmacy Tiers shows the drug tier labels each example file records. Coverage Stages is filled only for Humana and SCAN, the two Summary of Benefits examples, because only they carry pharmacy.coverage_stages. A cell that reads "not in example" is a value the example file does not carry.

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_class values to the canonical FHIR DrugTierVS tier_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 to benefits[].cost_shares.copay.
  • Deductible expressions

    • GatorCare lists medical and pharmacy separately
    • Aetna merges them
      The crosswalk clarifies how to populate individual_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 matrix is regenerated from the data files on every site build. The schemas it maps to are served at their $id addresses, for example https://benefitplanstandard.org/schema/v1.2.0/benefit-plan.schema.json.