Polishing node identifier (at-codes) use cases.

Some of the originators are students, working for their academic purposes and forgetting their tools very quickly when the have a job.
Some originators are part of an enterprise and building the tools to promote their enterprise.
Some of the originators are working in a university and getting well paid for spending their time on building such a tool.
Some of the originators are promoting a standard and using the tool as promotion.
Some of the originators are selling their tools for good money.

And I must say, I agree with them all, there is nothing wrong with that. Nothing at all. We all have to live, and everyone is doing it on his/her way. There is nothing dishonorably on working for your profit.

They could be grateful accept the help I offered until now and profit from it, they can also do nothing with it. It is their choice. I fully respect that.

But saying that the tool isn't better because I (me, as a person) refuse to walk through some time-consuming formalities, that is not right, is my opinion.

I leave it all up to the originators to improve their tooling or leave it as it is.

Once in a year, the subject comes up (thanks, Diego), and I write down this old annoyance.
I will stop doing this when I am bald and gray.

Maybe that is today, I just looked into the mirror.

Again, have a nice day, you are good folks.

Bert

Does LinkEHR actually do this? I.e. only some at-codes are found in the ontology? Your statement above (bolded) is right in theory (or at least that’s the way I see it), but then the obvious question is: if I mutate the type (say) ENTRY to ENTRY[at0123], what does ENTRY[at0123] mean? In general we want to equate that with a meaning of some kind (like ‘ENTRY’ has a meaning). Remember, we could have done something like ‘ENTRY[admission]’ or ‘ENTRY[bp_measurement]’ but we don’t do that because we want the meanings to be multi-lingual (one day the ‘ENTRY’ bit should be as well…). So we use term codes. So if we agree that ‘mostly’ we want those meanings defined, then the question is: which places doesn’t it matter? I would say: places where it’s obvious, like ELEMENT.value: DV_TEXT. My view has always been that we would avoid at-codes in locations where the meaning is obvious (principally for single-valued attributes, where the archetype meaning is the same as the RM meaning). The other reason for that is to limit the length of paths for Xpath processing. Unnecessary codes can double the length of some paths. If we go the other way, then we are saying: at-codes are 100% mandatory everywhere, but definitions for them are optional. Then we need some rules on when it is optional and when mandatory. What rules would you propose for that? Remembering that a clinical modeller absolutely relies on those rules for understanding the archetype? - thomas

Very happy to have the help, Bert. Without people like you reporting problems, we don't know about them.

Look forward to getting that problem report when you get a chance. It should only take you a couple of minutes … probably a lot quicker than writing all of these emails :wink:

Peter

Does LinkEHR actually do this? I.e. only some at-codes are found in the
ontology? Your statement above (bolded) is right in theory (or at least
that's the way I see it), but then the obvious question is: if I mutate the
type (say) ENTRY to ENTRY[at0123], what does ENTRY[at0123] mean? In general
we want to equate that with a meaning of some kind (like 'ENTRY' has a
meaning). Remember, we could have done something like 'ENTRY[admission]' or
'ENTRY[bp_measurement]' but we don't do that because we want the meanings
to be multi-lingual (one day the 'ENTRY' bit should be as well...). So we
use term codes.

So if we agree that 'mostly' we want those meanings defined, then the
question is: which places doesn't it matter? I would say: places where it's
obvious, like ELEMENT.value: DV_TEXT. My view has always been that we would
avoid at-codes in locations where the meaning is obvious (principally for
single-valued attributes, where the archetype meaning is the same as the RM
meaning). The other reason for that is to limit the length of paths for
Xpath processing. Unnecessary codes can double the length of some paths.

No, currently all atNNNN codes are also found at the ontology in LinkEHR,
even if they are empty, to be compatible with the VATDF2 check, although
we would like to avoid it :slight_smile:

In my opinion we talk of two different levels of meaning. One is the
explicit meaning, where the definition of the node is defined through a
natural text or a terminology binding and that is, of course, the needed
for a complete semantic interoperability. The other is the implicit
meaning, when you create e.g. an OBSERVATION with occurrences {1..1} you
are creating "An OBSERVATION that only happens once". That means something
(otherwise you wouldn't have defined that constraint), even if you cannot
give it a natural name or a terminology code. And if it means something, it
shall have an identifier.

If we go the other way, then we are saying: at-codes are 100% mandatory
everywhere, but definitions for them are optional. Then we need some rules
on when it is optional and when mandatory. What rules would you propose for
that? Remembering that a clinical modeller absolutely relies on those rules
for understanding the archetype?

I don't think a clinical modeller would have to mind about these aspects.
He/she creates an archetype node (internally, a unique atNNNN code is
created). He/she optionally gives it a name or defines a terminology
binding (internally the ontology structures are created). When the
archetype is used or processed, the systems will only use the information
they have available.

Bert,

all these tools are free, built and maintained by their originators at
their own cost. So you might be sending yourself the chocolates...

There ain't no such thing as a free lunch

Some of the originators are students, working for their academic purposes
and forgetting their tools very quickly when the have a job.
Some originators are part of an enterprise and building the tools to promote
their enterprise.
Some of the originators are working in a university and getting well paid
for spending their time on building such a tool.
Some of the originators are promoting a standard and using the tool as
promotion.
Some of the originators are selling their tools for good money.

BTW, I don't know how much does a university researcher gets paid in
the Netherlands, but I can assure you that is not that well paid in
Spain ;D

It depends on your qualifications, but it must be enough so one can live from it.
A dead researcher is of no good at all. :slight_smile:

I think you are right. I do it, next chance as I happen to work with it.

Bert

David, I am not totally clear on what you mean. OBSERVATION is a class that always has an at-code on it anyway, because it is a high-level class and needs its clinical meaning defined anyway. If you impose {1..1} on it, you will do that via a SECTION or COMPOSITION slot. Ok, but if tools have no rules, then we can end up with an archetype like this: OBSERVATION matches { data matches { HISTORY matches { … } } } with no meaning on anything. What is to prevent that? - thomas

David,

Can I summarise it for my understanding as:

  • ATxxxx codes are pointers to an ‘ontology’.
  • ATxxxx codes can be considered symbols that represent a particular concept
  • The ‘ontology’ provides a name that will be used to display the name of a node (concept) in an archetype.
  • When a node is specialised the node name used will indicate a new concept (its meaning has changed)
  • When the archetype is specialised ideally the new concept in the specialisation is a subordinate concept.
  • When a Node is specialised the standard does not prescribe that the new concept is a sub-set of the previous one.
  • The question is: is each Node (and the concept it represents) unique or not.
  • The question is: is it obligatory that each node in the archetype carries a unique code of the form ATxxxx .

My answers to both questions are:

  • Each archetype node is a unique concept that must have attached to it a unique identifier.
  • Archetype editors must support this.

And I would like to add:

  • When specialising each specialised concept must be a subset of its previous one.

Gerard Freriks
+31 620347088
gfrer@luna.nl

Hi Gerard,

This is science, not religion. Can you please give reasons for your statements that archetype nodes must be unique concepts and must be uniquely identified?

In openEHR and 13606, the archetype is the unique concept which means that nodes quite rightly can have unique meaning in the context of the archetype. This is like human language where the same word can have different meanings depending on the context used.

I have never been given a scientific reason why every node in an archetype should be uniquely coded or have unique meaning outside the archetype itself. I have never found a use case that makes this necessary but would be interested if anyone can show me one.

Regards Hugh

Just use archetypeID+nodeID, then you have a unique concept id for each node.

don’t forget the organization responsible for that archetype ;D

Yep, that should be necessary in case of archetypeID collisions. Maybe in the future we have an archetypeID server (like a DNS protocol) to query for archetypeID to globally check for uniqueness.

True, that is also an old and not yet finished discussion, name-collissions in archetypeIds. At this moment there is no solution for this in EN13606 and OpenEHR.

Thanks for reminding.

Bert

For those who may not realise, Diego is referring (I assume) to the ADL 1.5 namespaced archetype identifiers, which would give paths of the form:

namespace::ARCHETYPE_ID/path[at0002]/to[at0003]/happiness

where the namespace corresponds to the issuing organisation.

- thomas

I must have missed this announcement, sorry, good that there is a solution now.

Bert

see wiki page and the draft spec . - thomas

No, currently all atNNNN codes are also found at the ontology in
LinkEHR, even if they are empty, to be compatible with the VATDF2 check,
although we would like to avoid it :slight_smile:

In my opinion we talk of two different levels of meaning. One is the
explicit meaning, where the definition of the node is defined through a
natural text or a terminology binding and that is, of course, the needed
for a complete semantic interoperability. The other is the implicit
meaning, when you create e.g. an OBSERVATION with occurrences {1..1} you
are creating "An OBSERVATION that only happens once". That means something
(otherwise you wouldn't have defined that constraint), even if you cannot
give it a natural name or a terminology code. And if it means something, it
shall have an identifier.

David, I am not totally clear on what you mean. OBSERVATION is a class
that always has an at-code on it anyway, because it is a high-level class
and needs its clinical meaning defined anyway. If you impose {1..1} on it,
you will do that via a SECTION or COMPOSITION slot.

I know that the openEHR archetype editor only allows introducing
OBSERVATIONs and the other clinical classes through a slot at the
COMPOSITION and SECTION, and probably that is a good methodological
approach or good practice to improve archetype governance, but technically
it is not the only possibility. You can create an archetype from the top
COMPOSITION to the leaf data values in one single archetype. And in any
case, it is just an example, we can use MY_CLASS_NAME or whatever to avoid
thinking this is a problem about how things work at the openEHR reference
model.

I don't think a clinical modeller would have to mind about these
aspects. He/she creates an archetype node (internally, a unique atNNNN code
is created). He/she optionally gives it a name or defines a terminology
binding (internally the ontology structures are created). When the
archetype is used or processed, the systems will only use the information
they have available.

Ok, but if tools have no rules, then we can end up with an archetype like
this:

OBSERVATION matches {
    data matches {
        HISTORY matches {
            ....
        }
    }
}

with no meaning on anything. What is to prevent that?

To be exact, in our approach all those classes should have an atNNNN code,
even if it is not described at the ontology section. But in any case,
current atNNNN rules does not force to put a description with a sense
either, except for the root node because it corresponds to the same concept
as the archetype identifier when you create the archetype. It is more a
duty of the clinical validation team to check those kind of things, not
something that can be automatically validated by rules. Look at the
following brand new archetype created with the openEHR editor, just
choosing an OBSERVATION root:

definition
OBSERVATION[at0000] matches { -- Test example
data matches {
HISTORY[at0001] matches { -- Event Series
events cardinality matches {1..*; unordered} matches {
EVENT[at0002] occurrences matches {0..1} matches { -- Any event
data matches {
ITEM_TREE[at0003] matches {*}
}
}
}
}
}
}

ontology
term_definitions = <
["es"] = <
items = <
["at0000"] = <
text = <"Test example">
description = <"unknown">
>
["at0001"] = <
text = <"Event Series">
description = <"@ internal @">

["at0002"] = <
text = <"Any event">
description = <"*">

["at0003"] = <
text = <"Tree">
description = <"@ internal @">
>

The only "meaning" there is the "Test example" name of the OBSERVATION,
because it corresponds to the archetype name. But all the others have no
meaning and no existing rules are checking that (having "Event series",
"Any event" and "Tree" is the same as not saying anything). So, again,
those ontological descriptions will be always checked by the authors, not
by the tools.

By the way, following the specifications, even that example archetype
created with the openEHR editor is not perfect. Both the at0001 and the
at0003 codes should not be needed according to the rules, since they are
members of single value attributes without sibling nodes...

I will stop at this point because I think it is the kernel of the
discussion. Which should be the idea?
- The ontology "must" provide a name or meaning for each atNNNN node in an
archetype? This is how thing are supposed to work in current specifications
- The ontology "can" provide a name or meaning for each atNNNN node in an
archetype? This is how we think it should be, the ontology provides a
semantic description only when it is needed or it is possible.

And what is providing a meaning or semantic description?
- A terminology binding? Of course, we will rely on terminologies and
ontologies for a complete semantic interoperability.
- A natural language description? Well, here is where no automatic rules
can exist to check if a description such as "Systolic blood pressure" or
"This is a PQ type node" or "The sky is blue" or " " are correct or have a
sense, only a human validation check can work here.

Why bring in religion?

I want to understand and ask questions.
And in the meantime I have an opinion based on my ‘GBV’. (see below)

Can you please give reasons for your statements that archetype nodes must be unique concepts and must be uniquely identified?

Reasons for my statement?

  • Each node in an archetype has a meaning
  • Without an implicit or explicit meaning the archetype node indicates chaos, meaninglessness, nothingness.
  • Meaning is attached to the given name of the node or code attached to that node
  • In the case of specialisations of archetypes several things can happen, one of those is renaming the node, changing the meaning
  • This changing the name and meaning of the archetype node needs to be reflected in a new unique code

So far I have not explained the scope, the jurisdiction, the namespace, of the unique codes I’m alluding to.
At the minimum it must be uniquely defined inside the archetype, and in the case of a code from an external coding system, it must be unique in that namespace.

I have never been given a scientific reason why every node in an archetype should be uniquely coded or have unique meaning outside the archetype itself. I have never found a use case that makes this necessary but would be interested if anyone can show me one.

It all depends on scope of the archetype. Is it used in an ‘open world’ or ‘closed world’ situation?
When used in a ‘closed system’ ( two or more actors that have an agreement of that what is exchanged, IHE with one profile) there is almost no need for external codes attached to archetypes. The explicit or implicit agreement is sufficient. Whatever the name in the archetype node, when the agreement says, the node name means ‘Black’, but we take to mean ‘White’ then there is no single problem.
In ‘Closed world systems’ the highest level of semantic interoperability is Level2a/2b at the best. It is the world of messaging with ad-hoc agreements, as we know it.

When the archetype is used in an ‘open world’ system, then we need to be very precise and explicit. Any party that interprets the data using the archetype as source, where it must find the meaning, needs to be informed fully. No single human intervention, human interpretation, must be needed to process fully and safely the data exchanged.
Local agreements between actors how to interpret the archetype node name do not exist, the archetype itself is the full agreement.
In ‘Open world’ systems the highest level of semantic interoperability is level 3.

In this ‘open world’ situation there are other rules than in the ‘closed world’ situation.

Finally.
Do not create a dichotomic world where things are either science or religion.
There are many shades.
And in order to surprise you:
Do not underestimate something that I call in Dutch: ‘het gezonde boeren verstand’. (GBV)
Translated: the common sense of the farmer.
Many obvious things that happen in life, happen because they happen.
I do not have to prove, that water flows, that fire burns, that winds exits, for you and me to accept this is true,
with or without a science, with or without any belief system, with or without any dogma.

I try to base my own opinions on my ‘GBV’.

Gerard Freriks
+31 620347088
gfrer@luna.nl