R6 Ballot (2nd Draft)

Publish-box (todo)

Devicedefinition.shex

Orders and Observations Work GroupMaturity Level: N/AStandards Status: InformativeCompartments: No defined compartments

Raw ShEx

ShEx statement for devicedefinition

PREFIX fhir: <http://hl7.org/fhir/> 
PREFIX fhirvs: <http://hl7.org/fhir/ValueSet/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

IMPORT <uri.shex>
IMPORT <code.shex>
IMPORT <Range.shex>
IMPORT <string.shex>
IMPORT <Period.shex>
IMPORT <Coding.shex>
IMPORT <integer.shex>
IMPORT <boolean.shex>
IMPORT <markdown.shex>
IMPORT <Quantity.shex>
IMPORT <Reference.shex>
IMPORT <Identifier.shex>
IMPORT <Annotation.shex>
IMPORT <Attachment.shex>
IMPORT <Organization.shex>
IMPORT <ContactPoint.shex>
IMPORT <UsageContext.shex>
IMPORT <DomainResource.shex>
IMPORT <CodeableConcept.shex>
IMPORT <BackboneElement.shex>
IMPORT <RelatedArtifact.shex>
IMPORT <ProductShelfLife.shex>
IMPORT <CodeableReference.shex>


start=@<DeviceDefinition> AND {fhir:nodeRole [fhir:treeRoot]}

# An instance of a medical-related component of a medical device
<DeviceDefinition> EXTENDS @<DomainResource> CLOSED {   

    a [fhir:DeviceDefinition]?;
    fhir:nodeRole [fhir:treeRoot]?;

    fhir:description @<markdown>?;          # Additional information to describe 
                                            # the device 
    fhir:identifier @<OneOrMore_Identifier>?;  # Instance identifier
    fhir:udiDeviceIdentifier @<OneOrMore_DeviceDefinition.udiDeviceIdentifier>?;  # Unique Device Identifier (UDI) 
                                            # Barcode string 
    fhir:regulatoryIdentifier @<OneOrMore_DeviceDefinition.regulatoryIdentifier>?;  # Regulatory identifier(s) 
                                            # associated with this device 
    fhir:partNumber @<string>?;             # The part number or catalog number 
                                            # of the device 
    fhir:manufacturer @<Reference> AND {fhir:link 
    			@<Organization> ? }?;  # Name of device manufacturer
    fhir:deviceName @<OneOrMore_DeviceDefinition.deviceName>?;  # The name or names of the device as 
                                            # given by the manufacturer 
    fhir:modelNumber @<string>?;            # The catalog or model number for 
                                            # the device for example as defined 
                                            # by the manufacturer 
    fhir:classification @<OneOrMore_DeviceDefinition.classification>?;  # What kind of device or device 
                                            # system this is 
    fhir:conformsTo @<OneOrMore_DeviceDefinition.conformsTo>?;  # Identifies the standards, 
                                            # specifications, or formal 
                                            # guidances for the capabilities 
                                            # supported by the device 
    fhir:hasPart @<OneOrMore_DeviceDefinition.hasPart>?;  # A device, part of the current one
    fhir:packaging @<OneOrMore_DeviceDefinition.packaging>?;  # Information about the packaging of 
                                            # the device, i.e. how the device is 
                                            # packaged 
    fhir:deviceVersion @<OneOrMore_DeviceDefinition.deviceVersion>?;  # The version of the device or 
                                            # software 
    fhir:safety @<OneOrMore_CodeableConcept>?;  # Safety characteristics of the 
                                            # device 
    fhir:shelfLifeStorage @<OneOrMore_ProductShelfLife>?;  # Shelf Life and storage information
    fhir:languageCode @<OneOrMore_CodeableConcept>?;  # Language code for the 
                                            # human-readable text strings 
                                            # produced by the device (all 
                                            # supported) 
    fhir:property @<OneOrMore_DeviceDefinition.property>?;  # Inherent, essentially fixed, 
                                            # characteristics of this kind of 
                                            # device, e.g., time properties, 
                                            # size, etc 
    fhir:owner @<Reference> AND {fhir:link 
    			@<Organization> ? }?;  # Organization responsible for device
    fhir:contact @<OneOrMore_ContactPoint>?;  # Details for human/organization for 
                                            # support 
    fhir:link @<OneOrMore_DeviceDefinition.link>?;  # An associated device, attached to, 
                                            # used with, communicating with or 
                                            # linking a previous or new device 
                                            # model to the focal device 
    fhir:note @<OneOrMore_Annotation>?;     # Device notes and comments
    fhir:material @<OneOrMore_DeviceDefinition.material>?;  # A substance used to create the 
                                            # material(s) of which the device is 
                                            # made 
    fhir:productionIdentifierInUDI @<OneOrMore_CodeableConcept>?;  # lot-number | manufactured-date | 
                                            # serial-number | expiration-date | 
                                            # biological-source | 
                                            # software-version 
    fhir:guideline @<DeviceDefinition.guideline>?;  # Information aimed at providing 
                                            # directions for the usage of this 
                                            # model of device 
    fhir:correctiveAction @<DeviceDefinition.correctiveAction>?;  # Tracking of latest field safety 
                                            # corrective action 
    fhir:chargeItem @<OneOrMore_DeviceDefinition.chargeItem>?;  # Billing code or reference 
                                            # associated with the device 
}  

# Information about the packaging of the device, i.e. how the device is packaged
<DeviceDefinition.packaging> EXTENDS @<BackboneElement> CLOSED {   
    fhir:identifier @<Identifier>?;         # Business identifier of the 
                                            # packaged medication 
    fhir:type @<CodeableConcept>?;          # A code that defines the specific 
                                            # type of packaging 
    fhir:count @<integer>?;                 # The number of items contained in 
                                            # the package (devices or 
                                            # sub-packages) 
    fhir:distributor @<OneOrMore_DeviceDefinition.packaging.distributor>?;  # An organization that distributes 
                                            # the packaged device 
    fhir:udiDeviceIdentifier @<OneOrMore_DeviceDefinition.udiDeviceIdentifier>?;  # Unique Device Identifier (UDI) 
                                            # Barcode string on the packaging 
    fhir:packaging @<OneOrMore_DeviceDefinition.packaging>?;  # Allows packages within packages
}  

# The name or names of the device as given by the manufacturer
<DeviceDefinition.deviceName> EXTENDS @<BackboneElement> CLOSED {   
    fhir:name @<string>;                    # A name that is used to refer to 
                                            # the device 
    fhir:type @<CodeableConcept>;           # registered-name | 
                                            # user-friendly-name | 
                                            # patient-reported-name 
}  

# Inherent, essentially fixed, characteristics of this kind of device, e.g., time properties, size, etc
<DeviceDefinition.property> EXTENDS @<BackboneElement> CLOSED {   
    fhir:type @<CodeableConcept>;           # Code that specifies the property 
                                            # being represented 
    fhir:value @<Quantity>  OR 
    			@<CodeableConcept>  OR 
    			@<string>  OR 
    			@<boolean>  OR 
    			@<integer>  OR 
    			@<Range>  OR 
    			@<Attachment>  ;  # Value of the property
}  

# A device, part of the current one
<DeviceDefinition.hasPart> EXTENDS @<BackboneElement> CLOSED {   
    fhir:reference @<Reference> AND {fhir:link 
    			@<DeviceDefinition> ? };  # Reference to the part
    fhir:count @<integer>?;                 # Number of occurrences of the part
}  

# Indicates whether and when the device is available on the market
<DeviceDefinition.udiDeviceIdentifier.marketDistribution> EXTENDS @<BackboneElement> CLOSED {   
    fhir:marketPeriod @<Period>;            # Begin and end dates for the 
                                            # commercial distribution of the 
                                            # device 
    fhir:subJurisdiction @<uri>;            # National state or territory where 
                                            # the device is commercialized 
}  

# What kind of device or device system this is
<DeviceDefinition.classification> EXTENDS @<BackboneElement> CLOSED {   
    fhir:type @<CodeableConcept>;           # A classification or risk class of 
                                            # the device model 
    fhir:justification @<OneOrMore_RelatedArtifact>?;  # Further information qualifying 
                                            # this classification of the device 
                                            # model 
}  

# A substance used to create the material(s) of which the device is made
<DeviceDefinition.material> EXTENDS @<BackboneElement> CLOSED {   
    fhir:substance @<CodeableConcept>;      # A relevant substance that the 
                                            # device contains, may contain, or 
                                            # is made of 
    fhir:alternate @<boolean>?;             # Indicates an alternative material 
                                            # of the device 
    fhir:allergenicIndicator @<boolean>?;   # Whether the substance is a known 
                                            # or suspected allergen 
}  

# The version of the device or software
<DeviceDefinition.deviceVersion> EXTENDS @<BackboneElement> CLOSED {   
    fhir:type @<CodeableConcept>?;          # The type of the device version, 
                                            # e.g. manufacturer, approved, 
                                            # internal 
    fhir:component @<Identifier>?;          # The hardware or software module of 
                                            # the device to which the version 
                                            # applies 
    fhir:value @<string>;                   # The version text
}  

# Information aimed at providing directions for the usage of this model of device
<DeviceDefinition.guideline> EXTENDS @<BackboneElement> CLOSED {   
    fhir:useContext @<OneOrMore_UsageContext>?;  # The circumstances that form the 
                                            # setting for using the device 
    fhir:usageInstruction @<markdown>?;     # Detailed written and visual 
                                            # directions for the user on how to 
                                            # use the device 
    fhir:relatedArtifact @<OneOrMore_RelatedArtifact>?;  # A source of information or 
                                            # reference for this guideline 
    fhir:indication @<OneOrMore_CodeableConcept>?;  # A clinical condition for which the 
                                            # device was designed to be used 
    fhir:contraindication @<OneOrMore_CodeableConcept>?;  # A specific situation when a device 
                                            # should not be used because it may 
                                            # cause harm 
    fhir:warning @<OneOrMore_CodeableConcept>?;  # Specific hazard alert information 
                                            # that a user needs to know before 
                                            # using the device 
    fhir:intendedUse @<string>?;            # A description of the general 
                                            # purpose or medical use of the 
                                            # device or its function 
}  

# An organization that distributes the packaged device
<DeviceDefinition.packaging.distributor> EXTENDS @<BackboneElement> CLOSED {   
    fhir:name @<string>?;                   # Distributor's human-readable name
    fhir:organizationReference @<OneOrMore_Reference_Organization>?;  # Distributor as an Organization 
                                            # resource 
}  

# Unique Device Identifier (UDI) Barcode string
<DeviceDefinition.udiDeviceIdentifier> EXTENDS @<BackboneElement> CLOSED {   
    fhir:deviceIdentifier @<string>;        # The identifier that is to be 
                                            # associated with every Device that 
                                            # references this DeviceDefintiion 
                                            # for the issuer and jurisdiction 
                                            # provided in the 
                                            # DeviceDefinition.udiDeviceIdenti-
                                            # fier 
    fhir:issuer @<uri>;                     # The organization that assigns the 
                                            # identifier algorithm 
    fhir:jurisdiction @<uri>;               # The jurisdiction to which the 
                                            # deviceIdentifier applies 
    fhir:marketDistribution @<OneOrMore_DeviceDefinition.udiDeviceIdentifier.marketDistribution>?;  # Indicates whether and when the 
                                            # device is available on the market 
}  

# Regulatory identifier(s) associated with this device
<DeviceDefinition.regulatoryIdentifier> EXTENDS @<BackboneElement> CLOSED {   
    fhir:type @<code> AND
    	{fhir:v @fhirvs:devicedefinition-regulatory-identifier-type};  # basic | master | license
    fhir:deviceIdentifier @<string>;        # The identifier itself
    fhir:issuer @<uri>;                     # The organization that issued this 
                                            # identifier 
    fhir:jurisdiction @<uri>;               # The jurisdiction to which the 
                                            # deviceIdentifier applies 
}  

# Identifies the standards, specifications, or formal guidances for the capabilities supported by the device
<DeviceDefinition.conformsTo> EXTENDS @<BackboneElement> CLOSED {   
    fhir:category @<CodeableConcept>?;      # Describes the common type of the 
                                            # standard, specification, or formal 
                                            # guidance 
    fhir:specification @<CodeableConcept>;  # Identifies the standard, 
                                            # specification, or formal guidance 
                                            # that the device adheres to the 
                                            # Device Specification type 
    fhir:version @<OneOrMore_string>?;      # The specific form or variant of 
                                            # the standard, specification or 
                                            # formal guidance 
    fhir:source @<OneOrMore_RelatedArtifact>?;  # Standard, regulation, 
                                            # certification, or guidance 
                                            # website, document, or other 
                                            # publication, or similar, 
                                            # supporting the conformance 
}  

# Allows packages within packages
<DeviceDefinition.packaging.packagingnull> CLOSED {   
}  

# An associated device, attached to, used with, communicating with or linking a previous or new device model to the focal device
<DeviceDefinition.link> EXTENDS @<BackboneElement> CLOSED {   
    fhir:relation @<Coding>;                # The type indicates the 
                                            # relationship of the related device 
                                            # to the device instance 
    fhir:relatedDevice @<CodeableReference>;  # A reference to the linked device
}  

# Tracking of latest field safety corrective action
<DeviceDefinition.correctiveAction> EXTENDS @<BackboneElement> CLOSED {   
    fhir:recall @<boolean>;                 # Whether the corrective action was 
                                            # a recall 
    fhir:scope @<code> AND
    	{fhir:v @fhirvs:device-correctiveactionscope}?;  # model | lot-numbers | 
                                            # serial-numbers 
    fhir:period @<Period>;                  # Start and end dates of the  
                                            # corrective action 
}  

# Billing code or reference associated with the device
<DeviceDefinition.chargeItem> EXTENDS @<BackboneElement> CLOSED {   
    fhir:chargeItemCode @<CodeableReference>;  # The code or reference for the 
                                            # charge item 
    fhir:count @<Quantity>;                 # Coefficient applicable to the 
                                            # billing code 
    fhir:effectivePeriod @<Period>?;        # A specific time period in which 
                                            # this charge item applies 
    fhir:useContext @<OneOrMore_UsageContext>?;  # The context to which this charge 
                                            # item applies 
}  

#---------------------- Cardinality Types (OneOrMore) -------------------

<OneOrMore_Identifier> CLOSED {
    rdf:first @<Identifier>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_Identifier> 
}

<OneOrMore_DeviceDefinition.udiDeviceIdentifier> CLOSED {
    rdf:first @<DeviceDefinition.udiDeviceIdentifier>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.udiDeviceIdentifier> 
}

<OneOrMore_DeviceDefinition.regulatoryIdentifier> CLOSED {
    rdf:first @<DeviceDefinition.regulatoryIdentifier>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.regulatoryIdentifier> 
}

<OneOrMore_DeviceDefinition.deviceName> CLOSED {
    rdf:first @<DeviceDefinition.deviceName>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.deviceName> 
}

<OneOrMore_DeviceDefinition.classification> CLOSED {
    rdf:first @<DeviceDefinition.classification>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.classification> 
}

<OneOrMore_DeviceDefinition.conformsTo> CLOSED {
    rdf:first @<DeviceDefinition.conformsTo>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.conformsTo> 
}

<OneOrMore_DeviceDefinition.hasPart> CLOSED {
    rdf:first @<DeviceDefinition.hasPart>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.hasPart> 
}

<OneOrMore_DeviceDefinition.packaging> CLOSED {
    rdf:first @<DeviceDefinition.packaging>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.packaging> 
}

<OneOrMore_DeviceDefinition.deviceVersion> CLOSED {
    rdf:first @<DeviceDefinition.deviceVersion>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.deviceVersion> 
}

<OneOrMore_CodeableConcept> CLOSED {
    rdf:first @<CodeableConcept>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_CodeableConcept> 
}

<OneOrMore_ProductShelfLife> CLOSED {
    rdf:first @<ProductShelfLife>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_ProductShelfLife> 
}

<OneOrMore_DeviceDefinition.property> CLOSED {
    rdf:first @<DeviceDefinition.property>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.property> 
}

<OneOrMore_ContactPoint> CLOSED {
    rdf:first @<ContactPoint>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_ContactPoint> 
}

<OneOrMore_DeviceDefinition.link> CLOSED {
    rdf:first @<DeviceDefinition.link>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.link> 
}

<OneOrMore_Annotation> CLOSED {
    rdf:first @<Annotation>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_Annotation> 
}

<OneOrMore_DeviceDefinition.material> CLOSED {
    rdf:first @<DeviceDefinition.material>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.material> 
}

<OneOrMore_DeviceDefinition.chargeItem> CLOSED {
    rdf:first @<DeviceDefinition.chargeItem>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.chargeItem> 
}

<OneOrMore_DeviceDefinition.packaging.distributor> CLOSED {
    rdf:first @<DeviceDefinition.packaging.distributor>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.packaging.distributor> 
}

<OneOrMore_RelatedArtifact> CLOSED {
    rdf:first @<RelatedArtifact>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_RelatedArtifact> 
}

<OneOrMore_UsageContext> CLOSED {
    rdf:first @<UsageContext>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_UsageContext> 
}

<OneOrMore_Reference_Organization> CLOSED {
    rdf:first @<Reference> AND {fhir:link 
			@<Organization> } ;
    rdf:rest [rdf:nil] OR @<OneOrMore_Reference_Organization> 
}

<OneOrMore_DeviceDefinition.udiDeviceIdentifier.marketDistribution> CLOSED {
    rdf:first @<DeviceDefinition.udiDeviceIdentifier.marketDistribution>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_DeviceDefinition.udiDeviceIdentifier.marketDistribution> 
}

<OneOrMore_string> CLOSED {
    rdf:first @<string>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_string> 
}

#---------------------- Value Sets ------------------------

# Device - Corrective action scope
fhirvs:device-correctiveactionscope ["model" "lot-numbers" "serial-numbers"]

# Regulatory Identifier type
fhirvs:devicedefinition-regulatory-identifier-type ["basic" "master" "license"]


Usage note: every effort has been made to ensure that the ShEx files are correct and useful, but they are not a normative part of the specification.