Hi Thomas,
Again, you’ve advanced my grasp of openEHR.
the change set in openEHR is actually not a single Composition, it’s a set of Composition Versions, which we call a ‘Contribution’. Each such Version can be: a logically new Composition (i.e. a Version 1), a changed Composition (version /= 1) or a logical deletion (managed by the Version lifecycle state marker). So a visit to the GP could result in the following Contribution to the EHR system:
- a new Composition containing the note from the consultation
- a modified Medications persistent Composition
- a modified Care Plan persistent Composition.
Your comment here is in the context of persistent Compositions, and I think what you’re saying is that these are a special case: persistent Compositions, unlike event Compositions, contain only one kind of persistent information, and no event information, thus allowing clean substitutions when that persistent information is later updated. This would avert the horrible scenario I suggested, involving updating heterogeneous persistent Compositions. If I’m grasping you, this makes perfect sense.
Systems do have to be careful to create references that point to particular versions.
Does that mean that tracing a web of connections with current relevance requires systems to present invalidated Compositions to users? Or are the links themselves revised to point to the replacement Compositions? If the latter, how does one avoid having to recommit whole sets revised compositions involved in the affected thread of links? It would seem that you can’t just swap out one item in a tangled web, at least without some very sophisticated compensatory activities. Or maybe links are somehow named in such a way as always to point to the latest version of something, which you seemed to suggest is possible (version-proof links?).
OpenEHR is a remarkable piece of technology. An EHR record is externally a collection of independent and separate documents called Compositions that can be invalidated and versioned and swapped out at any time. Yet, logically and internally, it is magically a vast graph of nodes and edges and vertices, with connections not just within archetypes but also between archetypes. Logically, the nodes (typically archetypes) are not deleted (usually) nor do they lose their initial identity when their contents change or when links between them are altered. One wonders, then, why not just use a graph DB instead of a collection of documents to house the information? Wouldn’t that be a shorter path to the same end and reduce some of the versioning complexity (you’d say that would increase versioning complexity)? Perhaps there are some openEHR implementations that are doing just that. No? Could an openEHR system use a graph DB and still be considered openEHR?
Do you have a picture or map, somewhere, of your metadata graph, or must I examine individual achetypes to see all the links between them?
there is an emerging set of ‘second order’ object definitions, that use the URI-based referencing approach in very sophisticate ways to represent things like care plans, medication histories and so on. I can’t point to a spec right now, but they will start to appear.
What is the motivation for that? To increase the granularity of externally-referenceable objects? What current problem would this solve?
We need something to keep us off the streets…
Not a worry for you, sir. I’ll embarrass you by letting on here how impressed I’ve been with the raw intellect everywhere evident in what I take to be chiefly your creation and the literary talent you have exercised in making it all clear. Great work!
Randy