Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Proposal - Thomas Beale / Ian McNicoll

Status

Under developmentThis particular model uses 'diamond' multiple inheritance, and is not intended for a real proposal, since most languages don't support this, and it isn't really necessary anyway. Here it is used just to illustrate the concept.

Design Concept

In this model, a new class is added that combines CLUSTER and ELEMENT. This reflects the fractal nature of reality. Initially you think you have just an ELEMENT, but later on, people want to start recording more fine detail. In the other direction, information users often want a 'summary' data point for a collection of details. No ITEM_STRUCTURE classes are included at all.

...

  • retain CLUSTER and ELEMENT classes, since they remain useful, are already defined, and map cleanly to 13606-1
  • support efficient, shortest possible path to a summary data item (e.g. 'smoking status' = Smoker)
  • ensure that if the summary item is added at runtime, e.g. by converting a CLUSTER to the new CLUSTER+value type, the paths of the underlying detailed items don't change
  • ensure that if an ELEMENT is converted to a CLUSTER+value at runtime, the path of the ELEMENT.value does not change
  • make it so that a specialised archetype can convert a CLUSTER or ELEMENT to a CLUSTER+value type

...

  • The above VALUE_CLUSTER sugestion is an interesting change, and if flexibility is what is sought for, then perhaps the simplification can be taken even further...
  • Now the current ITEM+ELEMENT+CLUSTER follows the composite design pattern (see c2 wiki and wikipedia http://en.wikipedia.org/wiki/Composite_pattern). But since there are not many common operations/methods shared by ELEMENTs and CLUSTERs (except the ones already in PATHABLE/LOCATABLE) then perhaps the composite design pattern is not needed/helpful in this part of the openEHR structure. (Also see discussions at CompositeConsideredHarmful and maybe this.)
  • If the contents of both ELEMENT and CLUSTER are pushed up to ITEM then we get the same functionality as proposed in VALUE_CLUSTER, but with fewer classes. (ITEM_STRUCTURE will not be needed, see the "Middle and Lower IM"-suggestion further down on this page, but perhaps ITEM_STRUCTURE would be a better name than ITEM for this new super-ITEM with VALUE_CLUSTER capabilities). And one (debatable) way of looking at the ITEM/ITEM_STRUCTURE family of classes is to consider them as being just for structuring and naming nodes internally in a hierarchy and considering the the DATA_VALUE classes to be the real leafs. (Yes, debatable...)
  • Perhaps what is mentioned as a "downside" above (not being able to force ELEMENT or CLUSTER) is achievable (if wanted) by archetyping a new super-ITEM to have 0 items (forcing ELEMENT-functionallity) or 1..* items (forcing CLUSTER-functionality)? Also, perhaps "value" can be archetyped as disallowed if you rally want to force value-less CLUSTER behaviour.
  •  

    Candidate A.2 - Modify CLUSTER to have local value

Proposal - Thomas Beale / Ian McNicoll

Status

Under development

Design Concept

The design intent of this solution is the same as for Candidate A.1 above. However, in this version, we want to add a value attribute to the CLUSTER class. Since ELEMENT already has this, we can move it to ITEM, the common parent. The technical needs we are trying to meet here are:

  • retain CLUSTER and ELEMENT classes, since they remain useful, are already defined, and map cleanly to 13606-1
  • support efficient, shortest possible path to a summary data item (e.g. 'smoking status' = Smoker)
  • ensure that if the summary item is added at runtime, e.g. by populating the new CLUSTER.value attribute, the paths of the underlying detailed items don't change
  • ensure that if an ELEMENT is changed to a CLUSTER at runtime, the path of the value attribute does not change

Changes

The value properties from ELEMENT are moved to ITEM.

Diagram

Impact Analysis

Component

Impact

On RM

 

On existing archetypes

 

On archetype tooling

 

On existing RM-1.0.2 based software

 

On existing RM 1.0.2 data

 

Discussion

xxx

...

Candidate B - Remove ITEM_STRUCTURE

Proposal - Pablo Pazos

Status

under construction

Design concept

  • Remove ITEM_STRUCTURE and use ITEM for structures without losing meaning/semantics/modeling capabilities.

Changes

  • Removed ITEM_STRUCTURE and children.
  • Added attribute structure_type:CODE_PRHASE to CLUSTER (as in 13606 model)
  • Added method is_root() to ITEM
  • ITEM inherits from DATA_STRUCTURE
  • Added backguards relationship "parent" from ITEM to CLUSTER

Diagram

I have the source of this diagram if anyone wants it, it's a .dia file (http://live.gnome.org/Dia)

Impact Analysis

Component

Impact

On RM

RM change

On existing archetypes

RM change

On archetype tooling

RM change

On existing RM-1.0.2 based software

RM change

On existing RM 1.0.2 data

transformation needed

...

Candidate C - class renaming for easier explanation

Proposal - Erik Sundvall

Status

under construction

Design Concept

Below is an initial suggestion based on some previous mail threads

...

(TODO: find links to more threads in mail-archive)

Changes

Diagram

'UML' image above produced by pasting the "diagram sourcecode" below to http://yuml.me/diagram/scruffy/class/draw2 (initially by Erik Sundvall)

...

Code Block
[note: No change suggestions in ACTION and INSTRUCTION except that ITEM_STRUCTURE type is replaced by ITEM]
[CONTENT_ITEM{bg:yellow}]]^[SECTION|0..* items: List CONTENT_ITEM{bg:yellow}]
[CONTENT_ITEM]^[ENTRY|data: ITEM{bg:yellow}]]
[CONTENT_ITEM]^[ABSTRACT_CARE_ENTRY|0..1 protocol: ITEM;0..1 guideline_id: OBJECT_REF;0..1 workflow_id: OBJECT_REF;language: CODE_PHRASE;encoding: CODE_PHRASE;subject: PARTY_PROXY;0..1 provider: PARTY_PROXY;0..1 other_participations: List PARTICIPATION; ]
[ABSTRACT_CARE_ENTRY]^[CARE_ENTRY|data: ITEM]
[CARE_ENTRY]-[note:CARE_ENTRY Replaces both ADMIN_ENTRY and EVALUATION.]
[ABSTRACT_CARE_ENTRY]^[OBSERVATION|data: EVENTS;0..1 state: EVENTS]
[ABSTRACT_CARE_ENTRY]^[INSTRUCTION]
[ABSTRACT_CARE_ENTRY]^[ACTION]
[ENTRY]-[note:ENTRY replaces GENERIC_ENTRY and is intended also for 'healthcare a-specific' stuff as indicated useful by 13606 experiences]
[EVENTS|origin;0..1 period;0..1 duration]++-events>[EVENT|time;0..1 state: ITEM; data: ITEM]]
[EVENTS]-[note: HISTORY renamed to EVENTS]
[EVENT]^[INTERVAL_EVENT|width;0..1 sample_count;math_function]
[ITEM{bg:yellow}]^[ELEMENT|0..1 null_flavor;0..1 value DATA_VALUE{bg:yellow}]
[ITEM]^[CLUSTER|1..* items: ITEM;0..1 structure: CODE_PHRASE{bg:yellow}]
[CLUSTER]-[note: 'structure' indicates if the cluster is to be validated and interpereted as e.g. a table or list - defaulting to tree if not provided]

Impact Analysis

Component 

Impact 

On RM 

 

On existing archetypes

 

On archetype tooling

 

On existing RM-1.0.2 based software

 

On existing RM 1.0.2 data

 

Discussion

xxx