540 likes | 700 Views
Snapshot of the OMG LQS Specification. Presentation to the HL7 Vocabulary Working Group 1/99. Presentation Outline. Motivation for the specification Requirements and constraints Approach and process Specification overview Sections which may be directly useful to HL7
E N D
Snapshot of the OMG LQS Specification Presentation to the HL7 Vocabulary Working Group 1/99
Presentation Outline • Motivation for the specification • Requirements and constraints • Approach and process • Specification overview • Sections which may be directly useful to HL7 • Current state of the specification and next steps • Q&A HL7 LQS Presentation
First things first - just what are we talking about? “Lexicon Query Services” (LQS) Specification • Interface specification for read only access to medical coding schemes • Formally adopted by the Object Management Group (OMG) 7/98 • Describes an object-based API to accomplish common tasks involving medical coding schemesDefinitions, representations(terms), associations, etc. HL7 LQS Presentation
First things first - what are we talking about? “Lexicon Query Services” (LQS) Specification • Specification is publicly available at: ftp://ftp.omg.org/pub/docs/corbamed/98-03-22.pdf HL7 LQS Presentation
Motivation - why did we do it? A group of companies and organizations had been investigating the possibility of specifying medical component behavior, with the purpose of arriving at a set of API’s which would enable component level interoperability within the medical domain. HL7 LQS Presentation
Motivation As always, one of the cornerstones of interoperability was the ability to agree on a common conceptual base and corresponding representational structure. HL7 LQS Presentation
Motivation HL7 LQS Presentation
Motivation We determined that we wanted to arrive at a common means of representing and manipulating coded information before we got heavily involved in the specification task. Previous OMG specifications were inconsistent, imprecise and incomplete when it came to the notion of coding. HL7 LQS Presentation
Motivation Possible approaches • Select one coding scheme to represent all codes (UMLS, SNOMED-RT, GALEN, READ, ???) • Select a single structure into which any coding scheme may be placed (KIF, KRSS, UMLS DB, ???) • Specify a set of behavioral characteristics common to anything called a “coding scheme” - What can I ask of it and how should it respond? HL7 LQS Presentation
Motivation Response Stimulus The notion of a black box HL7 LQS Presentation
Requirements and Constraints • Specification had to cover enough territory to be useful. • Specification had to address a wide spectrum of coding schemes • From a simple table of code + term… • …to a terminology on the level of GALEN or SNOMED-RT HL7 LQS Presentation
Requirements and Constraints • Specification had to cover a wide variety of uses: • From real-time vital signs interfaces on a minimal platform… • … to a mainframe type of service doing translation, lookup, normalization, inference, etc. HL7 LQS Presentation
Requirements and Constraints • Specification could not presume: • A specific database (e.g. Oracle) or even storage type (e.g. relational, OODB) • A specific platform (e.g. Intel) • A specific programming language • A specific operating system HL7 LQS Presentation
Requirements and Constraints • Specification had to have buy-in (or at least input from): • Terminology specialists • Medical system vendors • Health Care Community HL7 LQS Presentation
Approach and Process • OMG RFP issued January 1997 • Formed “CORBAlex” working group April 1997 • Attempted to use the classic CEN approach - Scope/Use Cases/Model/Specification - • But... HL7 LQS Presentation
Approach and Process • … quickly discovered that Use Cases required precise definitions of terms (objects) and precise definition of objects required a model and a model required a notion of purpose and application. • Resulting process was iterative: Use Cases Model Definitions HL7 LQS Presentation
Approach and Process • One of the final step was a rendering of the model in IDL. • Non-trivial process. The IDL specification was an “Engineering” specification. Mapping had to be done manually by skilled CORBA people. HL7 LQS Presentation
Approach and Process • Model transformation to IDL • Steps included: • Transformation of lightweight classes into structs • Elimination of classes representing collections • Addition of “shortcuts” for anticipated frequent usages • Partitioning of model into compliance groups: LexExplorer, CodingSchemeLocator, etc. HL7 LQS Presentation
Specification Overview • Specification is at: http://www.omg.org/docs/corbamed/98-03-22.pdf • IDL can be found at: http://www.omg.org/docs/corbamed/98-03-18.idl HL7 LQS Presentation
Specification Overview • Chapters 1&2 - Overview and OMG conformance statements • Chapter 3 - DEFINITIONS • Chapter 4 - Use Scenarios • Chapter 5 - Reference Model • Chapter 6 - Engineering model • Chapter 7 - Meta-Terminology HL7 LQS Presentation
Portions with potential applicability to HL7 • NamingAuthority - Unique “global” identifiers for things (including concept codes) • ValueDomain - Provides access sets of codes associated with data elements • Code to Presentation translation • Code to Code translation • (parts of) Meta-Terminology - ‘bootstrap’ coding scheme HL7 LQS Presentation
NamingAuthority HL7 LQS Presentation
NamingAuthority • DCE • RegistrationAuthority: DCE • NamingEntity: 6132A880-9A34-1182-A20A-AF30CF7A0000 • LocalName: /HL7/I9C • Example: DCE: 6132A880-9A34-1182-A20A-AF30CF7A0000/HL7/I9C HL7 LQS Presentation
NamingAuthority • ISO • RegistrationAuthority: ISO • NamingEntity: iso member-body hl7 -or- iso(1) member-body(2) hl7(26519) -or- 1 2 26519 • LocalName: /I9C • Example: ISO: iso member-body hl7/I9C HL7 LQS Presentation
NamingAuthority • DNS • RegistrationAuthority: DNS • NamingEntity: codingSchemes.hl7.org • LocalName: /I9C • Example: DNS:codingschemes.hl7.org/I9C HL7 LQS Presentation
NamingAuthority • IDL • RegistrationAuthority: IDL • NamingEntity: org.hl7 • LocalName: /codingScheme/I9C • Example: IDL:org.hl7/codingScheme/I9C HL7 LQS Presentation
NamingAuthority • Local • RegistrationAuthority: • NamingEntity: • LocalName: I9C • Example: I9C HL7 LQS Presentation
NamingAuthority.idl module NamingAuthority { enum RegistrationAuthority { OTHER, ISO, DNS, IDL, DCE }; typedef string NamingEntity; struct AuthorityId { RegistrationAuthority authority; NamingEntity naming_entity; }; HL7 LQS Presentation
NamingAuthority.idl typedef string AuthorityIdStr; typedef string LocalName; struct QualifiedName { AuthorityId authority_id; LocalName local_name; }; typedef string QualifiedNameStr; exception InvalidInput {}; HL7 LQS Presentation
NamingAuthority.idl interface translation_library { AuthorityIdStr authority_to_str(in AuthorityId authority ) raises(InvalidInput ); AuthorityId str_to_authority(in AuthorityIdStr authority_str ) raises(InvalidInput ); QualifiedNameStr qualified_name_to_str(in QualifiedName qualified_name ) raises(InvalidInput ); QualifiedName str_to_qualified_name(in QualifiedNameStr qualified_name_str ) raises(InvalidInput ); }; }; HL7 LQS Presentation
ConceptCodes typedef NamingAuthority::LocalName ConceptCode; typedef sequence<ConceptCode> ConceptCodeSeq; typedef NamingAuthority::AuthorityId CodingSchemeId; typedef sequence<CodingSchemeId> CodingSchemeIdSeq; struct QualifiedCode { CodingSchemeId coding_scheme_id; ConceptCode a_code; }; HL7 LQS Presentation
Value Domains • Term borrowed from ISO 11179 and X3.285 • Represents the connection between concept codes and data • An HL7 field is a classic value domain • Identified by a qualified code: typedef QualifiedCode ValueDomainId; typedef sequence<ValueDomainId> ValueDomainIdSeq; HL7 LQS Presentation
Value Domain Interface • Identification interface ValueDomainVersion { readonly attribute ValueDomainId value_domain_id; readonly attribute VersionId value_domain_version_id; readonly attribute boolean is_default_version; . . . HL7 LQS Presentation
Value Domain Interface • Identification Example: ValueDomainId - ISO:iso member hl7/Patient/Gender VersionId - 3.0 is_default_version - TRUE . . . HL7 LQS Presentation
Value Domain Interface • List all coding schemes which have one or more valid codes in this domain: CodingSchemeIdSeq get_schemes_with_extensions(); • For HL7, might return: ISO:iso hl7 member/HL7/HL70001 ISO:iso hl7 member/UMLS/ HL7 LQS Presentation
Value Domain Interface • List all concept codes from the given coding scheme which are valid in this domain: ConceptInfoSeq get_extension_for_scheme( in CodingSchemeId coding_scheme_id) raises ( UnknownCodingScheme ); • Example get_extension_for_scheme(ISO:iso hl7 member/HL7/HL70001) {M, “Male”}, {F, “Female”}, {O, “Other”}, {U, “Unknown”} get_extension_for_scheme(ISO:iso hl7 member/UMLS/) {C0024554, “male”}, { C0015780, “female} HL7 LQS Presentation
Value Domain Interface • List all concept codes which are valid in this domain QualifiedCodeInfoSeq get_all_extensions(); example: get_all_extensions()(ISO:iso hl7 member/HL7/HL70001) {ISO:iso hl7 member/HL7/HL70001/M, “Male”}, {ISO:iso hl7 member/HL7/HL70001/F, “Female”}, {ISO:iso hl7 member/HL7/HL70001/O, “Other”}, {ISO:iso hl7 member/HL7/HL70001/U, “Unknown”} {ISO:iso hl7 member/UMLS/C0024554, “male”}, {ISO:iso hl7 member/UMLS/C0015780, “female} HL7 LQS Presentation
Value Domain Interface • Determine whether the given code is valid within the value domain: boolean is_code_in_domain(in QualifiedCode qualified_code); Example: is_code_in_domain(ISO:iso hl7 member/HL7/HL70001/M) returns TRUE HL7 LQS Presentation
Translation • Translate a code into text for a given context IntlString get_preferred_text(in QualifiedCode a_qualified_code, in UsageContextIdSeq context_ids ) raises ( UnknownCodingScheme, UnknownCode ); • Example: get_preferred_text(“ISO:iso hl7 member/HL7/HL70001/M”, NULL) would yield: “Male” HL7 LQS Presentation
Translation • Find matching concept(s) for text ConceptCodeSeq get_concepts_by_text( in string text); Example: get_concepts_by_text(“Male”) would yield: “M” (in the HL7 table 1 coding scheme) HL7 LQS Presentation
Translation • Quick aside - weighted result typedef float Weight; struct WeightedResult { ConceptInfo the_concept; IntlString matching_text; Weight the_weight; }; HL7 LQS Presentation
Translation • Match concepts by a regular expression string void match_concepts_by_string(in IntlString match_string, in unsigned long how_many, out WeightedResultSeq weighted_results, out WeightedResultsIter weighted_result_iter ) raises ( NotImplemented); HL7 LQS Presentation
Translation • Match concepts by ordered list of keywords void match_concepts_by_keywords( in OrderedIntlStringSeq keywords, in unsigned long how_many, out WeightedResultSeq weighted_results, out WeightedResultsIter weighted_results_iter ) raises( NotImplemented); HL7 LQS Presentation
Translation • Translate concept codes between coding schemes ConceptInfoSeq translate_code(in QualifiedCode from_qualified_code, in CodingSchemeId to_coding_schemeId ) raises (UnknownCode, UnknownCodingScheme, TranslationNotAvailable); HL7 LQS Presentation
“Meta”Terminology • Value domains within LQS const ValueDomainIdStr ASSOCIATION_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/AssociationId"; const ValueDomainIdStr ASSOCIATION_QUALIFIER_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/AssociationQualifierId"; const ValueDomainIdStr ASSOCIATION_BASE_TYPE_DOMAIN = "IDL:omg.org/TerminologyService/AssociationBaseTypeId"; const ValueDomainIdStr LANGUAGE_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/LanguageId"; const ValueDomainIdStr LEXICAL_TYPE_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/LexicalTypeId"; const ValueDomainIdStr PRESENTATION_FORMAT_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/PresentationFormatId"; HL7 LQS Presentation
“Meta”Terminology • Value domains within LQS const ValueDomainIdStr SOURCE_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/SourceId"; const ValueDomainIdStr SOURCE_USAGE_DOMAIN = "IDL:omg.org/TerminologyService/SourceUsageId"; const ValueDomainIdStr SYNTACTIC_TYPE_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/SyntacticTypeId"; const ValueDomainIdStr USAGE_CONTEXT_VALUE_DOMAIN = "IDL:omg.org/TerminologyService/UsageContextId"; HL7 LQS Presentation
MetaTerminologyBootstrap problem Interoperability entails using the same or at least compatible names for things The first thing we nave to do is arrive at common names for coding schemes: ICD-9? I9? IC9? UMLS SNOMED SMD HL7 2.3 Table 1? USMarc Country Codes HL7 LQS Presentation
MetaTerminologyBootstrap problem • Looked at CEN ENV 1068 (Registration of Coding Schemes) - replaced by ISO 7826-1 & 7826-2 • Looked at ISO 7826 (Identification and Registration of Coding Schemes) - nice spec, but not funded HL7 LQS Presentation
MetaTerminologyBootstrap problem • Looked at ISO X3/L8 - Metadata registry - Specification on the how and what of registration, but not actual registrar is (currently) outside of the scope • ISO/TC154 - basic semantics registrar • HL7? HISB? - Scope issues. HL7 LQS Presentation
MetaTerminologyBootstrap Problem Interim Solution: As there IS no formal registry, we will: • Defer to HL7 codes when possible (IC9, UMLS) • Use the OMG Interface Repository (IR) as the root: DNS:omg.org HL7 LQS Presentation