Difference between revisions of "FHIR Tooling Ecosystem"
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | Content on this page has been migrated to https://confluence.hl7.org/display/FHIR/FHIR+Tooling+Ecosystem | ||
+ | |||
'''This page is a draft. Once complete, review and consensus will be sought by current FHIR tooling participants.''' It may also be split from one page into multiple pages. | '''This page is a draft. Once complete, review and consensus will be sought by current FHIR tooling participants.''' It may also be split from one page into multiple pages. | ||
Line 9: | Line 11: | ||
Key sections: | Key sections: | ||
− | * [[#The Community]] - Who the tooling community is and how to get involved (including getting committer access) | + | |
− | * [[#The Architecture]] - Points to consider in the design of FHIR support tools including how integration can occur | + | *[[#The Community]] - Who the tooling community is and how to get involved (including getting committer access) |
− | * [[#The Tooling Environment]] - a list of the tooling areas, what the needs are, what exists and how the areas interrelate | + | *[[#The Architecture]] - Points to consider in the design of FHIR support tools including how integration can occur |
+ | *[[#The Tooling Environment]] - a list of the tooling areas, what the needs are, what exists and how the areas interrelate | ||
=The community= | =The community= | ||
Line 28: | Line 31: | ||
Within the implementation community, discussion and coordination primarily happens on the [[http://chat.fhir.org chat.fhir.org]] discussion space. Discussions about general FHIR tooling issues, tooling integration issues and even updates to this page, happen on the [[https://chat.fhir.org/#narrow/stream/tooling tooling]] stream. However, conversations about more specific types of tooling also happen on other streams including: | Within the implementation community, discussion and coordination primarily happens on the [[http://chat.fhir.org chat.fhir.org]] discussion space. Discussions about general FHIR tooling issues, tooling integration issues and even updates to this page, happen on the [[https://chat.fhir.org/#narrow/stream/tooling tooling]] stream. However, conversations about more specific types of tooling also happen on other streams including: | ||
+ | |||
*[[https://chat.fhir.org/#narrow/stream/conformance conformance]] (profiling and IG tooling) | *[[https://chat.fhir.org/#narrow/stream/conformance conformance]] (profiling and IG tooling) | ||
*[[https://chat.fhir.org/#narrow/stream/crucible crucible]] and [[https://chat.fhir.org/#narrow/stream/Touchstone touchstone]] testing tools | *[[https://chat.fhir.org/#narrow/stream/crucible crucible]] and [[https://chat.fhir.org/#narrow/stream/Touchstone touchstone]] testing tools | ||
Line 37: | Line 41: | ||
==Being a committer== | ==Being a committer== | ||
Tooling projects sponsored by HL7 will typically have their source managed under HL7's SVN () or GIT () environments. Read-only access is available to everyone. Committer access can be received by emailing lmckenzie@gevityinc.com. To gain committer privileges, send an email to lmckenzie@gevityinc.com stating the following: | Tooling projects sponsored by HL7 will typically have their source managed under HL7's SVN () or GIT () environments. Read-only access is available to everyone. Committer access can be received by emailing lmckenzie@gevityinc.com. To gain committer privileges, send an email to lmckenzie@gevityinc.com stating the following: | ||
− | * That you've read and agree to abide by chapter 16 of HL7's [[http://www.hl7.org/documentcenter/public/membership/HL7_Governance_and_Operations_Manual.pdf|Governance and Operations Manual]] (GOM) | + | |
− | ** The chapter deals with IP rights, patents, etc. | + | *That you've read and agree to abide by chapter 16 of HL7's [[http://www.hl7.org/documentcenter/public/membership/HL7_Governance_and_Operations_Manual.pdf|Governance and Operations Manual]] (GOM) |
− | * That you are signed up for and agree to actively monitor the [[https://chat.fhir.org/#narrow/stream/committers Committer's stream]] on chat.fhir.org | + | **The chapter deals with IP rights, patents, etc. |
− | ** Specifically that you will abide by freezes or other constraints on committed content and that you'll monitor commits to ensure they don't break anything | + | *That you are signed up for and agree to actively monitor the [[https://chat.fhir.org/#narrow/stream/committers Committer's stream]] on chat.fhir.org |
− | * What SVN or Git user id should be granted the access | + | **Specifically that you will abide by freezes or other constraints on committed content and that you'll monitor commits to ensure they don't break anything |
+ | *What SVN or Git user id should be granted the access | ||
=The architecture= | =The architecture= | ||
Line 47: | Line 52: | ||
The following represent ideals we encourage FHIR tools to meet. Aligning with these requirements will maximize community benefit for the tool | The following represent ideals we encourage FHIR tools to meet. Aligning with these requirements will maximize community benefit for the tool | ||
− | * '''Modular''': Tools should be designed in such a manner that their features can be leveraged by tools developed by others and also to be able to leverage tools created by others. Ideally, the user of the tool should be able to configure which of the available implementations of a particular piece of functionality will be used. | + | *'''Modular''': Tools should be designed in such a manner that their features can be leveraged by tools developed by others and also to be able to leverage tools created by others. Ideally, the user of the tool should be able to configure which of the available implementations of a particular piece of functionality will be used. |
− | * '''Standardized interfaces''': To allow tools to integrate, standard interfaces and integration points are needed. One of the main purposes of this document is to identify and define such interfaces. | + | *'''Standardized interfaces''': To allow tools to integrate, standard interfaces and integration points are needed. One of the main purposes of this document is to identify and define such interfaces. |
− | * '''FHIR artifacts as interface''': Tools should consume and/or produce artifacts that are conformant with the FHIR specifications. Tooling should work with the XML and JSON version of FHIR artifacts or with the .zip and .pack files produced by FHIR publishing processes. Any additional custom files or configuration files should be kept to a minimum - and ideally discussed within the tooling community to see if the needs might be met in an interoperable way through FHIR resources. | + | *'''FHIR artifacts as interface''': Tools should consume and/or produce artifacts that are conformant with the FHIR specifications. Tooling should work with the XML and JSON version of FHIR artifacts or with the .zip and .pack files produced by FHIR publishing processes. Any additional custom files or configuration files should be kept to a minimum - and ideally discussed within the tooling community to see if the needs might be met in an interoperable way through FHIR resources. |
− | * '''Extensible''': It should be possible (and ideally easy) to extend the tool to accomodate extensions that may be defined to add capability to Con artifacts being produced or manipulated. | + | *'''Extensible''': It should be possible (and ideally easy) to extend the tool to accomodate extensions that may be defined to add capability to Con artifacts being produced or manipulated. |
− | * '''Version independent''': While tools are expected to be dependent on specific versions of conformance resources, they should be able to work with other versions of the FHIR specification (including draft versions with new resources and complex data types) so long as the conformance resources defining the content is available. | + | *'''Version independent''': While tools are expected to be dependent on specific versions of conformance resources, they should be able to work with other versions of the FHIR specification (including draft versions with new resources and complex data types) so long as the conformance resources defining the content is available. |
− | * '''Multiple OS support''': At a minimum, FHIR tools should run on Windows and on Macs within common Windows emulators. Ideally, tools should run on Windows, Mac and Linux without emulation. | + | *'''Multiple OS support''': At a minimum, FHIR tools should run on Windows and on Macs within common Windows emulators. Ideally, tools should run on Windows, Mac and Linux without emulation. |
− | * '''Free for use''': Essential functions should not require payment. HL7 tries hard to ensure that there are minimal financial barriers to using the FHIR specification. While open-source is encouraged, other financial models such as freemium, "pay what you can", "paid support" are welcome as well. | + | *'''Free for use''': Essential functions should not require payment. HL7 tries hard to ensure that there are minimal financial barriers to using the FHIR specification. While open-source is encouraged, other financial models such as freemium, "pay what you can", "paid support" are welcome as well. |
− | * '''Escrowed source''': Non-open source tooling implementers are encouraged to keep source in escrow to be made available to the FHIR foundation should the authoring organization no longer be able/willing to maintain the tooling going forward | + | *'''Escrowed source''': Non-open source tooling implementers are encouraged to keep source in escrow to be made available to the FHIR foundation should the authoring organization no longer be able/willing to maintain the tooling going forward |
− | * '''Multi-language''': Tools should be written in such a way that their user interfaces can support labels and instructions in a variety of languages if the FHIR community chooses to provide the needed translations. | + | *'''Multi-language''': Tools should be written in such a way that their user interfaces can support labels and instructions in a variety of languages if the FHIR community chooses to provide the needed translations. |
==Integration Mechanisms== | ==Integration Mechanisms== | ||
Line 75: | Line 80: | ||
=The Tooling Environments= | =The Tooling Environments= | ||
FHIR tooling requirements (those identified to date at least) can be organized into a set of sub-ecosystems: | FHIR tooling requirements (those identified to date at least) can be organized into a set of sub-ecosystems: | ||
− | * [[#Design Tooling]] | + | |
− | * [[#Conformance Publication Tooling]] | + | *[[#Design Tooling]] |
− | * [[#Reference Implementations]] | + | *[[#Conformance Publication Tooling]] |
− | * [[#Validation Tooling]] | + | *[[#Reference Implementations]] |
− | * [[#Registry Tooling]] | + | *[[#Validation Tooling]] |
− | * [[#Terminology Tooling]] | + | *[[#Registry Tooling]] |
− | * [[#Instance Maintenance Tooling]] | + | *[[#Terminology Tooling]] |
− | * [[#Implementation Test Tooling]] | + | *[[#Instance Maintenance Tooling]] |
− | * [[#Collaborative Review Tooling]] | + | *[[#Implementation Test Tooling]] |
− | * [[#Support Services]] | + | *[[#Collaborative Review Tooling]] |
+ | *[[#Support Services]] | ||
Each of these sub-echosystems are described below with the following elements: | Each of these sub-echosystems are described below with the following elements: | ||
− | * ''Description'' - what tools/capabilities are part of the sub-ecosystems | + | |
− | * ''Relevant Specification References'' - what parts of the FHIR core specification cover the features for this areas | + | *''Description'' - what tools/capabilities are part of the sub-ecosystems |
− | * ''Features'' - what are the required and desirable features for tools in this space | + | *''Relevant Specification References'' - what parts of the FHIR core specification cover the features for this areas |
− | * ''Potential Tool Relationships'' - what other tooling features can/should integrate with the tools in this space. (Further defining how these relationships will be invoked will be a key part of the development of this document.) | + | *''Features'' - what are the required and desirable features for tools in this space |
− | * ''Existing Implementations'' - What tools already exist that deliver some of this functionality | + | *''Potential Tool Relationships'' - what other tooling features can/should integrate with the tools in this space. (Further defining how these relationships will be invoked will be a key part of the development of this document.) |
− | * ''Wish List'' - What does HL7 most urgently need in this space (for developers who are looking to contribute) | + | *''Existing Implementations'' - What tools already exist that deliver some of this functionality |
− | * ''Open Issues'' - Topics for HL7 to resolve about tooling requirements and/or how they should integrate | + | *''Wish List'' - What does HL7 most urgently need in this space (for developers who are looking to contribute) |
+ | *''Open Issues'' - Topics for HL7 to resolve about tooling requirements and/or how they should integrate | ||
Line 103: | Line 110: | ||
Implementation Guides: | Implementation Guides: | ||
− | * [[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] | + | |
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | *[[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] |
− | * [[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] | + | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] |
− | * [[http://hl7.org/fhir/searchparameter.html SearchParameter]] | + | *[[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] |
− | * [[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] | + | *[[http://hl7.org/fhir/searchparameter.html SearchParameter]] |
− | * [[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] | + | *[[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] |
− | * [[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] | + | *[[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] | + | *[[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] |
− | * [[http://hl7.org/fhir/workflowexample.html WorkflowExample]] | + | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] |
+ | *[[http://hl7.org/fhir/workflowexample.html WorkflowExample]] | ||
Terminology: | Terminology: | ||
− | * [[http://hl7.org/fhir/codesystem.html CodeSystem]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/codesystem.html CodeSystem]] |
− | * [[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] | + | *[[http://hl7.org/fhir/valueset.html ValueSet]] |
− | * [[http://hl7.org/fhir/conceptmap.html ConceptMap]] | + | *[[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] |
− | * [[http://hl7.org/fhir/namingsystem.html NamingSystem]] | + | *[[http://hl7.org/fhir/conceptmap.html ConceptMap]] |
+ | *[[http://hl7.org/fhir/namingsystem.html NamingSystem]] | ||
Others: | Others: | ||
− | * [[http://hl7.org/fhir/structuremap.html StructureMap]] | + | |
− | * [[http://hl7.org/fhir/testscript.html TestScript]] | + | *[[http://hl7.org/fhir/structuremap.html StructureMap]] |
+ | *[[http://hl7.org/fhir/testscript.html TestScript]] | ||
In addition, the [[http://hl7.org/fhir/binary.html Binary]] resource may be used to convey images, page text and other content for inclusion in the publication. | In addition, the [[http://hl7.org/fhir/binary.html Binary]] resource may be used to convey images, page text and other content for inclusion in the publication. | ||
Other areas of interest include: | Other areas of interest include: | ||
− | * [[http://hl7.org/fhir/conformance-rules.html Conformance Rules]] | + | |
− | * [[http://hl7.org/fhir/compartmentdefinition.html Compartment Definition]] | + | *[[http://hl7.org/fhir/conformance-rules.html Conformance Rules]] |
− | * [[http://hl7.org/fhir/extensibility.html Extensibility ]] | + | *[[http://hl7.org/fhir/compartmentdefinition.html Compartment Definition]] |
− | * [[http://hl7.org/fhir/operations.html Operations]] | + | *[[http://hl7.org/fhir/extensibility.html Extensibility] ] |
− | * [[http://hl7.org/fhir/messaging.html Messaging]] | + | *[[http://hl7.org/fhir/operations.html Operations]] |
− | * [[http://hl7.org/fhir/profiling.html Profiling FHIR]] | + | *[[http://hl7.org/fhir/messaging.html Messaging]] |
+ | *[[http://hl7.org/fhir/profiling.html Profiling FHIR]] | ||
For comparing resources, the following operations may be helpful: | For comparing resources, the following operations may be helpful: | ||
− | * [[http://hl7.org/fhir/capabilitystatement-operations.html#conforms CapabilityStatement/$conforms]] | + | |
+ | *[[http://hl7.org/fhir/capabilitystatement-operations.html#conforms CapabilityStatement/$conforms]] | ||
We may introduce "compare" operations on resources such as StructureDefinition, OperationDefinition, CapabilityStatement, etc. We might also introduce a "publish" operation on ImplementationGuide. | We may introduce "compare" operations on resources such as StructureDefinition, OperationDefinition, CapabilityStatement, etc. We might also introduce a "publish" operation on ImplementationGuide. | ||
Line 141: | Line 153: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * load resources for editing and serialize resources once created/updated | + | |
− | * render resources for the users doing editing/creation | + | *load resources for editing and serialize resources once created/updated |
+ | *render resources for the users doing editing/creation | ||
Nice to have: | Nice to have: | ||
− | * enforce design rules (both those in the core specification as well as in referenced/enforced conformance artifacts) | + | |
− | * look up other artifacts for reference | + | *enforce design rules (both those in the core specification as well as in referenced/enforced conformance artifacts) |
− | * provide general editing capabilities such as undo/redo; copy & paste, etc. | + | *look up other artifacts for reference |
− | * use WYSIWYG editing of markdown elements | + | *provide general editing capabilities such as undo/redo; copy & paste, etc. |
− | * show changes between two different artifacts or versions of an artifact | + | *use WYSIWYG editing of markdown elements |
− | * allow managing changes between versions of resources as PATCH instances and be able store changes as PATCH instances | + | *show changes between two different artifacts or versions of an artifact |
+ | *allow managing changes between versions of resources as PATCH instances and be able store changes as PATCH instances | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Invoke other design tools such that when encountering a needed missing artifact, it's possible to jump to a new tool to create the needed artifact, passing back a reference. (E.g. While editing a structure definition, have the ability to go create a value set, then come back and automatically fill in the value set reference.) Also used to view/edit artifacts already referenced by the artifact being displayed. | + | |
− | * Invoke [[#Conformance Publication Tooling]] to see rendered views of artifacts being edited | + | *Invoke other design tools such that when encountering a needed missing artifact, it's possible to jump to a new tool to create the needed artifact, passing back a reference. (E.g. While editing a structure definition, have the ability to go create a value set, then come back and automatically fill in the value set reference.) Also used to view/edit artifacts already referenced by the artifact being displayed. |
− | * Invoke [[#Registry Tooling]] to locate resources for use | + | *Invoke [[#Conformance Publication Tooling]] to see rendered views of artifacts being edited |
− | * Invoke [[#Validation Tooling]] to confirm that instances are valid against the base resources and any declared/enforced profiles | + | *Invoke [[#Registry Tooling]] to locate resources for use |
− | * Invoke [[#Instance Maintenance Tooling]] to create or modify instances based on changes to underlying conformance resources | + | *Invoke [[#Validation Tooling]] to confirm that instances are valid against the base resources and any declared/enforced profiles |
− | * Submit created/edited artifacts to a [[#Registry Tooling]] registry for sharing | + | *Invoke [[#Instance Maintenance Tooling]] to create or modify instances based on changes to underlying conformance resources |
− | * Go to [[#Collaborative Review Tooling]] to look at comments submitted for an artifact or to note changes made | + | *Submit created/edited artifacts to a [[#Registry Tooling]] registry for sharing |
− | * Invoke [[#Support Services]] to validate or edit XPath, FHIRPath, XHTML, Markdown, etc. | + | *Go to [[#Collaborative Review Tooling]] to look at comments submitted for an artifact or to note changes made |
− | * Invoke [[#Support Services]] for specialized behavior such as snapshot generation for StructureDefinitions | + | *Invoke [[#Support Services]] to validate or edit XPath, FHIRPath, XHTML, Markdown, etc. |
− | * Invoke [[#Terminology Tooling]] for specialized operations such as [[http://hl7.org/fhir/valueset-operations.html#expand ValueSet$expand]] or [[http://hl7.org/fhir/valueset-operations.html#validate-code ValueSet$validate-code]] | + | *Invoke [[#Support Services]] for specialized behavior such as snapshot generation for StructureDefinitions |
− | * Invoke external tools for referenced Binary and other artifacts (e.g. image editor, HTML editor, markdown editor, etc.) | + | *Invoke [[#Terminology Tooling]] for specialized operations such as [[http://hl7.org/fhir/valueset-operations.html#expand ValueSet$expand]] or [[http://hl7.org/fhir/valueset-operations.html#validate-code ValueSet$validate-code]] |
− | * Integrate with source control tooling | + | *Invoke external tools for referenced Binary and other artifacts (e.g. image editor, HTML editor, markdown editor, etc.) |
+ | *Integrate with source control tooling | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
todo - links | todo - links | ||
+ | |||
*Forge - .NET (mac emulator friendly) tool that supports creation and editing of StructureDefinition (profile, logical model) and ImplementationGuide | *Forge - .NET (mac emulator friendly) tool that supports creation and editing of StructureDefinition (profile, logical model) and ImplementationGuide | ||
*Lantana's Trifolia - supports creation and editing of StructureDefinition (profile), ??? others? | *Lantana's Trifolia - supports creation and editing of StructureDefinition (profile), ??? others? | ||
*Health Intersection's FHIR Toolkit supports ValueSet, CodeSystem and CapabilityStatement | *Health Intersection's FHIR Toolkit supports ValueSet, CodeSystem and CapabilityStatement | ||
*Open Mapping Software supports StructureMap | *Open Mapping Software supports StructureMap | ||
− | *MITRE's | + | *MITRE's Clinical Information Modeling and Profiling Language (CIMPL) for creating Detailed Clinical Logical Information Models (DCLIMs) and automatically producing FHIR profiles (StructureDefinition) [https://github.com/standardhealth CIMPL] |
*FhirpathTester - .NET tool for testing fhirpath expressions on resource instances [https://github.com/brianpos/fhirpathtester fhirpath source] (supports DSTU2 and STU3 concurrently) | *FhirpathTester - .NET tool for testing fhirpath expressions on resource instances [https://github.com/brianpos/fhirpathtester fhirpath source] (supports DSTU2 and STU3 concurrently) | ||
− | * LinkEHR - Supports the definition of FHIR StructureDefinitions and exports them as FHIR profiles or ADL archetypes | + | *LinkEHR - Supports the definition of FHIR StructureDefinitions and exports them as FHIR profiles or ADL archetypes |
===Wish List=== | ===Wish List=== | ||
Line 180: | Line 196: | ||
==Open Issues== | ==Open Issues== | ||
− | * We need to decide how we want to handle "pages" adhoc narrative for security, use-cases, etc. Should these be Binaries? A profile on Basic? A proper resource? | + | |
+ | *We need to decide how we want to handle "pages" adhoc narrative for security, use-cases, etc. Should these be Binaries? A profile on Basic? A proper resource? | ||
Line 188: | Line 205: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
The most important resource is the [[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] as it defines the organization of all the content to be published. | The most important resource is the [[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] as it defines the organization of all the content to be published. | ||
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | |
− | * [[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] | + | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] |
− | * [[http://hl7.org/fhir/searchparameter.html SearchParameter]] | + | *[[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] |
− | * [[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] | + | *[[http://hl7.org/fhir/searchparameter.html SearchParameter]] |
− | * [[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] | + | *[[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] |
− | * [[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] | + | *[[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] | + | *[[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] |
− | * [[http://hl7.org/fhir/workflowexample.html WorkflowExample]] | + | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] |
+ | *[[http://hl7.org/fhir/workflowexample.html WorkflowExample]] | ||
Terminology: | Terminology: | ||
− | * [[http://hl7.org/fhir/codesystem.html CodeSystem]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/codesystem.html CodeSystem]] |
− | * [[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] | + | *[[http://hl7.org/fhir/valueset.html ValueSet]] |
− | * [[http://hl7.org/fhir/conceptmap.html ConceptMap]] | + | *[[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] |
− | * [[http://hl7.org/fhir/namingsystem.html NamingSystem]] | + | *[[http://hl7.org/fhir/conceptmap.html ConceptMap]] |
+ | *[[http://hl7.org/fhir/namingsystem.html NamingSystem]] | ||
Others: | Others: | ||
− | * [[http://hl7.org/fhir/structuremap.html StructureMap]] | + | |
− | * [[http://hl7.org/fhir/testscript.html TestScript]] | + | *[[http://hl7.org/fhir/structuremap.html StructureMap]] |
+ | *[[http://hl7.org/fhir/testscript.html TestScript]] | ||
In addition, the [[http://hl7.org/fhir/binary.html Binary]] resource may be used to convey images, page text and other content for inclusion in the publication. | In addition, the [[http://hl7.org/fhir/binary.html Binary]] resource may be used to convey images, page text and other content for inclusion in the publication. | ||
Line 212: | Line 232: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Be able to interpret the ImplementationGuide resource to find the resources to package and publish - as per the organization defined by the ImplementationGuide | + | |
− | * Generate a human-readable view of the package of resources | + | *Be able to interpret the ImplementationGuide resource to find the resources to package and publish - as per the organization defined by the ImplementationGuide |
− | * Package up the generated publication for sharing | + | *Generate a human-readable view of the package of resources |
+ | *Package up the generated publication for sharing | ||
Nice to have: | Nice to have: | ||
− | * Support to publish all types of conformance resources | + | |
− | * Include link navigation between specification elements and from specification elements to the relevant portions of the FHIR specification. | + | *Support to publish all types of conformance resources |
− | * Validate that content is valid (valid examples, profiles, no broken links, etc.) | + | *Include link navigation between specification elements and from specification elements to the relevant portions of the FHIR specification. |
− | * Support automatic publication as content is edited | + | *Validate that content is valid (valid examples, profiles, no broken links, etc.) |
− | * Support publishing in alternative languages (if the necessary "translation" extensions are present) | + | *Support automatic publication as content is edited |
− | * Support searching of the content from within the specification interface | + | *Support publishing in alternative languages (if the necessary "translation" extensions are present) |
+ | *Support searching of the content from within the specification interface | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Invoke [[#Registry Tooling]] to retrieve referenced resources | + | |
− | * Invoke [[#Terminology Tooling]] to expand value sets for publication | + | *Invoke [[#Registry Tooling]] to retrieve referenced resources |
− | * Invoke [[#Support Services]] to perform snapshot generation and/or narrative generation as part of publication | + | *Invoke [[#Terminology Tooling]] to expand value sets for publication |
− | * Invoke [[#Validation Tooling]] to confirm that interlinked artifacts, including examples, are valid at time of publication | + | *Invoke [[#Support Services]] to perform snapshot generation and/or narrative generation as part of publication |
− | * Push published content to [[#Registry Tooling]] for publication/sharing | + | *Invoke [[#Validation Tooling]] to confirm that interlinked artifacts, including examples, are valid at time of publication |
− | * As part of the publication, provide integrated links to [[#Collaborative Review Tooling]] to support gathering feedback about published artifacts. | + | *Push published content to [[#Registry Tooling]] for publication/sharing |
+ | *As part of the publication, provide integrated links to [[#Collaborative Review Tooling]] to support gathering feedback about published artifacts. | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
− | * Forge | + | |
− | * Trifolia? | + | *Forge |
− | * HL7 IG publisher | + | *Trifolia? |
+ | *HL7 IG publisher | ||
===Wish List=== | ===Wish List=== | ||
+ | |||
*Improved renderings for CapabilityStatement, OperationDefinition, CodeSystem, etc. | *Improved renderings for CapabilityStatement, OperationDefinition, CodeSystem, etc. | ||
*Renderings of any kind for MessageDefinition, GraphDefinition, NamingSystem | *Renderings of any kind for MessageDefinition, GraphDefinition, NamingSystem | ||
Line 244: | Line 269: | ||
===Open Issues=== | ===Open Issues=== | ||
− | * It would be nice to be able to share code that renders artifacts across publication tools - how could we do this? | + | |
− | * Need to agree on how much configuration should live inside the ImplementationGuide, how much should be external (but possibly shareable?) and how much should be tool-specific. | + | *It would be nice to be able to share code that renders artifacts across publication tools - how could we do this? |
+ | *Need to agree on how much configuration should live inside the ImplementationGuide, how much should be external (but possibly shareable?) and how much should be tool-specific. | ||
==Reference Implementations== | ==Reference Implementations== | ||
Line 252: | Line 278: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
The key concepts needed to produce object or other language-specific representations of resources are found here: | The key concepts needed to produce object or other language-specific representations of resources are found here: | ||
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | |
− | * [[http://hl7.org/fhir/datatypes.html | + | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] |
− | * [[http://hl7.org/fhir/elementdefinition.html | + | *[[http://hl7.org/fhir/datatypes.html |
+ | *[[http://hl7.org/fhir/elementdefinition.html | ||
The syntaxes to parse and serialize are found here: | The syntaxes to parse and serialize are found here: | ||
− | * [[http://hl7.org/fhir/xml.html XML | + | |
− | * [[http://hl7.org/fhir/json.html JSON | + | *[[http://hl7.org/fhir/xml.html XML |
− | * [[http://hl7.org/fhir/rdf.html RDF | + | *[[http://hl7.org/fhir/json.html JSON |
+ | *[[http://hl7.org/fhir/rdf.html RDF | ||
Most reference implementations also provide build in support for "fixed" terminology bindings, leveraging information found here: | Most reference implementations also provide build in support for "fixed" terminology bindings, leveraging information found here: | ||
− | * [[http://hl7.org/fhir/codesystem.html CodeSystem]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/codesystem.html CodeSystem]] |
+ | *[[http://hl7.org/fhir/valueset.html ValueSet]] | ||
Reference implementations may also provide assistance with dynamic behavior, in which case, these links are also relevant: | Reference implementations may also provide assistance with dynamic behavior, in which case, these links are also relevant: | ||
− | * [[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] | + | |
− | * [[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] | + | *[[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] |
− | * [[http://hl7.org/fhir/searchparameter.html SearchParameter]] | + | *[[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] |
− | * [[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] | + | *[[http://hl7.org/fhir/searchparameter.html SearchParameter]] |
− | * [[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] | + | *[[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] |
− | * [[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] | + | *[[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] | + | *[[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] |
− | * [[http://hl7.org/fhir/http.html RESTful API]] | + | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] |
− | * [[http://hl7.org/fhir/search.html Search]] | + | *[[http://hl7.org/fhir/http.html RESTful API]] |
− | * [[http://hl7.org/fhir/graphql.html GraphQL]] | + | *[[http://hl7.org/fhir/search.html Search]] |
− | * [[http://hl7.org/fhir/operations.html Operations]] | + | *[[http://hl7.org/fhir/graphql.html GraphQL]] |
− | * [[http://hl7.org/fhir/messaging.html Messaging]] | + | *[[http://hl7.org/fhir/operations.html Operations]] |
− | * [[http://hl7.org/fhir/documents.html Documents]] | + | *[[http://hl7.org/fhir/messaging.html Messaging]] |
+ | *[[http://hl7.org/fhir/documents.html Documents]] | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Provide a language-appropriate representation of all resource elements | + | |
− | * Can parse and serialize instances in at least XML and JSON | + | *Provide a language-appropriate representation of all resource elements |
+ | *Can parse and serialize instances in at least XML and JSON | ||
Nice to have: | Nice to have: | ||
− | * Support parsing and serializing RDF | + | |
− | * Provide helper support for REST, operations, messaging and/or documents | + | *Support parsing and serializing RDF |
− | * Provide helper support for search | + | *Provide helper support for REST, operations, messaging and/or documents |
− | * Be available under an open source license | + | *Provide helper support for search |
+ | *Be available under an open source license | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Incorporate or allow integration with [[#Terminology Tooling]] for run-time terminology support | + | |
− | * Incorporate or allow integration with [[#Validation Tooling]] for run-time instance validation | + | *Incorporate or allow integration with [[#Terminology Tooling]] for run-time terminology support |
+ | *Incorporate or allow integration with [[#Validation Tooling]] for run-time instance validation | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
− | * [[https://github.com/ewoutkramer/fhir-net-api .NET]] | + | |
− | * [[http://hapifhir.io Java]] | + | *[[https://github.com/ewoutkramer/fhir-net-api .NET]] |
− | * [[https://github.com/smart-on-fhir/fhir.js Javascript]] | + | *[[http://hapifhir.io Java]] |
− | * [[http://hl7.org/fhir/downloads.html Pascal]] | + | *[[https://github.com/smart-on-fhir/fhir.js Javascript]] |
− | * [[https://github.com/smart-on-fhir/client-py Python]] | + | *[[http://hl7.org/fhir/downloads.html Pascal]] |
− | * [[https://github.com/smart-on-fhir/Swift-FHIR Swift]] | + | *[[https://github.com/smart-on-fhir/client-py Python]] |
+ | *[[https://github.com/smart-on-fhir/Swift-FHIR Swift]] | ||
===Wish List=== | ===Wish List=== | ||
− | * Additional languages of interest to a decent percentage of implementers? | + | |
− | * Support for additional runtime dynamic behavior configuration based on the message definition, graph definition, operation definition and similar resources | + | *Additional languages of interest to a decent percentage of implementers? |
+ | *Support for additional runtime dynamic behavior configuration based on the message definition, graph definition, operation definition and similar resources | ||
Line 313: | Line 348: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
The two primary sources for validation information are: | The two primary sources for validation information are: | ||
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] |
+ | *[[http://hl7.org/fhir/valueset.html ValueSet]] | ||
In addition these resources can also provide information that is relevant to the validation process | In addition these resources can also provide information that is relevant to the validation process | ||
− | * [[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] (defines 'default' profiles) | + | |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] (sets expectations for referenced resources) | + | *[[http://hl7.org/fhir/implementationguide.html ImplementationGuide]] (defines 'default' profiles) |
+ | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] (sets expectations for referenced resources) | ||
The [[http://hl7.org/fhir/validation.html Validating Resources]] page covers the expectations of the validation process. | The [[http://hl7.org/fhir/validation.html Validating Resources]] page covers the expectations of the validation process. | ||
Line 326: | Line 363: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Ability to validate both XML and JSON resources of any type | + | |
− | * Check structural and syntax validity of the instance | + | *Ability to validate both XML and JSON resources of any type |
+ | *Check structural and syntax validity of the instance | ||
Nice to have: | Nice to have: | ||
− | * Perform validation of terminology against specified bindings | + | |
− | * Check FHIRPath constraints | + | *Perform validation of terminology against specified bindings |
− | * Check references to external artifacts | + | *Check FHIRPath constraints |
+ | *Check references to external artifacts | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Invoke [[#Registry Tooling]] to retrieve referenced profiles, value sets and other resources | + | |
− | * Invoke or incorporate [[#Terminology Tooling]] to check for code validity | + | *Invoke [[#Registry Tooling]] to retrieve referenced profiles, value sets and other resources |
+ | *Invoke or incorporate [[#Terminology Tooling]] to check for code validity | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
− | * [[http://hl7.org/fhir//validation.html#jar HL7 Java validator jar]] | + | |
− | * [[https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo/releases .NET Validation UI]] | + | *[[http://hl7.org/fhir//validation.html#jar HL7 Java validator jar]] |
+ | *[[https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo/releases .NET Validation UI]] | ||
===Wish List=== | ===Wish List=== | ||
− | * Continue to build the test case library of both valid and invalid cases | + | |
− | * Create validation libraries in additional languages | + | *Continue to build the test case library of both valid and invalid cases |
− | * Refactor validator to provide multi-lingual support | + | *Create validation libraries in additional languages |
+ | *Refactor validator to provide multi-lingual support | ||
==Registry Tooling== | ==Registry Tooling== | ||
Line 352: | Line 394: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
The most critical resources to register are these: | The most critical resources to register are these: | ||
− | * [[http://hl7.org/fhir/implementationguide.html ImplementationGuide] | + | |
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | *[[http://hl7.org/fhir/implementationguide.html ImplementationGuide] |
+ | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | ||
Specialized registries might support only terminology artifacts: | Specialized registries might support only terminology artifacts: | ||
− | * [[http://hl7.org/fhir/codesystem.html CodeSystem]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/codesystem.html CodeSystem]] |
− | * [[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] | + | *[[http://hl7.org/fhir/valueset.html ValueSet]] |
− | * [[http://hl7.org/fhir/conceptmap.html ConceptMap]] | + | *[[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] |
− | * [[http://hl7.org/fhir/namingsystem.html NamingSystem]] | + | *[[http://hl7.org/fhir/conceptmap.html ConceptMap]] |
+ | *[[http://hl7.org/fhir/namingsystem.html NamingSystem]] | ||
Ideally, the registries would support all the remaining conformance resources as well: | Ideally, the registries would support all the remaining conformance resources as well: | ||
− | * [[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] | + | |
− | * [[http://hl7.org/fhir/searchparameter.html SearchParameter]] | + | *[[http://hl7.org/fhir/capabilitystatement.html CapabilityStatement]] |
− | * [[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] | + | *[[http://hl7.org/fhir/searchparameter.html SearchParameter]] |
− | * [[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] | + | *[[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] |
− | * [[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] | + | *[[http://hl7.org/fhir/operationdefinition.html OperationDefinition]] |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] | + | *[[http://hl7.org/fhir/compartmentdefinition.html CompartmentDefinition]] |
− | * [[http://hl7.org/fhir/workflowexample.html WorkflowExample]] | + | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] |
− | * [[http://hl7.org/fhir/structuremap.html StructureMap]] | + | *[[http://hl7.org/fhir/workflowexample.html WorkflowExample]] |
− | * [[http://hl7.org/fhir/testscript.html TestScript]] | + | *[[http://hl7.org/fhir/structuremap.html StructureMap]] |
+ | *[[http://hl7.org/fhir/testscript.html TestScript]] | ||
[[http://hl7.org/fhir/binary.html Binary]] can be used to store images and other elements that are part of ImplementationGuides. As well, example instances will also need to be stored - and they can be of any type of [[http://hl7.org/fhir/resource-list.html resource]] at all. | [[http://hl7.org/fhir/binary.html Binary]] can be used to store images and other elements that are part of ImplementationGuides. As well, example instances will also need to be stored - and they can be of any type of [[http://hl7.org/fhir/resource-list.html resource]] at all. | ||
Line 379: | Line 424: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * A web-based user interface for searching for and viewing all supported resources with links that support downloading results | + | |
− | * A FHIR interface that supports submission, update and retrieval of resources | + | *A web-based user interface for searching for and viewing all supported resources with links that support downloading results |
− | * User security to ensure that responsibility for submissions can be tracked and access can be managed | + | *A FHIR interface that supports submission, update and retrieval of resources |
+ | *User security to ensure that responsibility for submissions can be tracked and access can be managed | ||
Nice to have: | Nice to have: | ||
− | * Ability to navigate to related resources | + | |
− | * Ability to download a resource and its dependencies | + | *Ability to navigate to related resources |
− | * Ability to allow users to assert "usage" of resources | + | *Ability to download a resource and its dependencies |
− | * Ability to apply PATCH instances to existing resources (particularly for large resources such as CodeSystem) | + | *Ability to allow users to assert "usage" of resources |
+ | *Ability to apply PATCH instances to existing resources (particularly for large resources such as CodeSystem) | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Registries might leverage [[#Conformance Publication Tooling]] to render the artifacts | + | |
− | * Registries should support integration with the [[#Collaborative Review Tooling]] to enable commenting on registered artifacts | + | *Registries might leverage [[#Conformance Publication Tooling]] to render the artifacts |
+ | *Registries should support integration with the [[#Collaborative Review Tooling]] to enable commenting on registered artifacts | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
− | * Furore's Simplifier.NET | + | |
+ | *Furore's Simplifier.NET | ||
===Wish List=== | ===Wish List=== | ||
− | * Enhanced support for tracking "usage" of resources | + | |
− | * Support for retrieving dependencies | + | *Enhanced support for tracking "usage" of resources |
+ | *Support for retrieving dependencies | ||
Line 406: | Line 456: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
These tools make use of the following resources: | These tools make use of the following resources: | ||
− | * [[http://hl7.org/fhir/codesystem.html CodeSystem]] | + | |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/codesystem.html CodeSystem]] |
− | * [[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] | + | *[[http://hl7.org/fhir/valueset.html ValueSet]] |
− | * [[http://hl7.org/fhir/conceptmap.html ConceptMap]] | + | *[[http://hl7.org/fhir/expansionprofile.html ExpansionProfile]] |
− | * [[http://hl7.org/fhir/namingsystem.html NamingSystem]] | + | *[[http://hl7.org/fhir/conceptmap.html ConceptMap]] |
+ | *[[http://hl7.org/fhir/namingsystem.html NamingSystem]] | ||
Background areas and operations include: | Background areas and operations include: | ||
− | * [[http://hl7.org/fhir/terminologies.html Terminology]] | + | |
− | * [[http://hl7.org/fhir/terminology-service.html Terminology Services]] | + | *[[http://hl7.org/fhir/terminologies.html Terminology]] |
− | * [[http://hl7.org/fhir/codesystem-operations.html#lookup CodeSystem/$lookup]] | + | *[[http://hl7.org/fhir/terminology-service.html Terminology Services]] |
− | * [[http://hl7.org/fhir/codesystem-operations.html#subsumes CodeSystem/$subsumes]] | + | *[[http://hl7.org/fhir/codesystem-operations.html#lookup CodeSystem/$lookup]] |
− | * [[http://hl7.org/fhir/conceptmap-operations.html#translate ConceptMap/$translate]] | + | *[[http://hl7.org/fhir/codesystem-operations.html#subsumes CodeSystem/$subsumes]] |
− | * [[http://hl7.org/fhir/conceptmap-operations.html#closure ConceptMap/$closure]] | + | *[[http://hl7.org/fhir/conceptmap-operations.html#translate ConceptMap/$translate]] |
− | * [[http://hl7.org/fhir/valueset-operations.html#expand ValueSet/$expand]] | + | *[[http://hl7.org/fhir/conceptmap-operations.html#closure ConceptMap/$closure]] |
− | * [[http://hl7.org/fhir/valueset-operations.html#validate-code ValueSet/$validate-code]] | + | *[[http://hl7.org/fhir/valueset-operations.html#expand ValueSet/$expand]] |
+ | *[[http://hl7.org/fhir/valueset-operations.html#validate-code ValueSet/$validate-code]] | ||
A new operation is likely to be added to NamingSystem to support finding the canonical system for a given identifier or code 'system' value. | A new operation is likely to be added to NamingSystem to support finding the canonical system for a given identifier or code 'system' value. | ||
Line 428: | Line 480: | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Terminology services will typically either incorporate or depend on [[#Registry Tooling]] to look up the terminology artifacts needed to execute their operations. | + | |
+ | *Terminology services will typically either incorporate or depend on [[#Registry Tooling]] to look up the terminology artifacts needed to execute their operations. | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
todo: Add links | todo: Add links | ||
− | * Health Intersections | + | |
− | * Apelon | + | *Health Intersections |
− | * Art-Decor | + | *Apelon |
− | * VSAC | + | *Art-Decor |
− | * SNQuery | + | *VSAC |
+ | *SNQuery | ||
===Wish List=== | ===Wish List=== | ||
− | * Add support for NamingSystem resolution | + | |
+ | *Add support for NamingSystem resolution | ||
==Instance Maintenance Tooling== | ==Instance Maintenance Tooling== | ||
Line 445: | Line 500: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
− | * [[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] | + | |
− | * [[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] | + | *[[http://hl7.org/fhir/structuredefinition.html StructureDefinition]] |
− | * [[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] | + | *[[http://hl7.org/fhir/messagedefinition.html MessageDefinition]] |
− | * [[http://hl7.org/fhir/valueset.html ValueSet]] | + | *[[http://hl7.org/fhir/graphdefinition.html GraphDefinition]] |
+ | *[[http://hl7.org/fhir/valueset.html ValueSet]] | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Ability to author FHIR instances of any type with a "friendly" user interface | + | |
− | * Ensure instances are valid against the core specification | + | *Ability to author FHIR instances of any type with a "friendly" user interface |
+ | *Ensure instances are valid against the core specification | ||
Nice to have: | Nice to have: | ||
− | * Support authoring against various versions of the specification, including "current build" | + | |
− | * Generate 'template' resources based on the specification and example values specified in the specification | + | *Support authoring against various versions of the specification, including "current build" |
− | * Ensure validatity against profiles | + | *Generate 'template' resources based on the specification and example values specified in the specification |
− | * Check validity of terminology and resource references | + | *Ensure validatity against profiles |
− | * Support lookup of allowed terminology values | + | *Check validity of terminology and resource references |
− | * Support lookup of relevant identifier systems | + | *Support lookup of allowed terminology values |
− | * Generate bulk data that is "clinically relevant" | + | *Support lookup of relevant identifier systems |
+ | *Generate bulk data that is "clinically relevant" | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * [[#Registry Tooling]] can be used to retrieve instances to edit or copy and to store new or revised instance examples | + | |
− | * [[#Validation Tooling]] can be used to help ensure that instances are valid | + | *[[#Registry Tooling]] can be used to retrieve instances to edit or copy and to store new or revised instance examples |
− | * [[#Terminology Tooling]] | + | *[[#Validation Tooling]] can be used to help ensure that instances are valid |
− | * [[#Reference Implementations]] can be used to convert instance examples from one FHIR syntax into the others | + | *[[#Terminology Tooling]] |
+ | *[[#Reference Implementations]] can be used to convert instance examples from one FHIR syntax into the others | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
Individual instance creation | Individual instance creation | ||
− | * ClinFHIR | + | |
+ | *ClinFHIR | ||
Bulk instance creation | Bulk instance creation | ||
− | * mihin (Jeff Eastman) | + | |
− | * Synthea - Mitre (https://github.com/synthetichealth/synthea) | + | *mihin (Jeff Eastman) |
+ | *Synthea - Mitre (https://github.com/synthetichealth/synthea) | ||
===Wish List=== | ===Wish List=== | ||
− | * ??? | + | |
+ | *??? | ||
==Implementation Test Tooling== | ==Implementation Test Tooling== | ||
Line 491: | Line 553: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Can consume TestScript resources | + | |
− | * Can execute TestScripts | + | *Can consume TestScript resources |
+ | *Can execute TestScripts | ||
Nice to have: | Nice to have: | ||
− | * Can act as a "man in the middle" over secure communications | + | |
− | * Can support testing client systems by monitoring outgoing and incoming communications while someone manipulates and records the behavior of the user interface | + | *Can act as a "man in the middle" over secure communications |
+ | *Can support testing client systems by monitoring outgoing and incoming communications while someone manipulates and records the behavior of the user interface | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Retrieve TestScripts, conformance artifacts and sample data from [[#Registry Tooling]] and potentially store TestReports in the registry as well | + | |
− | * Validate results using [[#Validation Tooling]] | + | *Retrieve TestScripts, conformance artifacts and sample data from [[#Registry Tooling]] and potentially store TestReports in the registry as well |
− | * Integrate with [[#Design Tooling]] to allow scripts and sample data to be adjusted during the testing process | + | *Validate results using [[#Validation Tooling]] |
+ | *Integrate with [[#Design Tooling]] to allow scripts and sample data to be adjusted during the testing process | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
+ | |||
*TouchStone | *TouchStone | ||
*Crucible | *Crucible | ||
Line 516: | Line 582: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
Mappings are defined using: | Mappings are defined using: | ||
− | * [[http://hl7.org/fhir/structuremap.html StructureMap]] for structures | + | |
− | * [[http://hl7.org/fhir/conceptmap.html ConceptMap]] for terminologies | + | *[[http://hl7.org/fhir/structuremap.html StructureMap]] for structures |
+ | *[[http://hl7.org/fhir/conceptmap.html ConceptMap]] for terminologies | ||
Structure map makes use of a FHIR-defined [[http://hl7.org/fhir/mapping-language.html Mapping Language]] which in turn relies on [[http://hl7.org/fhirpath FHIRPath]] which is a syntax-neutral path language. | Structure map makes use of a FHIR-defined [[http://hl7.org/fhir/mapping-language.html Mapping Language]] which in turn relies on [[http://hl7.org/fhirpath FHIRPath]] which is a syntax-neutral path language. | ||
Line 525: | Line 592: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Ability to consume structure maps | + | |
− | * Ability to execute those transforms against instances | + | *Ability to consume structure maps |
+ | *Ability to execute those transforms against instances | ||
Nice to have: | Nice to have: | ||
− | * ??? | + | |
+ | *??? | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * [[#Registry Tooling]] can be used to retrieve referenced StructureMap and ConceptMaps | + | |
− | * [[#Terminology Tooling]] can be used to support code translation as part of instance translation | + | *[[#Registry Tooling]] can be used to retrieve referenced StructureMap and ConceptMaps |
+ | *[[#Terminology Tooling]] can be used to support code translation as part of instance translation | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
− | * Grahame's tool (todo: name) | + | |
− | * Open Mapping Software FHIR Transform Engine | + | *Grahame's tool (todo: name) |
− | * [http://linkehr.com/ LinkEHR Studio]: Define mappings between different clinical models (from potentially different reference models such as HL7 FHIR, HL7 CDA, openEHR, ISO13606, CDISC ODM, etc.) and generate automatically transformation programs | + | *Open Mapping Software FHIR Transform Engine |
+ | *[http://linkehr.com/ LinkEHR Studio]: Define mappings between different clinical models (from potentially different reference models such as HL7 FHIR, HL7 CDA, openEHR, ISO13606, CDISC ODM, etc.) and generate automatically transformation programs | ||
===Wish List=== | ===Wish List=== | ||
Line 551: | Line 622: | ||
===Features=== | ===Features=== | ||
Must have: | Must have: | ||
− | * Allow users to provide feedback about specific elements within a specification, including identifying that feedback as positive or negative. | + | |
− | * Allow users to update feedback already provided | + | *Allow users to provide feedback about specific elements within a specification, including identifying that feedback as positive or negative. |
− | * Provide a consolidated view of feedback associated with an artifact | + | *Allow users to update feedback already provided |
+ | *Provide a consolidated view of feedback associated with an artifact | ||
Nice to have: | Nice to have: | ||
− | * Support discussion about feedback points | + | |
− | * Integrate with source control so that changes applied can be noted as being associated with particular feedback | + | *Support discussion about feedback points |
− | * Provide control over who's invited/permitted to provide feedback and monitor who's done so yet | + | *Integrate with source control so that changes applied can be noted as being associated with particular feedback |
+ | *Provide control over who's invited/permitted to provide feedback and monitor who's done so yet | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * Be able to link from provided feedback back to the published version produced by the [[#Conformance Publication Tooling]] | + | |
+ | *Be able to link from provided feedback back to the published version produced by the [[#Conformance Publication Tooling]] | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
+ | |||
*HL7 ballot site | *HL7 ballot site | ||
*OpenEHR tool suite? | *OpenEHR tool suite? | ||
===Wish List=== | ===Wish List=== | ||
− | * Integration of feedback tooling directly into the HL7 core publication and IG publications | + | |
+ | *Integration of feedback tooling directly into the HL7 core publication and IG publications | ||
===Open Issues=== | ===Open Issues=== | ||
− | * Do we need a resource to capture this feedback or do we leverage Observation or QuestionnaireResponse? | + | |
+ | *Do we need a resource to capture this feedback or do we leverage Observation or QuestionnaireResponse? | ||
Line 578: | Line 655: | ||
===Relevant Specification References=== | ===Relevant Specification References=== | ||
− | * [[http://hl7.org/fhir/narrative.html Narrative]] | + | |
− | * [[http://hl7.org/fhirpath FHIRPath]] | + | *[[http://hl7.org/fhir/narrative.html Narrative]] |
+ | *[[http://hl7.org/fhirpath FHIRPath]] | ||
===Features=== | ===Features=== | ||
Line 589: | Line 667: | ||
===Potential Tool Relationships=== | ===Potential Tool Relationships=== | ||
− | * FHIRPath validation may need to load referenced StructureDefinitions and terminology artifacts from [[#Registry Tooling]]. | + | |
− | * FHIRPath evaluation may depend on [[#Terminology Tooling]] for terminology-related operations | + | *FHIRPath validation may need to load referenced StructureDefinitions and terminology artifacts from [[#Registry Tooling]]. |
− | * Narrative generation may depend on [[#Terminology Tooling]] for terminology-related to look up display names | + | *FHIRPath evaluation may depend on [[#Terminology Tooling]] for terminology-related operations |
− | * FHIRPath validation may need to load referenced StructureDefinitions from [[#Registry Tooling]]. | + | *Narrative generation may depend on [[#Terminology Tooling]] for terminology-related to look up display names |
+ | *FHIRPath validation may need to load referenced StructureDefinitions from [[#Registry Tooling]]. | ||
===Existing Implementations=== | ===Existing Implementations=== | ||
FHIRPath | FHIRPath | ||
− | * Java, .NET, ??? | + | |
+ | *Java, .NET, ??? | ||
+ | |||
Narrative | Narrative | ||
− | * Java | + | |
+ | *Java | ||
+ | |||
Snapshot | Snapshot | ||
− | * Java, .NET | + | |
+ | *Java, .NET | ||
===Wish List=== | ===Wish List=== | ||
− | * Broader language support for existing implementations | + | |
− | * Improve the user friendliness and clinical utility of Narrative views (and ideally get consistent representation across tools) | + | *Broader language support for existing implementations |
− | * Incorporate relevant "core" extensions as part of narrative rendering | + | *Improve the user friendliness and clinical utility of Narrative views (and ideally get consistent representation across tools) |
− | * Increased test cases for Snapshot generation | + | *Incorporate relevant "core" extensions as part of narrative rendering |
− | * Create a "differential-generation" feature where two snapshots can be "diffed" to identify the changes. | + | *Increased test cases for Snapshot generation |
+ | *Create a "differential-generation" feature where two snapshots can be "diffed" to identify the changes. | ||
===Open Issues=== | ===Open Issues=== | ||
There's been discussion about defining 'subsets' of FHIRPath which might allow for | There's been discussion about defining 'subsets' of FHIRPath which might allow for |
Latest revision as of 15:46, 1 May 2020
Content on this page has been migrated to https://confluence.hl7.org/display/FHIR/FHIR+Tooling+Ecosystem
This page is a draft. Once complete, review and consensus will be sought by current FHIR tooling participants. It may also be split from one page into multiple pages.
This page describes the FHIR tooling ecosystem and the vision for its future development, including the FHIR community's collective view of what types of tooling are needed, how those tools might best interact with each other and how the tooling community itself will interact and collaborate to maximize the benefit of its collective investment. It also serves as an entry point for those who are new to the FHIR tooling community and are interested in what tooling is available and/or how they might best contribute to the community.
We recognize that developers of tools will do so for their own reasons and to meet their own needs. This document has no binding force on anyone who wishes to go forth and build FHIR tooling. However, by working together with the community and by adhering to the principles and processes described here, developers are more likely to create tools that work well together and provide a better experience to their user community.
This is a living document. It will evolve as the needs and vision of the community change.
Key sections:
- #The Community - Who the tooling community is and how to get involved (including getting committer access)
- #The Architecture - Points to consider in the design of FHIR support tools including how integration can occur
- #The Tooling Environment - a list of the tooling areas, what the needs are, what exists and how the areas interrelate
Contents
- 1 The community
- 2 The architecture
- 3 The Tooling Environments
- 3.1 Design Tooling
- 3.2 Open Issues
- 3.3 Conformance Publication Tooling
- 3.4 Reference Implementations
- 3.5 Validation Tooling
- 3.6 Registry Tooling
- 3.7 Terminology Tooling
- 3.8 Instance Maintenance Tooling
- 3.9 Implementation Test Tooling
- 3.10 Conversion Tooling
- 3.11 Collaborative Review Tooling
- 3.12 Support Services
The community
Who and what is the FHIR tooling ecosystem?
The FHIR tooling ecosystem is the collective set of tools that support the development and maintenance of FHIR artifacts - both FHIR specifications and FHIR implementations. I.e. It is software that supports FHIR. It does not include the systems that actually use FHIR to deliver healthcare services (registries, decision support, clinical systems, etc.). Principally, the ecosystem will be those tools that make use of the Conformance resources. Many of the tools will be FHIR-specific, but some will support a variety of standards including non-HL7 standards.
It's entirely possible for FHIR tooling to be developed that provides re-usable plug-and-play components for other features such as document authoring, order set creation, etc. Such tools are not covered here.
The set of tools within this ecosystem are and will continue to be developed by a variety of stakeholders including HL7 international and its volunteers, HL7 affiliates, other standards development organizations (SDOs), researchers and the implementer community. HL7 does not place restrictions on who can develop FHIR-related tooling, beyond the [licensing constraints on the use of the FHIR name and logo]. Similarly, the concepts expressed here are not an exhaustive list of what tools might potentially exist. New contributions and ideas are welcome.
How do I engage with the FHIR tooling community?
The FHIR tooling community, like the FHIR implementer community, is global. It lives both within the standards space (principally under HL7, though also under other SDOs) as well as within the FHIR implementer community as represented by the FHIR Foundation.
Within HL7 tooling issues are primarily dealt with by the [FHIR Infrastructure] (FHIR-I) work group. Oversight of tooling related to the development and publication process is provided by the [FHIR Management Group] with the support of the HL7 Publishing work group and overall oversight by the Technical Steering Committee and HL7 CIO. Work happens both at [HL7 Working Group Meetings] as well as on [FHIR-I conference calls].
Within the implementation community, discussion and coordination primarily happens on the [chat.fhir.org] discussion space. Discussions about general FHIR tooling issues, tooling integration issues and even updates to this page, happen on the [tooling] stream. However, conversations about more specific types of tooling also happen on other streams including:
- [conformance] (profiling and IG tooling)
- [crucible] and [touchstone] testing tools
- [terminology] terminology services tools
- various reference implementations ([dotnet], [hapi],[javascript], [python]
New participants are welcome, but are encouraged to read the [community expectations]. Participants do not need to be HL7 members, though membership is encouraged to better support the FHIR community as a whole.
Being a committer
Tooling projects sponsored by HL7 will typically have their source managed under HL7's SVN () or GIT () environments. Read-only access is available to everyone. Committer access can be received by emailing lmckenzie@gevityinc.com. To gain committer privileges, send an email to lmckenzie@gevityinc.com stating the following:
- That you've read and agree to abide by chapter 16 of HL7's [and Operations Manual] (GOM)
- The chapter deals with IP rights, patents, etc.
- That you are signed up for and agree to actively monitor the [Committer's stream] on chat.fhir.org
- Specifically that you will abide by freezes or other constraints on committed content and that you'll monitor commits to ensure they don't break anything
- What SVN or Git user id should be granted the access
The architecture
Key requirements
The following represent ideals we encourage FHIR tools to meet. Aligning with these requirements will maximize community benefit for the tool
- Modular: Tools should be designed in such a manner that their features can be leveraged by tools developed by others and also to be able to leverage tools created by others. Ideally, the user of the tool should be able to configure which of the available implementations of a particular piece of functionality will be used.
- Standardized interfaces: To allow tools to integrate, standard interfaces and integration points are needed. One of the main purposes of this document is to identify and define such interfaces.
- FHIR artifacts as interface: Tools should consume and/or produce artifacts that are conformant with the FHIR specifications. Tooling should work with the XML and JSON version of FHIR artifacts or with the .zip and .pack files produced by FHIR publishing processes. Any additional custom files or configuration files should be kept to a minimum - and ideally discussed within the tooling community to see if the needs might be met in an interoperable way through FHIR resources.
- Extensible: It should be possible (and ideally easy) to extend the tool to accomodate extensions that may be defined to add capability to Con artifacts being produced or manipulated.
- Version independent: While tools are expected to be dependent on specific versions of conformance resources, they should be able to work with other versions of the FHIR specification (including draft versions with new resources and complex data types) so long as the conformance resources defining the content is available.
- Multiple OS support: At a minimum, FHIR tools should run on Windows and on Macs within common Windows emulators. Ideally, tools should run on Windows, Mac and Linux without emulation.
- Free for use: Essential functions should not require payment. HL7 tries hard to ensure that there are minimal financial barriers to using the FHIR specification. While open-source is encouraged, other financial models such as freemium, "pay what you can", "paid support" are welcome as well.
- Escrowed source: Non-open source tooling implementers are encouraged to keep source in escrow to be made available to the FHIR foundation should the authoring organization no longer be able/willing to maintain the tooling going forward
- Multi-language: Tools should be written in such a way that their user interfaces can support labels and instructions in a variety of languages if the FHIR community chooses to provide the needed translations.
Integration Mechanisms
There are a number of ways to allow different tools to interact together:
Tools can operate on a shared repository of conformance instances, either in a local persistance structure or in a #registry_tooling registry. Files containing individual resources or resource bundles can also be passed as an argument when invoking a tool and/or returned as the result when invoking a tool.
RESTful operation invocation
Server-hosted tools can have their behaviors invoked by calling operations defined on those servers.
Library integration
One tool can be packaged inside of another tool and have its functions directly invoked by library calls
CDS Hooks
todo: Grahame or Josh to explain how this would work
The Tooling Environments
FHIR tooling requirements (those identified to date at least) can be organized into a set of sub-ecosystems:
- #Design Tooling
- #Conformance Publication Tooling
- #Reference Implementations
- #Validation Tooling
- #Registry Tooling
- #Terminology Tooling
- #Instance Maintenance Tooling
- #Implementation Test Tooling
- #Collaborative Review Tooling
- #Support Services
Each of these sub-echosystems are described below with the following elements:
- Description - what tools/capabilities are part of the sub-ecosystems
- Relevant Specification References - what parts of the FHIR core specification cover the features for this areas
- Features - what are the required and desirable features for tools in this space
- Potential Tool Relationships - what other tooling features can/should integrate with the tools in this space. (Further defining how these relationships will be invoked will be a key part of the development of this document.)
- Existing Implementations - What tools already exist that deliver some of this functionality
- Wish List - What does HL7 most urgently need in this space (for developers who are looking to contribute)
- Open Issues - Topics for HL7 to resolve about tooling requirements and/or how they should integrate
Design Tooling
These tools support the creation and editing of the various conformance artifacts used to define both the FHIR specification itself as well as implementation guides and other packages of conformance artifacts. Without this tooling, artifacts must be hand-edited using one of the FHIR syntaxes which requires a much steeper learning curve and is more error prone. It is unlikely that a single tool will support all resources.
Relevant Specification References
All of these artifacts should (eventually) have authoring and editing tools. They are grouped into related areas:
Implementation Guides:
- [ImplementationGuide]
- [StructureDefinition]
- [CapabilityStatement]
- [SearchParameter]
- [MessageDefinition]
- [OperationDefinition]
- [CompartmentDefinition]
- [GraphDefinition]
- [WorkflowExample]
Terminology:
- [CodeSystem]
- [ValueSet]
- [ExpansionProfile]
- [ConceptMap]
- [NamingSystem]
Others:
In addition, the [Binary] resource may be used to convey images, page text and other content for inclusion in the publication.
Other areas of interest include:
- [Conformance Rules]
- [Compartment Definition]
- [Extensibility ]
- [Operations]
- [Messaging]
- [Profiling FHIR]
For comparing resources, the following operations may be helpful:
We may introduce "compare" operations on resources such as StructureDefinition, OperationDefinition, CapabilityStatement, etc. We might also introduce a "publish" operation on ImplementationGuide.
Features
Must have:
- load resources for editing and serialize resources once created/updated
- render resources for the users doing editing/creation
Nice to have:
- enforce design rules (both those in the core specification as well as in referenced/enforced conformance artifacts)
- look up other artifacts for reference
- provide general editing capabilities such as undo/redo; copy & paste, etc.
- use WYSIWYG editing of markdown elements
- show changes between two different artifacts or versions of an artifact
- allow managing changes between versions of resources as PATCH instances and be able store changes as PATCH instances
Potential Tool Relationships
- Invoke other design tools such that when encountering a needed missing artifact, it's possible to jump to a new tool to create the needed artifact, passing back a reference. (E.g. While editing a structure definition, have the ability to go create a value set, then come back and automatically fill in the value set reference.) Also used to view/edit artifacts already referenced by the artifact being displayed.
- Invoke #Conformance Publication Tooling to see rendered views of artifacts being edited
- Invoke #Registry Tooling to locate resources for use
- Invoke #Validation Tooling to confirm that instances are valid against the base resources and any declared/enforced profiles
- Invoke #Instance Maintenance Tooling to create or modify instances based on changes to underlying conformance resources
- Submit created/edited artifacts to a #Registry Tooling registry for sharing
- Go to #Collaborative Review Tooling to look at comments submitted for an artifact or to note changes made
- Invoke #Support Services to validate or edit XPath, FHIRPath, XHTML, Markdown, etc.
- Invoke #Support Services for specialized behavior such as snapshot generation for StructureDefinitions
- Invoke #Terminology Tooling for specialized operations such as [ValueSet$expand] or [ValueSet$validate-code]
- Invoke external tools for referenced Binary and other artifacts (e.g. image editor, HTML editor, markdown editor, etc.)
- Integrate with source control tooling
Existing Implementations
todo - links
- Forge - .NET (mac emulator friendly) tool that supports creation and editing of StructureDefinition (profile, logical model) and ImplementationGuide
- Lantana's Trifolia - supports creation and editing of StructureDefinition (profile), ??? others?
- Health Intersection's FHIR Toolkit supports ValueSet, CodeSystem and CapabilityStatement
- Open Mapping Software supports StructureMap
- MITRE's Clinical Information Modeling and Profiling Language (CIMPL) for creating Detailed Clinical Logical Information Models (DCLIMs) and automatically producing FHIR profiles (StructureDefinition) CIMPL
- FhirpathTester - .NET tool for testing fhirpath expressions on resource instances fhirpath source (supports DSTU2 and STU3 concurrently)
- LinkEHR - Supports the definition of FHIR StructureDefinitions and exports them as FHIR profiles or ADL archetypes
Wish List
Eventually, we need good quality editors for all of the Conformance artifacts. However, CapabilityStatement, OperationDefinition, SearchParameter and TestScript are probably the most urgent.
Open Issues
- We need to decide how we want to handle "pages" adhoc narrative for security, use-cases, etc. Should these be Binaries? A profile on Basic? A proper resource?
Conformance Publication Tooling
This tooling takes a packaged set of conformance artifacts and renders them into a form suitable for implementers, analysts and others to navigate, read and understand the expectations of a particular implementation environment. Typically this is done as HTML, but PDF, wiki and other representations are also possible. In theory, this can include both tooling used to define the core FHIR specification as well as implementation guides. However, the core spec tooling is highly specialized a
Relevant Specification References
The most important resource is the [ImplementationGuide] as it defines the organization of all the content to be published.
- [StructureDefinition]
- [CapabilityStatement]
- [SearchParameter]
- [MessageDefinition]
- [OperationDefinition]
- [CompartmentDefinition]
- [GraphDefinition]
- [WorkflowExample]
Terminology:
- [CodeSystem]
- [ValueSet]
- [ExpansionProfile]
- [ConceptMap]
- [NamingSystem]
Others:
In addition, the [Binary] resource may be used to convey images, page text and other content for inclusion in the publication.
Features
Must have:
- Be able to interpret the ImplementationGuide resource to find the resources to package and publish - as per the organization defined by the ImplementationGuide
- Generate a human-readable view of the package of resources
- Package up the generated publication for sharing
Nice to have:
- Support to publish all types of conformance resources
- Include link navigation between specification elements and from specification elements to the relevant portions of the FHIR specification.
- Validate that content is valid (valid examples, profiles, no broken links, etc.)
- Support automatic publication as content is edited
- Support publishing in alternative languages (if the necessary "translation" extensions are present)
- Support searching of the content from within the specification interface
Potential Tool Relationships
- Invoke #Registry Tooling to retrieve referenced resources
- Invoke #Terminology Tooling to expand value sets for publication
- Invoke #Support Services to perform snapshot generation and/or narrative generation as part of publication
- Invoke #Validation Tooling to confirm that interlinked artifacts, including examples, are valid at time of publication
- Push published content to #Registry Tooling for publication/sharing
- As part of the publication, provide integrated links to #Collaborative Review Tooling to support gathering feedback about published artifacts.
Existing Implementations
- Forge
- Trifolia?
- HL7 IG publisher
Wish List
- Improved renderings for CapabilityStatement, OperationDefinition, CodeSystem, etc.
- Renderings of any kind for MessageDefinition, GraphDefinition, NamingSystem
- Additional rendering widgits that make artifacts easier to understand/navigate
- Integrate publications with collaborative review tooling
Open Issues
- It would be nice to be able to share code that renders artifacts across publication tools - how could we do this?
- Need to agree on how much configuration should live inside the ImplementationGuide, how much should be external (but possibly shareable?) and how much should be tool-specific.
Reference Implementations
Reference implementations are sets of generated code that support implementation of FHIR instances in a particular programming language. These reference implementations provide a starting point for developers that allows them to avoid deciding how to represent FHIR objects within their environment.
Relevant Specification References
The key concepts needed to produce object or other language-specific representations of resources are found here:
- [StructureDefinition]
- [[http://hl7.org/fhir/datatypes.html
- [[http://hl7.org/fhir/elementdefinition.html
The syntaxes to parse and serialize are found here:
- [[http://hl7.org/fhir/xml.html XML
- [[http://hl7.org/fhir/json.html JSON
- [[http://hl7.org/fhir/rdf.html RDF
Most reference implementations also provide build in support for "fixed" terminology bindings, leveraging information found here:
- [CodeSystem]
- [ValueSet]
Reference implementations may also provide assistance with dynamic behavior, in which case, these links are also relevant:
- [CapabilityStatement]
- [ImplementationGuide]
- [SearchParameter]
- [MessageDefinition]
- [OperationDefinition]
- [CompartmentDefinition]
- [GraphDefinition]
- [RESTful API]
- [Search]
- [GraphQL]
- [Operations]
- [Messaging]
- [Documents]
Features
Must have:
- Provide a language-appropriate representation of all resource elements
- Can parse and serialize instances in at least XML and JSON
Nice to have:
- Support parsing and serializing RDF
- Provide helper support for REST, operations, messaging and/or documents
- Provide helper support for search
- Be available under an open source license
Potential Tool Relationships
- Incorporate or allow integration with #Terminology Tooling for run-time terminology support
- Incorporate or allow integration with #Validation Tooling for run-time instance validation
Existing Implementations
Wish List
- Additional languages of interest to a decent percentage of implementers?
- Support for additional runtime dynamic behavior configuration based on the message definition, graph definition, operation definition and similar resources
Validation Tooling
This tooling allows instances of FHIR resources (including conformance resources) to be checked for validity against the FHIR resources that define them or against which they claim conformance.
Relevant Specification References
The two primary sources for validation information are:
In addition these resources can also provide information that is relevant to the validation process
- [ImplementationGuide] (defines 'default' profiles)
- [GraphDefinition] (sets expectations for referenced resources)
The [Validating Resources] page covers the expectations of the validation process.
The [Resource/$validate] operation defines how validation is invoked as a service. It will return validation issues as [OperationOutcome] instances.
Features
Must have:
- Ability to validate both XML and JSON resources of any type
- Check structural and syntax validity of the instance
Nice to have:
- Perform validation of terminology against specified bindings
- Check FHIRPath constraints
- Check references to external artifacts
Potential Tool Relationships
- Invoke #Registry Tooling to retrieve referenced profiles, value sets and other resources
- Invoke or incorporate #Terminology Tooling to check for code validity
Existing Implementations
Wish List
- Continue to build the test case library of both valid and invalid cases
- Create validation libraries in additional languages
- Refactor validator to provide multi-lingual support
Registry Tooling
Registries host conformance resources as publicly accessible websites that can be searched and navigated to find relevant resources. Registries allow implementers to leverage existing artifacts rather than creating their own. They also provide a means of ensuring that implementers get the most "current" version of a particular artifact.
Relevant Specification References
The most critical resources to register are these:
Specialized registries might support only terminology artifacts:
- [CodeSystem]
- [ValueSet]
- [ExpansionProfile]
- [ConceptMap]
- [NamingSystem]
Ideally, the registries would support all the remaining conformance resources as well:
- [CapabilityStatement]
- [SearchParameter]
- [MessageDefinition]
- [OperationDefinition]
- [CompartmentDefinition]
- [GraphDefinition]
- [WorkflowExample]
- [StructureMap]
- [TestScript]
[Binary] can be used to store images and other elements that are part of ImplementationGuides. As well, example instances will also need to be stored - and they can be of any type of [resource] at all.
The FHIR interface supported by the interface is defined in the [REST] and [Search] portions of the specification.
Features
Must have:
- A web-based user interface for searching for and viewing all supported resources with links that support downloading results
- A FHIR interface that supports submission, update and retrieval of resources
- User security to ensure that responsibility for submissions can be tracked and access can be managed
Nice to have:
- Ability to navigate to related resources
- Ability to download a resource and its dependencies
- Ability to allow users to assert "usage" of resources
- Ability to apply PATCH instances to existing resources (particularly for large resources such as CodeSystem)
Potential Tool Relationships
- Registries might leverage #Conformance Publication Tooling to render the artifacts
- Registries should support integration with the #Collaborative Review Tooling to enable commenting on registered artifacts
Existing Implementations
- Furore's Simplifier.NET
Wish List
- Enhanced support for tracking "usage" of resources
- Support for retrieving dependencies
Terminology Tooling
FHIR standards have heavy reliance on terminologies, including complex terminologies such as SNOMED-CT. Terminology services handle the heavy lifting of validating codes, translating codes and determining what codes are permitted in a particular space.
Relevant Specification References
These tools make use of the following resources:
- [CodeSystem]
- [ValueSet]
- [ExpansionProfile]
- [ConceptMap]
- [NamingSystem]
Background areas and operations include:
- [Terminology]
- [Terminology Services]
- [CodeSystem/$lookup]
- [CodeSystem/$subsumes]
- [ConceptMap/$translate]
- [ConceptMap/$closure]
- [ValueSet/$expand]
- [ValueSet/$validate-code]
A new operation is likely to be added to NamingSystem to support finding the canonical system for a given identifier or code 'system' value.
Features
The features of a terminology service are defined [in the FHIR spec]
Potential Tool Relationships
- Terminology services will typically either incorporate or depend on #Registry Tooling to look up the terminology artifacts needed to execute their operations.
Existing Implementations
todo: Add links
- Health Intersections
- Apelon
- Art-Decor
- VSAC
- SNQuery
Wish List
- Add support for NamingSystem resolution
Instance Maintenance Tooling
Implementers are highly dependent on instance examples to understand the specification and to act as templates when creating their own solutions. Large volumes of sample instances (sometimes with specific characteristics) are often also needed in order to test implementations.
Relevant Specification References
Features
Must have:
- Ability to author FHIR instances of any type with a "friendly" user interface
- Ensure instances are valid against the core specification
Nice to have:
- Support authoring against various versions of the specification, including "current build"
- Generate 'template' resources based on the specification and example values specified in the specification
- Ensure validatity against profiles
- Check validity of terminology and resource references
- Support lookup of allowed terminology values
- Support lookup of relevant identifier systems
- Generate bulk data that is "clinically relevant"
Potential Tool Relationships
- #Registry Tooling can be used to retrieve instances to edit or copy and to store new or revised instance examples
- #Validation Tooling can be used to help ensure that instances are valid
- #Terminology Tooling
- #Reference Implementations can be used to convert instance examples from one FHIR syntax into the others
Existing Implementations
Individual instance creation
- ClinFHIR
Bulk instance creation
- mihin (Jeff Eastman)
- Synthea - Mitre (https://github.com/synthetichealth/synthea)
Wish List
- ???
Implementation Test Tooling
Part of standards development is the ability to test (and potentially certify) that implementations are compliant with the standard. Test tools support the automation (or at least guidance and monitoring) of the testing process and reporting the results.
Relevant Specification References
These tools make use of [TestScript] and will produce [TestReport]
The testing process is described in [Testing]
Features
Must have:
- Can consume TestScript resources
- Can execute TestScripts
Nice to have:
- Can act as a "man in the middle" over secure communications
- Can support testing client systems by monitoring outgoing and incoming communications while someone manipulates and records the behavior of the user interface
Potential Tool Relationships
- Retrieve TestScripts, conformance artifacts and sample data from #Registry Tooling and potentially store TestReports in the registry as well
- Validate results using #Validation Tooling
- Integrate with #Design Tooling to allow scripts and sample data to be adjusted during the testing process
Existing Implementations
- TouchStone
- Crucible
Wish List
???
Conversion Tooling
FHIR implementation often involves converting to or from other syntaxes including HL7 v2, CDA, OpenEHR as well as proprietary formats. It may also be necessary to convert between different versions of FHIR or between logical model instances and conformant FHIR instances. Conversion tooling supports conversion message instances between these different formats. Note that conversion tooling may be used to convert between syntaxes where neither the source nor the target is FHIR.
Relevant Specification References
Mappings are defined using:
- [StructureMap] for structures
- [ConceptMap] for terminologies
Structure map makes use of a FHIR-defined [Mapping Language] which in turn relies on [FHIRPath] which is a syntax-neutral path language.
The transformation process can be initiated RESTfully using the [StructureMap/$transform] operation
Features
Must have:
- Ability to consume structure maps
- Ability to execute those transforms against instances
Nice to have:
- ???
Potential Tool Relationships
- #Registry Tooling can be used to retrieve referenced StructureMap and ConceptMaps
- #Terminology Tooling can be used to support code translation as part of instance translation
Existing Implementations
- Grahame's tool (todo: name)
- Open Mapping Software FHIR Transform Engine
- LinkEHR Studio: Define mappings between different clinical models (from potentially different reference models such as HL7 FHIR, HL7 CDA, openEHR, ISO13606, CDISC ODM, etc.) and generate automatically transformation programs
Wish List
???
Collaborative Review Tooling
A key part of developing standards and derived specifications is soliciting feedback on the specifications as well as on proposed changes to those specifications. These reviews might be from a technical perspective, a clinical perspective or other perspectives. This tooling supports that process.
Relevant Specification References
None - as yet
Features
Must have:
- Allow users to provide feedback about specific elements within a specification, including identifying that feedback as positive or negative.
- Allow users to update feedback already provided
- Provide a consolidated view of feedback associated with an artifact
Nice to have:
- Support discussion about feedback points
- Integrate with source control so that changes applied can be noted as being associated with particular feedback
- Provide control over who's invited/permitted to provide feedback and monitor who's done so yet
Potential Tool Relationships
- Be able to link from provided feedback back to the published version produced by the #Conformance Publication Tooling
Existing Implementations
- HL7 ballot site
- OpenEHR tool suite?
Wish List
- Integration of feedback tooling directly into the HL7 core publication and IG publications
Open Issues
- Do we need a resource to capture this feedback or do we leverage Observation or QuestionnaireResponse?
Support Services
Support services are libraries or utilities that aren't intended to be used stand-alone but which provide features that are useful for other tools and which are sufficiently complex enough that it makes sense for tools to re-use the capability rather than developing the capability themselves.
Relevant Specification References
Features
FHIRPath validation and evaluation: This is used to both check that FHIRPaths are 'valid' against the StructureDefinitions they're intended to apply to as well as to assert FHIRPaths against FHIR (and potentially other) instances.
Narrative generation: This generates the XHTML content for the "text" narrative for a resource providing a human-friendly review of the resource content
Snapshot generation: This takes the "differential" present in a StructureDefinition and generates the "snapshot" view applying the changes from the "differential" to base StructureDefinition's snapshot (and potentially the snapshot of referenced StructureDefinitions)
Potential Tool Relationships
- FHIRPath validation may need to load referenced StructureDefinitions and terminology artifacts from #Registry Tooling.
- FHIRPath evaluation may depend on #Terminology Tooling for terminology-related operations
- Narrative generation may depend on #Terminology Tooling for terminology-related to look up display names
- FHIRPath validation may need to load referenced StructureDefinitions from #Registry Tooling.
Existing Implementations
FHIRPath
- Java, .NET, ???
Narrative
- Java
Snapshot
- Java, .NET
Wish List
- Broader language support for existing implementations
- Improve the user friendliness and clinical utility of Narrative views (and ideally get consistent representation across tools)
- Incorporate relevant "core" extensions as part of narrative rendering
- Increased test cases for Snapshot generation
- Create a "differential-generation" feature where two snapshots can be "diffed" to identify the changes.
Open Issues
There's been discussion about defining 'subsets' of FHIRPath which might allow for