# Reading material draft There are several tools available for those working with FHIR. HL7 provides an overview of tools in the [FHIR Tools Registry](http://wiki.hl7.org/index.php?title=FHIR_Tools_Registry). In this module we will introduce you to the tools related to profiling that we like to work with. When profiling, there's a couple of activitities you may be involved in: 1. Exploring what's already out there, 2. Building profiles and extensions, 3. Building terminology, 4. Creating examples, 5. Creating Implementation Guides, 6. Validating your work and 7. Interacting with a FHIR server. For each of these activities we will explain which tool(s) we like to use and how to use them. ## 1. Exploring what's already out there The places to check which profiles and extensions already exist are: * [FHIR Registry](http://registry.fhir.org) * [Simplifier](https://simplifier.net) * [FHIR Extensibility registry](http://hl7.org/fhir/STU3/extensibility-registry.html) * Resource's `Profiles` tab on `hl7.org/fhir` To learn more about the FHIR registry and Simplifier, follow the Simplifier module (not yet available) or visit the [Simplifier documentation page](http://docs.simplifier.net/simplifier/index.html). ## 2. Building profiles and extensions The official tool for profile editing is [Forge](https://simplifier.net/Forge). Forge has a graphical user interface making it easier to create, edit and validate profiles and extensions. The Forge-Simplifier integration makes it possible to directly import and export your profiles from and to your Simplifier projects. Forge is linked to the .NET API and automatically validates your work against the official FHIR specification. You can [download](https://simplifier.net/forge/download "Download Forge") the STU3 version (or earlier DSTU1 and DSTU2 versions) for free. Forge allows you to: * Create and edit FHIR Profiles * Create and edit FHIR extension definitions * Create and edit FHIR conformance packages * Validate FHIR profiles * Fetch and publish profiles from/to a FHIR server * Fetch and publish profiles from/to a FHIR registry * Define formal constraints * Define slices * Define value set bindings * Define mappings Here below are a couple of links to videos explaining the basics of Forge (STU3): * [Edit cardinality](https://vimeo.com/242746255) * [Overview of main windows](https://vimeo.com/242746249) * [Constrain multiple types and change valueset](https://vimeo.com/242746242) * [How to publish to simplifier](https://vimeo.com/242746237) To learn more about Forge, visit the [Forge documentation page](http://docs.simplifier.net/forge/index.html). ## 3. Building terminology A handy tool that we like to use to create terminology resources, such as CodeSystems, ValueSets and ConceptMaps, is [Snapper Author](http://ontoserver.csiro.au/snapper2-dev/index.html#/) (STU3). You can also use this tool to directly validate your created resources. Snapper Author allows you to: * Individually define codes or upload in bulk via CSV * Edit all of the relevant metadata * Query terminology server for codes * Author ConceptMaps * Validate your work * Import resources from a FHIR server * Export resources as JSON or upload to a FHIR server Here below are a couple of links to videos explaining how to build CodeSystems and ValueSets using Snapper Author: * [CodeSystem demonstration](https://www.youtube.com/watch?feature=youtu.be&v=5VIqqiQ1UUU) * [ValueSet demonstration](https://www.youtube.com/watch?feature=youtu.be&v=hVU9cskxo1Q) ## 4. Creating examples SMART FRED is a nice tool to quickly create examples in JSON. You can either use the [DSTU2] (http://docs.smarthealthit.org/fred/?resource=.%2Fsamples%2Flisa.json) or the [STU3](http://docs.smarthealthit.org/fred/?profiles=.%2Fprofiles%2Fstu3.json&resource=.%2Fsamples%2Fstu3-patient.json) version. SMART FRED allows you to: * Create resources * Create resources in Bundles * FHIR schema-aware editing * Export as JSON First select `Open Resource` at the top of the page. Start with a blank resource and select a resource type or open an existing resource from a local file or a website URL. Start adding (or editing) elements by selecting values from the drop down menus. When finished, select `Export JSON` at the top of the page to get the JSON code of your example. ## 5. Creating Implementation Guides Forge has a feature for building implementation guides, but a quicker and easier way is to use the IG-editor on Simplifier. More information can be found [here](https://blog.fire.ly/2016/08/08/create-my-first-fhir-implementation-guide-using-simplifier/). The IG-editor on Simplifier allows you to: * Get started pretty easily * Upload profiles, valuesets and other FHIR artefacts * Write your content with markdown * Style IG with CSS * Render resources instantly with directives Here below is a links to a video explaining how to get started with the IG-editor on Simplifier: * [Simplifier feature movie on Implementation Guides](https://www.youtube.com/watch?v=aLQiDBxVXwM) To learn more about creating IGs, please follow the module on Publishing and validating your work (not yet available). ## 6. Validating your work Most tools that we described include an option to validate your work against the FHIR specification. We use either the [.NET GUI validator](http://docs.simplifier.net/fhirnetapi/) or Simplifier for validation (STU3). The .NET GUI validator: * Enables validation of FHIR XML or JSON against the specification * Enables validation of custom profiles against the specification * Supports terminology validation * Serves both as a specification and a terminology server Simplifier: * Enables validation of FHIR XML or JSON against the specification * Enables validation of custom profiles against the specification * Works in a browser Here below are links to videos explaining how to use the .NET GUI validator and Simplifier for validation: * [Validation with the .NET GUI validator](https://www.youtube.com/watch?v=p35Sw_T6jvc) * [Validation in Simplifier](https://www.youtube.com/watch?v=Vxqp_wdLpjM) ## 7. Interacting with a FHIR server We like to use Postman for interaction with FHIR servers. We use it a lot, either for testing purposes for our own [Vonk](https://simplifier.net/vonk) server, or for testing our profiling work on a real server. Postman allows you to: * Send and receive FHIR JSON and XML to a FHIR server * Issue CRUD operations (GET, POST, UPDATE, DELETE) * Easily make sample responses for IG * Create, store and share collections of requests Here below is a link to a video explaining how to use Postman: * [Postman demonstration](https://www.youtube.com/watch?v=g9sFmXtZYjc&feature=youtu.be) ## 8. Additional tools worth mentioning Some other tools related to profiling that we did not discuss, but are worth mentioning are: * Trifolia workbench * Profile editor * Valueset editor * IG export for HL7 publisher * HL7 [IG-publisher](http://wiki.hl7.org/index.php?title=IG_Publisher_Documentation) * FHIR like IG * Static export * Java validator * [ClinFHIR](http://clinfhir.com/)