The Business Use Case

Every cell in the body produces cholesterol. Additional cholesterol, received through the diet, is absorbed by the small intestine. Both synthesized and absorbed cholesterol play a role in atherosclerosis development as it all, sooner or later, ends up in LDL.

Blocking cholesterol synthesis with a statin lowers LDL cholesterol as does blocking cholesterol absorption with an inhibitor like Ezetimibe (otherwise it’s repetitive). Every person is different when it comes to cholesterol balance. Some people synthesize cholesterol more than they absorb, while others absorb more than they synthesize. Knowing whether a patient is a hyper synthesizer or a hyper absorber allows for better treatment as response to drug therapy varies accordingly. A synthesizer responds well to a statin while a hyper absorber may benefit more from combination therapy with Ezetimibe. Knowing what therapy works best in advance will allow for a more successful and cost effective treatment strategy.

Lathosterol, the direct precursor of cholesterol, can be measured in plasma or serum. Eighty percent of synthesized cholesterol goes through lathosterol, while only 20% goes through desmosterol. Therefore lathosterol is the only valid marker of cholesterol production. People who overproduce cholesterol have elevated levels of lathosterol normalized to total blood cholesterol levels. Markedly elevated levels of lathosterol identify patients with increased risk of premature coronary heart disease.

This decision service analyzes lab results to determine risk and lifestyle and therapy options

Building the Data Model

We first identify the business objects required for this model:

And the relationship between them:

Patients will have zero or more lab results and after the rules have executed there will be zero or more plugins (objects that contain the conclusions and recommendations made by the rules)

Figure 1 Vocabulary

Modeling the Rules

R1-R9 The Main Rules

Let’s take a look at the main rules that look at cholesterol production and absorption classifications.

Each of these can be classified as Optimal, Borderline or High.

This means there are 3x3=9 possible combinations to deal with.

The Appendix lists each of the nine rules.

Here are two of them:

The first step in modeling these rules is to copy/paste the rules into the rule statement section of the rule sheet:

Then each combination of value can be mapped out in the rule columns

Then we add the appropriate action for each of the nine cases.

Here are the first few rules

Figure 2 The Core Rule Sheet

The actions of the rules are to create the text values that will be in the plugin objects that eventually appear on the report.

The syntax is basically plugin += Plugin.new[text=’xxxxx’]

Which means create a new plugin object with a text value of ‘xxxxx’ and add it to the list of plugins for this patient.

In the case of rules 1 and 2 the text is fixed. But in rule 3 you can see how a variable text value (Ezetimibe) can be embedded in the text by using the keyword cellValue.

The Concept of Scope

Because the data model contains relationships between the Patient object and the LabResults and Plugins we need to tell the rule sheet what part(s) of the hierarchy we will be using. This is important because it enables Corticon to make sure that when it analyzes lab results it’s using the ones that belong to the correct patient.

Here’s the scope section:

Notice the names in square brackets [ ]. These are aliases to the objects that we use in the rules.

So the reference to production.classification means the classification of the lab result passed in.

But how do we know which of the many lab results this actually refers to?

That’s where the filter section comes into play:

The filters tell us that the production classification that’s being tested is called Lathosterol and the absorption classification is called “Cholesterol Absorption”

But that’s not one of the lab results that is passed in to the rules.

What does get passed in are the classifications for Beta-Sitosterol and Campesterol and the documented rules tell us that we need to take the higher of these two classifications.

That leads us to a subordinate rule sheet whose purpose is to compare Beta-Sitosterol and Campesterol and determine the higher classification.

Here’s the first few rules of that sheet:

Figure 3 Rules for Absorption Classification

Notice that the action of these rules is to create that missing “Cholesterol Absorption” lab result as an instance of a new business object called ComputedLab. That’s what gets referred to in the previous rule sheet for absorption classification.

These two sheets will then work in conjunction. To show this we put them in the rule flow diagram:

At this point we have the main rules for this decision.

But there are a lot of special cases and exceptions described in the documentation.

From a business rules perspective these are not special cases or exceptions – they are simply more business rules that are required for a complete solution.

Let’s work through some of these.

R10-R15 Very High Values

Rules 10-15 deal with Very High levels of lipids. E.g.

One way to model this (there are always alternatives) is:

Figure 4 Very High Value Rules

However it’s possible that the calling application may already provide the AVH classification in the input data

R16-R19 Below Detection Limit

Rules 16-19 deal with values below the detection limit

This can be modeled like this

Figure 5 BDL Rules

D2 Missing Values

This can be modeled as

Figure 6 Missing Values Rules

D1 Variations in Lathosterol and Desmosterol Classifications

Figure 7 Lathosterol/Campesterol Differences

Question: Does this only apply to optimal, borderline and high or to all classifications?

Assembling the Decision service

The rule flow is the mechanism for assembling a decision service from the various rule sheets:

For example:

Figure 8 The Rule Flow

We can specify the properties of this rule flow as follows:

Figure 9 Rule Flow Properties

Alternative Structure

If we later decide to do the classification inside Corticon we would simply add rule sheets for each of the lipids:

Lathosterol could look like this:

Figure 10 Classification Rules for Lathosterol

Based on these definitions

Handling Ranges in lookup Tables

We can store the classification ranges in a database lookup table like this

Figure 11 Classification Ranges in a Database

But are we sure there are no ambiguities or missing ranges?

Can you see the problem with this table?

Detecting Ambiguous Ranges

Figure 12 Detecting Ambiguous Tanges

Detecting Missing Ranges

This rule sheet will add missing ranges with a classification of ‘UNDEFINED’

Figure 13 Detecting Missing Ranges

Reporting missing ranges

The Range Check Rule Flow

Deployment

Publishing decision services.

Note: Two (slightly) different rule flows (with differing versions and effective dates) but both have the SAME decision service name.

Calling applications only need to supply the name – Corticon will execute the appropriate version automatically.

OPTIMAL cholesterol production and BORDERLINE absorption may be associated with elevated LDL-C levels and increased heart disease risk.

Lifestyle modification and ezetimibe therapy if LDL-C lowering is indicated.

7. Optimal Production, High Absorption

OPTIMAL cholesterol production and HIGH absorption may be associated with elevated LDL-C levels and increased heart disease risk.

Lifestyle modification and ezetimibe therapy if LDL-C lowering is indicated.

8. Optimal Production, Optimal Absorption

OPTIMAL cholesterol production and OPTIMAL absorption.

(no treatment considerations)

9. Borderline Production, Optimal Absorption

BORDERLINE cholesterol production and OPTIMAL absorption may be associated with elevated LDL-C levels and increased heart disease risk.

Lifestyle modification and statin therapy if LDL-C lowering is indicated.Additional statements to appear along with interpretations selected from 1-9 above:

10. Very High Lathosterol (Action Value)

Lathosterol level is very HIGH at [__]mg/L, consistent with markedly increased cholesterol production.

11. Very High Desmosterol (Action Value)

Desmosterol level is very HIGH at [__]mg/L, consistent with markedly increased cholesterol production..

12. Very High Beta-Sitosterol and Campesterol (Action Value)

Beta-sitosterol level is very HIGH at [_] mg/L. Campesterol level is very HIGH at [_] mg/L. Very high absolute cholesterol absorption values may be associated with elevated LDL-C levels, tendon xanthomas, phytosterolemia and increased heart disease risk.

13. Very High Beta-sitosterol (Action Value)*

Beta-sitosterol level is very HIGH at [__]mg/L, consistent with markedly increased cholesterol absorption and may be associated with elevated LDL-C levels, tendon xanthomas, phytosterolemia, and increased heart disease risk.

14. Very High Campesterol (Action Value)*

Campesterol level is very HIGH at [__]mg/L, consistent with markedly increased cholesterol absorption and may be associated with elevated LDL-C levels, tendon xanthomas, phytosterolemia, and increased heart disease risk.

15. Very High Cholestanol (Action Value)

Cholestanol level is very HIGH at [__]mg/L, and may be associated with tendon xanthomas, neurological disease, and cerebrotendinous xanthomatosis.

Cholesterol Balance score could not be calculated due to technical limits of the assay.

C. Classifications/Grouping

A. Note for programming with regard to production: always use the normalized lathosterol to categorize people as optimal, borderline, or high, even if there is an alert value on desmosterol (reason: 80% of the production goes through lathosterol).

B. With regard to absorption use only normalized beta-sitosterol and normalized campesterol, even if there an alert value very high cholestanol, for normalized beta-sitosterol and campesterol, the higher value supercedes the lower value:

if the absorption markers are borderline/borderline, the call is borderline

if the absorption markers are borderline/low, the call is borderline

if the absorption markers are borderline/high, the call is high

if the absorption markers are optimal/borderline, the call is borderline

D. Exception Handling

If desmosterol is at different category level (optimal, borderline or high) than lathosterol: insert statement: “Desmosterol accounts for 20% of production.”

If any value is missing (usually desmosterol for older patient reports), XXXXXXXXXXX (currently not possible with Boolean structure – current Interpretation #22)

If LDL-C level is very high (>XX), the normalized values will show one category: optimal, borderline, high; while the absolute values may be very high, in the reportable range. In the event of discordance, insert comment: “Normalized values are skewed by extremely high LDL-C levels.”