CTS
Common Terminology Services
• Overview
• Technology
• Status
CTS
Overview
Goal
Create interface specification which allows
software based on the HL7 version 3
RIM to access terminology content in an
consistent and implementation
independent fashion.
CTS
Overview
• Benefits for HL7 designers and
implementation developers
– Software can be written once and won’t need
to understand each terminology vendor’s
database and/or API
– Hides much of the complexity inherent in
modern terminology systems.
CTS
Overview
• Benefits for terminology and terminology
software developers
– Basic functional requirements clearly
specified
– Implementation can be based on existing
databases and software
– A common entry point – you don’t have to sell
the idea – you sell your enhancements,
performance, etc.
CTS
Partitions
• Message API vs. Terminology API vs.
Mapping API
HL7 Software Implementation
Message Layer
Terminology API
Terminology API
Terminology Layer
CTS
Overview
• Message API vs. Terminology API
HL7 Software Implementation
Is this code an
example of an
orderable
drug?
What is the
preferred English
designation for
this code?
Message API
Terminology API
Terminology API
Terminology API
What are the
valid codes for
this attribute?
Is this code
valid for this
attribute?
What is the closest
equivalent for code
x in terminology y?
CTS
Partitions
• Message API vs. Terminology API vs.
Mapping API
HL7 Software Implementation
API published primarily
for client implementations
Message Layer
API published primarily
for server implementations
Terminology API
Terminology API
Terminology Layer
CTS
Partitions
• Runtime vs. Browsing (vs. Authoring)
– Runtime Profile
• High availability, high throughput
• “Production line” use
– Browsing Profile
• High functionality – search, filter, organize
• Use case is modeling and concept discovery
• Availability and throughput requirements (potentially) less
stringent
– Authoring Profile
• Needed to enter and modify HL7 vocabulary content
• May not need to be ‘official’ standard
CTS Partitions
Message Vocabulary
API
API
Runtime
x
x
Browsing
x
x
Authoring
x
(limited/
HL7
Specific)
Mapping API
x
CTS API Subparts
• CTS Message API
– Browser
– Runtime
• CTS Vocabulary API
– Browser
– Runtime
– Mapper (not really vocab, but it fits well
here…)
– Maintenance (lightweight authoring)
CTS
Message Runtime API
1. Is this code* valid for this vocabulary domain
and context(s)?
2. Is this a valid translation for this code for this
vocabulary domain and context(s)?
3. Translate this code from this vocabulary
domain into a code that is meaningful in this
context.
4. Fill out the missing details (display name, code
system name, version) for this code (for the
supplied language and context(s))
* Instance of a CD data type
ValidateCode
1. Should this validation process include modifier
validation, or should there be a separate
function for modifiers?
2. Translations - if the code has translations, it is
possible that the base code cannot be
validated and that valid code(s), if any are in tre
translation section only. What should the
approach be under these circumstances?
3. Should there be a batch equivalent of this
function, taking in multiple codes, outputing
multiple details?
Validate Translation
1. How does this function relate to
ValidateCode?
2. Should a complete translation list be
checked?
3. What should the behavior be regarding
recursive translations?
4. Batching?
TranslateCode
1. What unqiuely determines the target of a
translation? If Value Sets can correspond to
multiple code systems, then what should the
target identifier be? The value set id?
2. What to do when a translation doesn't exist.
Options include raise an exception (the current
approach), emit an exception type if the data
type is CWE, take the boolean/warning model
of validate.
CTS
Message Runtime API
5. Does code A imply code B?
6. Give me a list of the valid codes and
display names for this vocabulary
domain and context(s) in this language
(which match this filter).
• (Identity functions: name, version, HL7
Release Version, description)
implies
1. There is currently no mechanism to ask
the question WRT to the child code
system. Will this nuance be needed?
CTS
Vocabulary Runtime API
1. Is this code valid in this code system?
2. What is the preferred designation for this code
in this language and context(s)?
3. Does a specific (directed) relationship exist
between these two codes?
4. Return a hierarchically organized list of codes
and designations (in the specified language)
that have a given relationship with the supplied
code.
• (identity + list of supported code systems)
Are codes related
A false return does not necessarily imply
that the code system was able to
determine that a relationship was not
*possible*, simply that such a
relationship was not asserted.
1. Will we need a stronger function at some
point to be able to ask whether the code
system definitely says that the two
codes are *not* related?
CTS
Code Translation API
1. What is the translation (mapping) of the
supplied code from code system x in
code system y?
• (Identifying information – from and to
code systems and versions, name,
description, source or authority, contexts
in which the service is applicable)
CTS
Message Browser API
1.
2.
3.
4.
List all of the active attributes
List all of the active vocabulary domains
List all of the value sets
List all of the code systems (known to the
browser)
5. Return the description, superclass,
subclass(es), associated attributes and
associated value sets of a named
vocabulary domain.
CTS
Message Browser API
6.
Return the description, list of value sets used by, list of
value sets using and code references for a supplied
value set id.
7. Return the code system name and version of a
supplied code system identifier
8. Return the value set (inc description, lists) that would
be used for a given vocabulary domain and context(s)
in a runtime situation.
9. Return a ‘hierarchical’ list of codes associated with a
given code set (pretty much what RoseTree or the
listing in the Ballot returns)
10. Determine whether the supplied code is in the code set
11. (identification)
CTS
Vocabulary Browser API
1. Get coded terms (and a whole bunch
more information) whose designations,
descriptions, match a supplied regular
expression, language, context(s) and/or
mime code(s).
2. Get coded terms (and a whole bunch ‘o
info) having property(s) that match a
supplied regular expression, language,
context(s) and/or mime code(s).
CTS
Message Browser API
3. Get the designation(s) for a specific
coded term that match the supplied
regular expression, language, context(s)
and/or mime code(s).
4. Get the descriptions “ “ “
5. Get the properties (potentially selected
from a list) that match the supplied
regular expression, language, context(s)
and/or mime code(s).
CTS
Message Browser API
6. Return a nested list of concepts and the associated
designations, relationship codes and relationship
qualifiers that:
a) Have the supplied concept code at the root
b) are related via the supplied relationship code (opt)
c) are either directly descendants or the transitive
closure of the relationship (choice)
d) have the named list of properties that optionally
match the supplied regular expression in the supplied
language, have the supplied qualifiers and/or have the
supplied mime types.
•
(Identifying information)
CTS
Vocab Maintenance API
1. Create a new code system
2. Remove an existing code system
3. Add coded terms (inc properties, designations,
etc) to a code system
4. Inactivate coded terms
5. Remove coded terms
6. Add properties to a coded term
7. Remove properties from a coded term
8. Add a coded term to a list of relationships
9. Remove coded term from a list of relationships
Technology Details
CTS API
• Currently
– Specification language is IDL
– Target languages are WSDL & Java
– Process involves IDL->Java->WSDL->Java
CTS API
IDL
/* Determine whether the given code is valid in the code system
*
code - code to validate
*
activeOnly - true means code must be currently active, false
*
means both active and inactive pass
*
*
Returns - true if the code exists in the current code system
*
false otherwise.
*/
V3DT::BL isCodeValid(
in CTSCommon::ConceptId code,
in V3DT::BL activeOnly
)
raises (CTSCommon::UnknownCodeSystem);
CTS API
Java (Part 1)
/**
* <PRE>
*
Determine whether the given code is valid in the code system
*
code - code to validate
*
activeOnly - true means code must be currently active, false
*
means both active and inactive pass
*
*
Returns - true if the code exists in the current code system
*
false otherwise.
</PRE>*/
boolean isCodeValid (org.hl7.CTSCommon.ConceptId code,
boolean activeOnly)
throws org.hl7.CTSCommon.UnknownCodeSystem;
WSDL
WSDL
Java (Part 2)
• (Almost) no difference on InterFace specs
• Structs, however are now beans.
• Comments stripped earlier in the process
(will fix…)
CTS API
• Specification language
– Spec in WSDL?
• Cumbersome, but a semantic superset of IDL
• Tends to imply SOAP ITS
– Spec in Java?
• Difficult to keep synched w/ WSDL
• Tends to imply Java ITS
– OMG MDA?
• Possibility, but may yet be too immature
Status
Message Browser API
• Complete prototype implementation
• Based on postgres image of Access DB
Vocab Browser API
• Partial prototype implementation
• Based on ldap server image of Access DB
Vocab Runtime API
• Partial prototype implementation
• Based on ldap server image of Access DB
Samples
SOAP Test
Samples
Value Set Browser
Samples
Useful JSP’s
Samples
Sample JSP’s
Status
• Officially assuming the role of vocabulary
maintenance.
– Will maintain dual images for (at least) one
cycle
– Submission process will still be Excel
spreadsheets for November RIM
Harmonization
– Intend to have new mechanism in place for
following meeting.
Next Steps
Part 1
• Incorporate model changes and comments from
session
• Incorporate “Realm” implementation
• Incorporate Ordinal interface
• Complete Message Maintenance Spec
• Publish revised, smaller and more readable
specification for review and evaluation
• Integrate w/ RoseTree & RoseTree XML output
Next Steps
Part 2
• Finish implementation w/ more demos
• Revise vocab submission process
• Put together demo and proposal for
distributed vocabulary maintenance using
LDAP (which is, in part, why we’re here in
the first place )
Question
• Would it be possible to move to the HL7
web site at some point?
– Current implementation is
•
•
•
•
Tomcat4
Axis
Postgresql
Openldap
Descargar

CTS - Health Level Seven International