Kevin Cress

Coding, Fishing, & Other Stuff

Open Source EDGE Server File Processing Project

Drawing of doctor handing over a prescription for Open Source software
Image by:
For a little over a year I have been working as a software consultant at a health insurance company. Most of the work that I have been doing has been in relation to the health insurance marketplace (you may know it as, ObamaCare, the Affordable Care Act, the health care exchange, or one of many other monikers).

One of my current projects involves the EDGE server, which is a way for CMS to collect anonymous data from insurers in order to run analyses for the risk adjustment and reinsurance programs. Risk adjustment and reinsurance are two ways that the government accounts for risk selection and adverse selection. 

Sick people or people who have just had major medical problems are more likely to purchase health insurance if they are not covered and they are very likely to make claims. This is known as adverse selection. The ACA deters adverse selection by setting open enrollment periods, setting penalties for not having insurance, and providing tax subsidies as an incentive to buy insurance before it is needed. Even with these measures in place, insurers may be hesitant to offer marketplace plans and/or may feel the need to set prices higher to offset the higher costs of higher-risk enrollees.

Since insurers can't take pre-existing conditions into account anymore to deny coverage or charge higher premiums, they may be tempted to exclude these higher-cost enrollees by other means. Insurers may exclude certain benefits, only cover selected drugs in their formularies, and only offer high deductible plans on the marketplace in order to deter those with pre-existing conditions. This is bad because it makes the marketplaces less effective -- insurers are not trying to provide the most value to their customers, they are trying to attract the healthiest enrollees in order to save money. This is known as risk selection.

Risk adjustment helps insurers offset the cost of adverse selection. Risk adjustment redistributes money from plans with lower-cost enrollees to plans with higher-cost (higher risk) enrollees. Reinsurance discourages risk selection. Reinsurance pays plans that enroll higher-cost people, which keeps premiums lower. Both programs keep insurance companies from changing their premiums significantly as they try to figure out the best way to price coverage now that they must cover high-risk enrollees.

The EDGE server collects anonymous enrollment and claims data from insurers and then uses the data to calculate risk adjustment and reinsurance. 

At AultCare I am working on a project for their EDGE server solution. We are working on an open source solution for loading the anonymous data and generating the necessary XML files to put on the EDGE server. This is AultCare's first open source project. There are a few reasons why we chose to open source this project:
    1. There are many insurers looking for a solution. Some are going with a third party solution to handle their EDGE server needs. The rest of us are all writing the same programs to do the same thing. Across the country. Why have hundreds of different implementations of the same process when we can all use the same process and work together to make it fast and efficient?
    2. This is new to everyone. There are similar processes in the Medicare world, but nothing quite like this.  It would be beneficial to all involved to combine our knowledge and work together to come up with a solution.
    3. Faster response to changes -- everyone benefits because with multiple people working on the project there is more of a chance that someone would be available to make updates as requirements and rules change.
Right now there are two parts of this project. The core project generates the XML based on the XSDs and business rules provided in the CMS documentation. The API takes data in and sends it to be processed by the core project, which generates the XML files. Most of my work has been in the core project so far. Issuers would be responsible for figuring out how to gather their enrollment and claims data and send it via the API.

Our project can be found on GitHub here. Anyone is welcome to contribute, whether it be by writing code or by making suggestions. The project is a C# ASP.NET Web API project. Web API was chosen because it allows a great deal of flexibility -- you can host the .NET project and then make calls to the RESTful API using whatever in-house process is most convenient for your organization.

Five SOLID Weeks

I recently decided that I wanted to thoroughly understand the SOLID principles, so I decided that each week I would take the time to focus solely on one of the principles. Since I've done this I've not only gained a better understanding of each principle, but I also feel like the quality of my code has improved.

This has been a really helpful exercise for me, so I've decided to write a post to summarize each principle and provide the resources that I found helpful to fully understand the concepts.

Taking the time to understand the SOLID principles ensures that your code is easier to maintain and re-use, two things that are very important in software development. You will save time and avoid frustration if you write your code with these best practices in mind.

Let's start with a summary of what SOLID is -- here's what Wikipedia has to say:

  • Single responsibility principle - a class should only have a single responsibility
  • Open/close principle - software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification

  • Liskov substitution principle - objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program

  • Interface segregation principle - many client-specific interfaces are better than one general-purpose interface

  • Dependency inversion principle -  Depend upon Abstractions. Do not depend upon concretions. 

In the next post we'll look at the Single Responsibility Principle to see why a class should only have one purpose.

Our winter project -- 1986 Bass Tracker rebuild

My wife, my brother-in-law, and I spent some time this winter rebuilding our 1986 Bass Tracker. We replaced the decks (wood and carpet), extended the front deck, wired up the second livewell, added a rod locker with PVC pipes that run to the very front of the boat, reorganized and simplified all of the wiring, replaced all of the seats and more.

We've still got some small things to do yet. One of the doors needs to be re-attached, there are some pieces of carpet that still need trimmed, and some other odds and ends. Thankfully my father-in-law is letting us work in his heated garage or else we would not be working on this!

Here are some pictures of our progress:

Here's a better picture of the rod locker that we added: