Summary of Benefits and Coverage (SBC) FHIR Implementation Guide
0.1.0 - ci-build
Summary of Benefits and Coverage (SBC) FHIR Implementation Guide, published by SBC FHIR Project. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/jdjkelly/fhir-sbc/ and changes regularly. See the Directory of published versions
This page provides an overview of the profiles defined in this implementation guide.
Profile: SBCInsurancePlan
Purpose: Constrains the base FHIR InsurancePlan resource to represent Summary of Benefits and Coverage (SBC) documents as required under ACA Section 2715.
name - Plan name must be providedstatus - Fixed to "active"period - Coverage period must be specifiedownedBy - Plan issuer organization requiredcontact - At least one contact method requiredplan - At least one plan with cost details requiredplan.specificCost - Cost-sharing for benefit categories requiredidentifier - Business identifiers (e.g., HIOS ID)coverage.benefit - Benefit category detailsplan.generalCost - Overall deductibles and OOP limitscoverage.benefit.type - Required binding to SBC Benefit Category ValueSetplan.type - Extensible binding to SBC Plan Type ValueSetplan.specificCost.category - Required binding to SBC Benefit Category ValueSetplan.specificCost.benefit.type - Required binding to SBC Benefit Category ValueSetplan.specificCost.benefit.cost - Minimum of 2 (to capture both in-network and out-of-network).applicability (in-network vs out-of-network)Use plan.generalCost for plan-wide costs that aren't specific to individual benefits:
plan.generalCost[0]
.type.text = "Individual Deductible"
.cost.value = 1500
.cost.currency = #USD
plan.generalCost[1]
.type.text = "Individual Out-of-Pocket Maximum"
.cost.value = 6000
.cost.currency = #USD
Use plan.specificCost for each of the 27 SBC benefit categories:
plan.specificCost[x]
.category = #primary-care-visit
.benefit[0]
.type = #primary-care-visit
.cost[0]
.type.text = "Copayment"
.applicability.text = "in-network"
.value.value = 25
.value.unit = "USD"
.cost[1]
.type.text = "Not covered"
.applicability.text = "out-of-network"
For benefits not covered by the plan, still create entries with $0 or appropriate indicator:
plan.specificCost.benefit.cost
.type.text = "Not covered"
.applicability.text = "out-of-network"
.value.value = 0
For percentage-based cost-sharing, use the % unit:
plan.specificCost.benefit.cost
.type.text = "Coinsurance"
.applicability.text = "in-network"
.value.value = 20
.value.unit = "%"
Use the benefit requirement field and limitation extension:
coverage.benefit[x]
.type = #specialist-visit
.requirement = "Referral required from primary care physician"
.extension[limitation].valueString = "Limited to network specialists only"
The profile uses three extensions defined in this IG:
Captures regulatory disclosures:
extension[sbcMetadata]
.extension[sbcVersionDate].valueDate = "2021-01-01"
.extension[minimumEssentialCoverage].valueBoolean = true
.extension[minimumValue].valueBoolean = true
.extension[abortionCoverage].valueCodeableConcept = ...
Documents services not covered:
extension[excludedServices]
.extension[service][0]
.extension[serviceType].valueCodeableConcept.text = "Cosmetic surgery"
.extension[description].valueString = "Services for cosmetic purposes are not covered"
Provides benefit-specific limitations:
coverage.benefit.extension[limitation].valueString = "Prior authorization required for non-emergency admissions"
Implementations should ensure:
plan.specificCostThis profile is designed to complement, not replace:
The SBC profile focuses on plan-level benefit summaries for consumer comparison, while other standards address different use cases (provider directories, claims data, pricing).
Potential future additions to this profile: