Claims, Payers, and Insurance - synthetichealth/synthea GitHub Wiki

This page provides a brief overview of the "health economics" built into Synthea, covering claims, costs, payers, insurance, and related details.

Costs

See our wiki page on Cost Data for additional details.

Let's start with costs. Dollars and cents.

Every piece of care provided to our synthetic patients costs some synthetic money.

If you are using default settings, this synthetic money is USD. If you are running with synthea-international configuration files, the synthetic money can be Canadian Dollars, British Pounds Sterling, Euros, or whatever synthetic money you want. We don't care.

The base prices can be found in src/main/resources/costs, where there are CSV files for encounters, immunizations, medications, and procedures.

Each of these CSV files contains a code with associated min, mode, and max costs. Whenever care is provided that matches the code, the price is randomly drawn from a Triangular Distribution using the min, mode, and max costs.

If no code was a match, then default costs are used, which are defined in synthea.properties:

# Default Costs, to be used for pricing something that we don't have a specific price for
# -- $500 for procedures is completely invented
generate.costs.default_procedure_cost = 500.00
# -- $255 for medications - also invented
generate.costs.default_medication_cost = 255.00
# -- Encounters billed using avg prices from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3096340/
# -- Adjustments for initial or subsequent hospital visit and level/complexity/time of encounter
# -- not included. Assume initial, low complexity encounter (Tables 4 & 6)
generate.costs.default_encounter_cost = 125.00
# -- https://www.nytimes.com/2014/07/03/health/Vaccine-Costs-Soaring-Paying-Till-It-Hurts.html
# -- currently all vaccines cost $136.
generate.costs.default_immunization_cost = 136.00

The randomly drawn (or default) cost is then adjusted, using geographic adjustment factors (by State) that are located in the adjustmentFactors.csv file.

Costs may be paid by insurance or out of pocket, depending on the situation.

If the costs in your country or market are different, feel free to override these costs to be lower or higher, or converted to your unit of currency (Drachmas, or Euros, or Pieces of Eight, or whatever).

Payers

If there are costs, they have to be paid some how or by someone. These can be out of pocket expenses, but typically they are covered by a "payer" or insurance plan. Synthetic patients can purchase private insurance, or be covered by government/public insurance. The available payers are configurable in the src/main/resources/payers/insurance_companies.csv file.

The keys fields in the payer file are deductible, default_coinsurance, default_copay, monthly_premium, and ownership.

  • deductible: a threshold of how much a synthetic patient has to pay out of pocket before medical expenses are covered by insurance.
  • default_coinsurance: the percentage of the cost paid by the insurer (where 0.95 is 95%).
  • default_copay: how much a synthetic patient has to pay up front, out of pocket, for each visit.
  • monthly_premium: the monthly cost paid by the synthetic patient to maintain insurance coverage.
  • ownership: Government or Private.

Be sure to adjust insurance parameters in synthea.properties if required:

# Payers
generate.payers.insurance_companies.default_file = payers/insurance_companies.csv
generate.payers.insurance_companies.medicare = Medicare
generate.payers.insurance_companies.medicaid = Medicaid
generate.payers.insurance_companies.dual_eligible = Dual Eligible

Payers: Universal Healthcare or National Health Insurance

I have read criticisms that the financial model of Synthea is US-centric and doesn't allow for situations like Universal Healthcare or a National Health Insurance (i.e. "Single Payer") plan. This is only partially true. If you want to create this situation: simply remove all payers, then make a single Government payer with 0 (or the appropriate amounts in the country of your choice) for the deductible, default_coinsurance, default_copay, and monthly_premium, and set the default_coinsurance to 1.0 (or 100%).

Payers: Haggling or "Adjustments" (Optional)

In the real world United States, insurance companies or "payers" often haggle over what they pay, or refuse to pay, or will make an "adjustment" to a bill to account for what they are willing to pay.

How or why this works is beyond the scope of this meager wiki page. However, you can enable the insurance companies in Synthea to engage in similar practices. This behavior is disabled by default -- you must explicitly enable it using the following synthea.properties configuration settings:

# Payer adjustment behavior
# How payers adjust claims:
#  none - the payer reimburses each claim by the full amount.
#  fixed - the payer adjusts each claim by a fixed rate (set by adjustment_rate)
#  random  - the payer adjusts each claim by a random rate (between zero and adjustment_rate).
generate.payers.adjustment_behavior = none
# Payer adjustment rate should be between zero and one (0.00 - 1.00), where 0.05 is 5%.
generate.payers.adjustment_rate = 0.10

Insurance Market

How do our synthetic patients select insurance?

If Medicare or Medicaid are contained in the insurance_companies.csv files, then eligibility criteria are used for enrollment.

Otherwise, synthetic patients will select plans (or no insurance) based on selection_behavior and mandates.

The default selection_behavior is random -- where a patient will randomly select a new insurer for every qualifying life event (e.g. adulthood, marriage, job change).

The other available selection_behavior is best_rates -- where a patient will select a new insurer on the best available cost. However, keep in mind that research has shown that this is not how patients in the United States select insurance plans in practice (e.g. in the United States it is often tied to employment).

If a "Universal Healthcare or National Health Insurance" model was implemented then the same plan will be selected each time, regardless of selection_behavior.

# Payer selection behavior
# How patients select a payer:
#  best_rates - select insurance with best rates for person's existing conditions and medical needs
#  random  - select randomly.
generate.payers.selection_behavior = random

Another set of parameters to consider are the mandate parameters. These represent something like the Affordable Care Act, the Massachusetts Individual Mandate, or other foreign Universal Healthcare plans.

# in Massachusetts, the individual insurance mandate became law in 2006
# in the US, the Affordable Care Act become law in 2010,
# and individual and employer mandates took effect in 2014.
# mandate.year will determine when individuals with an occupation score above mandate.occupation
# receive employer mandated insurance (aka "private" insurance).
# prior to mandate.year, anyone with income greater than the annual cost of an insurance plan
# will purchase the insurance.
generate.insurance.mandate.year = 2006
generate.insurance.mandate.occupation = 0.2

If you want compulsory insurance plans for everyone (regardless of the historical accuracy), change the mandate year to something like 1900 and the mandate occupation to 0.

Export Options

Okay, so you reconfigured the economics of healthcare in Synthea, and you want to see the claims? So, how do you find them?

Claims are available in different ways in the different export formats.

If you export HL7 FHIR, then you may have Coverage and ExplanationOfBenefit resources to examine.

Other options include CPCDS export and the CSV export.

Most people find the CSV exporter the easiest to use, but it is not an international standard like HL7 FHIR, so don't be fooled into thinking our CSV format is representative of real-world data repositories.

The CSV format contains Claims and Claims Transactions tables, where the Claims table includes overall claim information for each encounter, and the Claims Transactions table includes data for each transaction for each line item (in other words, each financial action related to each and every activity that occurred during the encounter).

Otherwise, the CSV format features:

  • Each Encounter has a Base_Encounter_Cost, Total_Claim_Cost, and Payer_Coverage.
  • Each Immunization has a Cost.
  • Each Medication has a Base_Cost, Payer_Coverage, number of Dispenses, and a TotalCost.
  • Each Procedure as a Base_Cost.
  • Each Patient has a summation of Healthcare_Expenses and Healthcare_Coverage.
  • Each Payer has a summation of Amount_Covered, Amount_Uncovered, and Revenue.