R6 Ballot (2nd Draft)

Publish-box (todo)

Group.shex

FHIR Infrastructure Work GroupMaturity Level: N/AStandards Status: InformativeCompartments: Device, Patient, Practitioner

Raw ShEx

ShEx statement for group

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 <Coding.shex>
IMPORT <Device.shex>
IMPORT <Period.shex>
IMPORT <boolean.shex>
IMPORT <Patient.shex>
IMPORT <dateTime.shex>
IMPORT <markdown.shex>
IMPORT <CareTeam.shex>
IMPORT <Location.shex>
IMPORT <Specimen.shex>
IMPORT <Quantity.shex>
IMPORT <Duration.shex>
IMPORT <Reference.shex>
IMPORT <Identifier.shex>
IMPORT <Expression.shex>
IMPORT <unsignedInt.shex>
IMPORT <positiveInt.shex>
IMPORT <UsageContext.shex>
IMPORT <Organization.shex>
IMPORT <Practitioner.shex>
IMPORT <DeviceMetric.shex>
IMPORT <RelativeTime.shex>
IMPORT <ContactDetail.shex>
IMPORT <RelatedPerson.shex>
IMPORT <DomainResource.shex>
IMPORT <CodeableConcept.shex>
IMPORT <BackboneElement.shex>
IMPORT <PractitionerRole.shex>
IMPORT <DeviceDefinition.shex>
IMPORT <HealthcareService.shex>


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

# Group of multiple entities
<Group> EXTENDS @<DomainResource> CLOSED {   

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

    fhir:url @<uri>?;                       # Canonical identifier for this 
                                            # Group, represented as an absolute 
                                            # URI (globally unique) 
    fhir:identifier @<OneOrMore_Identifier>?;  # Business Identifier for this Group
    fhir:version @<string>?;                # Business version of the Group
    fhir:versionAlgorithm @<string>  OR 
    			@<Coding>  ?;  # How to compare versions
    fhir:name @<string>?;                   # Label for Group
    fhir:title @<string>?;                  # Name for this Group (human 
                                            # friendly) 
    fhir:status @<code> AND
    	{fhir:v @fhirvs:publication-status}?;  # draft | active | retired | unknown
    fhir:experimental @<boolean>?;          # For testing purposes, not real 
                                            # usage 
    fhir:date @<dateTime>?;                 # Date last changed
    fhir:publisher @<string>?;              # Name of the publisher/steward 
                                            # (organization or individual) 
    fhir:contact @<OneOrMore_ContactDetail>?;  # Contact details for the publisher
    fhir:description @<markdown>?;          # Natural language description of 
                                            # the group 
    fhir:useContext @<OneOrMore_UsageContext>?;  # The context that the content is 
                                            # intended to support 
    fhir:purpose @<markdown>?;              # Why this Group is defined
    fhir:copyright @<markdown>?;            # Use and/or publishing restrictions
    fhir:copyrightLabel @<string>?;         # Copyright holder and year(s)
    fhir:type @<code> AND
    	{fhir:v @fhirvs:group-type}?;  # person | animal | practitioner | 
                                            # device | careteam | 
                                            # healthcareservice | location | 
                                            # organization | relatedperson | 
                                            # specimen 
    fhir:membership @<code> AND
    	{fhir:v @fhirvs:group-membership-basis};  # definitional | conceptual | 
                                            # enumerated 
    fhir:code @<CodeableConcept>?;          # Use of the Group (and by 
                                            # implication, kind of members) 
    fhir:quantity @<unsignedInt>?;          # Number of members
    fhir:managingEntity @<Reference> AND {fhir:link 
    			@<Organization> OR 
    			@<Practitioner> OR 
    			@<PractitionerRole> OR 
    			@<RelatedPerson> ? }?;  # Entity that is the custodian of 
                                            # the Group's definition 
    fhir:combinationMethod @<code> AND
    	{fhir:v @fhirvs:group-characteristic-combination}?;  # all-of | any-of | at-least | 
                                            # at-most | except-subset 
    fhir:combinationThreshold @<positiveInt>?;  # Provides the value of "n" when 
                                            # "at-least" or "at-most" codes are 
                                            # used 
    fhir:characteristic @<OneOrMore_Group.characteristic>?;  # Include / Exclude group members by 
                                            # Trait 
    fhir:member @<OneOrMore_Group.member>?;  # Who or what is in group
}  

# Who or what is in group
<Group.member> EXTENDS @<BackboneElement> CLOSED {   
    fhir:entity @<Reference> AND {fhir:link 
    			@<CareTeam> OR 
    			@<Device> OR 
    			@<Group> OR 
    			@<HealthcareService> OR 
    			@<Location> OR 
    			@<Organization> OR 
    			@<Patient> OR 
    			@<Practitioner> OR 
    			@<PractitionerRole> OR 
    			@<RelatedPerson> OR 
    			@<Specimen> ? };  # Reference to the group member
    fhir:involvement @<OneOrMore_CodeableConcept>?;  # Code that describes how user is 
                                            # part of the group 
    fhir:period @<Period>?;                 # Period member belonged to the group
    fhir:inactive @<boolean>?;              # If member is no longer in group
}  

# Include / Exclude group members by Trait
<Group.characteristic> EXTENDS @<BackboneElement> CLOSED {   
    fhir:code @<CodeableConcept>;           # Kind of characteristic
    fhir:value @<CodeableConcept>  OR 
    			@<boolean>  OR 
    			@<Quantity>  OR 
    			@<Range>  OR 
    			@<Reference>  OR 
    			@<uri>  OR 
    			@<Expression>  ;  # Value held by characteristic
    fhir:exclude @<boolean>;                # Group includes or excludes
    fhir:description @<markdown>?;          # Natural language description of 
                                            # the characteristic 
    fhir:method @<OneOrMore_CodeableConcept>?;  # Method for how the characteristic 
                                            # value was determined 
    fhir:determinedBy (@<Reference>  AND {fhir:link @<Device> OR 
    			 @<DeviceDefinition> OR 
    			 @<DeviceMetric> })  OR 
    			@<Expression>  ?;  # Defines the characteristic
    fhir:offset @<CodeableConcept>?;        # Reference point for comparison
    fhir:instances @<Quantity>  OR 
    			@<Range>  ?;  # Number of occurrences meeting the 
                                            # characteristic 
    fhir:duration @<Duration>  OR 
    			@<Range>  ?;  # Length of time in which the 
                                            # characteristic is met 
    fhir:period @<Period>?;                 # Period over which characteristic 
                                            # is tested 
    fhir:timing @<OneOrMore_RelativeTime>?;  # Timing in which the characteristic 
                                            # is determined 
}  

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

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

<OneOrMore_ContactDetail> CLOSED {
    rdf:first @<ContactDetail>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_ContactDetail> 
}

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

<OneOrMore_Group.characteristic> CLOSED {
    rdf:first @<Group.characteristic>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_Group.characteristic> 
}

<OneOrMore_Group.member> CLOSED {
    rdf:first @<Group.member>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_Group.member> 
}

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

<OneOrMore_RelativeTime> CLOSED {
    rdf:first @<RelativeTime>  ;
    rdf:rest [rdf:nil] OR @<OneOrMore_RelativeTime> 
}

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

# Logical grouping of characteristics for the Group Resource.
fhirvs:group-characteristic-combination ["all-of" "any-of" "at-least" "at-most" "except-subset"]

# Basis for membership in a group
fhirvs:group-membership-basis ["definitional" "conceptual" "enumerated"]

# Types of resources that are part of group.
fhirvs:group-type ["person" "animal" "practitioner" "device" "careteam" "healthcareservice" "location" "organization" "relatedperson" "specimen"]

# The lifecycle status of an artifact.
fhirvs:publication-status ["draft" "active" "retired" "unknown"]


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.