CIMI Entry-in-Entry Discussion

The concept of Entries in Entries has generated a lot of discussion. Some posts made on the CIMI list reproduced here.


Ian McNicoll - 13 / Jan / 2014

 

Hi Cecil,

I think if you replace Thomas's terminology and example with the following,it might help
A. Single analyte 
ENTRY.Laboratory_test (Name = LaboratoryTest)
  data
    ELEMENT [id2] Information Subject = "12345"
    ELEMENT [id3] Date = "1013-12-12"
    ELEMENT [id4] Test Name = "LOINC | 15074-8| Glucose [Moles/volume] in Blood |" => This is the ordered test name equivalent to HL7v2 Universal Test Identifier OBR-4 segment
    ELEMENT [id5] Overall Interpretation = "something"
    CLUSTER.blood glucose_result (Name = "Blood glucose Result" = CLUSTER archetype filling a slot in the ENTRY
        ELEMENT [id2] Result Analyte Name = "LOINC | 15074-8| Glucose [Moles/volume] in Blood |"
        ELEMENT [id3] Result Value = "8.8 mmol/l"
        ELEMENT [id4] Interpretation = "Normal"
which is specialisation of a generic CLUSTER archetype
    CLUSTER.lab_analyte_result.v1 (Name = "Analyte Result"
        ELEMENT [id2] Result Analyte Name
        ELEMENT [id3] Result Value 
        ELEMENT [id4] Interpretation
B. The same analyte reported within a panel.
ENTRY Laboratory_test (Name = LaboratoryTest)
  data
    ELEMENT [id2] Information Subject = "12345"
    ELEMENT [id3] Date = "1013-12-12"
    ELEMENT [id4] Test Name =  "LOINC |51990-0| Basic metabolic panel- Blood|" => This is the ordered test name equivalent to HL7v2 Universal Test Identifier OBR-4 segment
    ELEMENT [id5] Overall Interpretation = "something"
    CLUSTER SLOT [id6]
       CLUSTER.blood glucose_result (Name = "Blood Glucose Result" 
          ELEMENT [id2] Result Analyte Name ="LOINC | 15074-8| Glucose [Moles/volume] in Blood |"
          ELEMENT [id3] Result Value = "8.8 mmol/l"
          ELEMENT [id4] Interpretation = "Normal"
  
   CLUSTER SLOT [id6]
         CLUSTER urea_result (Name = "Urea Result"
           ELEMENT [id2] Result Analyte Name ="LOINC | 59570-2 | Urea nitrogen [Moles/volume] in Blood |'
           ELEMENT [id3] Result Value = "4.7 mmol/l"
           ELEMENT [id4] Interpretation = "Normal"
A path -based query such as AQL or xquery  to return a Glucose result would look something like
ENTRY.Laboratory_test/data/[id6 = 'CLUSTER.lab_analyte_result'/[id2 = "LOINC | 59570-2 | Urea nitrogen [Moles/volume] in Blood |"]/value/value
I don't know how LOINC subsumption works but in AQL we can apply any inferencing supported by the terminology e.g.
ENTRY Laboratory_test/data/[id6 = 'CLUSTER.lab_analyte_result'/[id2 = "is_a LOINC |  | Urea nitrogen in Blood |"]/value/value
We could also, of course, apply subsumption testing to the Lab Test Name 'orderable' LOINC code.
Does that make sense?
The key difference about this pattern from the current openEHR examples in use is that by dropping the analyte into a separate CLUSTER archetype, we can constrain the appropriate datatype/ units etc and quite possibly auto-generate create a library of CLUSTER lab analyte archetypes with some of those constraints taken from LOINC. We retain the flexibility to represent single analytes, variant panels, or even ad-hoc local groupings.
There are a number of subtle changes I would probably suggest to the models above but I think the solution is close enough for these discussions.
Ian


On 13 January 2014 16:16, Cecil Lynch <clynch@surewest.net> wrote:
Thomas, it looks like you make the path the same by altering the meaning of what a panel is. I I have never seen a hematocrit expressed as a panel. Maybe this doesn't make a difference but I would think at some point in time one would want to know the difference between panels and elemental values. If for nothing else, it will be difficult to query  LOINC codes appropriately in a subsumption query so you would have to maintain a separate mechanism or query against the LOINC hierarchy as a restriction mechanism.

How do you do that now in your models?

Cecil

Ian McNicoll - 08/Jan/2014

I have been lurking in this discussion for a while and I thought I
should clarify how we currently model Lab Tests in openEHR, and how
(with some provisos) it is possible to have consistent querying for
lab panels vs. single analytes.

A simplified representation of the base Lab Test archetype is

ENTRY lab_test
   ELEMENT Name = "Test Name" (The ordered test) Value = xxx
   CLUSTER
       ELEMENT Name = "Result value"  Value = yyy
       ELEMENT Name = Comment Value = zzz

A. For a single analyte this would become

ENTRY lab_test
   ELEMENT Name = "Test Name" Value = "Blood glucose" - normally a
coded term e.g LOINC code
   CLUSTER Name = "Result"
       ELEMENT Name = "Glucose"  Value = 11.2 - the analyte 'name is
epxressed as an override of the original "Result Value" and normally a
coded term.
       ELEMENT Name = "Comment" Value = ""

The query path to the analyte is

ENTRY lab_test/"Result"/"Glucose"/value

B. For a single panel this would become

ENTRY lab_test
   ELEMENT Name = "Test Name" Value = "SMAC" - normaly a coded value
e.g LOINC code
   CLUSTER Name = "Result"
       ELEMENT Name = "Urea"  Value = 11.2
       ELEMENT Name = "Comment" Value = ""
   CLUSTER Name = "Result"
       ELEMENT Name = "Glucose"  Value = 6.3
       ELEMENT Name = "Comment" Value = "Improving"

The query path to the blood glucose analyte remains

ENTRY lab_test/"Result"/"Glucose"/value

Of course you can assume that all analyte and test names would come
from a ref terminology like LOINC or SNOMED.

This pattern gives the flexibility to construct 'fixed' panels - an
example being the Lipid studies panel that Thomas used, where there
does appear to be pretty strong consensus on content , but in the main
the panels are constructed dynamically art run-time, in response to
the content of the lab message, by specialising the original "Result"
cluster and the Analyte name element.

As long as we use a consistent terminology, the analyte results are
iso-queryable, irrespective of whether they are recorded as single
analytes or as a panel.

One drawback of this approach is that we are dynamically allocating
the datatype to the analyte element as it is received from the lab.

The NEHTA path_test archetype which we are thinking of adopting
internationally, does things a little differently but the base
principle is identical.

One option that appears not to have been considered is to use ELEMENT
archetypes to represent the analyte

e.g.

ELEMENT lab_analyte,v1
 specialised to carry the datatype, units etc as well as the
appropriate term-bindings.

These ELEMENT archetypes would really be treated much more like a
reference terminology - essentially carrying the same knowledge as
LOINC but in an immediately implementable format, pluggin in to the
parent lab_test ENTRY archetype


ENTRY lab_test.v1
   ELEMENT Name = "Test Name" Value = "Blood glucose" - normally a
coded value e.g LOINC code
   CLUSTER Name = "Result"
       SLOT
           ELEMENT.lab_analyte.v1 Name = "Glucose"  Value = 11.2
       ELEMENT Name = "Comment" Value = ""


In this way panels can also be constructed as specialisations or at
run-time, but additional knowledge is captured in the archetype.


I hope I have not further added to the confusion!

I also agree with William and Daniel that we should be trying to
devise 'Common Shared Models of Use' which happen to make use of some
\Models of Meaning' in the use of reference terminology. Trying to do
this kind of exercise as pure 'Models of Meaning' is, I agree with
Daniel, almost impossible.

An initial analysis by T Beale 10/Jan/2014

Labs....

When it comes to labs, the openEHR clinical modellers have treated them somewhat like ENTRYs, where groups of lab analytes have been modelled e.g. cholesterol result is an OBSERVATION containing the data points LDL, HDL, triglycerides, ratio, total.

If we want to make something like a Chem 20 using this style of lab observation archetypes, it would be like the encounter example above - there would be multiple OBSERVATIONs put together, depending what was in the starting set of lab archetypes.

Stan does it differently. In his approach, there is one CEM for each lab analyte, with all attendant possible context information. He can then create a Chem 20 or a cholesterol test in the same way - everything is a panel. I suspect this is probably the right way to go, especially in modern times, when (as I understand it) a single blood sample can be tested for many more things than once was the case.

So if we were to adopt that style in openEHR & CIMI, what would it look like?

Solution 1 - each lab analyte = 1 ENTRY (OPTION 1)

In this solution, every key lab analyte would now be its own OBSERVATION (ENTRY in CIMI). The potential problem in openEHR is that now we have on each OBSERVATION its own context. This is normally correct, since in the ante-natal encounter example, context information can (and does) differ between e.g. BP measurement and heart rate measurement.

But in labs, you presumably want some/most of the same context for all of the analytes. However, if each lab analyte = 1 ENTRY (giving us mix and match ability) then how do we get common context?

Let's assume it is true for now - let's assume that most of the context information for all the Chem 20 analytes is the

So this is where the ENTRY-in-ENTRY question comes up. It looks like we want ENTRYs in ENTRYs to deal with this problem, leading people to want an OPTION 6-like approach. However we don't! That destroys the idea of what an ENTRY is (an indivisible unit of context and data). It means that this modelling approach is not quite correct given an RM based on the ENTRY concept.

Solution 2 - each lab analyte = 1 CLUSTER (OPTION 2b)

In this solution, each key lab analyte is modelled as its own CLUSTER, and uses a patten like that shown in option 2b on the slides (I would just name the CLUSTER with the analyte name, and delete the first ELEMENT in every case. But that's a detail). [This is basically Ian's solution, as posted the other day.]

You still have to get the CLUSTERs into the ENTRY. That's done by having a lab panel ENTRY archetype containing a 1..* slot for lab analyte CLUSTERs. To build a lab panel, you template this and define exactly what lab analytes you want in there. If it happens that you consciously know that you have 2 or more separate 'panels' (e.g. separate samples, lab processing), you create an ENTRY for each panel.

But each panel ENTRY can contain exactly whatever you consider to be the 'panel'.

If the data is just a single key item, e.g. a Hematocrit, then you have an ENTRY containing just one CLUSTER (being the Hematocrit result CLUSTER). If you have a larger panel containing Hematocrit, it's the same, but now there are sibling CLUSTERs for the HGB, and other analytes.

So the querying for Hematocrit is identical in each case. In my view this solves the problem. I would also think that openEHR might investigate this kind of modelling for labs.

Non-Lab Information

Now comes the confusing bit. Stan would like to model a heart rate or a systolic BP as if it were a lab analyte, and be able to combine these non-lab data items in the same free way as above - in 'panels'. Now, while I understand that a nurse might get a Hematocrit, patient temp, and oxygen sat level at the bedside, I don't agree that this is a 'panel'. These are 3 different things, measured by completely different methods (all buried in sophisticated devices whose functioning mere mortals don't understand). They are potentially done at different times (maybe second apart, maybe minutes apart, maybe hours apart). They could easily be done by different people, if two nurses were there, or training was occurring.

So my view is that pretty much all other clinical data should be modelled more or less as we have it in openEHR - 1 ENTRY (OBSERVATION) = 1 observed phenomenon & observation protocol at one (or a concurrent series of) point(s) in time.

Why?

In general, these other data items have innate structure, specific to the measurement - and that includes the 'context' items specific to the measurement - protocol, patient state etc. An Apgar is what it is - always 5 x 0-2 score + 0-10 final score. You can't have an Apgar with only 4 of the sub-scores. A BP is always some structure containing sys+dia | MAP | PP | CVP | other weird BP + patient position, measurement location, cuff type/size etc. That whole structure is specific to BP measurement. Even the body position value set is different from body position for other measurements that care about body position. You can look through CKM to see many other examples. Docs here might disagree with specifics in some cases, but I think it's pretty clear that non-lab analyte data has its own interior structure.

Pattern Library

So in terms of 'patterns' I suggest that there are the following:

Components

Mix'n'match Lab analytes

Each analyte is a CLUSTER archetype containing what it potentially needs - looks a lot like OPTION 2b, and also Intermountains CEM library. We would potentially re-engineer or map current openEHR lab models to this pattern.

Non mix-n-match Lab results

Complex results like Microbiology are their own ENTRY archetype. Looks like an openEHR OBSERVATION (and I would think an HL7 OBSERVATION) structure.

Other Clinical observation data

Each data group is its own ENTRY archetype. Looks like openEHR OBSERVATIONs.

All other clinical information

Diagnoses, orders etc - these work mostly on a per-ENTRY basis as well, but let's leave this group for another day...

Collections

Lab Panel

Is one ENTRY, containing 1..* CLUSTERs each representing an analyte. Common context on the ENTRY is common to the whole panel; but each CLUSTER can include specific context items as needed.
Defining an actual panel means:

  • create a template of cimi-rm-ENTRY.lab_panel archetype
  • fill the 'panel items' slot with CLUSTERs representing the analytes
  • remove any items you don't want

this just gets you to the 'panel' stage - we don't yet have a 'lab report'! See below.

Health system events - data created for encounters, visits, lab reports, discharge summaries etc

A health system event is when a health professional(s) does something for the patient that can be considered a distinct event, that would cause information to be committed to the EHR. In openEHR, any such action will rsult in one or more COMPOSITIONs being committed or updated on the EHR. Updates can occur to care plan, discharge summary, meds list etc, as well as any other item where an error is being corrected.

A lab report - containing the panel results - plus all the lab order information - is a COMPOSITION.

COMPOSITIONs capture EHR commit audit information, attestation information, and are versioned and UID identified. They allow the EHR to be viewed as a version controlled information base.

I would recommend following this approach for CIMI - it works well in practice.

Conclusion

I think the key point I want to make here is that we can't treat things like Hematocrit and other potentially self-standing mix-n-match lab analytes in the same way as systolic BP, adverse reaction substance, or the many other data items that belong to data groups that have their own innate structure. As long as we stick to that, we have a nice solution for a pattern library.


On 11/01/2014 11:47, Gerard Freriks wrote:
Reading Thomas’ thoughts:
1-
Or we come to the conclusion that there are different kinds of things we want to group and each gets its preferred pattern.
How many different groups and preferred pattern can we think of?
Kinds of groupings I see:
- Lab panels,
- Finding panels (e.g. Blood pressure, …)
- Lists of Differential Diagnosis, lists of Diagnosis, health Issues, health problems, FOLDER stuff, etc.)
- Protocols/multi step procedures, pathways
- Concepts/constructs derived from other statements (BMI, …)
- Questionnaires with and without calculated results
- Scales with or without calculated results
- ...
- Panels consisting of any of these


Gerard

Agree on the general premise. But, I don't agree with the last line - 'Panels' consisting of any of these. I think a 'panel' is a specific thing, and 'collections' of heterogeneous things is something different. I think this particular issue is causing us real trouble in CIMI right now.

I think what's important are the abstract structures. I am going to try to reclassify below, but first I want to distinguish two kinds of 'context':

  • situation context - who / where / when - information about situation, i.e. places, people, time
  • specific context - information items that are not the key datum, but are typically required along with it, e.g.
    • patient state - exertion, position, etc
    • method/protocol - e.g. instrument, measurement protocol, device etc

On that basis a possible partial classification:

 

Abstract categoryCategoryDescriptionProposed CIMI Modelling pattern
Lab result categoriesLab Analyte logically atomic panel items that all have the same specific context structure
while logically atomic, due to the need of specific context items,
a container like a CLUSTER or higher is required; the key datum is
an ELEMENT containing a DATA_VALUE.

It may be possible to model every single Lab analyte using a single
ELEMENT archetype with LOINC coding - Stan doesn't do this however.
 Lab Panel one or more atomic panel items; situation context is same for all items in panelENTRY with slot for Lab Analyte CLUSTERs
 Lab ReportReport containing one or more panel result(s); carries audit + attestation, and other
specific context like order ids, lab comments etc
COMPOSITION containing one or more Lab Panels, plus top-level
situation context
    
QuestionnairesQuestionnaire itemlogically atomic question / answerCLUSTER containing ELEMENTs that model the natural language
form of the question (via terms), the meaning of the question,
and the possible result values.
 Questionnaire group / listset of Questionnaire items making up the logical questionnaire (equivalent to a
'panel' for questionnaires)
ENTRY containing one or more Questionnaire Item CLUSTERs
 Questionnaire formthe full thing, filled out, attested, committed to EHR; carries audit + attestationCOMPOSITION containing (usually?) one Questionnaire group
General clinical
information
structures
Clinical entry structure'molecular' information structure that is different for each content type,
and has the same situation context for all items. For general clinical information,
corresponds to the panel + analyte levels together, with free-form structure
ENTRY containing free structure of CLUSTERs and ELEMENTs,
making up the overall datum + specific context structure
 Clinical situation recordingcommitted report, document, or other artefact containing one or more Clinical
entry structures, potentially with added heading structure; carries audit + attestation
COMPOSITION containing one or more ENTRYs
Orders   
Actions   
etc   


I haven't treated computed / summed data items that appear in e.g. Apgar or BMI as special here, because I don't think they change the structure categories. They do of course require special features internal to their respective structures, but I think that's a separate question.

I think Lab results and Questionnaires should be treated as special kinds of collections, whose members are logical atoms of a standard mould, whereas most other clinical data is not like this - each thing is its own structure. There are probably other special kinds of collections as well.

You might not agree exactly (or at all) with the above but I think we have to live with the ontological reality: not everything is the same, and we need to identify the structure of information in the real world in order to find appropriate modelling patterns.

2-
Or we come to the conclusion that there are too many different things to group that depend on local and ever changing needs, we do not care in CIMI.


well the above analysis sort of says that - but it excepts Lab and Questionnaires, Orders etc as specific cases. There are good ontological reasons for this: the structure is always the same, and it's the content that changes within the structure. In the general clinical information case, each type of information is a different structure. It seems to me that that's the nature of reality.

So we can still have a pretty good modelling handle on the clinical information world, even if there is a large category for which each statement = its own structure.

And model these groups as one ENTRY per item and one ENTRY per group total.
Groups that are defined in an external resource/catalogue (Option 4)
Groups that are locally defined in an external resource/catalogue (Option 5)
In real life we need both Option 4 and 5 at the same time because inside an EHR-system Option 5 will work.
But in an EHR-Extract we need to explicitly define what is in the catalogue.
3-
I add to this, that in essence -in real life and to be explicit and correct- healthcare providers execute processes all the time and we should be modeling the data involved in these processes.


I would call clinical process a second or higher order 'structure', and suggest it needs to be modelled by linking / chaining / referencing items in the above table, in process-specific structures. I think this category of modelling is the key to enabling clinical care processes and pathways to be informatised. But we need to solve the basic categories above first.

- The process of ordering (a group with) items. The group is ordered at a point in time. 
- Optionally the process of the execution of that order (The group and at a deeper level with more details the items are executed at other points in time)
- The process of the Result collection (observation) of the individual results per item (Each item is reported on and entered individually at a specific point in time. During Result collection data from the execution can be provided)
- The process of making an Assessment of the group (of lab tests); qualifying the group result.


Yep. This bit is what we modelling in openEHR with Instruction and Action chains. There is now a second order structure called an Instruction index to capture these execution chains.

This is what happens at different moments in time during any delivery of care.
This is the full and safe semantics using a Model of Meaning of a Statement stuff.
4-
When for practical purposes someone transforms these Statements because he needs to present them differently in a report or on a screen, that is fine.
They can make all those transformations, using the Models of Meaning as basis.


we need to treat 'transformations' (particularly into query results) as an explicit thing - they aren't the same models as models of data capture.

This is Template stuff (as Model of Use) that is handled locally outside of the scope of CIMI.


I think you are wrongly using 'model of meaning' v 'model of use' here.  Templates are data sets specific to particular business events; archetypes are specific only to the information types. Archetypes don't vary much, but they are still models of use, just quite stable ones. That's why we always distinguish between template = data-set and archetype = data-group / data-items.

I continue to think that the CIMI modelling approach should be an amalgam of the Intermountain style for Labs & panels, openEHR for general clinical, and we have to do some work to get some other categories like Questionnaires sorted. I think if we could get over this hump, we can really move fast on the model library.