SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
FHIR® is the registered trademark of HL7 and is used with the permission of HL7. The Flame Design mark is the registered trademark of HL7 and is used with the permission of HL7.
Amsterdam, 15-17 November | @fhir_furore | #fhirdevdays17 | www.fhirdevdays.com
Validation in .NET and Java
Ewout Kramer, Furore Health Informatics and James Agnew, University Health Network
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Who am I?
 Name: Ewout Kramer
 Company: Furore Health Informatics
 Background:
 Computer Science (operating systems)
 In Health IT since 1999
 FHIR Core team
 Lead dev on the .NET API
 e.kramer@furore.com, @ewoutkramer
 http://thefhirplace.com2
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Who am I?
 Name: James Agnew
 Company: UHN / Smile CDR
 Background:
 Lead dev on the Java HAPI library
 jamesagnew@gmail.com, @jamesagnew
3
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Validation inputs
 Instance data (resource)
 Definition of what data should look like (StructureDefinitions)
 Terminology services (ValueSet)
 Execution of FhirPath constraints
 Some way to combine it all, validate and return the outcomes
4
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
VALIDATION IN .NET
5
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Structure of packages
6
Hl7.Fhir.Support
(Net4, Net4.5, Net1.0, Net1.3)
• Utility methods
• ElementModel
Hl7.FhirPath
(Net4, Net4.5, Net1.0)
• FhirPath compilation
• FhirPath evaluation
Hl7.Fhir.Core
(Net4.5, Net1.1, Net1.3)
• Model classes
• Serialization
• Http client
Hl7.Fhir.Specification
(Net4.5, Net1.3)
• Access to definitions
• Terminology services
• Validation
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Instance data:
IElementNavigator
7
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Specification data
 All the definitions of the core resources, types, search
parameters, operations, etc. are available through the
Hl7.Specification.[STU3/DSTU2] package on NuGet
 The package contains a zip (specification.zip) with meta data
produced by the FHIR publication process
 profiles-resources.xml, profiles-types.xml, extension-definitions.xml
 search-parameters.xml
 v2-tables.xml, v3-codesystems.xml, valuesets.xml
 xsd schemas, schematrons, others....
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Definitions: IResourceResolver
 Concrete implementations in API:
 DirectorySource, ZipSource
 WebSource
 CachedResolver (wraps another resolver)
 MultiResolver (tries a list of resolvers)9
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Terminology:
ITerminologyService
 Current implementations:
 LocalTerminologyService
Does an in-memory expand & lookup
 ExternalTerminologyService
Uses the FhirClient calls to validate a code (possibly even
sending your valueset across!)
 FallbackTerminologyService
First tries LocalTerminologyService, if that fails (too
complex!), invoke an external service
 Note: returns OperationOutcome
10
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
The Big Picture
FHIR Data
<Patient>
</Patient>
IElementNavigator FHIR Definitions
StructureDefinition
OperationDefinition
ValueSet
IResource
Resolver
FindStructure
Definition()
ValueSetExpander
LocalTerminology
Service
ITerminologyService
Validator
FluentPathCompiler
FHIR Poco
OperationOutcome
(with IssueComponents)
ExternalTerminology
Service
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Practicalities
 class Validator in Hl7.Fhir.Validation namespace
(Hl7.Fhir.Specification assembly)
 Configure: new Validator(settings)
 Resolver, terminology service to use
 Validate: call one of the overloads:
 Validate(IElementNavigator)
 Validate(Base)
 Validate(XmlReader)
 Result is an OperationOutcome
12
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
13
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Caveats
 Validator is still being improved
 Support most features already, except for slicing – only
discriminator-less slicing is supported
 Other improvements: e.g. loop-detection
14
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Playing with the validator
 Windows executable:
 https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo/releases
 Directly calling the Validator in code
 Using “Validate” on Simplifier.net
15
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
OperationOutcome
- on steroids
 Lots of helper methods
 Properties:
 Success (!information,!warning)
 Fatals, Errors, Warnings properties
 Extension methods (in Hl7.Fhir.Support)
 ErrorsAt(string path)
 Where(severity, type, …)
 Set/GetHierachyLevel()
 Include(outcome), Add(outcome)
16
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
QUESTIONS?
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
VALIDATION IN HAPI FHIR
Suggestions for a pleasurable afternoon
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
When and how to Validate
There is no right answer to this question!
 Validate strictly during development but be loose in
production? Always be strict?
 Validate some resource types but not others?
 Validate on the way in but not the way out?
 Structural vs semantic validation? (there is a performance
cost!)
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Validation in HAPI FHIR
Parser Error Handler
(structural validation only)
● Parser can be configured
with an “Error Handler”
which logs or fails on error
● Only catches structural
issues
Validator
(semantic validation)
● Applies a complete set of
rules to a resource instance
● Currently far more powerful
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Parser Error Handler
 Callback mechanism during parsing
 Very fast!
 Catches structural problems:
 Invalid elements
 Invalid cardinalities
 JSON data type mismatches
21
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Parser Validator
String input = "{"resourceType":"Patient","isnice":true}";
FhirContext ctx = FhirContext.forDstu3();
IParser parser = ctx.newJsonParser();
parser.setParserErrorHandler(new LenientErrorHandler(true));
parser.parseResource(input);
22
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Parser Validator
String input = "{"resourceType":"Patient","isnice":true}";
FhirContext ctx = FhirContext.forDstu3();
IParser parser = ctx.newJsonParser();
parser.setParserErrorHandler(new LenientErrorHandler(true));
parser.parseResource(input);
23
[main] WARN
ca.uhn.fhir.parser.LenientErrorHandler -
Unknown element 'isnice' found while
parsing
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Parser Validator
String input = "{"resourceType":"Patient","isnice":true}";
FhirContext ctx = FhirContext.forDstu3();
IParser parser = ctx.newJsonParser();
parser.setParserErrorHandler(new StrictErrorHandler());
parser.parseResource(input);
24
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Parser Validator
String input = "{"resourceType":"Patient","isnice":true}";
FhirContext ctx = FhirContext.forDstu3();
IParser parser = ctx.newJsonParser();
parser.setParserErrorHandler(new StrictErrorHandler());
parser.parseResource(input);
25
ca.uhn.fhir.parser.DataFormatException:
Unknown element 'isnice' found during parse
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Profile Validation
 Applies semantic validation based on “Profiles”
 Slower than parser error handler!
 Validates various things:
 All the same structural validation as parser error handler
 Terminology bindings
 Invariants
 Constraints and extensions
26
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Validator
● HAPI’s validator uses modules and collects the results from
any that are enabled
● Create your own if you want!
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Schema/Schematron Validator
 FHIR provides schemas + schematrons for validating
conformance to basic resource requirements:
 Cardinality
 Optionality
 Required bindings
 Datatype rules
 The Schema + Schematron modules are the defaults if
nothing else is selected
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Schema/Schematron Validator (2)
Dependencies:
● hapi-fhir-validation-resources-dstu3-2.5.jar
● phloc-schematron-2.7.0.jar
Inputs (pick one):
● Resource Java model object
● Raw JSON Resource
● Raw XML Resource
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Using the Schema Validator
public class Example20_ValidateResource {
public static void main(String[] args) {
// Create an incomplete encounter (status is required)
Encounter enc = new Encounter();
enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345");
// Create a new validator
FhirContext ctx = FhirContext.forDstu3();
FhirValidator validator = ctx.newValidator();
// Did we succeed?
ValidationResult result = validator.validateWithResult(enc);
System.out.println("Success: " + result.isSuccessful());
// What was the result
OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome();
IParser parser = ctx.newXmlParser().setPrettyPrint(true);
System.out.println(parser.encodeResourceToString(outcome));
}
}
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Using the Schema Validator
public class Example20_ValidateResource {
public static void main(String[] args) {
// Create an incomplete encounter (status is required)
Encounter enc = new Encounter();
enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345");
// Create a new validator
FhirContext ctx = FhirContext.forDstu3();
FhirValidator validator = ctx.newValidator();
// Did we succeed?
ValidationResult result = validator.validateWithResult(enc);
System.out.println("Success: " + result.isSuccessful());
// What was the result
OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome();
IParser parser = ctx.newXmlParser().setPrettyPrint(true);
System.out.println(parser.encodeResourceToString(outcome));
}
}
<OperationOutcome xmlns="http://hl7.org/fhir">
<issue>
<severity value="error"/>
<code value="processing"/>
<diagnostics value="cvc-complex-type.2.4.b: The content of
element 'Encounter' is not complete. One of
'{&quot;http://hl7.org/fhir&quot;:identifier,
&quot;http://hl7.org/fhir&quot;:status}' is expected."/>
<location value="Line[1] Col[140]"/>
</issue>
</OperationOutcome>
false
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Schema Validation with String Input
Strings are also valid input (JSON is converted to XML!)public class Example21_ValidateResourceString {
public static void main(String[] args) {
String input = "<Encounter xmlns="http://hl7.org/fhir"></Encounter>";
// Create a new validator
FhirContext ctx = FhirContext.forDstu3();
FhirValidator validator = ctx.newValidator();
// Did we succeed?
ValidationResult result = validator.validateWithResult(input);
System.out.println("Success: " + result.isSuccessful());
// What was the result
OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome();
IParser parser = ctx.newXmlParser().setPrettyPrint(true);
System.out.println(parser.encodeResourceToString(outcome));
}
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Profile Validation
 In FHIR, a “Profile” is a collection of special resources:
 StructureDefinition
 ValueSet
 CodeSystem
 A resource can declare conformance to a profile in its
metadata
 A server can require conformance to a profile
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Profile Validator
● FhirInstanceValidator module requires an instance of
IValidationSupport
● Several implementations are supplied with HAPI FHIR
● You can also create your own
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Validation Support
Use built-in FHIR definitions and terminology
Load your own definitions and terminology
Chain multiple providers together
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Questionnaires are Validated
● FhirInstanceValidator will also validate
QuestionnaireResponse compliance to
Questionnaire
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Using the Profile Validator
public class Example22_ValidateResourceInstanceValidator {
public static void main(String[] args) {
// Create an incomplete encounter (status is required)
Encounter enc = new Encounter();
enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345");
// Create a new validator
FhirValidator validator = FhirContext.forDstu3().newValidator();
// Cache this object! Supplies structure definitions
DefaultProfileValidationSupport support = new DefaultProfileValidationSupport();
// Create the validator
FhirInstanceValidator module = new FhirInstanceValidator(support);
validator.registerValidatorModule(module);
// Did we succeed?
IParser parser = FhirContext.forDstu3().newXmlParser().setPrettyPrint(true);
System.out.println(parser.encodeResourceToString(validator.validateWithResult(enc).toOperationOutcome()));
}
}
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Using the Profile Validator
public class Example22_ValidateResourceInstanceValidator {
public static void main(String[] args) {
// Create an incomplete encounter (status is required)
Encounter enc = new Encounter();
enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345");
// Create a new validator
FhirValidator validator = FhirContext.forDstu3().newValidator();
// Cache this object! Supplies structure definitions
DefaultProfileValidationSupport support = new DefaultProfileValidationSupport();
// Create the validator
FhirInstanceValidator module = new FhirInstanceValidator(support);
validator.registerValidatorModule(module);
// Did we succeed?
IParser parser = FhirContext.forDstu3().newXmlParser().setPrettyPrint(true);
System.out.println(parser.encodeResourceToString(validator.validateWithResult(enc).toOperationOutcome()));
}
}
<OperationOutcome xmlns="http://hl7.org/fhir">
<issue>
<severity value="error"/>
<code value="processing"/>
<diagnostics value="Profile
http://hl7.org/fhir/StructureDefinition/Encounter, Element
'Encounter.status': minimum required = 1, but only found 0"/>
<location value="Encounter"/>
</issue>
</OperationOutcome>
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
39
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
HANDS-ON TRACK
Suggestions for a pleasurable afternoon
© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Play with the validator
 Check out https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo &
compile
 Try to incorporate your resolver and terminology service (if any)
 Try running the examples at https://github.com/ewoutkramer/fhir-net-
api/tree/develop/src/Hl7.Fhir.Specification.Tests/TestData/validation
 Alter the examples so they trigger your code (change a binding…)
41

Más contenido relacionado

La actualidad más candente

Devdays 2017 implementation guide authoring - ardon toonstra
Devdays 2017  implementation guide authoring - ardon toonstraDevdays 2017  implementation guide authoring - ardon toonstra
Devdays 2017 implementation guide authoring - ardon toonstraDevDays
 
Structure definition 101 (ewout)
Structure definition 101 (ewout)Structure definition 101 (ewout)
Structure definition 101 (ewout)DevDays
 
Furore devdays2017 general-introtofhir
Furore devdays2017 general-introtofhirFurore devdays2017 general-introtofhir
Furore devdays2017 general-introtofhirDevDays
 
Discover the new face of HL7 FHIR v4 - Ideas2IT
Discover the new face of  HL7 FHIR v4 - Ideas2ITDiscover the new face of  HL7 FHIR v4 - Ideas2IT
Discover the new face of HL7 FHIR v4 - Ideas2ITIdeas2IT Technologies
 
20171127 rene spronk_messaging_the_unloved_paradigm
20171127 rene spronk_messaging_the_unloved_paradigm20171127 rene spronk_messaging_the_unloved_paradigm
20171127 rene spronk_messaging_the_unloved_paradigmDevDays
 
20171116 rene spronk_profiling_governance
20171116 rene spronk_profiling_governance20171116 rene spronk_profiling_governance
20171116 rene spronk_profiling_governanceDevDays
 
Furore devdays 2017- continua implementing fhir
Furore devdays 2017- continua implementing fhirFurore devdays 2017- continua implementing fhir
Furore devdays 2017- continua implementing fhirDevDays
 
HL7 New Zealand: FHIR for developers
HL7 New Zealand: FHIR for developersHL7 New Zealand: FHIR for developers
HL7 New Zealand: FHIR for developersDavid Hay
 
SMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgSMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgFurore_com
 
Accessing SNOMED CT With FHIR Terminology Services
Accessing SNOMED CT With FHIR Terminology ServicesAccessing SNOMED CT With FHIR Terminology Services
Accessing SNOMED CT With FHIR Terminology ServicesPeter Jordan
 
FHIR API for Java programmers by James Agnew
FHIR API for Java programmers by James AgnewFHIR API for Java programmers by James Agnew
FHIR API for Java programmers by James AgnewFHIR Developer Days
 
Whats new (grahame)
Whats new (grahame)Whats new (grahame)
Whats new (grahame)DevDays
 
Furore devdays2017 tdd-1-intro
Furore devdays2017 tdd-1-introFurore devdays2017 tdd-1-intro
Furore devdays2017 tdd-1-introDevDays
 
FHIR Search for client developers by Mirjam Baltus
FHIR Search for client developers by Mirjam BaltusFHIR Search for client developers by Mirjam Baltus
FHIR Search for client developers by Mirjam BaltusFHIR Developer Days
 
Furore devdays2017 tdd-2-advanced
Furore devdays2017 tdd-2-advancedFurore devdays2017 tdd-2-advanced
Furore devdays2017 tdd-2-advancedDevDays
 
Furore devdays 2017 - workflow
Furore devdays 2017 - workflowFurore devdays 2017 - workflow
Furore devdays 2017 - workflowDevDays
 
FHIR Profiles
FHIR ProfilesFHIR Profiles
FHIR ProfilesDavid Hay
 
2017 11-ccda-on-fhir
2017 11-ccda-on-fhir2017 11-ccda-on-fhir
2017 11-ccda-on-fhirDevDays
 
FHIR tutorial - Afternoon
FHIR tutorial - AfternoonFHIR tutorial - Afternoon
FHIR tutorial - AfternoonEwout Kramer
 
Authoring FHIR Profiles - extended version
Authoring FHIR Profiles - extended versionAuthoring FHIR Profiles - extended version
Authoring FHIR Profiles - extended versionEwout Kramer
 

La actualidad más candente (20)

Devdays 2017 implementation guide authoring - ardon toonstra
Devdays 2017  implementation guide authoring - ardon toonstraDevdays 2017  implementation guide authoring - ardon toonstra
Devdays 2017 implementation guide authoring - ardon toonstra
 
Structure definition 101 (ewout)
Structure definition 101 (ewout)Structure definition 101 (ewout)
Structure definition 101 (ewout)
 
Furore devdays2017 general-introtofhir
Furore devdays2017 general-introtofhirFurore devdays2017 general-introtofhir
Furore devdays2017 general-introtofhir
 
Discover the new face of HL7 FHIR v4 - Ideas2IT
Discover the new face of  HL7 FHIR v4 - Ideas2ITDiscover the new face of  HL7 FHIR v4 - Ideas2IT
Discover the new face of HL7 FHIR v4 - Ideas2IT
 
20171127 rene spronk_messaging_the_unloved_paradigm
20171127 rene spronk_messaging_the_unloved_paradigm20171127 rene spronk_messaging_the_unloved_paradigm
20171127 rene spronk_messaging_the_unloved_paradigm
 
20171116 rene spronk_profiling_governance
20171116 rene spronk_profiling_governance20171116 rene spronk_profiling_governance
20171116 rene spronk_profiling_governance
 
Furore devdays 2017- continua implementing fhir
Furore devdays 2017- continua implementing fhirFurore devdays 2017- continua implementing fhir
Furore devdays 2017- continua implementing fhir
 
HL7 New Zealand: FHIR for developers
HL7 New Zealand: FHIR for developersHL7 New Zealand: FHIR for developers
HL7 New Zealand: FHIR for developers
 
SMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgSMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der Burg
 
Accessing SNOMED CT With FHIR Terminology Services
Accessing SNOMED CT With FHIR Terminology ServicesAccessing SNOMED CT With FHIR Terminology Services
Accessing SNOMED CT With FHIR Terminology Services
 
FHIR API for Java programmers by James Agnew
FHIR API for Java programmers by James AgnewFHIR API for Java programmers by James Agnew
FHIR API for Java programmers by James Agnew
 
Whats new (grahame)
Whats new (grahame)Whats new (grahame)
Whats new (grahame)
 
Furore devdays2017 tdd-1-intro
Furore devdays2017 tdd-1-introFurore devdays2017 tdd-1-intro
Furore devdays2017 tdd-1-intro
 
FHIR Search for client developers by Mirjam Baltus
FHIR Search for client developers by Mirjam BaltusFHIR Search for client developers by Mirjam Baltus
FHIR Search for client developers by Mirjam Baltus
 
Furore devdays2017 tdd-2-advanced
Furore devdays2017 tdd-2-advancedFurore devdays2017 tdd-2-advanced
Furore devdays2017 tdd-2-advanced
 
Furore devdays 2017 - workflow
Furore devdays 2017 - workflowFurore devdays 2017 - workflow
Furore devdays 2017 - workflow
 
FHIR Profiles
FHIR ProfilesFHIR Profiles
FHIR Profiles
 
2017 11-ccda-on-fhir
2017 11-ccda-on-fhir2017 11-ccda-on-fhir
2017 11-ccda-on-fhir
 
FHIR tutorial - Afternoon
FHIR tutorial - AfternoonFHIR tutorial - Afternoon
FHIR tutorial - Afternoon
 
Authoring FHIR Profiles - extended version
Authoring FHIR Profiles - extended versionAuthoring FHIR Profiles - extended version
Authoring FHIR Profiles - extended version
 

Similar a Validation in net and java (ewout james)

Advanced .NET API (Ewout)
Advanced .NET API (Ewout)Advanced .NET API (Ewout)
Advanced .NET API (Ewout)Ewout Kramer
 
FHIR API for .Net programmers by Mirjam Baltus
FHIR API for .Net programmers by Mirjam BaltusFHIR API for .Net programmers by Mirjam Baltus
FHIR API for .Net programmers by Mirjam BaltusFHIR Developer Days
 
Fhir path (ewout)
Fhir path (ewout)Fhir path (ewout)
Fhir path (ewout)DevDays
 
Getting started with FHIR by Ewout Kramer
Getting started with FHIR by Ewout KramerGetting started with FHIR by Ewout Kramer
Getting started with FHIR by Ewout KramerFHIR Developer Days
 
The FHIR burns brighter (what's new in DSTU2)
The FHIR burns brighter (what's new in DSTU2)The FHIR burns brighter (what's new in DSTU2)
The FHIR burns brighter (what's new in DSTU2)Ewout Kramer
 
Patient matching in FHIR
Patient matching in FHIRPatient matching in FHIR
Patient matching in FHIRGrahame Grieve
 
Security in FHIR with OAuth by Grahame Grieve
Security in FHIR with OAuth by Grahame GrieveSecurity in FHIR with OAuth by Grahame Grieve
Security in FHIR with OAuth by Grahame GrieveFHIR Developer Days
 
Vitalis 2016 FHIR Introduction
Vitalis 2016 FHIR IntroductionVitalis 2016 FHIR Introduction
Vitalis 2016 FHIR IntroductionEwout Kramer
 
Vitalis 2016 FHIR App Development
Vitalis 2016 FHIR App DevelopmentVitalis 2016 FHIR App Development
Vitalis 2016 FHIR App DevelopmentEwout Kramer
 
FHIR Tutorial - Morning
FHIR Tutorial - MorningFHIR Tutorial - Morning
FHIR Tutorial - MorningEwout Kramer
 
Nhs trusts meeting at salford
Nhs trusts meeting at salfordNhs trusts meeting at salford
Nhs trusts meeting at salfordEwout Kramer
 
FHIR Search for server developers by Martijn Harthoorn
FHIR Search for server developers by Martijn HarthoornFHIR Search for server developers by Martijn Harthoorn
FHIR Search for server developers by Martijn HarthoornFHIR Developer Days
 
Introduction to FHIR™
Introduction to FHIR™Introduction to FHIR™
Introduction to FHIR™Grahame Grieve
 
Authoring profiles by Michel Rutten
Authoring profiles by Michel RuttenAuthoring profiles by Michel Rutten
Authoring profiles by Michel RuttenFHIR Developer Days
 
Terminology, value-sets, codesystems by Lloyd McKenzie
Terminology, value-sets, codesystems by Lloyd McKenzieTerminology, value-sets, codesystems by Lloyd McKenzie
Terminology, value-sets, codesystems by Lloyd McKenzieFurore_com
 
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...FHIR Developer Days
 
FHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFurore_com
 
FHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFHIR Developer Days
 
SMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgSMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgFHIR Developer Days
 
FHIR Profiling tutorial
FHIR Profiling tutorialFHIR Profiling tutorial
FHIR Profiling tutorialEwout Kramer
 

Similar a Validation in net and java (ewout james) (20)

Advanced .NET API (Ewout)
Advanced .NET API (Ewout)Advanced .NET API (Ewout)
Advanced .NET API (Ewout)
 
FHIR API for .Net programmers by Mirjam Baltus
FHIR API for .Net programmers by Mirjam BaltusFHIR API for .Net programmers by Mirjam Baltus
FHIR API for .Net programmers by Mirjam Baltus
 
Fhir path (ewout)
Fhir path (ewout)Fhir path (ewout)
Fhir path (ewout)
 
Getting started with FHIR by Ewout Kramer
Getting started with FHIR by Ewout KramerGetting started with FHIR by Ewout Kramer
Getting started with FHIR by Ewout Kramer
 
The FHIR burns brighter (what's new in DSTU2)
The FHIR burns brighter (what's new in DSTU2)The FHIR burns brighter (what's new in DSTU2)
The FHIR burns brighter (what's new in DSTU2)
 
Patient matching in FHIR
Patient matching in FHIRPatient matching in FHIR
Patient matching in FHIR
 
Security in FHIR with OAuth by Grahame Grieve
Security in FHIR with OAuth by Grahame GrieveSecurity in FHIR with OAuth by Grahame Grieve
Security in FHIR with OAuth by Grahame Grieve
 
Vitalis 2016 FHIR Introduction
Vitalis 2016 FHIR IntroductionVitalis 2016 FHIR Introduction
Vitalis 2016 FHIR Introduction
 
Vitalis 2016 FHIR App Development
Vitalis 2016 FHIR App DevelopmentVitalis 2016 FHIR App Development
Vitalis 2016 FHIR App Development
 
FHIR Tutorial - Morning
FHIR Tutorial - MorningFHIR Tutorial - Morning
FHIR Tutorial - Morning
 
Nhs trusts meeting at salford
Nhs trusts meeting at salfordNhs trusts meeting at salford
Nhs trusts meeting at salford
 
FHIR Search for server developers by Martijn Harthoorn
FHIR Search for server developers by Martijn HarthoornFHIR Search for server developers by Martijn Harthoorn
FHIR Search for server developers by Martijn Harthoorn
 
Introduction to FHIR™
Introduction to FHIR™Introduction to FHIR™
Introduction to FHIR™
 
Authoring profiles by Michel Rutten
Authoring profiles by Michel RuttenAuthoring profiles by Michel Rutten
Authoring profiles by Michel Rutten
 
Terminology, value-sets, codesystems by Lloyd McKenzie
Terminology, value-sets, codesystems by Lloyd McKenzieTerminology, value-sets, codesystems by Lloyd McKenzie
Terminology, value-sets, codesystems by Lloyd McKenzie
 
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...
Rolling out FHIR - architecture and implementation considerations by Lloyd Mc...
 
FHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René Spronk
 
FHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René SpronkFHIR architecture overview for non-programmers by René Spronk
FHIR architecture overview for non-programmers by René Spronk
 
SMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der BurgSMART on FHIR by Scot Post van der Burg
SMART on FHIR by Scot Post van der Burg
 
FHIR Profiling tutorial
FHIR Profiling tutorialFHIR Profiling tutorial
FHIR Profiling tutorial
 

Más de DevDays

Consent dev days
Consent dev daysConsent dev days
Consent dev daysDevDays
 
Mohannad hussain dicom and imaging tools
Mohannad hussain   dicom and imaging toolsMohannad hussain   dicom and imaging tools
Mohannad hussain dicom and imaging toolsDevDays
 
Mohannad hussain community track - siim dataset & dico mweb proxy
Mohannad hussain   community track - siim dataset & dico mweb proxyMohannad hussain   community track - siim dataset & dico mweb proxy
Mohannad hussain community track - siim dataset & dico mweb proxyDevDays
 
Fhir dev days 2017 fhir profiling - overview and introduction v07
Fhir dev days 2017   fhir profiling - overview and introduction v07Fhir dev days 2017   fhir profiling - overview and introduction v07
Fhir dev days 2017 fhir profiling - overview and introduction v07DevDays
 
Transforming other content (grahame)
Transforming other content (grahame)Transforming other content (grahame)
Transforming other content (grahame)DevDays
 
Quality improvement dev days-2017
Quality improvement dev days-2017Quality improvement dev days-2017
Quality improvement dev days-2017DevDays
 
Furore devdays 2017-sdc (lloyd)
Furore devdays 2017-sdc (lloyd)Furore devdays 2017-sdc (lloyd)
Furore devdays 2017-sdc (lloyd)DevDays
 
Furore devdays 2017- rdf2(solbrig)
Furore devdays 2017- rdf2(solbrig)Furore devdays 2017- rdf2(solbrig)
Furore devdays 2017- rdf2(solbrig)DevDays
 
Furore devdays 2017- rdf1(solbrig)
Furore devdays 2017- rdf1(solbrig)Furore devdays 2017- rdf1(solbrig)
Furore devdays 2017- rdf1(solbrig)DevDays
 
Furore devdays 2017- oai
Furore devdays 2017- oaiFurore devdays 2017- oai
Furore devdays 2017- oaiDevDays
 
Furore devdays 2017 - implementation guides (lloyd)
Furore devdays 2017 - implementation guides (lloyd)Furore devdays 2017 - implementation guides (lloyd)
Furore devdays 2017 - implementation guides (lloyd)DevDays
 
Dev days 2017 questionnaires (brian postlethwaite)
Dev days 2017 questionnaires (brian postlethwaite)Dev days 2017 questionnaires (brian postlethwaite)
Dev days 2017 questionnaires (brian postlethwaite)DevDays
 
Dev days 2017 advanced directories (brian postlethwaite)
Dev days 2017 advanced directories (brian postlethwaite)Dev days 2017 advanced directories (brian postlethwaite)
Dev days 2017 advanced directories (brian postlethwaite)DevDays
 
Connectathon opening 2017
Connectathon opening 2017Connectathon opening 2017
Connectathon opening 2017DevDays
 
Vonk fhir facade (christiaan)
Vonk fhir facade (christiaan)Vonk fhir facade (christiaan)
Vonk fhir facade (christiaan)DevDays
 
Profiling with clin fhir
Profiling with clin fhirProfiling with clin fhir
Profiling with clin fhirDevDays
 
Opening student track
Opening student trackOpening student track
Opening student trackDevDays
 
Fhir tooling (grahame)
Fhir tooling (grahame)Fhir tooling (grahame)
Fhir tooling (grahame)DevDays
 
Fhir dev days_basic_fhir_terminology_services
Fhir dev days_basic_fhir_terminology_servicesFhir dev days_basic_fhir_terminology_services
Fhir dev days_basic_fhir_terminology_servicesDevDays
 
Fhir dev days_advanced_fhir_terminology_services
Fhir dev days_advanced_fhir_terminology_servicesFhir dev days_advanced_fhir_terminology_services
Fhir dev days_advanced_fhir_terminology_servicesDevDays
 

Más de DevDays (20)

Consent dev days
Consent dev daysConsent dev days
Consent dev days
 
Mohannad hussain dicom and imaging tools
Mohannad hussain   dicom and imaging toolsMohannad hussain   dicom and imaging tools
Mohannad hussain dicom and imaging tools
 
Mohannad hussain community track - siim dataset & dico mweb proxy
Mohannad hussain   community track - siim dataset & dico mweb proxyMohannad hussain   community track - siim dataset & dico mweb proxy
Mohannad hussain community track - siim dataset & dico mweb proxy
 
Fhir dev days 2017 fhir profiling - overview and introduction v07
Fhir dev days 2017   fhir profiling - overview and introduction v07Fhir dev days 2017   fhir profiling - overview and introduction v07
Fhir dev days 2017 fhir profiling - overview and introduction v07
 
Transforming other content (grahame)
Transforming other content (grahame)Transforming other content (grahame)
Transforming other content (grahame)
 
Quality improvement dev days-2017
Quality improvement dev days-2017Quality improvement dev days-2017
Quality improvement dev days-2017
 
Furore devdays 2017-sdc (lloyd)
Furore devdays 2017-sdc (lloyd)Furore devdays 2017-sdc (lloyd)
Furore devdays 2017-sdc (lloyd)
 
Furore devdays 2017- rdf2(solbrig)
Furore devdays 2017- rdf2(solbrig)Furore devdays 2017- rdf2(solbrig)
Furore devdays 2017- rdf2(solbrig)
 
Furore devdays 2017- rdf1(solbrig)
Furore devdays 2017- rdf1(solbrig)Furore devdays 2017- rdf1(solbrig)
Furore devdays 2017- rdf1(solbrig)
 
Furore devdays 2017- oai
Furore devdays 2017- oaiFurore devdays 2017- oai
Furore devdays 2017- oai
 
Furore devdays 2017 - implementation guides (lloyd)
Furore devdays 2017 - implementation guides (lloyd)Furore devdays 2017 - implementation guides (lloyd)
Furore devdays 2017 - implementation guides (lloyd)
 
Dev days 2017 questionnaires (brian postlethwaite)
Dev days 2017 questionnaires (brian postlethwaite)Dev days 2017 questionnaires (brian postlethwaite)
Dev days 2017 questionnaires (brian postlethwaite)
 
Dev days 2017 advanced directories (brian postlethwaite)
Dev days 2017 advanced directories (brian postlethwaite)Dev days 2017 advanced directories (brian postlethwaite)
Dev days 2017 advanced directories (brian postlethwaite)
 
Connectathon opening 2017
Connectathon opening 2017Connectathon opening 2017
Connectathon opening 2017
 
Vonk fhir facade (christiaan)
Vonk fhir facade (christiaan)Vonk fhir facade (christiaan)
Vonk fhir facade (christiaan)
 
Profiling with clin fhir
Profiling with clin fhirProfiling with clin fhir
Profiling with clin fhir
 
Opening student track
Opening student trackOpening student track
Opening student track
 
Fhir tooling (grahame)
Fhir tooling (grahame)Fhir tooling (grahame)
Fhir tooling (grahame)
 
Fhir dev days_basic_fhir_terminology_services
Fhir dev days_basic_fhir_terminology_servicesFhir dev days_basic_fhir_terminology_services
Fhir dev days_basic_fhir_terminology_services
 
Fhir dev days_advanced_fhir_terminology_services
Fhir dev days_advanced_fhir_terminology_servicesFhir dev days_advanced_fhir_terminology_services
Fhir dev days_advanced_fhir_terminology_services
 

Último

Patient Counselling. Definition of patient counseling; steps involved in pati...
Patient Counselling. Definition of patient counseling; steps involved in pati...Patient Counselling. Definition of patient counseling; steps involved in pati...
Patient Counselling. Definition of patient counseling; steps involved in pati...raviapr7
 
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRA
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRADUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRA
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRATanmoy Mishra
 
How to Solve Singleton Error in the Odoo 17
How to Solve Singleton Error in the  Odoo 17How to Solve Singleton Error in the  Odoo 17
How to Solve Singleton Error in the Odoo 17Celine George
 
M-2- General Reactions of amino acids.pptx
M-2- General Reactions of amino acids.pptxM-2- General Reactions of amino acids.pptx
M-2- General Reactions of amino acids.pptxDr. Santhosh Kumar. N
 
How to Show Error_Warning Messages in Odoo 17
How to Show Error_Warning Messages in Odoo 17How to Show Error_Warning Messages in Odoo 17
How to Show Error_Warning Messages in Odoo 17Celine George
 
Ultra structure and life cycle of Plasmodium.pptx
Ultra structure and life cycle of Plasmodium.pptxUltra structure and life cycle of Plasmodium.pptx
Ultra structure and life cycle of Plasmodium.pptxDr. Asif Anas
 
CapTechU Doctoral Presentation -March 2024 slides.pptx
CapTechU Doctoral Presentation -March 2024 slides.pptxCapTechU Doctoral Presentation -March 2024 slides.pptx
CapTechU Doctoral Presentation -March 2024 slides.pptxCapitolTechU
 
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdf
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdfMaximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdf
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdfTechSoup
 
HED Office Sohayok Exam Question Solution 2023.pdf
HED Office Sohayok Exam Question Solution 2023.pdfHED Office Sohayok Exam Question Solution 2023.pdf
HED Office Sohayok Exam Question Solution 2023.pdfMohonDas
 
Patterns of Written Texts Across Disciplines.pptx
Patterns of Written Texts Across Disciplines.pptxPatterns of Written Texts Across Disciplines.pptx
Patterns of Written Texts Across Disciplines.pptxMYDA ANGELICA SUAN
 
Quality Assurance_GOOD LABORATORY PRACTICE
Quality Assurance_GOOD LABORATORY PRACTICEQuality Assurance_GOOD LABORATORY PRACTICE
Quality Assurance_GOOD LABORATORY PRACTICESayali Powar
 
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...Nguyen Thanh Tu Collection
 
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdf
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdfP4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdf
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdfYu Kanazawa / Osaka University
 
AUDIENCE THEORY -- FANDOM -- JENKINS.pptx
AUDIENCE THEORY -- FANDOM -- JENKINS.pptxAUDIENCE THEORY -- FANDOM -- JENKINS.pptx
AUDIENCE THEORY -- FANDOM -- JENKINS.pptxiammrhaywood
 
5 charts on South Africa as a source country for international student recrui...
5 charts on South Africa as a source country for international student recrui...5 charts on South Africa as a source country for international student recrui...
5 charts on South Africa as a source country for international student recrui...CaraSkikne1
 
How to Use api.constrains ( ) in Odoo 17
How to Use api.constrains ( ) in Odoo 17How to Use api.constrains ( ) in Odoo 17
How to Use api.constrains ( ) in Odoo 17Celine George
 
Easter in the USA presentation by Chloe.
Easter in the USA presentation by Chloe.Easter in the USA presentation by Chloe.
Easter in the USA presentation by Chloe.EnglishCEIPdeSigeiro
 
How to Add a many2many Relational Field in Odoo 17
How to Add a many2many Relational Field in Odoo 17How to Add a many2many Relational Field in Odoo 17
How to Add a many2many Relational Field in Odoo 17Celine George
 
What is the Future of QuickBooks DeskTop?
What is the Future of QuickBooks DeskTop?What is the Future of QuickBooks DeskTop?
What is the Future of QuickBooks DeskTop?TechSoup
 

Último (20)

Patient Counselling. Definition of patient counseling; steps involved in pati...
Patient Counselling. Definition of patient counseling; steps involved in pati...Patient Counselling. Definition of patient counseling; steps involved in pati...
Patient Counselling. Definition of patient counseling; steps involved in pati...
 
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRA
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRADUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRA
DUST OF SNOW_BY ROBERT FROST_EDITED BY_ TANMOY MISHRA
 
How to Solve Singleton Error in the Odoo 17
How to Solve Singleton Error in the  Odoo 17How to Solve Singleton Error in the  Odoo 17
How to Solve Singleton Error in the Odoo 17
 
M-2- General Reactions of amino acids.pptx
M-2- General Reactions of amino acids.pptxM-2- General Reactions of amino acids.pptx
M-2- General Reactions of amino acids.pptx
 
How to Show Error_Warning Messages in Odoo 17
How to Show Error_Warning Messages in Odoo 17How to Show Error_Warning Messages in Odoo 17
How to Show Error_Warning Messages in Odoo 17
 
Ultra structure and life cycle of Plasmodium.pptx
Ultra structure and life cycle of Plasmodium.pptxUltra structure and life cycle of Plasmodium.pptx
Ultra structure and life cycle of Plasmodium.pptx
 
CapTechU Doctoral Presentation -March 2024 slides.pptx
CapTechU Doctoral Presentation -March 2024 slides.pptxCapTechU Doctoral Presentation -March 2024 slides.pptx
CapTechU Doctoral Presentation -March 2024 slides.pptx
 
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdf
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdfMaximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdf
Maximizing Impact_ Nonprofit Website Planning, Budgeting, and Design.pdf
 
HED Office Sohayok Exam Question Solution 2023.pdf
HED Office Sohayok Exam Question Solution 2023.pdfHED Office Sohayok Exam Question Solution 2023.pdf
HED Office Sohayok Exam Question Solution 2023.pdf
 
Patterns of Written Texts Across Disciplines.pptx
Patterns of Written Texts Across Disciplines.pptxPatterns of Written Texts Across Disciplines.pptx
Patterns of Written Texts Across Disciplines.pptx
 
Finals of Kant get Marx 2.0 : a general politics quiz
Finals of Kant get Marx 2.0 : a general politics quizFinals of Kant get Marx 2.0 : a general politics quiz
Finals of Kant get Marx 2.0 : a general politics quiz
 
Quality Assurance_GOOD LABORATORY PRACTICE
Quality Assurance_GOOD LABORATORY PRACTICEQuality Assurance_GOOD LABORATORY PRACTICE
Quality Assurance_GOOD LABORATORY PRACTICE
 
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...
CHUYÊN ĐỀ DẠY THÊM TIẾNG ANH LỚP 11 - GLOBAL SUCCESS - NĂM HỌC 2023-2024 - HK...
 
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdf
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdfP4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdf
P4C x ELT = P4ELT: Its Theoretical Background (Kanazawa, 2024 March).pdf
 
AUDIENCE THEORY -- FANDOM -- JENKINS.pptx
AUDIENCE THEORY -- FANDOM -- JENKINS.pptxAUDIENCE THEORY -- FANDOM -- JENKINS.pptx
AUDIENCE THEORY -- FANDOM -- JENKINS.pptx
 
5 charts on South Africa as a source country for international student recrui...
5 charts on South Africa as a source country for international student recrui...5 charts on South Africa as a source country for international student recrui...
5 charts on South Africa as a source country for international student recrui...
 
How to Use api.constrains ( ) in Odoo 17
How to Use api.constrains ( ) in Odoo 17How to Use api.constrains ( ) in Odoo 17
How to Use api.constrains ( ) in Odoo 17
 
Easter in the USA presentation by Chloe.
Easter in the USA presentation by Chloe.Easter in the USA presentation by Chloe.
Easter in the USA presentation by Chloe.
 
How to Add a many2many Relational Field in Odoo 17
How to Add a many2many Relational Field in Odoo 17How to Add a many2many Relational Field in Odoo 17
How to Add a many2many Relational Field in Odoo 17
 
What is the Future of QuickBooks DeskTop?
What is the Future of QuickBooks DeskTop?What is the Future of QuickBooks DeskTop?
What is the Future of QuickBooks DeskTop?
 

Validation in net and java (ewout james)

  • 1. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. FHIR® is the registered trademark of HL7 and is used with the permission of HL7. The Flame Design mark is the registered trademark of HL7 and is used with the permission of HL7. Amsterdam, 15-17 November | @fhir_furore | #fhirdevdays17 | www.fhirdevdays.com Validation in .NET and Java Ewout Kramer, Furore Health Informatics and James Agnew, University Health Network
  • 2. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Who am I?  Name: Ewout Kramer  Company: Furore Health Informatics  Background:  Computer Science (operating systems)  In Health IT since 1999  FHIR Core team  Lead dev on the .NET API  e.kramer@furore.com, @ewoutkramer  http://thefhirplace.com2
  • 3. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Who am I?  Name: James Agnew  Company: UHN / Smile CDR  Background:  Lead dev on the Java HAPI library  jamesagnew@gmail.com, @jamesagnew 3
  • 4. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Validation inputs  Instance data (resource)  Definition of what data should look like (StructureDefinitions)  Terminology services (ValueSet)  Execution of FhirPath constraints  Some way to combine it all, validate and return the outcomes 4
  • 5. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. VALIDATION IN .NET 5
  • 6. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Structure of packages 6 Hl7.Fhir.Support (Net4, Net4.5, Net1.0, Net1.3) • Utility methods • ElementModel Hl7.FhirPath (Net4, Net4.5, Net1.0) • FhirPath compilation • FhirPath evaluation Hl7.Fhir.Core (Net4.5, Net1.1, Net1.3) • Model classes • Serialization • Http client Hl7.Fhir.Specification (Net4.5, Net1.3) • Access to definitions • Terminology services • Validation
  • 7. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Instance data: IElementNavigator 7
  • 8. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Specification data  All the definitions of the core resources, types, search parameters, operations, etc. are available through the Hl7.Specification.[STU3/DSTU2] package on NuGet  The package contains a zip (specification.zip) with meta data produced by the FHIR publication process  profiles-resources.xml, profiles-types.xml, extension-definitions.xml  search-parameters.xml  v2-tables.xml, v3-codesystems.xml, valuesets.xml  xsd schemas, schematrons, others....
  • 9. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Definitions: IResourceResolver  Concrete implementations in API:  DirectorySource, ZipSource  WebSource  CachedResolver (wraps another resolver)  MultiResolver (tries a list of resolvers)9
  • 10. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Terminology: ITerminologyService  Current implementations:  LocalTerminologyService Does an in-memory expand & lookup  ExternalTerminologyService Uses the FhirClient calls to validate a code (possibly even sending your valueset across!)  FallbackTerminologyService First tries LocalTerminologyService, if that fails (too complex!), invoke an external service  Note: returns OperationOutcome 10
  • 11. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. The Big Picture FHIR Data <Patient> </Patient> IElementNavigator FHIR Definitions StructureDefinition OperationDefinition ValueSet IResource Resolver FindStructure Definition() ValueSetExpander LocalTerminology Service ITerminologyService Validator FluentPathCompiler FHIR Poco OperationOutcome (with IssueComponents) ExternalTerminology Service
  • 12. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Practicalities  class Validator in Hl7.Fhir.Validation namespace (Hl7.Fhir.Specification assembly)  Configure: new Validator(settings)  Resolver, terminology service to use  Validate: call one of the overloads:  Validate(IElementNavigator)  Validate(Base)  Validate(XmlReader)  Result is an OperationOutcome 12
  • 13. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. 13
  • 14. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Caveats  Validator is still being improved  Support most features already, except for slicing – only discriminator-less slicing is supported  Other improvements: e.g. loop-detection 14
  • 15. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Playing with the validator  Windows executable:  https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo/releases  Directly calling the Validator in code  Using “Validate” on Simplifier.net 15
  • 16. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. OperationOutcome - on steroids  Lots of helper methods  Properties:  Success (!information,!warning)  Fatals, Errors, Warnings properties  Extension methods (in Hl7.Fhir.Support)  ErrorsAt(string path)  Where(severity, type, …)  Set/GetHierachyLevel()  Include(outcome), Add(outcome) 16
  • 17. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. QUESTIONS?
  • 18. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. VALIDATION IN HAPI FHIR Suggestions for a pleasurable afternoon
  • 19. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. When and how to Validate There is no right answer to this question!  Validate strictly during development but be loose in production? Always be strict?  Validate some resource types but not others?  Validate on the way in but not the way out?  Structural vs semantic validation? (there is a performance cost!)
  • 20. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Validation in HAPI FHIR Parser Error Handler (structural validation only) ● Parser can be configured with an “Error Handler” which logs or fails on error ● Only catches structural issues Validator (semantic validation) ● Applies a complete set of rules to a resource instance ● Currently far more powerful
  • 21. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Parser Error Handler  Callback mechanism during parsing  Very fast!  Catches structural problems:  Invalid elements  Invalid cardinalities  JSON data type mismatches 21
  • 22. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Parser Validator String input = "{"resourceType":"Patient","isnice":true}"; FhirContext ctx = FhirContext.forDstu3(); IParser parser = ctx.newJsonParser(); parser.setParserErrorHandler(new LenientErrorHandler(true)); parser.parseResource(input); 22
  • 23. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Parser Validator String input = "{"resourceType":"Patient","isnice":true}"; FhirContext ctx = FhirContext.forDstu3(); IParser parser = ctx.newJsonParser(); parser.setParserErrorHandler(new LenientErrorHandler(true)); parser.parseResource(input); 23 [main] WARN ca.uhn.fhir.parser.LenientErrorHandler - Unknown element 'isnice' found while parsing
  • 24. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Parser Validator String input = "{"resourceType":"Patient","isnice":true}"; FhirContext ctx = FhirContext.forDstu3(); IParser parser = ctx.newJsonParser(); parser.setParserErrorHandler(new StrictErrorHandler()); parser.parseResource(input); 24
  • 25. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Parser Validator String input = "{"resourceType":"Patient","isnice":true}"; FhirContext ctx = FhirContext.forDstu3(); IParser parser = ctx.newJsonParser(); parser.setParserErrorHandler(new StrictErrorHandler()); parser.parseResource(input); 25 ca.uhn.fhir.parser.DataFormatException: Unknown element 'isnice' found during parse
  • 26. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Profile Validation  Applies semantic validation based on “Profiles”  Slower than parser error handler!  Validates various things:  All the same structural validation as parser error handler  Terminology bindings  Invariants  Constraints and extensions 26
  • 27. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Validator ● HAPI’s validator uses modules and collects the results from any that are enabled ● Create your own if you want!
  • 28. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Schema/Schematron Validator  FHIR provides schemas + schematrons for validating conformance to basic resource requirements:  Cardinality  Optionality  Required bindings  Datatype rules  The Schema + Schematron modules are the defaults if nothing else is selected
  • 29. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Schema/Schematron Validator (2) Dependencies: ● hapi-fhir-validation-resources-dstu3-2.5.jar ● phloc-schematron-2.7.0.jar Inputs (pick one): ● Resource Java model object ● Raw JSON Resource ● Raw XML Resource
  • 30. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Using the Schema Validator public class Example20_ValidateResource { public static void main(String[] args) { // Create an incomplete encounter (status is required) Encounter enc = new Encounter(); enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345"); // Create a new validator FhirContext ctx = FhirContext.forDstu3(); FhirValidator validator = ctx.newValidator(); // Did we succeed? ValidationResult result = validator.validateWithResult(enc); System.out.println("Success: " + result.isSuccessful()); // What was the result OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome(); IParser parser = ctx.newXmlParser().setPrettyPrint(true); System.out.println(parser.encodeResourceToString(outcome)); } }
  • 31. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Using the Schema Validator public class Example20_ValidateResource { public static void main(String[] args) { // Create an incomplete encounter (status is required) Encounter enc = new Encounter(); enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345"); // Create a new validator FhirContext ctx = FhirContext.forDstu3(); FhirValidator validator = ctx.newValidator(); // Did we succeed? ValidationResult result = validator.validateWithResult(enc); System.out.println("Success: " + result.isSuccessful()); // What was the result OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome(); IParser parser = ctx.newXmlParser().setPrettyPrint(true); System.out.println(parser.encodeResourceToString(outcome)); } } <OperationOutcome xmlns="http://hl7.org/fhir"> <issue> <severity value="error"/> <code value="processing"/> <diagnostics value="cvc-complex-type.2.4.b: The content of element 'Encounter' is not complete. One of '{&quot;http://hl7.org/fhir&quot;:identifier, &quot;http://hl7.org/fhir&quot;:status}' is expected."/> <location value="Line[1] Col[140]"/> </issue> </OperationOutcome> false
  • 32. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Schema Validation with String Input Strings are also valid input (JSON is converted to XML!)public class Example21_ValidateResourceString { public static void main(String[] args) { String input = "<Encounter xmlns="http://hl7.org/fhir"></Encounter>"; // Create a new validator FhirContext ctx = FhirContext.forDstu3(); FhirValidator validator = ctx.newValidator(); // Did we succeed? ValidationResult result = validator.validateWithResult(input); System.out.println("Success: " + result.isSuccessful()); // What was the result OperationOutcome outcome = (OperationOutcome) result.toOperationOutcome(); IParser parser = ctx.newXmlParser().setPrettyPrint(true); System.out.println(parser.encodeResourceToString(outcome)); }
  • 33. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Profile Validation  In FHIR, a “Profile” is a collection of special resources:  StructureDefinition  ValueSet  CodeSystem  A resource can declare conformance to a profile in its metadata  A server can require conformance to a profile
  • 34. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Profile Validator ● FhirInstanceValidator module requires an instance of IValidationSupport ● Several implementations are supplied with HAPI FHIR ● You can also create your own
  • 35. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Validation Support Use built-in FHIR definitions and terminology Load your own definitions and terminology Chain multiple providers together
  • 36. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Questionnaires are Validated ● FhirInstanceValidator will also validate QuestionnaireResponse compliance to Questionnaire
  • 37. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Using the Profile Validator public class Example22_ValidateResourceInstanceValidator { public static void main(String[] args) { // Create an incomplete encounter (status is required) Encounter enc = new Encounter(); enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345"); // Create a new validator FhirValidator validator = FhirContext.forDstu3().newValidator(); // Cache this object! Supplies structure definitions DefaultProfileValidationSupport support = new DefaultProfileValidationSupport(); // Create the validator FhirInstanceValidator module = new FhirInstanceValidator(support); validator.registerValidatorModule(module); // Did we succeed? IParser parser = FhirContext.forDstu3().newXmlParser().setPrettyPrint(true); System.out.println(parser.encodeResourceToString(validator.validateWithResult(enc).toOperationOutcome())); } }
  • 38. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Using the Profile Validator public class Example22_ValidateResourceInstanceValidator { public static void main(String[] args) { // Create an incomplete encounter (status is required) Encounter enc = new Encounter(); enc.addIdentifier().setSystem("http://acme.org/encNums").setValue("12345"); // Create a new validator FhirValidator validator = FhirContext.forDstu3().newValidator(); // Cache this object! Supplies structure definitions DefaultProfileValidationSupport support = new DefaultProfileValidationSupport(); // Create the validator FhirInstanceValidator module = new FhirInstanceValidator(support); validator.registerValidatorModule(module); // Did we succeed? IParser parser = FhirContext.forDstu3().newXmlParser().setPrettyPrint(true); System.out.println(parser.encodeResourceToString(validator.validateWithResult(enc).toOperationOutcome())); } } <OperationOutcome xmlns="http://hl7.org/fhir"> <issue> <severity value="error"/> <code value="processing"/> <diagnostics value="Profile http://hl7.org/fhir/StructureDefinition/Encounter, Element 'Encounter.status': minimum required = 1, but only found 0"/> <location value="Encounter"/> </issue> </OperationOutcome>
  • 39. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. 39
  • 40. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. HANDS-ON TRACK Suggestions for a pleasurable afternoon
  • 41. © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office. Play with the validator  Check out https://github.com/ewoutkramer/Furore.Fhir.ValidationDemo & compile  Try to incorporate your resolver and terminology service (if any)  Try running the examples at https://github.com/ewoutkramer/fhir-net- api/tree/develop/src/Hl7.Fhir.Specification.Tests/TestData/validation  Alter the examples so they trigger your code (change a binding…) 41