All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hulsom.fhir-protobuf-types.0.1.0.source-code.fhir.proto Maven / Gradle / Ivy

The newest version!
/*
 * Schema: http://json-schema.org/draft-04/schema#
 * Description: see http://hl7.org/fhir/json.html#schema for information about the FHIR Json Schemas
 */
syntax = "proto3";
package org.fhir.stu3;
option java_multiple_files = true;

/*
 * Base definition for all elements in a resource.
 */
message Element {
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
}

/*
 * Optional Extension Element - found in all resources.
 */
message Extension {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string url = 4;                                                   // Source of the definition for the extension code - a logical name or a URL.
    Element urlExtensionElement = 5;                                  // Extensions for url
    bool valueBoolean = 6;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueBooleanExtensionElement = 7;                         // Extensions for valueBoolean
    int64 valueInteger = 8;                                           // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueIntegerExtensionElement = 9;                         // Extensions for valueInteger
    double valueDecimal = 10;                                         // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueDecimalExtensionElement = 11;                        // Extensions for valueDecimal
    string valueBase64Binary = 12;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueBase64BinaryExtensionElement = 13;                   // Extensions for valueBase64Binary
    string valueInstant = 14;                                         // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueInstantExtensionElement = 15;                        // Extensions for valueInstant
    string valueString = 16;                                          // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueStringExtensionElement = 17;                         // Extensions for valueString
    string valueUri = 18;                                             // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueUriExtensionElement = 19;                            // Extensions for valueUri
    string valueDate = 20;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueDateExtensionElement = 21;                           // Extensions for valueDate
    string valueDateTime = 22;                                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueDateTimeExtensionElement = 23;                       // Extensions for valueDateTime
    string valueTime = 24;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueTimeExtensionElement = 25;                           // Extensions for valueTime
    string valueCode = 26;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueCodeExtensionElement = 27;                           // Extensions for valueCode
    string valueOid = 28;                                             // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueOidExtensionElement = 29;                            // Extensions for valueOid
    string valueUuid = 30;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueUuidExtensionElement = 31;                           // Extensions for valueUuid
    string valueId = 32;                                              // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueIdExtensionElement = 33;                             // Extensions for valueId
    int64 valueUnsignedInt = 34;                                      // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueUnsignedIntExtensionElement = 35;                    // Extensions for valueUnsignedInt
    int64 valuePositiveInt = 36;                                      // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valuePositiveIntExtensionElement = 37;                    // Extensions for valuePositiveInt
    string valueMarkdown = 38;                                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Element valueMarkdownExtensionElement = 39;                       // Extensions for valueMarkdown
    Element valueElement = 40;                                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Extension valueExtension = 41;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    BackboneElement valueBackboneElement = 42;                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Narrative valueNarrative = 43;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Annotation valueAnnotation = 44;                                  // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Attachment valueAttachment = 45;                                  // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Identifier valueIdentifier = 46;                                  // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    CodeableConcept valueCodeableConcept = 47;                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Coding valueCoding = 48;                                          // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Quantity valueQuantity = 49;                                      // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Duration valueDuration = 50;                                      // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Quantity valueSimpleQuantity = 51;                                // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Distance valueDistance = 52;                                      // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Count valueCount = 53;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Money valueMoney = 54;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Age valueAge = 55;                                                // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Range valueRange = 56;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Period valuePeriod = 57;                                          // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Ratio valueRatio = 58;                                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Reference valueReference = 59;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    SampledData valueSampledData = 60;                                // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Signature valueSignature = 61;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    HumanName valueHumanName = 62;                                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Address valueAddress = 63;                                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    ContactPoint valueContactPoint = 64;                              // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Timing valueTiming = 65;                                          // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Meta valueMeta = 66;                                              // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    ElementDefinition valueElementDefinition = 67;                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    ContactDetail valueContactDetail = 68;                            // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Contributor valueContributor = 69;                                // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    Dosage valueDosage = 70;                                          // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    RelatedArtifact valueRelatedArtifact = 71;                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    UsageContext valueUsageContext = 72;                              // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    DataRequirement valueDataRequirement = 73;                        // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    ParameterDefinition valueParameterDefinition = 74;                // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
    TriggerDefinition valueTriggerDefinition = 75;                    // Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).
}

/*
 * Base definition for all elements that are defined inside a resource - but not those in a data type.
 */
message BackboneElement {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
}

enum Narrative_status {
    Narrative_status_extensions = 0;
    Narrative_status_generated = 1;
    Narrative_status_additional = 2;
    Narrative_status_empty = 3;
}


/*
 * A human-readable formatted text, including images.
 */
message Narrative {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Narrative_status status = 4;                                      // The status of the narrative - whether it's entirely generated (from just the defined data or the extensions too), or whether a human authored it and it may contain additional data.
    Element statusExtensionElement = 5;                               // Extensions for status
    string div = 6;                                                   // The actual narrative content, a stripped down version of XHTML.
}

/*
 * A  text note which also  contains information about who made the statement and when.
 */
message Annotation {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Reference authorReference = 4;                                    // The individual responsible for making the annotation.
    string authorString = 5;                                          // The individual responsible for making the annotation.
    Element authorStringExtensionElement = 6;                         // Extensions for authorString
    string time = 7;                                                  // Indicates when this particular annotation was made.
    Element timeExtensionElement = 8;                                 // Extensions for time
    string text = 9;                                                  // The text of the annotation.
    Element textExtensionElement = 10;                                // Extensions for text
}

/*
 * For referring to data content defined in other formats.
 */
message Attachment {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string contentType = 4;                                           // Identifies the type of the data in the attachment and allows a method to be chosen to interpret or render the data. Includes mime type parameters such as charset where appropriate.
    Element contentTypeExtensionElement = 5;                          // Extensions for contentType
    string language = 6;                                              // The human language of the content. The value can be any valid value according to BCP 47.
    Element languageExtensionElement = 7;                             // Extensions for language
    string data = 8;                                                  // The actual data of the attachment - a sequence of bytes. In XML, represented using base64.
    Element dataExtensionElement = 9;                                 // Extensions for data
    string url = 10;                                                  // An alternative location where the data can be accessed.
    Element urlExtensionElement = 11;                                 // Extensions for url
    int64 size = 12;                                                  // The number of bytes of data that make up this attachment (before base64 encoding, if that is done).
    Element sizeExtensionElement = 13;                                // Extensions for size
    string hash = 14;                                                 // The calculated hash of the data using SHA-1. Represented using base64.
    Element hashExtensionElement = 15;                                // Extensions for hash
    string title = 16;                                                // A label or set of text to display in place of the data.
    Element titleExtensionElement = 17;                               // Extensions for title
    string creation = 18;                                             // The date that the attachment was first created.
    Element creationExtensionElement = 19;                            // Extensions for creation
}

enum Identifier_use {
    Identifier_use_secondary = 0;
    Identifier_use_temp = 1;
    Identifier_use_usual = 2;
    Identifier_use_official = 3;
}


/*
 * A technical identifier - identifies some entity uniquely and unambiguously.
 */
message Identifier {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Identifier_use use = 4;                                           // The purpose of this identifier.
    Element useExtensionElement = 5;                                  // Extensions for use
    CodeableConcept type = 6;                                         // A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.
    string system = 7;                                                // Establishes the namespace for the value - that is, a URL that describes a set values that are unique.
    Element systemExtensionElement = 8;                               // Extensions for system
    string value = 9;                                                 // The portion of the identifier typically relevant to the user and which is unique within the context of the system.
    Element valueExtensionElement = 10;                               // Extensions for value
    Period period = 11;                                               // Time period during which identifier is/was valid for use.
    Reference assigner = 12;                                          // Organization that issued/manages the identifier.
}

/*
 * A concept that may be defined by a formal reference to a terminology or ontology or may be provided by text.
 */
message CodeableConcept {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Coding coding = 4;                                       // A reference to a code defined by a terminology system.
    string text = 5;                                                  // A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.
    Element textExtensionElement = 6;                                 // Extensions for text
}

/*
 * A reference to a code defined by a terminology system.
 */
message Coding {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string system = 4;                                                // The identification of the code system that defines the meaning of the symbol in the code.
    Element systemExtensionElement = 5;                               // Extensions for system
    string version = 6;                                               // The version of the code system which was used when choosing this code. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured. and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.
    Element versionExtensionElement = 7;                              // Extensions for version
    string code = 8;                                                  // A symbol in syntax defined by the system. The symbol may be a predefined code or an expression in a syntax defined by the coding system (e.g. post-coordination).
    Element codeExtensionElement = 9;                                 // Extensions for code
    string display = 10;                                              // A representation of the meaning of the code in the system, following the rules of the system.
    Element displayExtensionElement = 11;                             // Extensions for display
    bool userSelected = 12;                                           // Indicates that this coding was chosen by a user directly - i.e. off a pick list of available items (codes or displays).
    Element userSelectedExtensionElement = 13;                        // Extensions for userSelected
}

enum Quantity_comparator {
    Quantity_comparator_LessThanOrEqualTo = 0;
    Quantity_comparator_LessThan = 1;
    Quantity_comparator_GreaterThan = 2;
    Quantity_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * A measured amount (or an amount that can potentially be measured). Note that measured amounts include amounts that are not precisely quantified, including amounts involving arbitrary units and floating currencies.
 */
message Quantity {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Quantity_comparator comparator = 6;                               // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
}

enum Duration_comparator {
    Duration_comparator_LessThanOrEqualTo = 0;
    Duration_comparator_LessThan = 1;
    Duration_comparator_GreaterThan = 2;
    Duration_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * A length of time.
 */
message Duration {
    // begin Quantity
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Duration_comparator comparator = 6;                               // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
    // end Quantity

}

enum Distance_comparator {
    Distance_comparator_LessThanOrEqualTo = 0;
    Distance_comparator_LessThan = 1;
    Distance_comparator_GreaterThan = 2;
    Distance_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * A length - a value with a unit that is a physical distance.
 */
message Distance {
    // begin Quantity
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Distance_comparator comparator = 6;                               // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
    // end Quantity

}

enum Count_comparator {
    Count_comparator_LessThanOrEqualTo = 0;
    Count_comparator_LessThan = 1;
    Count_comparator_GreaterThan = 2;
    Count_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * A measured amount (or an amount that can potentially be measured). Note that measured amounts include amounts that are not precisely quantified, including amounts involving arbitrary units and floating currencies.
 */
message Count {
    // begin Quantity
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Count_comparator comparator = 6;                                  // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
    // end Quantity

}

enum Money_comparator {
    Money_comparator_LessThanOrEqualTo = 0;
    Money_comparator_LessThan = 1;
    Money_comparator_GreaterThan = 2;
    Money_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * An amount of economic utility in some recognized currency.
 */
message Money {
    // begin Quantity
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Money_comparator comparator = 6;                                  // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
    // end Quantity

}

enum Age_comparator {
    Age_comparator_LessThanOrEqualTo = 0;
    Age_comparator_LessThan = 1;
    Age_comparator_GreaterThan = 2;
    Age_comparator_GreaterThanOrEqualTo = 3;
}


/*
 * A duration of time during which an organism (or a process) has existed.
 */
message Age {
    // begin Quantity
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    double value = 4;                                                 // The value of the measured amount. The value includes an implicit precision in the presentation of the value.
    Element valueExtensionElement = 5;                                // Extensions for value
    Age_comparator comparator = 6;                                    // How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.
    Element comparatorExtensionElement = 7;                           // Extensions for comparator
    string unit = 8;                                                  // A human-readable form of the unit.
    Element unitExtensionElement = 9;                                 // Extensions for unit
    string system = 10;                                               // The identification of the system that provides the coded form of the unit.
    Element systemExtensionElement = 11;                              // Extensions for system
    string code = 12;                                                 // A computer processable form of the unit in some unit representation system.
    Element codeExtensionElement = 13;                                // Extensions for code
    // end Quantity

}

/*
 * A set of ordered Quantities defined by a low and high limit.
 */
message Range {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Quantity low = 4;                                                 // The low limit. The boundary is inclusive.
    Quantity high = 5;                                                // The high limit. The boundary is inclusive.
}

/*
 * A time period defined by a start and end date and optionally time.
 */
message Period {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string start = 4;                                                 // The start of the period. The boundary is inclusive.
    Element startExtensionElement = 5;                                // Extensions for start
    string end = 6;                                                   // The end of the period. If the end of the period is missing, it means that the period is ongoing. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.
    Element endExtensionElement = 7;                                  // Extensions for end
}

/*
 * A relationship of two Quantity values - expressed as a numerator and a denominator.
 */
message Ratio {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Quantity numerator = 4;                                           // The value of the numerator.
    Quantity denominator = 5;                                         // The value of the denominator.
}

/*
 * A reference from one resource to another.
 */
message Reference {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string reference = 4;                                             // A reference to a location at which the other resource is found. The reference may be a relative reference, in which case it is relative to the service base URL, or an absolute URL that resolves to the location where the resource is found. The reference may be version specific or not. If the reference is not to a FHIR RESTful server, then it should be assumed to be version specific. Internal fragment references (start with '#') refer to contained resources.
    Element referenceExtensionElement = 5;                            // Extensions for reference
    Identifier identifier = 6;                                        // An identifier for the other resource. This is used when there is no way to reference the other resource directly, either because the entity is not available through a FHIR server, or because there is no way for the author of the resource to convert a known identifier to an actual location. There is no requirement that a Reference.identifier point to something that is actually exposed as a FHIR instance, but it SHALL point to a business concept that would be expected to be exposed as a FHIR instance, and that instance would need to be of a FHIR resource type allowed by the reference.
    string display = 7;                                               // Plain text narrative that identifies the resource in addition to the resource reference.
    Element displayExtensionElement = 8;                              // Extensions for display
}

/*
 * A series of measurements taken by a device, with upper and lower limits. There may be more than one dimension in the data.
 */
message SampledData {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Quantity origin = 4;                                              // The base quantity that a measured value of zero represents. In addition, this provides the units of the entire measurement series.
    double period = 5;                                                // The length of time between sampling times, measured in milliseconds.
    Element periodExtensionElement = 6;                               // Extensions for period
    double factor = 7;                                                // A correction factor that is applied to the sampled data points before they are added to the origin.
    Element factorExtensionElement = 8;                               // Extensions for factor
    double lowerLimit = 9;                                            // The lower limit of detection of the measured points. This is needed if any of the data points have the value "L" (lower than detection limit).
    Element lowerLimitExtensionElement = 10;                          // Extensions for lowerLimit
    double upperLimit = 11;                                           // The upper limit of detection of the measured points. This is needed if any of the data points have the value "U" (higher than detection limit).
    Element upperLimitExtensionElement = 12;                          // Extensions for upperLimit
    int64 dimensions = 13;                                            // The number of sample points at each time point. If this value is greater than one, then the dimensions will be interlaced - all the sample points for a point in time will be recorded at once.
    Element dimensionsExtensionElement = 14;                          // Extensions for dimensions
    string data = 15;                                                 // A series of data points which are decimal values separated by a single space (character u20). The special values "E" (error), "L" (below detection limit) and "U" (above detection limit) can also be used in place of a decimal value.
    Element dataExtensionElement = 16;                                // Extensions for data
}

/*
 * A digital signature along with supporting context. The signature may be electronic/cryptographic in nature, or a graphical image representing a hand-written signature, or a signature process. Different signature approaches have different utilities.
 */
message Signature {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Coding type = 4;                                         // An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.
    string when = 5;                                                  // When the digital signature was signed.
    Element whenExtensionElement = 6;                                 // Extensions for when
    string whoUri = 7;                                                // A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).
    Element whoUriExtensionElement = 8;                               // Extensions for whoUri
    Reference whoReference = 9;                                       // A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).
    string onBehalfOfUri = 10;                                        // A reference to an application-usable description of the identity that is represented by the signature.
    Element onBehalfOfUriExtensionElement = 11;                       // Extensions for onBehalfOfUri
    Reference onBehalfOfReference = 12;                               // A reference to an application-usable description of the identity that is represented by the signature.
    string contentType = 13;                                          // A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.
    Element contentTypeExtensionElement = 14;                         // Extensions for contentType
    string blob = 15;                                                 // The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.
    Element blobExtensionElement = 16;                                // Extensions for blob
}

enum HumanName_use {
    HumanName_use_maiden = 0;
    HumanName_use_temp = 1;
    HumanName_use_usual = 2;
    HumanName_use_old = 3;
    HumanName_use_nickname = 4;
    HumanName_use_official = 5;
    HumanName_use_anonymous = 6;
}


/*
 * A human's name with the ability to identify parts and usage.
 */
message HumanName {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    HumanName_use use = 4;                                            // Identifies the purpose for this name.
    Element useExtensionElement = 5;                                  // Extensions for use
    string text = 6;                                                  // A full text representation of the name.
    Element textExtensionElement = 7;                                 // Extensions for text
    string family = 8;                                                // The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.
    Element familyExtensionElement = 9;                               // Extensions for family
    repeated string given = 10;                                       // Given name.
    repeated Element givenExtensionElement = 11;                      // Extensions for given
    repeated string prefix = 12;                                      // Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.
    repeated Element prefixExtensionElement = 13;                     // Extensions for prefix
    repeated string suffix = 14;                                      // Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.
    repeated Element suffixExtensionElement = 15;                     // Extensions for suffix
    Period period = 16;                                               // Indicates the period of time when this name was valid for the named person.
}

enum Address_use {
    Address_use_temp = 0;
    Address_use_work = 1;
    Address_use_old = 2;
    Address_use_home = 3;
}

enum Address_type {
    Address_type_postal = 0;
    Address_type_physical = 1;
    Address_type_both = 2;
}


/*
 * An address expressed using postal conventions (as opposed to GPS or other location definition formats).  This data type may be used to convey addresses for use in delivering mail as well as for visiting locations which might not be valid for mail delivery.  There are a variety of postal address formats defined around the world.
 */
message Address {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Address_use use = 4;                                              // The purpose of this address.
    Element useExtensionElement = 5;                                  // Extensions for use
    Address_type type = 6;                                            // Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
    Element typeExtensionElement = 7;                                 // Extensions for type
    string text = 8;                                                  // A full text representation of the address.
    Element textExtensionElement = 9;                                 // Extensions for text
    repeated string line = 10;                                        // This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.
    repeated Element lineExtensionElement = 11;                       // Extensions for line
    string city = 12;                                                 // The name of the city, town, village or other community or delivery center.
    Element cityExtensionElement = 13;                                // Extensions for city
    string district = 14;                                             // The name of the administrative area (county).
    Element districtExtensionElement = 15;                            // Extensions for district
    string state = 16;                                                // Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (i.e. US 2 letter state codes).
    Element stateExtensionElement = 17;                               // Extensions for state
    string postalCode = 18;                                           // A postal code designating a region defined by the postal service.
    Element postalCodeExtensionElement = 19;                          // Extensions for postalCode
    string country = 20;                                              // Country - a nation as commonly understood or generally accepted.
    Element countryExtensionElement = 21;                             // Extensions for country
    Period period = 22;                                               // Time period when address was/is in use.
}

enum ContactPoint_system {
    ContactPoint_system_other = 0;
    ContactPoint_system_pager = 1;
    ContactPoint_system_phone = 2;
    ContactPoint_system_sms = 3;
    ContactPoint_system_fax = 4;
    ContactPoint_system_email = 5;
    ContactPoint_system_url = 6;
}

enum ContactPoint_use {
    ContactPoint_use_temp = 0;
    ContactPoint_use_work = 1;
    ContactPoint_use_old = 2;
    ContactPoint_use_mobile = 3;
    ContactPoint_use_home = 4;
}


/*
 * Details for all kinds of technology mediated contact points for a person or organization, including telephone, email, etc.
 */
message ContactPoint {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    ContactPoint_system system = 4;                                   // Telecommunications form for contact point - what communications system is required to make use of the contact.
    Element systemExtensionElement = 5;                               // Extensions for system
    string value = 6;                                                 // The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).
    Element valueExtensionElement = 7;                                // Extensions for value
    ContactPoint_use use = 8;                                         // Identifies the purpose for the contact point.
    Element useExtensionElement = 9;                                  // Extensions for use
    int64 rank = 10;                                                  // Specifies a preferred order in which to use a set of contacts. Contacts are ranked with lower values coming before higher values.
    Element rankExtensionElement = 11;                                // Extensions for rank
    Period period = 12;                                               // Time period when the contact point was/is in use.
}

/*
 * Specifies an event that may occur multiple times. Timing schedules are used to record when things are planned, expected or requested to occur. The most common usage is in dosage instructions for medications. They are also used when planning care of various kinds, and may be used for reporting the schedule to which past regular activities were carried out.
 */
message Timing {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated string event = 4;                                        // Identifies specific times when the event occurs.
    repeated Element eventExtensionElement = 5;                       // Extensions for event
    Timing_Repeat repeat = 6;                                         // A set of rules that describe when the event is scheduled.
    CodeableConcept code = 7;                                         // A code for the timing schedule. Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code).
}

enum Timing_Repeat_durationUnit {
    Timing_Repeat_durationUnit_a = 0;
    Timing_Repeat_durationUnit_mo = 1;
    Timing_Repeat_durationUnit_s = 2;
    Timing_Repeat_durationUnit_min = 3;
    Timing_Repeat_durationUnit_d = 4;
    Timing_Repeat_durationUnit_wk = 5;
    Timing_Repeat_durationUnit_h = 6;
}

enum Timing_Repeat_periodUnit {
    Timing_Repeat_periodUnit_a = 0;
    Timing_Repeat_periodUnit_mo = 1;
    Timing_Repeat_periodUnit_s = 2;
    Timing_Repeat_periodUnit_min = 3;
    Timing_Repeat_periodUnit_d = 4;
    Timing_Repeat_periodUnit_wk = 5;
    Timing_Repeat_periodUnit_h = 6;
}


/*
 * Specifies an event that may occur multiple times. Timing schedules are used to record when things are planned, expected or requested to occur. The most common usage is in dosage instructions for medications. They are also used when planning care of various kinds, and may be used for reporting the schedule to which past regular activities were carried out.
 */
message Timing_Repeat {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Duration boundsDuration = 5;                                      // Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.
    Range boundsRange = 6;                                            // Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.
    Period boundsPeriod = 7;                                          // Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.
    int64 count = 8;                                                  // A total count of the desired number of repetitions.
    Element countExtensionElement = 9;                                // Extensions for count
    int64 countMax = 10;                                              // A maximum value for the count of the desired repetitions (e.g. do something 6-8 times).
    Element countMaxExtensionElement = 11;                            // Extensions for countMax
    double duration = 12;                                             // How long this thing happens for when it happens.
    Element durationExtensionElement = 13;                            // Extensions for duration
    double durationMax = 14;                                          // The upper limit of how long this thing happens for when it happens.
    Element durationMaxExtensionElement = 15;                         // Extensions for durationMax
    Timing_Repeat_durationUnit durationUnit = 16;                     // The units of time for the duration, in UCUM units.
    Element durationUnitExtensionElement = 17;                        // Extensions for durationUnit
    int64 frequency = 18;                                             // The number of times to repeat the action within the specified period / period range (i.e. both period and periodMax provided).
    Element frequencyExtensionElement = 19;                           // Extensions for frequency
    int64 frequencyMax = 20;                                          // If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period range.
    Element frequencyMaxExtensionElement = 21;                        // Extensions for frequencyMax
    double period = 22;                                               // Indicates the duration of time over which repetitions are to occur; e.g. to express "3 times per day", 3 would be the frequency and "1 day" would be the period.
    Element periodExtensionElement = 23;                              // Extensions for period
    double periodMax = 24;                                            // If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as "do this once every 3-5 days.
    Element periodMaxExtensionElement = 25;                           // Extensions for periodMax
    Timing_Repeat_periodUnit periodUnit = 26;                         // The units of time for the period in UCUM units.
    Element periodUnitExtensionElement = 27;                          // Extensions for periodUnit
    repeated string dayOfWeek = 28;                                   // If one or more days of week is provided, then the action happens only on the specified day(s).
    repeated Element dayOfWeekExtensionElement = 29;                  // Extensions for dayOfWeek
    repeated string timeOfDay = 30;                                   // Specified time of day for action to take place.
    repeated Element timeOfDayExtensionElement = 31;                  // Extensions for timeOfDay
    repeated string when = 32;                                        // Real world events that the occurrence of the event should be tied to.
    repeated Element whenExtensionElement = 33;                       // Extensions for when
    int64 offset = 34;                                                // The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the event.
    Element offsetExtensionElement = 35;                              // Extensions for offset
}

/*
 * The metadata about a resource. This is content in the resource that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
 */
message Meta {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string versionId = 4;                                             // The version specific identifier, as it appears in the version portion of the URL. This values changes when the resource is created, updated, or deleted.
    Element versionIdExtensionElement = 5;                            // Extensions for versionId
    string lastUpdated = 6;                                           // When the resource last changed - e.g. when the version changed.
    Element lastUpdatedExtensionElement = 7;                          // Extensions for lastUpdated
    repeated string profile = 8;                                      // A list of profiles (references to [[[StructureDefinition]]] resources) that this resource claims to conform to. The URL is a reference to [[[StructureDefinition.url]]].
    repeated Element profileExtensionElement = 9;                     // Extensions for profile
    repeated Coding security = 10;                                    // Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.
    repeated Coding tag = 11;                                         // Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.
}

/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string path = 4;                                                  // The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
    Element pathExtensionElement = 5;                                 // Extensions for path
    repeated string representation = 6;                               // Codes that define how this element is represented in instances, when the deviation varies from the normal case.
    repeated Element representationExtensionElement = 7;              // Extensions for representation
    string sliceName = 8;                                             // The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.
    Element sliceNameExtensionElement = 9;                            // Extensions for sliceName
    string label = 10;                                                // A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
    Element labelExtensionElement = 11;                               // Extensions for label
    repeated Coding code = 12;                                        // A code that has the same meaning as the element in a particular terminology.
    ElementDefinition_Slicing slicing = 13;                           // Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).
    string short = 14;                                                // A concise description of what this element means (e.g. for use in autogenerated summaries).
    Element shortExtensionElement = 15;                               // Extensions for short
    string definition = 16;                                           // Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource.
    Element definitionExtensionElement = 17;                          // Extensions for definition
    string comment = 18;                                              // Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc.
    Element commentExtensionElement = 19;                             // Extensions for comment
    string requirements = 20;                                         // This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.
    Element requirementsExtensionElement = 21;                        // Extensions for requirements
    repeated string alias = 22;                                       // Identifies additional names by which this element might also be known.
    repeated Element aliasExtensionElement = 23;                      // Extensions for alias
    int64 min = 24;                                                   // The minimum number of times this element SHALL appear in the instance.
    Element minExtensionElement = 25;                                 // Extensions for min
    string max = 26;                                                  // The maximum number of times this element is permitted to appear in the instance.
    Element maxExtensionElement = 27;                                 // Extensions for max
    ElementDefinition_Base base = 28;                                 // Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. This information is provided when the element definition is not the original definition of an element - i.g. either in a constraint on another type, or for elements from a super type in a snap shot.
    string contentReference = 29;                                     // Identifies the identity of an element defined elsewhere in the profile whose content rules should be applied to the current element.
    Element contentReferenceExtensionElement = 30;                    // Extensions for contentReference
    repeated ElementDefinition_Type type = 31;                        // The data type or resource that the value of this element is permitted to be.
    bool defaultValueBoolean = 32;                                    // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueBooleanExtensionElement = 33;                 // Extensions for defaultValueBoolean
    int64 defaultValueInteger = 34;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueIntegerExtensionElement = 35;                 // Extensions for defaultValueInteger
    double defaultValueDecimal = 36;                                  // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueDecimalExtensionElement = 37;                 // Extensions for defaultValueDecimal
    string defaultValueBase64Binary = 38;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueBase64BinaryExtensionElement = 39;            // Extensions for defaultValueBase64Binary
    string defaultValueInstant = 40;                                  // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueInstantExtensionElement = 41;                 // Extensions for defaultValueInstant
    string defaultValueString = 42;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueStringExtensionElement = 43;                  // Extensions for defaultValueString
    string defaultValueUri = 44;                                      // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueUriExtensionElement = 45;                     // Extensions for defaultValueUri
    string defaultValueDate = 46;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueDateExtensionElement = 47;                    // Extensions for defaultValueDate
    string defaultValueDateTime = 48;                                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueDateTimeExtensionElement = 49;                // Extensions for defaultValueDateTime
    string defaultValueTime = 50;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueTimeExtensionElement = 51;                    // Extensions for defaultValueTime
    string defaultValueCode = 52;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueCodeExtensionElement = 53;                    // Extensions for defaultValueCode
    string defaultValueOid = 54;                                      // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueOidExtensionElement = 55;                     // Extensions for defaultValueOid
    string defaultValueUuid = 56;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueUuidExtensionElement = 57;                    // Extensions for defaultValueUuid
    string defaultValueId = 58;                                       // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueIdExtensionElement = 59;                      // Extensions for defaultValueId
    int64 defaultValueUnsignedInt = 60;                               // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueUnsignedIntExtensionElement = 61;             // Extensions for defaultValueUnsignedInt
    int64 defaultValuePositiveInt = 62;                               // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValuePositiveIntExtensionElement = 63;             // Extensions for defaultValuePositiveInt
    string defaultValueMarkdown = 64;                                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Element defaultValueMarkdownExtensionElement = 65;                // Extensions for defaultValueMarkdown
    Element defaultValueElement = 66;                                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Extension defaultValueExtension = 67;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    BackboneElement defaultValueBackboneElement = 68;                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Narrative defaultValueNarrative = 69;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Annotation defaultValueAnnotation = 70;                           // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Attachment defaultValueAttachment = 71;                           // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Identifier defaultValueIdentifier = 72;                           // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    CodeableConcept defaultValueCodeableConcept = 73;                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Coding defaultValueCoding = 74;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Quantity defaultValueQuantity = 75;                               // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Duration defaultValueDuration = 76;                               // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Quantity defaultValueSimpleQuantity = 77;                         // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Distance defaultValueDistance = 78;                               // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Count defaultValueCount = 79;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Money defaultValueMoney = 80;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Age defaultValueAge = 81;                                         // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Range defaultValueRange = 82;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Period defaultValuePeriod = 83;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Ratio defaultValueRatio = 84;                                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Reference defaultValueReference = 85;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    SampledData defaultValueSampledData = 86;                         // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Signature defaultValueSignature = 87;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    HumanName defaultValueHumanName = 88;                             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Address defaultValueAddress = 89;                                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    ContactPoint defaultValueContactPoint = 90;                       // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Timing defaultValueTiming = 91;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Meta defaultValueMeta = 92;                                       // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    ElementDefinition defaultValueElementDefinition = 93;             // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    ContactDetail defaultValueContactDetail = 94;                     // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Contributor defaultValueContributor = 95;                         // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    Dosage defaultValueDosage = 96;                                   // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    RelatedArtifact defaultValueRelatedArtifact = 97;                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    UsageContext defaultValueUsageContext = 98;                       // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    DataRequirement defaultValueDataRequirement = 99;                 // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    ParameterDefinition defaultValueParameterDefinition = 100;        // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    TriggerDefinition defaultValueTriggerDefinition = 101;            // The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
    string meaningWhenMissing = 102;                                  // The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing'.
    Element meaningWhenMissingExtensionElement = 103;                 // Extensions for meaningWhenMissing
    string orderMeaning = 104;                                        // If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.
    Element orderMeaningExtensionElement = 105;                       // Extensions for orderMeaning
    bool fixedBoolean = 106;                                          // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedBooleanExtensionElement = 107;                       // Extensions for fixedBoolean
    int64 fixedInteger = 108;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedIntegerExtensionElement = 109;                       // Extensions for fixedInteger
    double fixedDecimal = 110;                                        // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedDecimalExtensionElement = 111;                       // Extensions for fixedDecimal
    string fixedBase64Binary = 112;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedBase64BinaryExtensionElement = 113;                  // Extensions for fixedBase64Binary
    string fixedInstant = 114;                                        // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedInstantExtensionElement = 115;                       // Extensions for fixedInstant
    string fixedString = 116;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedStringExtensionElement = 117;                        // Extensions for fixedString
    string fixedUri = 118;                                            // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedUriExtensionElement = 119;                           // Extensions for fixedUri
    string fixedDate = 120;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedDateExtensionElement = 121;                          // Extensions for fixedDate
    string fixedDateTime = 122;                                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedDateTimeExtensionElement = 123;                      // Extensions for fixedDateTime
    string fixedTime = 124;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedTimeExtensionElement = 125;                          // Extensions for fixedTime
    string fixedCode = 126;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedCodeExtensionElement = 127;                          // Extensions for fixedCode
    string fixedOid = 128;                                            // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedOidExtensionElement = 129;                           // Extensions for fixedOid
    string fixedUuid = 130;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedUuidExtensionElement = 131;                          // Extensions for fixedUuid
    string fixedId = 132;                                             // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedIdExtensionElement = 133;                            // Extensions for fixedId
    int64 fixedUnsignedInt = 134;                                     // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedUnsignedIntExtensionElement = 135;                   // Extensions for fixedUnsignedInt
    int64 fixedPositiveInt = 136;                                     // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedPositiveIntExtensionElement = 137;                   // Extensions for fixedPositiveInt
    string fixedMarkdown = 138;                                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Element fixedMarkdownExtensionElement = 139;                      // Extensions for fixedMarkdown
    Element fixedElement = 140;                                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Extension fixedExtension = 141;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    BackboneElement fixedBackboneElement = 142;                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Narrative fixedNarrative = 143;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Annotation fixedAnnotation = 144;                                 // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Attachment fixedAttachment = 145;                                 // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Identifier fixedIdentifier = 146;                                 // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    CodeableConcept fixedCodeableConcept = 147;                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Coding fixedCoding = 148;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Quantity fixedQuantity = 149;                                     // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Duration fixedDuration = 150;                                     // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Quantity fixedSimpleQuantity = 151;                               // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Distance fixedDistance = 152;                                     // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Count fixedCount = 153;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Money fixedMoney = 154;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Age fixedAge = 155;                                               // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Range fixedRange = 156;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Period fixedPeriod = 157;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Ratio fixedRatio = 158;                                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Reference fixedReference = 159;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    SampledData fixedSampledData = 160;                               // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Signature fixedSignature = 161;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    HumanName fixedHumanName = 162;                                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Address fixedAddress = 163;                                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    ContactPoint fixedContactPoint = 164;                             // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Timing fixedTiming = 165;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Meta fixedMeta = 166;                                             // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    ElementDefinition fixedElementDefinition = 167;                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    ContactDetail fixedContactDetail = 168;                           // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Contributor fixedContributor = 169;                               // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    Dosage fixedDosage = 170;                                         // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    RelatedArtifact fixedRelatedArtifact = 171;                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    UsageContext fixedUsageContext = 172;                             // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    DataRequirement fixedDataRequirement = 173;                       // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    ParameterDefinition fixedParameterDefinition = 174;               // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    TriggerDefinition fixedTriggerDefinition = 175;                   // Specifies a value that SHALL be exactly the value  for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
    bool patternBoolean = 176;                                        // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternBooleanExtensionElement = 177;                     // Extensions for patternBoolean
    int64 patternInteger = 178;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternIntegerExtensionElement = 179;                     // Extensions for patternInteger
    double patternDecimal = 180;                                      // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternDecimalExtensionElement = 181;                     // Extensions for patternDecimal
    string patternBase64Binary = 182;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternBase64BinaryExtensionElement = 183;                // Extensions for patternBase64Binary
    string patternInstant = 184;                                      // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternInstantExtensionElement = 185;                     // Extensions for patternInstant
    string patternString = 186;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternStringExtensionElement = 187;                      // Extensions for patternString
    string patternUri = 188;                                          // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternUriExtensionElement = 189;                         // Extensions for patternUri
    string patternDate = 190;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternDateExtensionElement = 191;                        // Extensions for patternDate
    string patternDateTime = 192;                                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternDateTimeExtensionElement = 193;                    // Extensions for patternDateTime
    string patternTime = 194;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternTimeExtensionElement = 195;                        // Extensions for patternTime
    string patternCode = 196;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternCodeExtensionElement = 197;                        // Extensions for patternCode
    string patternOid = 198;                                          // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternOidExtensionElement = 199;                         // Extensions for patternOid
    string patternUuid = 200;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternUuidExtensionElement = 201;                        // Extensions for patternUuid
    string patternId = 202;                                           // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternIdExtensionElement = 203;                          // Extensions for patternId
    int64 patternUnsignedInt = 204;                                   // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternUnsignedIntExtensionElement = 205;                 // Extensions for patternUnsignedInt
    int64 patternPositiveInt = 206;                                   // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternPositiveIntExtensionElement = 207;                 // Extensions for patternPositiveInt
    string patternMarkdown = 208;                                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Element patternMarkdownExtensionElement = 209;                    // Extensions for patternMarkdown
    Element patternElement = 210;                                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Extension patternExtension = 211;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    BackboneElement patternBackboneElement = 212;                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Narrative patternNarrative = 213;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Annotation patternAnnotation = 214;                               // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Attachment patternAttachment = 215;                               // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Identifier patternIdentifier = 216;                               // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    CodeableConcept patternCodeableConcept = 217;                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Coding patternCoding = 218;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Quantity patternQuantity = 219;                                   // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Duration patternDuration = 220;                                   // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Quantity patternSimpleQuantity = 221;                             // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Distance patternDistance = 222;                                   // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Count patternCount = 223;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Money patternMoney = 224;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Age patternAge = 225;                                             // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Range patternRange = 226;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Period patternPeriod = 227;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Ratio patternRatio = 228;                                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Reference patternReference = 229;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    SampledData patternSampledData = 230;                             // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Signature patternSignature = 231;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    HumanName patternHumanName = 232;                                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Address patternAddress = 233;                                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    ContactPoint patternContactPoint = 234;                           // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Timing patternTiming = 235;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Meta patternMeta = 236;                                           // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    ElementDefinition patternElementDefinition = 237;                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    ContactDetail patternContactDetail = 238;                         // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Contributor patternContributor = 239;                             // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    Dosage patternDosage = 240;                                       // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    RelatedArtifact patternRelatedArtifact = 241;                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    UsageContext patternUsageContext = 242;                           // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    DataRequirement patternDataRequirement = 243;                     // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    ParameterDefinition patternParameterDefinition = 244;             // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    TriggerDefinition patternTriggerDefinition = 245;                 // Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
    repeated ElementDefinition_Example example = 246;                 // A sample value for this element demonstrating the type of information that would typically be found in the element.
    string minValueDate = 247;                                        // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueDateExtensionElement = 248;                       // Extensions for minValueDate
    string minValueDateTime = 249;                                    // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueDateTimeExtensionElement = 250;                   // Extensions for minValueDateTime
    string minValueInstant = 251;                                     // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueInstantExtensionElement = 252;                    // Extensions for minValueInstant
    string minValueTime = 253;                                        // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueTimeExtensionElement = 254;                       // Extensions for minValueTime
    double minValueDecimal = 255;                                     // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueDecimalExtensionElement = 256;                    // Extensions for minValueDecimal
    int64 minValueInteger = 257;                                      // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueIntegerExtensionElement = 258;                    // Extensions for minValueInteger
    int64 minValuePositiveInt = 259;                                  // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValuePositiveIntExtensionElement = 260;                // Extensions for minValuePositiveInt
    int64 minValueUnsignedInt = 261;                                  // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element minValueUnsignedIntExtensionElement = 262;                // Extensions for minValueUnsignedInt
    Quantity minValueQuantity = 263;                                  // The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    string maxValueDate = 264;                                        // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueDateExtensionElement = 265;                       // Extensions for maxValueDate
    string maxValueDateTime = 266;                                    // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueDateTimeExtensionElement = 267;                   // Extensions for maxValueDateTime
    string maxValueInstant = 268;                                     // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueInstantExtensionElement = 269;                    // Extensions for maxValueInstant
    string maxValueTime = 270;                                        // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueTimeExtensionElement = 271;                       // Extensions for maxValueTime
    double maxValueDecimal = 272;                                     // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueDecimalExtensionElement = 273;                    // Extensions for maxValueDecimal
    int64 maxValueInteger = 274;                                      // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueIntegerExtensionElement = 275;                    // Extensions for maxValueInteger
    int64 maxValuePositiveInt = 276;                                  // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValuePositiveIntExtensionElement = 277;                // Extensions for maxValuePositiveInt
    int64 maxValueUnsignedInt = 278;                                  // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    Element maxValueUnsignedIntExtensionElement = 279;                // Extensions for maxValueUnsignedInt
    Quantity maxValueQuantity = 280;                                  // The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
    int64 maxLength = 281;                                            // Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element.
    Element maxLengthExtensionElement = 282;                          // Extensions for maxLength
    repeated string condition = 283;                                  // A reference to an invariant that may make additional statements about the cardinality or value in the instance.
    repeated Element conditionExtensionElement = 284;                 // Extensions for condition
    repeated ElementDefinition_Constraint constraint = 285;           // Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.
    bool mustSupport = 286;                                           // If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way.  If false, the element may be ignored and not supported.
    Element mustSupportExtensionElement = 287;                        // Extensions for mustSupport
    bool isModifier = 288;                                            // If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system.
    Element isModifierExtensionElement = 289;                         // Extensions for isModifier
    bool isSummary = 290;                                             // Whether the element should be included if a client requests a search with the parameter _summary=true.
    Element isSummaryExtensionElement = 291;                          // Extensions for isSummary
    ElementDefinition_Binding binding = 292;                          // Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).
    repeated ElementDefinition_Mapping mapping = 293;                 // Identifies a concept from an external specification that roughly corresponds to this element.
}

enum ElementDefinition_Slicing_rules {
    ElementDefinition_Slicing_rules_closed = 0;
    ElementDefinition_Slicing_rules_openAtEnd = 1;
    ElementDefinition_Slicing_rules_open = 2;
}


/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Slicing {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated ElementDefinition_Discriminator discriminator = 5;       // Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.
    string description = 6;                                           // A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.
    Element descriptionExtensionElement = 7;                          // Extensions for description
    bool ordered = 8;                                                 // If the matching elements have to occur in the same order as defined in the profile.
    Element orderedExtensionElement = 9;                              // Extensions for ordered
    ElementDefinition_Slicing_rules rules = 10;                       // Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.
    Element rulesExtensionElement = 11;                               // Extensions for rules
}

enum ElementDefinition_Discriminator_type {
    ElementDefinition_Discriminator_type_profile = 0;
    ElementDefinition_Discriminator_type_pattern = 1;
    ElementDefinition_Discriminator_type_exists = 2;
    ElementDefinition_Discriminator_type_type = 3;
    ElementDefinition_Discriminator_type_value = 4;
}


/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Discriminator {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    ElementDefinition_Discriminator_type type = 5;                    // How the element value is interpreted when discrimination is evaluated.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string path = 7;                                                  // A FHIRPath expression, using a restricted subset of FHIRPath, that is used to identify the element on which discrimination is based.
    Element pathExtensionElement = 8;                                 // Extensions for path
}

/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Base {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string path = 5;                                                  // The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [[[StructureDefinition]]] without a StructureDefinition.base.
    Element pathExtensionElement = 6;                                 // Extensions for path
    int64 min = 7;                                                    // Minimum cardinality of the base element identified by the path.
    Element minExtensionElement = 8;                                  // Extensions for min
    string max = 9;                                                   // Maximum cardinality of the base element identified by the path.
    Element maxExtensionElement = 10;                                 // Extensions for max
}

enum ElementDefinition_Type_versioning {
    ElementDefinition_Type_versioning_either = 0;
    ElementDefinition_Type_versioning_independent = 1;
    ElementDefinition_Type_versioning_specific = 2;
}


/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Type {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string profile = 7;                                               // Identifies a profile structure or implementation Guide that SHALL hold for the datatype this element refers to. Can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide.
    Element profileExtensionElement = 8;                              // Extensions for profile
    string targetProfile = 9;                                         // Identifies a profile structure or implementation Guide that SHALL hold for the target of the reference this element refers to. Can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide.
    Element targetProfileExtensionElement = 10;                       // Extensions for targetProfile
    repeated string aggregation = 11;                                 // If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.
    repeated Element aggregationExtensionElement = 12;                // Extensions for aggregation
    ElementDefinition_Type_versioning versioning = 13;                // Whether this reference needs to be version specific or version independent, or whether either can be used.
    Element versioningExtensionElement = 14;                          // Extensions for versioning
}

/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Example {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string label = 5;                                                 // Describes the purpose of this example amoung the set of examples.
    Element labelExtensionElement = 6;                                // Extensions for label
    bool valueBoolean = 7;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Element valueBooleanExtensionElement = 8;                         // Extensions for valueBoolean
    int64 valueInteger = 9;                                           // The actual value for the element, which must be one of the types allowed for this element.
    Element valueIntegerExtensionElement = 10;                        // Extensions for valueInteger
    double valueDecimal = 11;                                         // The actual value for the element, which must be one of the types allowed for this element.
    Element valueDecimalExtensionElement = 12;                        // Extensions for valueDecimal
    string valueBase64Binary = 13;                                    // The actual value for the element, which must be one of the types allowed for this element.
    Element valueBase64BinaryExtensionElement = 14;                   // Extensions for valueBase64Binary
    string valueInstant = 15;                                         // The actual value for the element, which must be one of the types allowed for this element.
    Element valueInstantExtensionElement = 16;                        // Extensions for valueInstant
    string valueString = 17;                                          // The actual value for the element, which must be one of the types allowed for this element.
    Element valueStringExtensionElement = 18;                         // Extensions for valueString
    string valueUri = 19;                                             // The actual value for the element, which must be one of the types allowed for this element.
    Element valueUriExtensionElement = 20;                            // Extensions for valueUri
    string valueDate = 21;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Element valueDateExtensionElement = 22;                           // Extensions for valueDate
    string valueDateTime = 23;                                        // The actual value for the element, which must be one of the types allowed for this element.
    Element valueDateTimeExtensionElement = 24;                       // Extensions for valueDateTime
    string valueTime = 25;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Element valueTimeExtensionElement = 26;                           // Extensions for valueTime
    string valueCode = 27;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Element valueCodeExtensionElement = 28;                           // Extensions for valueCode
    string valueOid = 29;                                             // The actual value for the element, which must be one of the types allowed for this element.
    Element valueOidExtensionElement = 30;                            // Extensions for valueOid
    string valueUuid = 31;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Element valueUuidExtensionElement = 32;                           // Extensions for valueUuid
    string valueId = 33;                                              // The actual value for the element, which must be one of the types allowed for this element.
    Element valueIdExtensionElement = 34;                             // Extensions for valueId
    int64 valueUnsignedInt = 35;                                      // The actual value for the element, which must be one of the types allowed for this element.
    Element valueUnsignedIntExtensionElement = 36;                    // Extensions for valueUnsignedInt
    int64 valuePositiveInt = 37;                                      // The actual value for the element, which must be one of the types allowed for this element.
    Element valuePositiveIntExtensionElement = 38;                    // Extensions for valuePositiveInt
    string valueMarkdown = 39;                                        // The actual value for the element, which must be one of the types allowed for this element.
    Element valueMarkdownExtensionElement = 40;                       // Extensions for valueMarkdown
    Element valueElement = 41;                                        // The actual value for the element, which must be one of the types allowed for this element.
    Extension valueExtension = 42;                                    // The actual value for the element, which must be one of the types allowed for this element.
    BackboneElement valueBackboneElement = 43;                        // The actual value for the element, which must be one of the types allowed for this element.
    Narrative valueNarrative = 44;                                    // The actual value for the element, which must be one of the types allowed for this element.
    Annotation valueAnnotation = 45;                                  // The actual value for the element, which must be one of the types allowed for this element.
    Attachment valueAttachment = 46;                                  // The actual value for the element, which must be one of the types allowed for this element.
    Identifier valueIdentifier = 47;                                  // The actual value for the element, which must be one of the types allowed for this element.
    CodeableConcept valueCodeableConcept = 48;                        // The actual value for the element, which must be one of the types allowed for this element.
    Coding valueCoding = 49;                                          // The actual value for the element, which must be one of the types allowed for this element.
    Quantity valueQuantity = 50;                                      // The actual value for the element, which must be one of the types allowed for this element.
    Duration valueDuration = 51;                                      // The actual value for the element, which must be one of the types allowed for this element.
    Quantity valueSimpleQuantity = 52;                                // The actual value for the element, which must be one of the types allowed for this element.
    Distance valueDistance = 53;                                      // The actual value for the element, which must be one of the types allowed for this element.
    Count valueCount = 54;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Money valueMoney = 55;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Age valueAge = 56;                                                // The actual value for the element, which must be one of the types allowed for this element.
    Range valueRange = 57;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Period valuePeriod = 58;                                          // The actual value for the element, which must be one of the types allowed for this element.
    Ratio valueRatio = 59;                                            // The actual value for the element, which must be one of the types allowed for this element.
    Reference valueReference = 60;                                    // The actual value for the element, which must be one of the types allowed for this element.
    SampledData valueSampledData = 61;                                // The actual value for the element, which must be one of the types allowed for this element.
    Signature valueSignature = 62;                                    // The actual value for the element, which must be one of the types allowed for this element.
    HumanName valueHumanName = 63;                                    // The actual value for the element, which must be one of the types allowed for this element.
    Address valueAddress = 64;                                        // The actual value for the element, which must be one of the types allowed for this element.
    ContactPoint valueContactPoint = 65;                              // The actual value for the element, which must be one of the types allowed for this element.
    Timing valueTiming = 66;                                          // The actual value for the element, which must be one of the types allowed for this element.
    Meta valueMeta = 67;                                              // The actual value for the element, which must be one of the types allowed for this element.
    ElementDefinition valueElementDefinition = 68;                    // The actual value for the element, which must be one of the types allowed for this element.
    ContactDetail valueContactDetail = 69;                            // The actual value for the element, which must be one of the types allowed for this element.
    Contributor valueContributor = 70;                                // The actual value for the element, which must be one of the types allowed for this element.
    Dosage valueDosage = 71;                                          // The actual value for the element, which must be one of the types allowed for this element.
    RelatedArtifact valueRelatedArtifact = 72;                        // The actual value for the element, which must be one of the types allowed for this element.
    UsageContext valueUsageContext = 73;                              // The actual value for the element, which must be one of the types allowed for this element.
    DataRequirement valueDataRequirement = 74;                        // The actual value for the element, which must be one of the types allowed for this element.
    ParameterDefinition valueParameterDefinition = 75;                // The actual value for the element, which must be one of the types allowed for this element.
    TriggerDefinition valueTriggerDefinition = 76;                    // The actual value for the element, which must be one of the types allowed for this element.
}

enum ElementDefinition_Constraint_severity {
    ElementDefinition_Constraint_severity_warning = 0;
    ElementDefinition_Constraint_severity_error = 1;
}


/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Constraint {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string key = 5;                                                   // Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
    Element keyExtensionElement = 6;                                  // Extensions for key
    string requirements = 7;                                          // Description of why this constraint is necessary or appropriate.
    Element requirementsExtensionElement = 8;                         // Extensions for requirements
    ElementDefinition_Constraint_severity severity = 9;               // Identifies the impact constraint violation has on the conformance of the instance.
    Element severityExtensionElement = 10;                            // Extensions for severity
    string human = 11;                                                // Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
    Element humanExtensionElement = 12;                               // Extensions for human
    string expression = 13;                                           // A [FHIRPath](http://hl7.org/fluentpath) expression of constraint that can be executed to see if this constraint is met.
    Element expressionExtensionElement = 14;                          // Extensions for expression
    string xpath = 15;                                                // An XPath expression of constraint that can be executed to see if this constraint is met.
    Element xpathExtensionElement = 16;                               // Extensions for xpath
    string source = 17;                                               // A reference to the original source of the constraint, for traceability purposes.
    Element sourceExtensionElement = 18;                              // Extensions for source
}

enum ElementDefinition_Binding_strength {
    ElementDefinition_Binding_strength_extensible = 0;
    ElementDefinition_Binding_strength_required = 1;
    ElementDefinition_Binding_strength_preferred = 2;
    ElementDefinition_Binding_strength_example = 3;
}


/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Binding {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    ElementDefinition_Binding_strength strength = 5;                  // Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
    Element strengthExtensionElement = 6;                             // Extensions for strength
    string description = 7;                                           // Describes the intended use of this particular set of codes.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    string valueSetUri = 9;                                           // Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used. If the binding refers to an explicit value set - the normal case - then use a Reference(ValueSet) preferably containing the canonical URL for the value set. If the reference is to an implicit value set - usually, an IETF RFC that defines a grammar, such as mime types - then use a uri.
    Element valueSetUriExtensionElement = 10;                         // Extensions for valueSetUri
    Reference valueSetReference = 11;                                 // Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used. If the binding refers to an explicit value set - the normal case - then use a Reference(ValueSet) preferably containing the canonical URL for the value set. If the reference is to an implicit value set - usually, an IETF RFC that defines a grammar, such as mime types - then use a uri.
}

/*
 * Captures constraints on each element within the resource, profile, or extension.
 */
message ElementDefinition_Mapping {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string identity = 5;                                              // An internal reference to the definition of a mapping.
    Element identityExtensionElement = 6;                             // Extensions for identity
    string language = 7;                                              // Identifies the computable language in which mapping.map is expressed.
    Element languageExtensionElement = 8;                             // Extensions for language
    string map = 9;                                                   // Expresses what part of the target specification corresponds to this element.
    Element mapExtensionElement = 10;                                 // Extensions for map
    string comment = 11;                                              // Comments that provide information about the mapping or its use.
    Element commentExtensionElement = 12;                             // Extensions for comment
}

/*
 * Specifies contact information for a person or organization.
 */
message ContactDetail {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string name = 4;                                                  // The name of an individual to contact.
    Element nameExtensionElement = 5;                                 // Extensions for name
    repeated ContactPoint telecom = 6;                                // The contact details for the individual (if a name was provided) or the organization.
}

enum Contributor_type {
    Contributor_type_editor = 0;
    Contributor_type_author = 1;
    Contributor_type_endorser = 2;
    Contributor_type_reviewer = 3;
}


/*
 * A contributor to the content of a knowledge asset, including authors, editors, reviewers, and endorsers.
 */
message Contributor {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Contributor_type type = 4;                                        // The type of contributor.
    Element typeExtensionElement = 5;                                 // Extensions for type
    string name = 6;                                                  // The name of the individual or organization responsible for the contribution.
    Element nameExtensionElement = 7;                                 // Extensions for name
    repeated ContactDetail contact = 8;                               // Contact details to assist a user in finding and communicating with the contributor.
}

/*
 * Indicates how the medication is/was taken or should be taken by the patient.
 */
message Dosage {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    int64 sequence = 4;                                               // Indicates the order in which the dosage instructions should be applied or interpreted.
    Element sequenceExtensionElement = 5;                             // Extensions for sequence
    string text = 6;                                                  // Free text dosage instructions e.g. SIG.
    Element textExtensionElement = 7;                                 // Extensions for text
    repeated CodeableConcept additionalInstruction = 8;               // Supplemental instruction - e.g. "with meals".
    string patientInstruction = 9;                                    // Instructions in terms that are understood by the patient or consumer.
    Element patientInstructionExtensionElement = 10;                  // Extensions for patientInstruction
    Timing timing = 11;                                               // When medication should be administered.
    bool asNeededBoolean = 12;                                        // Indicates whether the Medication is only taken when needed within a specific dosing schedule (Boolean option), or it indicates the precondition for taking the Medication (CodeableConcept).
    Element asNeededBooleanExtensionElement = 13;                     // Extensions for asNeededBoolean
    CodeableConcept asNeededCodeableConcept = 14;                     // Indicates whether the Medication is only taken when needed within a specific dosing schedule (Boolean option), or it indicates the precondition for taking the Medication (CodeableConcept).
    CodeableConcept site = 15;                                        // Body site to administer to.
    CodeableConcept route = 16;                                       // How drug should enter body.
    CodeableConcept method = 17;                                      // Technique for administering medication.
    Range doseRange = 18;                                             // Amount of medication per dose.
    Quantity doseSimpleQuantity = 19;                                 // Amount of medication per dose.
    Ratio maxDosePerPeriod = 20;                                      // Upper limit on medication per unit of time.
    Quantity maxDosePerAdministration = 21;                           // Upper limit on medication per administration.
    Quantity maxDosePerLifetime = 22;                                 // Upper limit on medication per lifetime of the patient.
    Ratio rateRatio = 23;                                             // Amount of medication per unit of time.
    Range rateRange = 24;                                             // Amount of medication per unit of time.
    Quantity rateSimpleQuantity = 25;                                 // Amount of medication per unit of time.
}

enum RelatedArtifact_type {
    RelatedArtifact_type_depends_on = 0;
    RelatedArtifact_type_successor = 1;
    RelatedArtifact_type_citation = 2;
    RelatedArtifact_type_documentation = 3;
    RelatedArtifact_type_derived_from = 4;
    RelatedArtifact_type_justification = 5;
    RelatedArtifact_type_predecessor = 6;
    RelatedArtifact_type_composed_of = 7;
}


/*
 * Related artifacts such as additional documentation, justification, or bibliographic references.
 */
message RelatedArtifact {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    RelatedArtifact_type type = 4;                                    // The type of relationship to the related artifact.
    Element typeExtensionElement = 5;                                 // Extensions for type
    string display = 6;                                               // A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.
    Element displayExtensionElement = 7;                              // Extensions for display
    string citation = 8;                                              // A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.
    Element citationExtensionElement = 9;                             // Extensions for citation
    string url = 10;                                                  // A url for the artifact that can be followed to access the actual content.
    Element urlExtensionElement = 11;                                 // Extensions for url
    Attachment document = 12;                                         // The document being referenced, represented as an attachment. This is exclusive with the resource element.
    Reference resource = 13;                                          // The related resource, such as a library, value set, profile, or other knowledge resource.
}

/*
 * Specifies clinical/business/etc metadata that can be used to retrieve, index and/or categorize an artifact. This metadata can either be specific to the applicable population (e.g., age category, DRG) or the specific context of care (e.g., venue, care setting, provider of care).
 */
message UsageContext {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Coding code = 4;                                                  // A code that identifies the type of context being specified by this usage context.
    CodeableConcept valueCodeableConcept = 5;                         // A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
    Quantity valueQuantity = 6;                                       // A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
    Range valueRange = 7;                                             // A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
}

/*
 * Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.
 */
message DataRequirement {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string type = 4;                                                  // The type of the required data, specified as the type name of a resource. For profiles, this value is set to the type of the base resource of the profile.
    Element typeExtensionElement = 5;                                 // Extensions for type
    repeated string profile = 6;                                      // The profile of the required data, specified as the uri of the profile definition.
    repeated Element profileExtensionElement = 7;                     // Extensions for profile
    repeated string mustSupport = 8;                                  // Indicates that specific elements of the type are referenced by the knowledge module and must be supported by the consumer in order to obtain an effective evaluation. This does not mean that a value is required for this element, only that the consuming system must understand the element and be able to provide values for it if they are available. Note that the value for this element can be a path to allow references to nested elements. In that case, all the elements along the path must be supported.
    repeated Element mustSupportExtensionElement = 9;                 // Extensions for mustSupport
    repeated DataRequirement_CodeFilter codeFilter = 10;              // Code filters specify additional constraints on the data, specifying the value set of interest for a particular element of the data.
    repeated DataRequirement_DateFilter dateFilter = 11;              // Date filters specify additional constraints on the data in terms of the applicable date range for specific elements.
}

/*
 * Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.
 */
message DataRequirement_CodeFilter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string path = 5;                                                  // The code-valued attribute of the filter. The specified path must be resolvable from the type of the required data. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements. Note that the index must be an integer constant. The path must resolve to an element of type code, Coding, or CodeableConcept.
    Element pathExtensionElement = 6;                                 // Extensions for path
    string valueSetString = 7;                                        // The valueset for the code filter. The valueSet and value elements are exclusive. If valueSet is specified, the filter will return only those data items for which the value of the code-valued element specified in the path is a member of the specified valueset.
    Element valueSetStringExtensionElement = 8;                       // Extensions for valueSetString
    Reference valueSetReference = 9;                                  // The valueset for the code filter. The valueSet and value elements are exclusive. If valueSet is specified, the filter will return only those data items for which the value of the code-valued element specified in the path is a member of the specified valueset.
    repeated string valueCode = 10;                                   // The codes for the code filter. Only one of valueSet, valueCode, valueCoding, or valueCodeableConcept may be specified. If values are given, the filter will return only those data items for which the code-valued attribute specified by the path has a value that is one of the specified codes.
    repeated Element valueCodeExtensionElement = 11;                  // Extensions for valueCode
    repeated Coding valueCoding = 12;                                 // The Codings for the code filter. Only one of valueSet, valueCode, valueConding, or valueCodeableConcept may be specified. If values are given, the filter will return only those data items for which the code-valued attribute specified by the path has a value that is one of the specified Codings.
    repeated CodeableConcept valueCodeableConcept = 13;               // The CodeableConcepts for the code filter. Only one of valueSet, valueCode, valueConding, or valueCodeableConcept may be specified. If values are given, the filter will return only those data items for which the code-valued attribute specified by the path has a value that is one of the specified CodeableConcepts.
}

/*
 * Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.
 */
message DataRequirement_DateFilter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string path = 5;                                                  // The date-valued attribute of the filter. The specified path must be resolvable from the type of the required data. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements. Note that the index must be an integer constant. The path must resolve to an element of type dateTime, Period, Schedule, or Timing.
    Element pathExtensionElement = 6;                                 // Extensions for path
    string valueDateTime = 7;                                         // The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration from now.
    Element valueDateTimeExtensionElement = 8;                        // Extensions for valueDateTime
    Period valuePeriod = 9;                                           // The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration from now.
    Duration valueDuration = 10;                                      // The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration from now.
}

/*
 * The parameters to the module. This collection specifies both the input and output parameters. Input parameters are provided by the caller as part of the $evaluate operation. Output parameters are included in the GuidanceResponse.
 */
message ParameterDefinition {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    string name = 4;                                                  // The name of the parameter used to allow access to the value of the parameter in evaluation contexts.
    Element nameExtensionElement = 5;                                 // Extensions for name
    string use = 6;                                                   // Whether the parameter is input or output for the module.
    Element useExtensionElement = 7;                                  // Extensions for use
    int64 min = 8;                                                    // The minimum number of times this parameter SHALL appear in the request or response.
    Element minExtensionElement = 9;                                  // Extensions for min
    string max = 10;                                                  // The maximum number of times this element is permitted to appear in the request or response.
    Element maxExtensionElement = 11;                                 // Extensions for max
    string documentation = 12;                                        // A brief discussion of what the parameter is for and how it is used by the module.
    Element documentationExtensionElement = 13;                       // Extensions for documentation
    string type = 14;                                                 // The type of the parameter.
    Element typeExtensionElement = 15;                                // Extensions for type
    Reference profile = 16;                                           // If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.
}

enum TriggerDefinition_type {
    TriggerDefinition_type_data_access_ended = 0;
    TriggerDefinition_type_named_event = 1;
    TriggerDefinition_type_periodic = 2;
    TriggerDefinition_type_data_modified = 3;
    TriggerDefinition_type_data_removed = 4;
    TriggerDefinition_type_data_accessed = 5;
    TriggerDefinition_type_data_added = 6;
}


/*
 * A description of a triggering event.
 */
message TriggerDefinition {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    TriggerDefinition_type type = 4;                                  // The type of triggering event.
    Element typeExtensionElement = 5;                                 // Extensions for type
    string eventName = 6;                                             // The name of the event (if this is a named-event trigger).
    Element eventNameExtensionElement = 7;                            // Extensions for eventName
    Timing eventTimingTiming = 8;                                     // The timing of the event (if this is a period trigger).
    Reference eventTimingReference = 9;                               // The timing of the event (if this is a period trigger).
    string eventTimingDate = 10;                                      // The timing of the event (if this is a period trigger).
    Element eventTimingDateExtensionElement = 11;                     // Extensions for eventTimingDate
    string eventTimingDateTime = 12;                                  // The timing of the event (if this is a period trigger).
    Element eventTimingDateTimeExtensionElement = 13;                 // Extensions for eventTimingDateTime
    DataRequirement eventData = 14;                                   // The triggering data of the event (if this is a data trigger).
}

enum Account_status {
    Account_status_inactive = 0;
    Account_status_active = 1;
    Account_status_entered_in_error = 2;
}


/*
 * A financial tool for tracking value accrued for a particular purpose.  In the healthcare field, used to track charges for a patient, cost centers, etc.
 */
message Account {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Unique identifier used to reference the account.  May or may not be intended for human use (e.g. credit card number).
    Account_status status = 13;                                       // Indicates whether the account is presently used/usable or not.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept type = 15;                                        // Categorizes the account for reporting and searching purposes.
    string name = 16;                                                 // Name used for the account when displaying it to humans in reports, etc.
    Element nameExtensionElement = 17;                                // Extensions for name
    Reference subject = 18;                                           // Identifies the patient, device, practitioner, location or other object the account is associated with.
    Period period = 19;                                               // Identifies the period of time the account applies to; e.g. accounts created per fiscal year, quarter, etc.
    Period active = 20;                                               // Indicates the period of time over which the account is allowed to have transactions posted to it. This period may be different to the coveragePeriod which is the duration of time that services may occur.
    Money balance = 21;                                               // Represents the sum of all credits less all debits associated with the account.  Might be positive, zero or negative.
    repeated Account_Coverage coverage = 22;                          // The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account.
    Reference owner = 23;                                             // Indicates the organization, department, etc. with responsibility for the account.
    string description = 24;                                          // Provides additional information about what the account tracks and how it is used.
    Element descriptionExtensionElement = 25;                         // Extensions for description
    repeated Account_Guarantor guarantor = 26;                        // Parties financially responsible for the account.
}

/*
 * A financial tool for tracking value accrued for a particular purpose.  In the healthcare field, used to track charges for a patient, cost centers, etc.
 */
message Account_Coverage {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference coverage = 5;                                           // The party(s) that are responsible for payment (or part of) of charges applied to this account (including self-pay).  A coverage may only be resposible for specific types of charges, and the sequence of the coverages in the account could be important when processing billing.
    int64 priority = 6;                                               // The priority of the coverage in the context of this account.
    Element priorityExtensionElement = 7;                             // Extensions for priority
}

/*
 * A financial tool for tracking value accrued for a particular purpose.  In the healthcare field, used to track charges for a patient, cost centers, etc.
 */
message Account_Guarantor {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference party = 5;                                              // The entity who is responsible.
    bool onHold = 6;                                                  // A guarantor may be placed on credit hold or otherwise have their role temporarily suspended.
    Element onHoldExtensionElement = 7;                               // Extensions for onHold
    Period period = 8;                                                // The timeframe during which the guarantor accepts responsibility for the account.
}

enum ActivityDefinition_status {
    ActivityDefinition_status_draft = 0;
    ActivityDefinition_status_active = 1;
    ActivityDefinition_status_retired = 2;
    ActivityDefinition_status_unknown = 3;
}


/*
 * This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.
 */
message ActivityDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this activity definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this activity definition is (or will be) published. The URL SHOULD include the major version of the activity definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this activity definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the activity definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the activity definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the activity definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the activity definition.
    Element titleExtensionElement = 20;                               // Extensions for title
    ActivityDefinition_status status = 21;                            // The status of this activity definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this activity definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the activity definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the activity definition changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the activity definition.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    string description = 29;                                          // A free text natural language description of the activity definition from a consumer's perspective.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    string purpose = 31;                                              // Explaination of why this activity definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 32;                             // Extensions for purpose
    string usage = 33;                                                // A detailed description of how the asset is used from a clinical perspective.
    Element usageExtensionElement = 34;                               // Extensions for usage
    string approvalDate = 35;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 36;                        // Extensions for approvalDate
    string lastReviewDate = 37;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 38;                      // Extensions for lastReviewDate
    Period effectivePeriod = 39;                                      // The period during which the activity definition content was or is planned to be in active use.
    repeated UsageContext useContext = 40;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate activity definition instances.
    repeated CodeableConcept jurisdiction = 41;                       // A legal or geographic region in which the activity definition is intended to be used.
    repeated CodeableConcept topic = 42;                              // Descriptive topics related to the content of the activity. Topics provide a high-level categorization of the activity that can be useful for filtering and searching.
    repeated Contributor contributor = 43;                            // A contributor to the content of the asset, including authors, editors, reviewers, and endorsers.
    repeated ContactDetail contact = 44;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 45;                                            // A copyright statement relating to the activity definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the activity definition.
    Element copyrightExtensionElement = 46;                           // Extensions for copyright
    repeated RelatedArtifact relatedArtifact = 47;                    // Related artifacts such as additional documentation, justification, or bibliographic references.
    repeated Reference library = 48;                                  // A reference to a Library resource containing any formal logic used by the asset.
    string kind = 49;                                                 // A description of the kind of resource the activity definition is representing. For example, a MedicationRequest, a ProcedureRequest, or a CommunicationRequest. Typically, but not always, this is a Request resource.
    Element kindExtensionElement = 50;                                // Extensions for kind
    CodeableConcept code = 51;                                        // Detailed description of the type of activity; e.g. What lab test, what procedure, what kind of encounter.
    Timing timingTiming = 52;                                         // The period, timing or frequency upon which the described activity is to occur.
    string timingDateTime = 53;                                       // The period, timing or frequency upon which the described activity is to occur.
    Element timingDateTimeExtensionElement = 54;                      // Extensions for timingDateTime
    Period timingPeriod = 55;                                         // The period, timing or frequency upon which the described activity is to occur.
    Range timingRange = 56;                                           // The period, timing or frequency upon which the described activity is to occur.
    Reference location = 57;                                          // Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.
    repeated ActivityDefinition_Participant participant = 58;         // Indicates who should participate in performing the action described.
    Reference productReference = 59;                                  // Identifies the food, drug or other product being consumed or supplied in the activity.
    CodeableConcept productCodeableConcept = 60;                      // Identifies the food, drug or other product being consumed or supplied in the activity.
    Quantity quantity = 61;                                           // Identifies the quantity expected to be consumed at once (per dose, per meal, etc.).
    repeated Dosage dosage = 62;                                      // Provides detailed dosage instructions in the same way that they are described for MedicationRequest resources.
    repeated CodeableConcept bodySite = 63;                           // Indicates the sites on the subject's body where the procedure should be performed (I.e. the target sites).
    Reference transform = 64;                                         // A reference to a StructureMap resource that defines a transform that can be executed to produce the intent resource using the ActivityDefinition instance as the input.
    repeated ActivityDefinition_DynamicValue dynamicValue = 65;       // Dynamic values that will be evaluated to produce values for elements of the resulting resource. For example, if the dosage of a medication must be computed based on the patient's weight, a dynamic value would be used to specify an expression that calculated the weight, and the path on the intent resource that would contain the result.
}

/*
 * This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.
 */
message ActivityDefinition_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // The type of participant in the action.
    Element typeExtensionElement = 6;                                 // Extensions for type
    CodeableConcept role = 7;                                         // The role the participant should play in performing the described action.
}

/*
 * This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.
 */
message ActivityDefinition_DynamicValue {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // A brief, natural language description of the intended semantics of the dynamic value.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    string path = 7;                                                  // The path to the element to be customized. This is the path on the resource that will hold the result of the calculation defined by the expression.
    Element pathExtensionElement = 8;                                 // Extensions for path
    string language = 9;                                              // The media type of the language for the expression.
    Element languageExtensionElement = 10;                            // Extensions for language
    string expression = 11;                                           // An expression specifying the value of the customized element.
    Element expressionExtensionElement = 12;                          // Extensions for expression
}

enum AdverseEvent_category {
    AdverseEvent_category_AE = 0;
    AdverseEvent_category_PAE = 1;
}


/*
 * Actual or  potential/avoided event causing unintended physical injury resulting from or contributed to by medical care, a research study or other healthcare setting factors that requires additional monitoring, treatment, or hospitalization, or that results in death.
 */
message AdverseEvent {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // The identifier(s) of this adverse event that are assigned by business processes and/or used to refer to it when a direct URL reference to the resource itsefl is not appropriate.
    AdverseEvent_category category = 13;                              // The type of event which is important to characterize what occurred and caused harm to the subject, or had the potential to cause harm to the subject.
    Element categoryExtensionElement = 14;                            // Extensions for category
    CodeableConcept type = 15;                                        // This element defines the specific type of event that occurred or that was prevented from occurring.
    Reference subject = 16;                                           // This subject or group impacted by the event.  With a prospective adverse event, there will be no subject as the adverse event was prevented.
    string date = 17;                                                 // The date (and perhaps time) when the adverse event occurred.
    Element dateExtensionElement = 18;                                // Extensions for date
    repeated Reference reaction = 19;                                 // Includes information about the reaction that occurred as a result of exposure to a substance (for example, a drug or a chemical).
    Reference location = 20;                                          // The information about where the adverse event occurred.
    CodeableConcept seriousness = 21;                                 // Describes the seriousness or severity of the adverse event.
    CodeableConcept outcome = 22;                                     // Describes the type of outcome from the adverse event.
    Reference recorder = 23;                                          // Information on who recorded the adverse event.  May be the patient or a practitioner.
    Reference eventParticipant = 24;                                  // Parties that may or should contribute or have contributed information to the Act. Such information includes information leading to the decision to perform the Act and how to perform the Act (e.g. consultant), information that the Act itself seeks to reveal (e.g. informant of clinical history), or information about what Act was performed (e.g. informant witness).
    string description = 25;                                          // Describes the adverse event in text.
    Element descriptionExtensionElement = 26;                         // Extensions for description
    repeated AdverseEvent_SuspectEntity suspectEntity = 27;           // Describes the entity that is suspected to have caused the adverse event.
    repeated Reference subjectMedicalHistory = 28;                    // AdverseEvent.subjectMedicalHistory.
    repeated Reference referenceDocument = 29;                        // AdverseEvent.referenceDocument.
    repeated Reference study = 30;                                    // AdverseEvent.study.
}

enum AdverseEvent_SuspectEntity_causality {
    AdverseEvent_SuspectEntity_causality_causality1 = 0;
    AdverseEvent_SuspectEntity_causality_causality2 = 1;
}


/*
 * Actual or  potential/avoided event causing unintended physical injury resulting from or contributed to by medical care, a research study or other healthcare setting factors that requires additional monitoring, treatment, or hospitalization, or that results in death.
 */
message AdverseEvent_SuspectEntity {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference instance = 5;                                           // Identifies the actual instance of what caused the adverse event.  May be a substance, medication, medication administration, medication statement or a device.
    AdverseEvent_SuspectEntity_causality causality = 6;               // causality1 | causality2.
    Element causalityExtensionElement = 7;                            // Extensions for causality
    CodeableConcept causalityAssessment = 8;                          // assess1 | assess2.
    string causalityProductRelatedness = 9;                           // AdverseEvent.suspectEntity.causalityProductRelatedness.
    Element causalityProductRelatednessExtensionElement = 10;         // Extensions for causalityProductRelatedness
    CodeableConcept causalityMethod = 11;                             // method1 | method2.
    Reference causalityAuthor = 12;                                   // AdverseEvent.suspectEntity.causalityAuthor.
    CodeableConcept causalityResult = 13;                             // result1 | result2.
}

enum AllergyIntolerance_clinicalStatus {
    AllergyIntolerance_clinicalStatus_inactive = 0;
    AllergyIntolerance_clinicalStatus_active = 1;
    AllergyIntolerance_clinicalStatus_resolved = 2;
}

enum AllergyIntolerance_verificationStatus {
    AllergyIntolerance_verificationStatus_unconfirmed = 0;
    AllergyIntolerance_verificationStatus_refuted = 1;
    AllergyIntolerance_verificationStatus_entered_in_error = 2;
    AllergyIntolerance_verificationStatus_confirmed = 3;
}

enum AllergyIntolerance_type {
    AllergyIntolerance_type_intolerance = 0;
    AllergyIntolerance_type_allergy = 1;
}

enum AllergyIntolerance_criticality {
    AllergyIntolerance_criticality_high = 0;
    AllergyIntolerance_criticality_low = 1;
    AllergyIntolerance_criticality_unable_to_assess = 2;
}


/*
 * Risk of harmful or undesirable, physiological response which is unique to an individual and associated with exposure to a substance.
 */
message AllergyIntolerance {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this allergy/intolerance concern that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    AllergyIntolerance_clinicalStatus clinicalStatus = 13;            // The clinical status of the allergy or intolerance.
    Element clinicalStatusExtensionElement = 14;                      // Extensions for clinicalStatus
    AllergyIntolerance_verificationStatus verificationStatus = 15;    // Assertion about certainty associated with the propensity, or potential risk, of a reaction to the identified substance (including pharmaceutical product).
    Element verificationStatusExtensionElement = 16;                  // Extensions for verificationStatus
    AllergyIntolerance_type type = 17;                                // Identification of the underlying physiological mechanism for the reaction risk.
    Element typeExtensionElement = 18;                                // Extensions for type
    repeated string category = 19;                                    // Category of the identified substance.
    repeated Element categoryExtensionElement = 20;                   // Extensions for category
    AllergyIntolerance_criticality criticality = 21;                  // Estimate of the potential clinical harm, or seriousness, of the reaction to the identified substance.
    Element criticalityExtensionElement = 22;                         // Extensions for criticality
    CodeableConcept code = 23;                                        // Code for an allergy or intolerance statement (either a positive or a negated/excluded statement).  This may be a code for a substance or pharmaceutical product that is considered to be responsible for the adverse reaction risk (e.g., "Latex"), an allergy or intolerance condition (e.g., "Latex allergy"), or a negated/excluded code for a specific substance or class (e.g., "No latex allergy") or a general or categorical negated statement (e.g.,  "No known allergy", "No known drug allergies").
    Reference patient = 24;                                           // The patient who has the allergy or intolerance.
    string onsetDateTime = 25;                                        // Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
    Element onsetDateTimeExtensionElement = 26;                       // Extensions for onsetDateTime
    Age onsetAge = 27;                                                // Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
    Period onsetPeriod = 28;                                          // Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
    Range onsetRange = 29;                                            // Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
    string onsetString = 30;                                          // Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
    Element onsetStringExtensionElement = 31;                         // Extensions for onsetString
    string assertedDate = 32;                                         // The date on which the existance of the AllergyIntolerance was first asserted or acknowledged.
    Element assertedDateExtensionElement = 33;                        // Extensions for assertedDate
    Reference recorder = 34;                                          // Individual who recorded the record and takes responsibility for its content.
    Reference asserter = 35;                                          // The source of the information about the allergy that is recorded.
    string lastOccurrence = 36;                                       // Represents the date and/or time of the last known occurrence of a reaction event.
    Element lastOccurrenceExtensionElement = 37;                      // Extensions for lastOccurrence
    repeated Annotation note = 38;                                    // Additional narrative about the propensity for the Adverse Reaction, not captured in other fields.
    repeated AllergyIntolerance_Reaction reaction = 39;               // Details about each adverse reaction event linked to exposure to the identified substance.
}

enum AllergyIntolerance_Reaction_severity {
    AllergyIntolerance_Reaction_severity_mild = 0;
    AllergyIntolerance_Reaction_severity_severe = 1;
    AllergyIntolerance_Reaction_severity_moderate = 2;
}


/*
 * Risk of harmful or undesirable, physiological response which is unique to an individual and associated with exposure to a substance.
 */
message AllergyIntolerance_Reaction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept substance = 5;                                    // Identification of the specific substance (or pharmaceutical product) considered to be responsible for the Adverse Reaction event. Note: the substance for a specific reaction may be different from the substance identified as the cause of the risk, but it must be consistent with it. For instance, it may be a more specific substance (e.g. a brand medication) or a composite product that includes the identified substance. It must be clinically safe to only process the 'code' and ignore the 'reaction.substance'.
    repeated CodeableConcept manifestation = 6;                       // Clinical symptoms and/or signs that are observed or associated with the adverse reaction event.
    string description = 7;                                           // Text description about the reaction as a whole, including details of the manifestation if required.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    string onset = 9;                                                 // Record of the date and/or time of the onset of the Reaction.
    Element onsetExtensionElement = 10;                               // Extensions for onset
    AllergyIntolerance_Reaction_severity severity = 11;               // Clinical assessment of the severity of the reaction event as a whole, potentially considering multiple different manifestations.
    Element severityExtensionElement = 12;                            // Extensions for severity
    CodeableConcept exposureRoute = 13;                               // Identification of the route by which the subject was exposed to the substance.
    repeated Annotation note = 14;                                    // Additional text about the adverse reaction event not captured in other fields.
}

enum Appointment_status {
    Appointment_status_arrived = 0;
    Appointment_status_booked = 1;
    Appointment_status_proposed = 2;
    Appointment_status_pending = 3;
    Appointment_status_fulfilled = 4;
    Appointment_status_cancelled = 5;
    Appointment_status_noshow = 6;
    Appointment_status_entered_in_error = 7;
}


/*
 * A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).
 */
message Appointment {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this appointment concern that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    Appointment_status status = 13;                                   // The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept serviceCategory = 15;                             // A broad categorisation of the service that is to be performed during this appointment.
    repeated CodeableConcept serviceType = 16;                        // The specific service that is to be performed during this appointment.
    repeated CodeableConcept specialty = 17;                          // The specialty of a practitioner that would be required to perform the service requested in this appointment.
    CodeableConcept appointmentType = 18;                             // The style of appointment or patient that has been booked in the slot (not service type).
    repeated CodeableConcept reason = 19;                             // The reason that this appointment is being scheduled. This is more clinical than administrative.
    repeated Reference indication = 20;                               // Reason the appointment has been scheduled to take place, as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.
    int64 priority = 21;                                              // The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).
    Element priorityExtensionElement = 22;                            // Extensions for priority
    string description = 23;                                          // The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the comment field.
    Element descriptionExtensionElement = 24;                         // Extensions for description
    repeated Reference supportingInformation = 25;                    // Additional information to support the appointment provided when making the appointment.
    string start = 26;                                                // Date/Time that the appointment is to take place.
    Element startExtensionElement = 27;                               // Extensions for start
    string end = 28;                                                  // Date/Time that the appointment is to conclude.
    Element endExtensionElement = 29;                                 // Extensions for end
    int64 minutesDuration = 30;                                       // Number of minutes that the appointment is to take. This can be less than the duration between the start and end times (where actual time of appointment is only an estimate or is a planned appointment request).
    Element minutesDurationExtensionElement = 31;                     // Extensions for minutesDuration
    repeated Reference slot = 32;                                     // The slots from the participants' schedules that will be filled by the appointment.
    string created = 33;                                              // The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.
    Element createdExtensionElement = 34;                             // Extensions for created
    string comment = 35;                                              // Additional comments about the appointment.
    Element commentExtensionElement = 36;                             // Extensions for comment
    repeated Reference incomingReferral = 37;                         // The referral request this appointment is allocated to assess (incoming referral).
    repeated Appointment_Participant participant = 38;                // List of participants involved in the appointment.
    repeated Period requestedPeriod = 39;                             // A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time.
}

enum Appointment_Participant_required {
    Appointment_Participant_required_information_only = 0;
    Appointment_Participant_required_optional = 1;
    Appointment_Participant_required_required = 2;
}

enum Appointment_Participant_status {
    Appointment_Participant_status_declined = 0;
    Appointment_Participant_status_needs_action = 1;
    Appointment_Participant_status_accepted = 2;
    Appointment_Participant_status_tentative = 3;
}


/*
 * A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).
 */
message Appointment_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept type = 5;                                // Role of participant in the appointment.
    Reference actor = 6;                                              // A Person, Location/HealthcareService or Device that is participating in the appointment.
    Appointment_Participant_required required = 7;                    // Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
    Element requiredExtensionElement = 8;                             // Extensions for required
    Appointment_Participant_status status = 9;                        // Participation status of the actor.
    Element statusExtensionElement = 10;                              // Extensions for status
}

/*
 * A reply to an appointment request for a patient and/or practitioner(s), such as a confirmation or rejection.
 */
message AppointmentResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this appointment response concern that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate.
    Reference appointment = 13;                                       // Appointment that this response is replying to.
    string start = 14;                                                // Date/Time that the appointment is to take place, or requested new start time.
    Element startExtensionElement = 15;                               // Extensions for start
    string end = 16;                                                  // This may be either the same as the appointment request to confirm the details of the appointment, or alternately a new time to request a re-negotiation of the end time.
    Element endExtensionElement = 17;                                 // Extensions for end
    repeated CodeableConcept participantType = 18;                    // Role of participant in the appointment.
    Reference actor = 19;                                             // A Person, Location/HealthcareService or Device that is participating in the appointment.
    string participantStatus = 20;                                    // Participation status of the participant. When the status is declined or tentative if the start/end times are different to the appointment, then these times should be interpreted as a requested time change. When the status is accepted, the times can either be the time of the appointment (as a confirmation of the time) or can be empty.
    Element participantStatusExtensionElement = 21;                   // Extensions for participantStatus
    string comment = 22;                                              // Additional comments about the appointment.
    Element commentExtensionElement = 23;                             // Extensions for comment
}

enum AuditEvent_action {
    AuditEvent_action_R = 0;
    AuditEvent_action_C = 1;
    AuditEvent_action_D = 2;
    AuditEvent_action_U = 3;
    AuditEvent_action_E = 4;
}

enum AuditEvent_outcome {
    AuditEvent_outcome_N_0 = 0;
    AuditEvent_outcome_N_12 = 1;
    AuditEvent_outcome_N_4 = 2;
    AuditEvent_outcome_N_8 = 3;
}


/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Coding type = 12;                                                 // Identifier for a family of the event.  For example, a menu item, program, rule, policy, function code, application name or URL. It identifies the performed function.
    repeated Coding subtype = 13;                                     // Identifier for the category of event.
    AuditEvent_action action = 14;                                    // Indicator for type of action performed during the event that generated the audit.
    Element actionExtensionElement = 15;                              // Extensions for action
    string recorded = 16;                                             // The time when the event occurred on the source.
    Element recordedExtensionElement = 17;                            // Extensions for recorded
    AuditEvent_outcome outcome = 18;                                  // Indicates whether the event succeeded or failed.
    Element outcomeExtensionElement = 19;                             // Extensions for outcome
    string outcomeDesc = 20;                                          // A free text description of the outcome of the event.
    Element outcomeDescExtensionElement = 21;                         // Extensions for outcomeDesc
    repeated CodeableConcept purposeOfEvent = 22;                     // The purposeOfUse (reason) that was used during the event being recorded.
    repeated AuditEvent_Agent agent = 23;                             // An actor taking an active role in the event or activity that is logged.
    AuditEvent_Source source = 24;                                    // The system that is reporting the event.
    repeated AuditEvent_Entity entity = 25;                           // Specific instances of data or objects that have been accessed.
}

/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent_Agent {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept role = 5;                                // The security role that the user was acting under, that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local context.
    Reference reference = 6;                                          // Direct reference to a resource that identifies the agent.
    Identifier userId = 7;                                            // Unique identifier for the user actively participating in the event.
    string altId = 8;                                                 // Alternative agent Identifier. For a human, this should be a user identifier text string from authentication system. This identifier would be one known to a common authentication system (e.g. single sign-on), if available.
    Element altIdExtensionElement = 9;                                // Extensions for altId
    string name = 10;                                                 // Human-meaningful name for the agent.
    Element nameExtensionElement = 11;                                // Extensions for name
    bool requestor = 12;                                              // Indicator that the user is or is not the requestor, or initiator, for the event being audited.
    Element requestorExtensionElement = 13;                           // Extensions for requestor
    Reference location = 14;                                          // Where the event occurred.
    repeated string policy = 15;                                      // The policy or plan that authorized the activity being recorded. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.
    repeated Element policyExtensionElement = 16;                     // Extensions for policy
    Coding media = 17;                                                // Type of media involved. Used when the event is about exporting/importing onto media.
    AuditEvent_Network network = 18;                                  // Logical network location for application activity, if the activity has a network location.
    repeated CodeableConcept purposeOfUse = 19;                       // The reason (purpose of use), specific to this agent, that was used during the event being recorded.
}

enum AuditEvent_Network_type {
    AuditEvent_Network_type_N_1 = 0;
    AuditEvent_Network_type_N_2 = 1;
    AuditEvent_Network_type_N_3 = 2;
    AuditEvent_Network_type_N_4 = 3;
    AuditEvent_Network_type_N_5 = 4;
}


/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent_Network {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string address = 5;                                               // An identifier for the network access point of the user device for the audit event.
    Element addressExtensionElement = 6;                              // Extensions for address
    AuditEvent_Network_type type = 7;                                 // An identifier for the type of network access point that originated the audit event.
    Element typeExtensionElement = 8;                                 // Extensions for type
}

/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent_Source {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string site = 5;                                                  // Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.
    Element siteExtensionElement = 6;                                 // Extensions for site
    Identifier identifier = 7;                                        // Identifier of the source where the event was detected.
    repeated Coding type = 8;                                         // Code specifying the type of source where event originated.
}

/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent_Entity {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // Identifies a specific instance of the entity. The reference should always be version specific.
    Reference reference = 6;                                          // Identifies a specific instance of the entity. The reference should be version specific.
    Coding type = 7;                                                  // The type of the object that was involved in this audit event.
    Coding role = 8;                                                  // Code representing the role the entity played in the event being audited.
    Coding lifecycle = 9;                                             // Identifier for the data life-cycle stage for the entity.
    repeated Coding securityLabel = 10;                               // Security labels for the identified entity.
    string name = 11;                                                 // A name of the entity in the audit event.
    Element nameExtensionElement = 12;                                // Extensions for name
    string description = 13;                                          // Text that describes the entity in more detail.
    Element descriptionExtensionElement = 14;                         // Extensions for description
    string query = 15;                                                // The query parameters for a query-type entities.
    Element queryExtensionElement = 16;                               // Extensions for query
    repeated AuditEvent_Detail detail = 17;                           // Tagged value pairs for conveying additional information about the entity.
}

/*
 * A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.
 */
message AuditEvent_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // The type of extra detail provided in the value.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string value = 7;                                                 // The details, base64 encoded. Used to carry bulk information.
    Element valueExtensionElement = 8;                                // Extensions for value
}

/*
 * Basic is used for handling concepts not yet defined in FHIR, narrative-only resources that don't map to an existing resource, and custom resources not appropriate for inclusion in the FHIR specification.
 */
message Basic {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier assigned to the resource for business purposes, outside the context of FHIR.
    CodeableConcept code = 13;                                        // Identifies the 'type' of resource - equivalent to the resource name for other resources.
    Reference subject = 14;                                           // Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.
    string created = 15;                                              // Identifies when the resource was first created.
    Element createdExtensionElement = 16;                             // Extensions for created
    Reference author = 17;                                            // Indicates who was responsible for creating the resource instance.
}

/*
 * A binary resource can contain any content, whether text, image, pdf, zip archive, etc.
 */
message Binary {
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    string contentType = 9;                                           // MimeType of the binary content represented as a standard MimeType (BCP 13).
    Element contentTypeExtensionElement = 10;                         // Extensions for contentType
    Reference securityContext = 11;                                   // Treat this binary as if it was this other resource for access control purposes.
    string content = 12;                                              // The actual content, base64 encoded.
    Element contentExtensionElement = 13;                             // Extensions for content
}

/*
 * Record details about the anatomical location of a specimen or body part.  This resource may be used when a coded concept does not provide the necessary detail needed for the use case.
 */
message BodySite {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for this instance of the anatomical location.
    bool active = 13;                                                 // Whether this body site is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    CodeableConcept code = 15;                                        // Named anatomical location - ideally coded where possible.
    repeated CodeableConcept qualifier = 16;                          // Qualifier to refine the anatomical location.  These include qualifiers for laterality, relative location, directionality, number, and plane.
    string description = 17;                                          // A summary, charactarization or explanation of the anatomic location.
    Element descriptionExtensionElement = 18;                         // Extensions for description
    repeated Attachment image = 19;                                   // Image or images used to identify a location.
    Reference patient = 20;                                           // The person to which the body site belongs.
}

enum Bundle_type {
    Bundle_type_batch_response = 0;
    Bundle_type_document = 1;
    Bundle_type_searchset = 2;
    Bundle_type_batch = 3;
    Bundle_type_transaction_response = 4;
    Bundle_type_history = 5;
    Bundle_type_collection = 6;
    Bundle_type_message = 7;
    Bundle_type_transaction = 8;
}


/*
 * A container for a collection of resources.
 */
message Bundle {
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Identifier identifier = 9;                                        // A persistent identifier for the batch that won't change as a batch is copied from server to server.
    Bundle_type type = 10;                                            // Indicates the purpose of this bundle - how it was intended to be used.
    Element typeExtensionElement = 11;                                // Extensions for type
    int64 total = 12;                                                 // If a set of search matches, this is the total number of matches for the search (as opposed to the number of results in this bundle).
    Element totalExtensionElement = 13;                               // Extensions for total
    repeated Bundle_Link link = 14;                                   // A series of links that provide context to this bundle.
    repeated Bundle_Entry entry = 15;                                 // An entry in a bundle resource - will either contain a resource, or information about a resource (transactions and history only).
    Signature signature = 16;                                         // Digital Signature - base64 encoded. XML-DSIg or a JWT.
}

/*
 * A container for a collection of resources.
 */
message Bundle_Link {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string relation = 5;                                              // A name which details the functional use for this link - see [http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1](http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1).
    Element relationExtensionElement = 6;                             // Extensions for relation
    string url = 7;                                                   // The reference details for the link.
    Element urlExtensionElement = 8;                                  // Extensions for url
}

/*
 * A container for a collection of resources.
 */
message Bundle_Entry {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated Bundle_Link link = 5;                                    // A series of links that provide context to this entry.
    string fullUrl = 6;                                               // The Absolute URL for the resource.  The fullUrl SHALL not disagree with the id in the resource. The fullUrl is a version independent reference to the resource. The fullUrl element SHALL have a value except that:  * fullUrl can be empty on a POST (although it does not need to when specifying a temporary id for reference in the bundle) * Results from operations might involve resources that are not identified.
    Element fullUrlExtensionElement = 7;                              // Extensions for fullUrl
    ResourceList resource = 8;                                        // The Resources for the entry.
    Bundle_Search search = 9;                                         // Information about the search process that lead to the creation of this entry.
    Bundle_Request request = 10;                                      // Additional information about how this entry should be processed as part of a transaction.
    Bundle_Response response = 11;                                    // Additional information about how this entry should be processed as part of a transaction.
}

enum Bundle_Search_mode {
    Bundle_Search_mode_include = 0;
    Bundle_Search_mode_match = 1;
    Bundle_Search_mode_outcome = 2;
}


/*
 * A container for a collection of resources.
 */
message Bundle_Search {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Bundle_Search_mode mode = 5;                                      // Why this entry is in the result set - whether it's included as a match or because of an _include requirement.
    Element modeExtensionElement = 6;                                 // Extensions for mode
    double score = 7;                                                 // When searching, the server's search ranking score for the entry.
    Element scoreExtensionElement = 8;                                // Extensions for score
}

enum Bundle_Request_method {
    Bundle_Request_method_DELETE = 0;
    Bundle_Request_method_POST = 1;
    Bundle_Request_method_GET = 2;
    Bundle_Request_method_PUT = 3;
}


/*
 * A container for a collection of resources.
 */
message Bundle_Request {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Bundle_Request_method method = 5;                                 // The HTTP verb for this entry in either a change history, or a transaction/ transaction response.
    Element methodExtensionElement = 6;                               // Extensions for method
    string url = 7;                                                   // The URL for this entry, relative to the root (the address to which the request is posted).
    Element urlExtensionElement = 8;                                  // Extensions for url
    string ifNoneMatch = 9;                                           // If the ETag values match, return a 304 Not Modified status. See the API documentation for ["Conditional Read"](http.html#cread).
    Element ifNoneMatchExtensionElement = 10;                         // Extensions for ifNoneMatch
    string ifModifiedSince = 11;                                      // Only perform the operation if the last updated date matches. See the API documentation for ["Conditional Read"](http.html#cread).
    Element ifModifiedSinceExtensionElement = 12;                     // Extensions for ifModifiedSince
    string ifMatch = 13;                                              // Only perform the operation if the Etag value matches. For more information, see the API section ["Managing Resource Contention"](http.html#concurrency).
    Element ifMatchExtensionElement = 14;                             // Extensions for ifMatch
    string ifNoneExist = 15;                                          // Instruct the server not to perform the create if a specified resource already exists. For further information, see the API documentation for ["Conditional Create"](http.html#ccreate). This is just the query portion of the URL - what follows the "?" (not including the "?").
    Element ifNoneExistExtensionElement = 16;                         // Extensions for ifNoneExist
}

/*
 * A container for a collection of resources.
 */
message Bundle_Response {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string status = 5;                                                // The status code returned by processing this entry. The status SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the standard HTTP description associated with the status code.
    Element statusExtensionElement = 6;                               // Extensions for status
    string location = 7;                                              // The location header created by processing this operation.
    Element locationExtensionElement = 8;                             // Extensions for location
    string etag = 9;                                                  // The etag for the resource, it the operation for the entry produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning) and [Managing Resource Contention](http.html#concurrency)).
    Element etagExtensionElement = 10;                                // Extensions for etag
    string lastModified = 11;                                         // The date/time that the resource was modified on the server.
    Element lastModifiedExtensionElement = 12;                        // Extensions for lastModified
    ResourceList outcome = 13;                                        // An OperationOutcome containing hints and warnings produced as part of processing this entry in a batch or transaction.
}

enum CapabilityStatement_status {
    CapabilityStatement_status_draft = 0;
    CapabilityStatement_status_active = 1;
    CapabilityStatement_status_retired = 2;
    CapabilityStatement_status_unknown = 3;
}

enum CapabilityStatement_kind {
    CapabilityStatement_kind_capability = 0;
    CapabilityStatement_kind_requirements = 1;
    CapabilityStatement_kind_instance = 2;
}

enum CapabilityStatement_acceptUnknown {
    CapabilityStatement_acceptUnknown_no = 0;
    CapabilityStatement_acceptUnknown_extensions = 1;
    CapabilityStatement_acceptUnknown_elements = 2;
    CapabilityStatement_acceptUnknown_both = 3;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this capability statement when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this capability statement is (or will be) published. The URL SHOULD include the major version of the capability statement. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string version = 14;                                              // The identifier that is used to identify this version of the capability statement when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the capability statement author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 15;                             // Extensions for version
    string name = 16;                                                 // A natural language name identifying the capability statement. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 17;                                // Extensions for name
    string title = 18;                                                // A short, descriptive, user-friendly title for the capability statement.
    Element titleExtensionElement = 19;                               // Extensions for title
    CapabilityStatement_status status = 20;                           // The status of this capability statement. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 21;                              // Extensions for status
    bool experimental = 22;                                           // A boolean value to indicate that this capability statement is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 23;                        // Extensions for experimental
    string date = 24;                                                 // The date  (and optionally time) when the capability statement was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the capability statement changes.
    Element dateExtensionElement = 25;                                // Extensions for date
    string publisher = 26;                                            // The name of the individual or organization that published the capability statement.
    Element publisherExtensionElement = 27;                           // Extensions for publisher
    repeated ContactDetail contact = 28;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 29;                                          // A free text natural language description of the capability statement from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    repeated UsageContext useContext = 31;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate capability statement instances.
    repeated CodeableConcept jurisdiction = 32;                       // A legal or geographic region in which the capability statement is intended to be used.
    string purpose = 33;                                              // Explaination of why this capability statement is needed and why it has been designed as it has.
    Element purposeExtensionElement = 34;                             // Extensions for purpose
    string copyright = 35;                                            // A copyright statement relating to the capability statement and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the capability statement.
    Element copyrightExtensionElement = 36;                           // Extensions for copyright
    CapabilityStatement_kind kind = 37;                               // The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind not instance of software) or a class of implementation (e.g. a desired purchase).
    Element kindExtensionElement = 38;                                // Extensions for kind
    repeated string instantiates = 39;                                // Reference to a canonical URL of another CapabilityStatement that this software implements or uses. This capability statement is a published API description that corresponds to a business service. The rest of the capability statement does not need to repeat the details of the referenced resource, but can do so.
    repeated Element instantiatesExtensionElement = 40;               // Extensions for instantiates
    CapabilityStatement_Software software = 41;                       // Software that is covered by this capability statement.  It is used when the capability statement describes the capabilities of a particular software version, independent of an installation.
    CapabilityStatement_Implementation implementation = 42;           // Identifies a specific implementation instance that is described by the capability statement - i.e. a particular installation, rather than the capabilities of a software program.
    string fhirVersion = 43;                                          // The version of the FHIR specification on which this capability statement is based.
    Element fhirVersionExtensionElement = 44;                         // Extensions for fhirVersion
    CapabilityStatement_acceptUnknown acceptUnknown = 45;             // A code that indicates whether the application accepts unknown elements or extensions when reading resources.
    Element acceptUnknownExtensionElement = 46;                       // Extensions for acceptUnknown
    repeated string format = 47;                                      // A list of the formats supported by this implementation using their content types.
    repeated Element formatExtensionElement = 48;                     // Extensions for format
    repeated string patchFormat = 49;                                 // A list of the patch formats supported by this implementation using their content types.
    repeated Element patchFormatExtensionElement = 50;                // Extensions for patchFormat
    repeated string implementationGuide = 51;                         // A list of implementation guides that the server does (or should) support in their entirety.
    repeated Element implementationGuideExtensionElement = 52;        // Extensions for implementationGuide
    repeated Reference profile = 53;                                  // A list of profiles that represent different use cases supported by the system. For a server, "supported by the system" means the system hosts/produces a set of resources that are conformant to a particular profile, and allows clients that use its services to search using this profile and to find appropriate data. For a client, it means the system will search by this profile and process data according to the guidance implicit in the profile. See further discussion in [Using Profiles](profiling.html#profile-uses).
    repeated CapabilityStatement_Rest rest = 54;                      // A definition of the restful capabilities of the solution, if any.
    repeated CapabilityStatement_Messaging messaging = 55;            // A description of the messaging capabilities of the solution.
    repeated CapabilityStatement_Document document = 56;              // A document definition.
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Software {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Name software is known by.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string version = 7;                                               // The version identifier for the software covered by this statement.
    Element versionExtensionElement = 8;                              // Extensions for version
    string releaseDate = 9;                                           // Date this version of the software was released.
    Element releaseDateExtensionElement = 10;                         // Extensions for releaseDate
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Implementation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // Information about the specific installation that this capability statement relates to.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    string url = 7;                                                   // An absolute base URL for the implementation.  This forms the base for REST interfaces as well as the mailbox and document interfaces.
    Element urlExtensionElement = 8;                                  // Extensions for url
}

enum CapabilityStatement_Rest_mode {
    CapabilityStatement_Rest_mode_server = 0;
    CapabilityStatement_Rest_mode_client = 1;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Rest {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CapabilityStatement_Rest_mode mode = 5;                           // Identifies whether this portion of the statement is describing the ability to initiate or receive restful operations.
    Element modeExtensionElement = 6;                                 // Extensions for mode
    string documentation = 7;                                         // Information about the system's restful capabilities that apply across all applications, such as security.
    Element documentationExtensionElement = 8;                        // Extensions for documentation
    CapabilityStatement_Security security = 9;                        // Information about security implementation from an interface perspective - what a client needs to know.
    repeated CapabilityStatement_Resource resource = 10;              // A specification of the restful capabilities of the solution for a specific resource type.
    repeated CapabilityStatement_Interaction1 interaction = 11;       // A specification of restful operations supported by the system.
    repeated CapabilityStatement_SearchParam searchParam = 12;        // Search parameters that are supported for searching all resources for implementations to support and/or make use of - either references to ones defined in the specification, or additional ones defined for/by the implementation.
    repeated CapabilityStatement_Operation operation = 13;            // Definition of an operation or a named query together with its parameters and their meaning and type.
    repeated string compartment = 14;                                 // An absolute URI which is a reference to the definition of a compartment that the system supports. The reference is to a CompartmentDefinition resource by its canonical URL .
    repeated Element compartmentExtensionElement = 15;                // Extensions for compartment
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Security {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool cors = 5;                                                    // Server adds CORS headers when responding to requests - this enables javascript applications to use the server.
    Element corsExtensionElement = 6;                                 // Extensions for cors
    repeated CodeableConcept service = 7;                             // Types of security services that are supported/required by the system.
    string description = 8;                                           // General description of how security works.
    Element descriptionExtensionElement = 9;                          // Extensions for description
    repeated CapabilityStatement_Certificate certificate = 10;        // Certificates associated with security profiles.
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Certificate {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // Mime type for a certificate.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string blob = 7;                                                  // Actual certificate.
    Element blobExtensionElement = 8;                                 // Extensions for blob
}

enum CapabilityStatement_Resource_versioning {
    CapabilityStatement_Resource_versioning_versioned_update = 0;
    CapabilityStatement_Resource_versioning_versioned = 1;
    CapabilityStatement_Resource_versioning_no_version = 2;
}

enum CapabilityStatement_Resource_conditionalRead {
    CapabilityStatement_Resource_conditionalRead_not_supported = 0;
    CapabilityStatement_Resource_conditionalRead_modified_since = 1;
    CapabilityStatement_Resource_conditionalRead_full_support = 2;
    CapabilityStatement_Resource_conditionalRead_not_match = 3;
}

enum CapabilityStatement_Resource_conditionalDelete {
    CapabilityStatement_Resource_conditionalDelete_single = 0;
    CapabilityStatement_Resource_conditionalDelete_multiple = 1;
    CapabilityStatement_Resource_conditionalDelete_not_supported = 2;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Resource {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // A type of resource exposed via the restful interface.
    Element typeExtensionElement = 6;                                 // Extensions for type
    Reference profile = 7;                                            // A specification of the profile that describes the solution's overall support for the resource, including any constraints on cardinality, bindings, lengths or other limitations. See further discussion in [Using Profiles](profiling.html#profile-uses).
    string documentation = 8;                                         // Additional information about the resource type used by the system.
    Element documentationExtensionElement = 9;                        // Extensions for documentation
    repeated CapabilityStatement_Interaction interaction = 10;        // Identifies a restful operation supported by the solution.
    CapabilityStatement_Resource_versioning versioning = 11;          // This field is set to no-version to specify that the system does not support (server) or use (client) versioning for this resource type. If this has some other value, the server must at least correctly track and populate the versionId meta-property on resources. If the value is 'versioned-update', then the server supports all the versioning features, including using e-tags for version integrity in the API.
    Element versioningExtensionElement = 12;                          // Extensions for versioning
    bool readHistory = 13;                                            // A flag for whether the server is able to return past versions as part of the vRead operation.
    Element readHistoryExtensionElement = 14;                         // Extensions for readHistory
    bool updateCreate = 15;                                           // A flag to indicate that the server allows or needs to allow the client to create new identities on the server (e.g. that is, the client PUTs to a location where there is no existing resource). Allowing this operation means that the server allows the client to create new identities on the server.
    Element updateCreateExtensionElement = 16;                        // Extensions for updateCreate
    bool conditionalCreate = 17;                                      // A flag that indicates that the server supports conditional create.
    Element conditionalCreateExtensionElement = 18;                   // Extensions for conditionalCreate
    CapabilityStatement_Resource_conditionalRead conditionalRead = 19; // A code that indicates how the server supports conditional read.
    Element conditionalReadExtensionElement = 20;                     // Extensions for conditionalRead
    bool conditionalUpdate = 21;                                      // A flag that indicates that the server supports conditional update.
    Element conditionalUpdateExtensionElement = 22;                   // Extensions for conditionalUpdate
    CapabilityStatement_Resource_conditionalDelete conditionalDelete = 23; // A code that indicates how the server supports conditional delete.
    Element conditionalDeleteExtensionElement = 24;                   // Extensions for conditionalDelete
    repeated string referencePolicy = 25;                             // A set of flags that defines how references are supported.
    repeated Element referencePolicyExtensionElement = 26;            // Extensions for referencePolicy
    repeated string searchInclude = 27;                               // A list of _include values supported by the server.
    repeated Element searchIncludeExtensionElement = 28;              // Extensions for searchInclude
    repeated string searchRevInclude = 29;                            // A list of _revinclude (reverse include) values supported by the server.
    repeated Element searchRevIncludeExtensionElement = 30;           // Extensions for searchRevInclude
    repeated CapabilityStatement_SearchParam searchParam = 31;        // Search parameters for implementations to support and/or make use of - either references to ones defined in the specification, or additional ones defined for/by the implementation.
}

enum CapabilityStatement_Interaction_code {
    CapabilityStatement_Interaction_code_patch = 0;
    CapabilityStatement_Interaction_code_read = 1;
    CapabilityStatement_Interaction_code_search_type = 2;
    CapabilityStatement_Interaction_code_vread = 3;
    CapabilityStatement_Interaction_code_update = 4;
    CapabilityStatement_Interaction_code_create = 5;
    CapabilityStatement_Interaction_code_history_instance = 6;
    CapabilityStatement_Interaction_code_delete = 7;
    CapabilityStatement_Interaction_code_history_type = 8;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Interaction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CapabilityStatement_Interaction_code code = 5;                    // Coded identifier of the operation, supported by the system resource.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string documentation = 7;                                         // Guidance specific to the implementation of this operation, such as 'delete is a logical delete' or 'updates are only allowed with version id' or 'creates permitted from pre-authorized certificates only'.
    Element documentationExtensionElement = 8;                        // Extensions for documentation
}

enum CapabilityStatement_SearchParam_type {
    CapabilityStatement_SearchParam_type_date = 0;
    CapabilityStatement_SearchParam_type_reference = 1;
    CapabilityStatement_SearchParam_type_number = 2;
    CapabilityStatement_SearchParam_type_quantity = 3;
    CapabilityStatement_SearchParam_type_string = 4;
    CapabilityStatement_SearchParam_type_composite = 5;
    CapabilityStatement_SearchParam_type_uri = 6;
    CapabilityStatement_SearchParam_type_token = 7;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_SearchParam {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of the search parameter used in the interface.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string definition = 7;                                            // An absolute URI that is a formal reference to where this parameter was first defined, so that a client can be confident of the meaning of the search parameter (a reference to [[[SearchParameter.url]]]).
    Element definitionExtensionElement = 8;                           // Extensions for definition
    CapabilityStatement_SearchParam_type type = 9;                    // The type of value a search parameter refers to, and how the content is interpreted.
    Element typeExtensionElement = 10;                                // Extensions for type
    string documentation = 11;                                        // This allows documentation of any distinct behaviors about how the search parameter is used.  For example, text matching algorithms.
    Element documentationExtensionElement = 12;                       // Extensions for documentation
}

enum CapabilityStatement_Interaction1_code {
    CapabilityStatement_Interaction1_code_search_system = 0;
    CapabilityStatement_Interaction1_code_history_system = 1;
    CapabilityStatement_Interaction1_code_batch = 2;
    CapabilityStatement_Interaction1_code_transaction = 3;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Interaction1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CapabilityStatement_Interaction1_code code = 5;                   // A coded identifier of the operation, supported by the system.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string documentation = 7;                                         // Guidance specific to the implementation of this operation, such as limitations on the kind of transactions allowed, or information about system wide search is implemented.
    Element documentationExtensionElement = 8;                        // Extensions for documentation
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Operation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of the operation or query. For an operation, this is the name  prefixed with $ and used in the URL. For a query, this is the name used in the _query parameter when the query is called.
    Element nameExtensionElement = 6;                                 // Extensions for name
    Reference definition = 7;                                         // Where the formal definition can be found.
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Messaging {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CapabilityStatement_Endpoint endpoint = 5;               // An endpoint (network accessible address) to which messages and/or replies are to be sent.
    int64 reliableCache = 6;                                          // Length if the receiver's reliable messaging cache in minutes (if a receiver) or how long the cache length on the receiver should be (if a sender).
    Element reliableCacheExtensionElement = 7;                        // Extensions for reliableCache
    string documentation = 8;                                         // Documentation about the system's messaging capabilities for this endpoint not otherwise documented by the capability statement.  For example, the process for becoming an authorized messaging exchange partner.
    Element documentationExtensionElement = 9;                        // Extensions for documentation
    repeated CapabilityStatement_SupportedMessage supportedMessage = 10; // References to message definitions for messages this system can send or receive.
    repeated CapabilityStatement_Event event = 11;                    // A description of the solution's support for an event at this end-point.
}

/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Endpoint {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Coding protocol = 5;                                              // A list of the messaging transport protocol(s) identifiers, supported by this endpoint.
    string address = 6;                                               // The network address of the end-point. For solutions that do not use network addresses for routing, it can be just an identifier.
    Element addressExtensionElement = 7;                              // Extensions for address
}

enum CapabilityStatement_SupportedMessage_mode {
    CapabilityStatement_SupportedMessage_mode_receiver = 0;
    CapabilityStatement_SupportedMessage_mode_sender = 1;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_SupportedMessage {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CapabilityStatement_SupportedMessage_mode mode = 5;               // The mode of this event declaration - whether application is sender or receiver.
    Element modeExtensionElement = 6;                                 // Extensions for mode
    Reference definition = 7;                                         // Points to a message definition that identifies the messaging event, message structure, allowed responses, etc.
}

enum CapabilityStatement_Event_category {
    CapabilityStatement_Event_category_Currency = 0;
    CapabilityStatement_Event_category_Consequence = 1;
    CapabilityStatement_Event_category_Notification = 2;
}

enum CapabilityStatement_Event_mode {
    CapabilityStatement_Event_mode_receiver = 0;
    CapabilityStatement_Event_mode_sender = 1;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Event {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Coding code = 5;                                                  // A coded identifier of a supported messaging event.
    CapabilityStatement_Event_category category = 6;                  // The impact of the content of the message.
    Element categoryExtensionElement = 7;                             // Extensions for category
    CapabilityStatement_Event_mode mode = 8;                          // The mode of this event declaration - whether an application is a sender or receiver.
    Element modeExtensionElement = 9;                                 // Extensions for mode
    string focus = 10;                                                // A resource associated with the event.  This is the resource that defines the event.
    Element focusExtensionElement = 11;                               // Extensions for focus
    Reference request = 12;                                           // Information about the request for this event.
    Reference response = 13;                                          // Information about the response for this event.
    string documentation = 14;                                        // Guidance on how this event is handled, such as internal system trigger points, business rules, etc.
    Element documentationExtensionElement = 15;                       // Extensions for documentation
}

enum CapabilityStatement_Document_mode {
    CapabilityStatement_Document_mode_producer = 0;
    CapabilityStatement_Document_mode_consumer = 1;
}


/*
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
message CapabilityStatement_Document {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CapabilityStatement_Document_mode mode = 5;                       // Mode of this document declaration - whether an application is a producer or consumer.
    Element modeExtensionElement = 6;                                 // Extensions for mode
    string documentation = 7;                                         // A description of how the application supports or uses the specified document profile.  For example, when documents are created, what action is taken with consumed documents, etc.
    Element documentationExtensionElement = 8;                        // Extensions for documentation
    Reference profile = 9;                                            // A constraint on a resource used in the document.
}

enum CarePlan_status {
    CarePlan_status_draft = 0;
    CarePlan_status_active = 1;
    CarePlan_status_cancelled = 2;
    CarePlan_status_completed = 3;
    CarePlan_status_entered_in_error = 4;
    CarePlan_status_suspended = 5;
    CarePlan_status_unknown = 6;
}

enum CarePlan_intent {
    CarePlan_intent_proposal = 0;
    CarePlan_intent_plan = 1;
    CarePlan_intent_order = 2;
    CarePlan_intent_OPTION = 3;
}


/*
 * Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.
 */
message CarePlan {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this care plan that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    repeated Reference definition = 13;                               // Identifies the protocol, questionnaire, guideline or other specification the care plan should be conducted in accordance with.
    repeated Reference basedOn = 14;                                  // A care plan that is fulfilled in whole or in part by this care plan.
    repeated Reference replaces = 15;                                 // Completed or terminated care plan whose function is taken by this new care plan.
    repeated Reference partOf = 16;                                   // A larger care plan of which this particular care plan is a component or step.
    CarePlan_status status = 17;                                      // Indicates whether the plan is currently being acted upon, represents future intentions or is now a historical record.
    Element statusExtensionElement = 18;                              // Extensions for status
    CarePlan_intent intent = 19;                                      // Indicates the level of authority/intentionality associated with the care plan and where the care plan fits into the workflow chain.
    Element intentExtensionElement = 20;                              // Extensions for intent
    repeated CodeableConcept category = 21;                           // Identifies what "kind" of plan this is to support differentiation between multiple co-existing plans; e.g. "Home health", "psychiatric", "asthma", "disease management", "wellness plan", etc.
    string title = 22;                                                // Human-friendly name for the CarePlan.
    Element titleExtensionElement = 23;                               // Extensions for title
    string description = 24;                                          // A description of the scope and nature of the plan.
    Element descriptionExtensionElement = 25;                         // Extensions for description
    Reference subject = 26;                                           // Identifies the patient or group whose intended care is described by the plan.
    Reference context = 27;                                           // Identifies the original context in which this particular CarePlan was created.
    Period period = 28;                                               // Indicates when the plan did (or is intended to) come into effect and end.
    repeated Reference author = 29;                                   // Identifies the individual(s) or ogranization who is responsible for the content of the care plan.
    repeated Reference careTeam = 30;                                 // Identifies all people and organizations who are expected to be involved in the care envisioned by this plan.
    repeated Reference addresses = 31;                                // Identifies the conditions/problems/concerns/diagnoses/etc. whose management and/or mitigation are handled by this plan.
    repeated Reference supportingInfo = 32;                           // Identifies portions of the patient's record that specifically influenced the formation of the plan.  These might include co-morbidities, recent procedures, limitations, recent assessments, etc.
    repeated Reference goal = 33;                                     // Describes the intended objective(s) of carrying out the care plan.
    repeated CarePlan_Activity activity = 34;                         // Identifies a planned action to occur as part of the plan.  For example, a medication to be used, lab tests to perform, self-monitoring, education, etc.
    repeated Annotation note = 35;                                    // General notes about the care plan not covered elsewhere.
}

/*
 * Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.
 */
message CarePlan_Activity {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept outcomeCodeableConcept = 5;              // Identifies the outcome at the point when the status of the activity is assessed.  For example, the outcome of an education activity could be patient understands (or not).
    repeated Reference outcomeReference = 6;                          // Details of the outcome or action resulting from the activity.  The reference to an "event" resource, such as Procedure or Encounter or Observation, is the result/outcome of the activity itself.  The activity can be conveyed using CarePlan.activity.detail OR using the CarePlan.activity.reference (a reference to a “request” resource).
    repeated Annotation progress = 7;                                 // Notes about the adherence/status/progress of the activity.
    Reference reference = 8;                                          // The details of the proposed activity represented in a specific resource.
    CarePlan_Detail detail = 9;                                       // A simple summary of a planned activity suitable for a general care plan system (e.g. form driven) that doesn't know about specific resources such as procedure etc.
}

enum CarePlan_Detail_status {
    CarePlan_Detail_status_scheduled = 0;
    CarePlan_Detail_status_not_started = 1;
    CarePlan_Detail_status_cancelled = 2;
    CarePlan_Detail_status_completed = 3;
    CarePlan_Detail_status_in_progress = 4;
    CarePlan_Detail_status_on_hold = 5;
    CarePlan_Detail_status_unknown = 6;
}


/*
 * Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.
 */
message CarePlan_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // High-level categorization of the type of activity in a care plan.
    Reference definition = 6;                                         // Identifies the protocol, questionnaire, guideline or other specification the planned activity should be conducted in accordance with.
    CodeableConcept code = 7;                                         // Detailed description of the type of planned activity; e.g. What lab test, what procedure, what kind of encounter.
    repeated CodeableConcept reasonCode = 8;                          // Provides the rationale that drove the inclusion of this particular activity as part of the plan or the reason why the activity was prohibited.
    repeated Reference reasonReference = 9;                           // Provides the health condition(s) that drove the inclusion of this particular activity as part of the plan.
    repeated Reference goal = 10;                                     // Internal reference that identifies the goals that this activity is intended to contribute towards meeting.
    CarePlan_Detail_status status = 11;                               // Identifies what progress is being made for the specific activity.
    Element statusExtensionElement = 12;                              // Extensions for status
    string statusReason = 13;                                         // Provides reason why the activity isn't yet started, is on hold, was cancelled, etc.
    Element statusReasonExtensionElement = 14;                        // Extensions for statusReason
    bool prohibited = 15;                                             // If true, indicates that the described activity is one that must NOT be engaged in when following the plan.  If false, indicates that the described activity is one that should be engaged in when following the plan.
    Element prohibitedExtensionElement = 16;                          // Extensions for prohibited
    Timing scheduledTiming = 17;                                      // The period, timing or frequency upon which the described activity is to occur.
    Period scheduledPeriod = 18;                                      // The period, timing or frequency upon which the described activity is to occur.
    string scheduledString = 19;                                      // The period, timing or frequency upon which the described activity is to occur.
    Element scheduledStringExtensionElement = 20;                     // Extensions for scheduledString
    Reference location = 21;                                          // Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.
    repeated Reference performer = 22;                                // Identifies who's expected to be involved in the activity.
    CodeableConcept productCodeableConcept = 23;                      // Identifies the food, drug or other product to be consumed or supplied in the activity.
    Reference productReference = 24;                                  // Identifies the food, drug or other product to be consumed or supplied in the activity.
    Quantity dailyAmount = 25;                                        // Identifies the quantity expected to be consumed in a given day.
    Quantity quantity = 26;                                           // Identifies the quantity expected to be supplied, administered or consumed by the subject.
    string description = 27;                                          // This provides a textual description of constraints on the intended activity occurrence, including relation to other activities.  It may also include objectives, pre-conditions and end-conditions.  Finally, it may convey specifics about the activity such as body site, method, route, etc.
    Element descriptionExtensionElement = 28;                         // Extensions for description
}

enum CareTeam_status {
    CareTeam_status_inactive = 0;
    CareTeam_status_proposed = 1;
    CareTeam_status_active = 2;
    CareTeam_status_entered_in_error = 3;
    CareTeam_status_suspended = 4;
}


/*
 * The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.
 */
message CareTeam {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this care team that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate.
    CareTeam_status status = 13;                                      // Indicates the current state of the care team.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated CodeableConcept category = 15;                           // Identifies what kind of team.  This is to support differentiation between multiple co-existing teams, such as care plan team, episode of care team, longitudinal care team.
    string name = 16;                                                 // A label for human use intended to distinguish like teams.  E.g. the "red" vs. "green" trauma teams.
    Element nameExtensionElement = 17;                                // Extensions for name
    Reference subject = 18;                                           // Identifies the patient or group whose intended care is handled by the team.
    Reference context = 19;                                           // The encounter or episode of care that establishes the context for this care team.
    Period period = 20;                                               // Indicates when the team did (or is intended to) come into effect and end.
    repeated CareTeam_Participant participant = 21;                   // Identifies all people and organizations who are expected to be involved in the care team.
    repeated CodeableConcept reasonCode = 22;                         // Describes why the care team exists.
    repeated Reference reasonReference = 23;                          // Condition(s) that this care team addresses.
    repeated Reference managingOrganization = 24;                     // The organization responsible for the care team.
    repeated Annotation note = 25;                                    // Comments made about the CareTeam.
}

/*
 * The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.
 */
message CareTeam_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // Indicates specific responsibility of an individual within the care team, such as "Primary care physician", "Trained social worker counselor", "Caregiver", etc.
    Reference member = 6;                                             // The specific person or organization who is participating/expected to participate in the care team.
    Reference onBehalfOf = 7;                                         // The organization of the practitioner.
    Period period = 8;                                                // Indicates when the specific member or organization did (or is intended to) come into effect and end.
}

enum ChargeItem_status {
    ChargeItem_status_not_billable = 0;
    ChargeItem_status_billed = 1;
    ChargeItem_status_aborted = 2;
    ChargeItem_status_planned = 3;
    ChargeItem_status_entered_in_error = 4;
    ChargeItem_status_billable = 5;
    ChargeItem_status_unknown = 6;
}


/*
 * The resource ChargeItem describes the provision of healthcare provider products for a certain patient, therefore referring not only to the product, but containing in addition details of the provision, like date, time, amounts and participating organizations and persons. Main Usage of the ChargeItem is to enable the billing process and internal cost allocation.
 */
message ChargeItem {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Identifiers assigned to this event performer or other systems.
    repeated string definition = 13;                                  // References the source of pricing information, rules of application for the code this ChargeItem uses.
    repeated Element definitionExtensionElement = 14;                 // Extensions for definition
    ChargeItem_status status = 15;                                    // The current state of the ChargeItem.
    Element statusExtensionElement = 16;                              // Extensions for status
    repeated Reference partOf = 17;                                   // ChargeItems can be grouped to larger ChargeItems covering the whole set.
    CodeableConcept code = 18;                                        // A code that identifies the charge, like a billing code.
    Reference subject = 19;                                           // The individual or set of individuals the action is being or was performed on.
    Reference context = 20;                                           // The encounter or episode of care that establishes the context for this event.
    string occurrenceDateTime = 21;                                   // Date/time(s) or duration when the charged service was applied.
    Element occurrenceDateTimeExtensionElement = 22;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 23;                                     // Date/time(s) or duration when the charged service was applied.
    Timing occurrenceTiming = 24;                                     // Date/time(s) or duration when the charged service was applied.
    repeated ChargeItem_Participant participant = 25;                 // Indicates who or what performed or participated in the charged service.
    Reference performingOrganization = 26;                            // The organization requesting the service.
    Reference requestingOrganization = 27;                            // The organization performing the service.
    Quantity quantity = 28;                                           // Quantity of which the charge item has been serviced.
    repeated CodeableConcept bodysite = 29;                           // The anatomical location where the related service has been applied.
    double factorOverride = 30;                                       // Factor overriding the factor determined by the rules associated with the code.
    Element factorOverrideExtensionElement = 31;                      // Extensions for factorOverride
    Money priceOverride = 32;                                         // Total price of the charge overriding the list price associated with the code.
    string overrideReason = 33;                                       // If the list price or the rule based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.
    Element overrideReasonExtensionElement = 34;                      // Extensions for overrideReason
    Reference enterer = 35;                                           // The device, practitioner, etc. who entered the charge item.
    string enteredDate = 36;                                          // Date the charge item was entered.
    Element enteredDateExtensionElement = 37;                         // Extensions for enteredDate
    repeated CodeableConcept reason = 38;                             // Describes why the event occurred in coded or textual form.
    repeated Reference service = 39;                                  // Indicated the rendered service that caused this charge.
    repeated Reference account = 40;                                  // Account into which this ChargeItems belongs.
    repeated Annotation note = 41;                                    // Comments made about the event by the performer, subject or other participants.
    repeated Reference supportingInformation = 42;                    // Further information supporting the this charge.
}

/*
 * The resource ChargeItem describes the provision of healthcare provider products for a certain patient, therefore referring not only to the product, but containing in addition details of the provision, like date, time, amounts and participating organizations and persons. Main Usage of the ChargeItem is to enable the billing process and internal cost allocation.
 */
message ChargeItem_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // Describes the type of performance or participation(e.g. primary surgeon, anaesthesiologiest, etc.).
    Reference actor = 6;                                              // The device, practitioner, etc. who performed or participated in the service.
}

enum Claim_use {
    Claim_use_exploratory = 0;
    Claim_use_other = 1;
    Claim_use_proposed = 2;
    Claim_use_complete = 3;
}


/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The business identifier for the instance: claim number, pre-determination or pre-authorization number.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept type = 15;                                        // The category of claim, eg, oral, pharmacy, vision, insitutional, professional.
    repeated CodeableConcept subType = 16;                            // A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.
    Claim_use use = 17;                                               // Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).
    Element useExtensionElement = 18;                                 // Extensions for use
    Reference patient = 19;                                           // Patient Resource.
    Period billablePeriod = 20;                                       // The billable period for which charges are being submitted.
    string created = 21;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 22;                             // Extensions for created
    Reference enterer = 23;                                           // Person who created the invoice/claim/pre-determination or pre-authorization.
    Reference insurer = 24;                                           // The Insurer who is target of the request.
    Reference provider = 25;                                          // The provider which is responsible for the bill, claim pre-determination, pre-authorization.
    Reference organization = 26;                                      // The organization which is responsible for the bill, claim pre-determination, pre-authorization.
    CodeableConcept priority = 27;                                    // Immediate (STAT), best effort (NORMAL), deferred (DEFER).
    CodeableConcept fundsReserve = 28;                                // In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.
    repeated Claim_Related related = 29;                              // Other claims which are related to this claim such as prior claim versions or for related services.
    Reference prescription = 30;                                      // Prescription to support the dispensing of Pharmacy or Vision products.
    Reference originalPrescription = 31;                              // Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.
    Claim_Payee payee = 32;                                           // The party to be reimbursed for the services.
    Reference referral = 33;                                          // The referral resource which lists the date, practitioner, reason and other supporting information.
    Reference facility = 34;                                          // Facility where the services were provided.
    repeated Claim_CareTeam careTeam = 35;                            // The members of the team who provided the overall service as well as their role and whether responsible and qualifications.
    repeated Claim_Information information = 36;                      // Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.
    repeated Claim_Diagnosis diagnosis = 37;                          // List of patient diagnosis for which care is sought.
    repeated Claim_Procedure procedure = 38;                          // Ordered list of patient procedures performed to support the adjudication.
    repeated Claim_Insurance insurance = 39;                          // Financial instrument by which payment information for health care.
    Claim_Accident accident = 40;                                     // An accident which resulted in the need for healthcare services.
    Period employmentImpacted = 41;                                   // The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).
    Period hospitalization = 42;                                      // The start and optional end dates of when the patient was confined to a treatment center.
    repeated Claim_Item item = 43;                                    // First tier of goods and services.
    Money total = 44;                                                 // The total value of the claim.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Related {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference claim = 5;                                              // Other claims which are related to this claim such as prior claim versions or for related services.
    CodeableConcept relationship = 6;                                 // For example prior or umbrella.
    Identifier reference = 7;                                         // An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Payee {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Type of Party to be reimbursed: Subscriber, provider, other.
    Reference party = 6;                                              // Party to be reimbursed: Subscriber, provider, other.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_CareTeam {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of the careTeam which serves to order and provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    Reference provider = 7;                                           // Member of the team who provided the overall service.
    bool responsible = 8;                                             // The party who is billing and responsible for the claimed good or service rendered to the patient.
    Element responsibleExtensionElement = 9;                          // Extensions for responsible
    CodeableConcept role = 10;                                        // The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.
    CodeableConcept qualification = 11;                               // The qualification which is applicable for this service.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Information {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of the information element which serves to provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept category = 7;                                     // The general class of the information supplied: information; exception; accident, employment; onset, etc.
    CodeableConcept code = 8;                                         // System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.
    string timingDate = 9;                                            // The date when or period to which this information refers.
    Element timingDateExtensionElement = 10;                          // Extensions for timingDate
    Period timingPeriod = 11;                                         // The date when or period to which this information refers.
    string valueString = 12;                                          // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Element valueStringExtensionElement = 13;                         // Extensions for valueString
    Quantity valueQuantity = 14;                                      // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Attachment valueAttachment = 15;                                  // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Reference valueReference = 16;                                    // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    CodeableConcept reason = 17;                                      // For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Diagnosis {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of diagnosis which serves to provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept diagnosisCodeableConcept = 7;                     // The diagnosis.
    Reference diagnosisReference = 8;                                 // The diagnosis.
    repeated CodeableConcept type = 9;                                // The type of the Diagnosis, for example: admitting, primary, secondary, discharge.
    CodeableConcept packageCode = 10;                                 // The package billing code, for example DRG, based on the assigned grouping code system.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Procedure {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of procedures which serves to order and provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    string date = 7;                                                  // Date and optionally time the procedure was performed .
    Element dateExtensionElement = 8;                                 // Extensions for date
    CodeableConcept procedureCodeableConcept = 9;                     // The procedure code.
    Reference procedureReference = 10;                                // The procedure code.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Insurance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of coverage which serves to provide a link and convey coordination of benefit order.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    bool focal = 7;                                                   // A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.
    Element focalExtensionElement = 8;                                // Extensions for focal
    Reference coverage = 9;                                           // Reference to the program or plan identification, underwriter or payor.
    string businessArrangement = 10;                                  // The contract number of a business agreement which describes the terms and conditions.
    Element businessArrangementExtensionElement = 11;                 // Extensions for businessArrangement
    repeated string preAuthRef = 12;                                  // A list of references from the Insurer to which these services pertain.
    repeated Element preAuthRefExtensionElement = 13;                 // Extensions for preAuthRef
    Reference claimResponse = 14;                                     // The Coverages adjudication details.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Accident {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string date = 5;                                                  // Date of an accident which these services are addressing.
    Element dateExtensionElement = 6;                                 // Extensions for date
    CodeableConcept type = 7;                                         // Type of accident: work, auto, etc.
    Address locationAddress = 8;                                      // Accident Place.
    Reference locationReference = 9;                                  // Accident Place.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    repeated int64 careTeamLinkId = 7;                                // CareTeam applicable for this service or product line.
    repeated Element careTeamLinkIdExtensionElement = 8;              // Extensions for careTeamLinkId
    repeated int64 diagnosisLinkId = 9;                               // Diagnosis applicable for this service or product line.
    repeated Element diagnosisLinkIdExtensionElement = 10;            // Extensions for diagnosisLinkId
    repeated int64 procedureLinkId = 11;                              // Procedures applicable for this service or product line.
    repeated Element procedureLinkIdExtensionElement = 12;            // Extensions for procedureLinkId
    repeated int64 informationLinkId = 13;                            // Exceptions, special conditions and supporting information pplicable for this service or product line.
    repeated Element informationLinkIdExtensionElement = 14;          // Extensions for informationLinkId
    CodeableConcept revenue = 15;                                     // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 16;                                    // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 17;                                     // If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
    repeated CodeableConcept modifier = 18;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 19;                        // For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program.
    string servicedDate = 20;                                         // The date or dates when the enclosed suite of services were performed or completed.
    Element servicedDateExtensionElement = 21;                        // Extensions for servicedDate
    Period servicedPeriod = 22;                                       // The date or dates when the enclosed suite of services were performed or completed.
    CodeableConcept locationCodeableConcept = 23;                     // Where the service was provided.
    Address locationAddress = 24;                                     // Where the service was provided.
    Reference locationReference = 25;                                 // Where the service was provided.
    Quantity quantity = 26;                                           // The number of repetitions of a service or product.
    Money unitPrice = 27;                                             // If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
    double factor = 28;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 29;                              // Extensions for factor
    Money net = 30;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 31;                                      // List of Unique Device Identifiers associated with this line item.
    CodeableConcept bodySite = 32;                                    // Physical service site on the patient (limb, tooth, etc).
    repeated CodeableConcept subSite = 33;                            // A region or surface of the site, eg. limb region or tooth surface(s).
    repeated Reference encounter = 34;                                // A billed item may include goods or services provided in multiple encounters.
    repeated Claim_Detail detail = 35;                                // Second tier of goods and services.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept revenue = 7;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 8;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 9;                                      // If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
    repeated CodeableConcept modifier = 10;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 11;                        // For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
    Quantity quantity = 12;                                           // The number of repetitions of a service or product.
    Money unitPrice = 13;                                             // If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
    double factor = 14;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 15;                              // Extensions for factor
    Money net = 16;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 17;                                      // List of Unique Device Identifiers associated with this line item.
    repeated Claim_SubDetail subDetail = 18;                          // Third tier of goods and services.
}

/*
 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
 */
message Claim_SubDetail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept revenue = 7;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 8;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 9;                                      // A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).
    repeated CodeableConcept modifier = 10;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 11;                        // For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
    Quantity quantity = 12;                                           // The number of repetitions of a service or product.
    Money unitPrice = 13;                                             // The fee for an addittional service or product or charge.
    double factor = 14;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 15;                              // Extensions for factor
    Money net = 16;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 17;                                      // List of Unique Device Identifiers associated with this line item.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference patient = 15;                                           // Patient Resource.
    string created = 16;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 17;                             // Extensions for created
    Reference insurer = 18;                                           // The Insurer who produced this adjudicated response.
    Reference requestProvider = 19;                                   // The practitioner who is responsible for the services rendered to the patient.
    Reference requestOrganization = 20;                               // The organization which is responsible for the services rendered to the patient.
    Reference request = 21;                                           // Original request resource referrence.
    CodeableConcept outcome = 22;                                     // Processing outcome errror, partial or complete processing.
    string disposition = 23;                                          // A description of the status of the adjudication.
    Element dispositionExtensionElement = 24;                         // Extensions for disposition
    CodeableConcept payeeType = 25;                                   // Party to be reimbursed: Subscriber, provider, other.
    repeated ClaimResponse_Item item = 26;                            // The first tier service adjudications for submitted services.
    repeated ClaimResponse_AddItem addItem = 27;                      // The first tier service adjudications for payor added services.
    repeated ClaimResponse_Error error = 28;                          // Mutually exclusive with Services Provided (Item).
    Money totalCost = 29;                                             // The total cost of the services reported.
    Money unallocDeductable = 30;                                     // The amount of deductible applied which was not allocated to any particular service line.
    Money totalBenefit = 31;                                          // Total amount of benefit payable (Equal to sum of the Benefit amounts from all detail lines and additions less the Unallocated Deductible).
    ClaimResponse_Payment payment = 32;                               // Payment details for the claim if the claim has been paid.
    Coding reserved = 33;                                             // Status of funds reservation (For provider, for Patient, None).
    CodeableConcept form = 34;                                        // The form to be used for printing the content.
    repeated ClaimResponse_ProcessNote processNote = 35;              // Note text.
    repeated Reference communicationRequest = 36;                     // Request for additional supporting or authorizing information, such as: documents, images or resources.
    repeated ClaimResponse_Insurance insurance = 37;                  // Financial instrument by which payment information for health care.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequenceLinkId = 5;                                         // A service line number.
    Element sequenceLinkIdExtensionElement = 6;                       // Extensions for sequenceLinkId
    repeated int64 noteNumber = 7;                                    // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 8;                  // Extensions for noteNumber
    repeated ClaimResponse_Adjudication adjudication = 9;             // The adjudication results.
    repeated ClaimResponse_Detail detail = 10;                        // The second tier service adjudications for submitted services.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Adjudication {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // Code indicating: Co-Pay, deductible, eligible, benefit, tax, etc.
    CodeableConcept reason = 6;                                       // Adjudication reason such as limit reached.
    Money amount = 7;                                                 // Monetary amount associated with the code.
    double value = 8;                                                 // A non-monetary value for example a percentage. Mutually exclusive to the amount element above.
    Element valueExtensionElement = 9;                                // Extensions for value
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequenceLinkId = 5;                                         // A service line number.
    Element sequenceLinkIdExtensionElement = 6;                       // Extensions for sequenceLinkId
    repeated int64 noteNumber = 7;                                    // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 8;                  // Extensions for noteNumber
    repeated ClaimResponse_Adjudication adjudication = 9;             // The adjudications results.
    repeated ClaimResponse_SubDetail subDetail = 10;                  // The third tier service adjudications for submitted services.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_SubDetail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequenceLinkId = 5;                                         // A service line number.
    Element sequenceLinkIdExtensionElement = 6;                       // Extensions for sequenceLinkId
    repeated int64 noteNumber = 7;                                    // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 8;                  // Extensions for noteNumber
    repeated ClaimResponse_Adjudication adjudication = 9;             // The adjudications results.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_AddItem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated int64 sequenceLinkId = 5;                                // List of input service items which this service line is intended to replace.
    repeated Element sequenceLinkIdExtensionElement = 6;              // Extensions for sequenceLinkId
    CodeableConcept revenue = 7;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 8;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 9;                                      // A code to indicate the Professional Service or Product supplied.
    repeated CodeableConcept modifier = 10;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    Money fee = 11;                                                   // The fee charged for the professional service or product..
    repeated int64 noteNumber = 12;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 13;                 // Extensions for noteNumber
    repeated ClaimResponse_Adjudication adjudication = 14;            // The adjudications results.
    repeated ClaimResponse_Detail1 detail = 15;                       // The second tier service adjudications for payor added services.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Detail1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept revenue = 5;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 6;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 7;                                      // A code to indicate the Professional Service or Product supplied.
    repeated CodeableConcept modifier = 8;                            // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    Money fee = 9;                                                    // The fee charged for the professional service or product..
    repeated int64 noteNumber = 10;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 11;                 // Extensions for noteNumber
    repeated ClaimResponse_Adjudication adjudication = 12;            // The adjudications results.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Error {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequenceLinkId = 5;                                         // The sequence number of the line item submitted which contains the error. This value is omitted when the error is elsewhere.
    Element sequenceLinkIdExtensionElement = 6;                       // Extensions for sequenceLinkId
    int64 detailSequenceLinkId = 7;                                   // The sequence number of the addition within the line item submitted which contains the error. This value is omitted when the error is not related to an Addition.
    Element detailSequenceLinkIdExtensionElement = 8;                 // Extensions for detailSequenceLinkId
    int64 subdetailSequenceLinkId = 9;                                // The sequence number of the addition within the line item submitted which contains the error. This value is omitted when the error is not related to an Addition.
    Element subdetailSequenceLinkIdExtensionElement = 10;             // Extensions for subdetailSequenceLinkId
    CodeableConcept code = 11;                                        // An error code,from a specified code system, which details why the claim could not be adjudicated.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Payment {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Whether this represents partial or complete payment of the claim.
    Money adjustment = 6;                                             // Adjustment to the payment of this transaction which is not related to adjudication of this transaction.
    CodeableConcept adjustmentReason = 7;                             // Reason for the payment adjustment.
    string date = 8;                                                  // Estimated payment data.
    Element dateExtensionElement = 9;                                 // Extensions for date
    Money amount = 10;                                                // Payable less any payment adjustment.
    Identifier identifier = 11;                                       // Payment identifier.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_ProcessNote {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 number = 5;                                                 // An integer associated with each note which may be referred to from each service line item.
    Element numberExtensionElement = 6;                               // Extensions for number
    CodeableConcept type = 7;                                         // The note purpose: Print/Display.
    string text = 8;                                                  // The note text.
    Element textExtensionElement = 9;                                 // Extensions for text
    CodeableConcept language = 10;                                    // The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.
}

/*
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
message ClaimResponse_Insurance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line item.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    bool focal = 7;                                                   // The instance number of the Coverage which is the focus for adjudication. The Coverage against which the claim is to be adjudicated.
    Element focalExtensionElement = 8;                                // Extensions for focal
    Reference coverage = 9;                                           // Reference to the program or plan identification, underwriter or payor.
    string businessArrangement = 10;                                  // The contract number of a business agreement which describes the terms and conditions.
    Element businessArrangementExtensionElement = 11;                 // Extensions for businessArrangement
    repeated string preAuthRef = 12;                                  // A list of references from the Insurer to which these services pertain.
    repeated Element preAuthRefExtensionElement = 13;                 // Extensions for preAuthRef
    Reference claimResponse = 14;                                     // The Coverages adjudication details.
}

enum ClinicalImpression_status {
    ClinicalImpression_status_draft = 0;
    ClinicalImpression_status_completed = 1;
    ClinicalImpression_status_entered_in_error = 2;
}


/*
 * A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient's condition. Assessments are often 1:1 with a clinical consultation / encounter,  but this varies greatly depending on the clinical workflow. This resource is called "ClinicalImpression" rather than "ClinicalAssessment" to avoid confusion with the recording of assessment tools such as Apgar score.
 */
message ClinicalImpression {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique identifier assigned to the clinical impression that remains consistent regardless of what server the impression is stored on.
    ClinicalImpression_status status = 13;                            // Identifies the workflow status of the assessment.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept code = 15;                                        // Categorizes the type of clinical assessment performed.
    string description = 16;                                          // A summary of the context and/or cause of the assessment - why / where was it performed, and what patient events/status prompted it.
    Element descriptionExtensionElement = 17;                         // Extensions for description
    Reference subject = 18;                                           // The patient or group of individuals assessed as part of this record.
    Reference context = 19;                                           // The encounter or episode of care this impression was created as part of.
    string effectiveDateTime = 20;                                    // The point in time or period over which the subject was assessed.
    Element effectiveDateTimeExtensionElement = 21;                   // Extensions for effectiveDateTime
    Period effectivePeriod = 22;                                      // The point in time or period over which the subject was assessed.
    string date = 23;                                                 // Indicates when the documentation of the assessment was complete.
    Element dateExtensionElement = 24;                                // Extensions for date
    Reference assessor = 25;                                          // The clinician performing the assessment.
    Reference previous = 26;                                          // A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.
    repeated Reference problem = 27;                                  // This a list of the relevant problems/conditions for a patient.
    repeated ClinicalImpression_Investigation investigation = 28;     // One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.
    repeated string protocol = 29;                                    // Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.
    repeated Element protocolExtensionElement = 30;                   // Extensions for protocol
    string summary = 31;                                              // A text summary of the investigations and the diagnosis.
    Element summaryExtensionElement = 32;                             // Extensions for summary
    repeated ClinicalImpression_Finding finding = 33;                 // Specific findings or diagnoses that was considered likely or relevant to ongoing treatment.
    repeated CodeableConcept prognosisCodeableConcept = 34;           // Estimate of likely outcome.
    repeated Reference prognosisReference = 35;                       // RiskAssessment expressing likely outcome.
    repeated Reference action = 36;                                   // Action taken as part of assessment procedure.
    repeated Annotation note = 37;                                    // Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.
}

/*
 * A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient's condition. Assessments are often 1:1 with a clinical consultation / encounter,  but this varies greatly depending on the clinical workflow. This resource is called "ClinicalImpression" rather than "ClinicalAssessment" to avoid confusion with the recording of assessment tools such as Apgar score.
 */
message ClinicalImpression_Investigation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // A name/code for the group ("set") of investigations. Typically, this will be something like "signs", "symptoms", "clinical", "diagnostic", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used.
    repeated Reference item = 6;                                      // A record of a specific investigation that was undertaken.
}

/*
 * A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient's condition. Assessments are often 1:1 with a clinical consultation / encounter,  but this varies greatly depending on the clinical workflow. This resource is called "ClinicalImpression" rather than "ClinicalAssessment" to avoid confusion with the recording of assessment tools such as Apgar score.
 */
message ClinicalImpression_Finding {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept itemCodeableConcept = 5;                          // Specific text, code or reference for finding or diagnosis, which may include ruled-out or resolved conditions.
    Reference itemReference = 6;                                      // Specific text, code or reference for finding or diagnosis, which may include ruled-out or resolved conditions.
    string basis = 7;                                                 // Which investigations support finding or diagnosis.
    Element basisExtensionElement = 8;                                // Extensions for basis
}

enum CodeSystem_status {
    CodeSystem_status_draft = 0;
    CodeSystem_status_active = 1;
    CodeSystem_status_retired = 2;
    CodeSystem_status_unknown = 3;
}

enum CodeSystem_hierarchyMeaning {
    CodeSystem_hierarchyMeaning_classified_with = 0;
    CodeSystem_hierarchyMeaning_part_of = 1;
    CodeSystem_hierarchyMeaning_grouped_by = 2;
    CodeSystem_hierarchyMeaning_is_a = 3;
}

enum CodeSystem_content {
    CodeSystem_content_fragment = 0;
    CodeSystem_content_not_present = 1;
    CodeSystem_content_complete = 2;
    CodeSystem_content_example = 3;
}


/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this code system when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this code system is (or will be) published. The URL SHOULD include the major version of the code system. For more information see [Technical and Business Versions](resource.html#versions). This is used in [Coding]{datatypes.html#Coding}.system.
    Element urlExtensionElement = 13;                                 // Extensions for url
    Identifier identifier = 14;                                       // A formal identifier that is used to identify this code system when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the code system when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the code system author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. This is used in [Coding]{datatypes.html#Coding}.version.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the code system. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the code system.
    Element titleExtensionElement = 20;                               // Extensions for title
    CodeSystem_status status = 21;                                    // The status of this code system. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this code system is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the code system was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the code system changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the code system.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the code system from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate code system instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the code system is intended to be used.
    string purpose = 34;                                              // Explaination of why this code system is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the code system and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the code system.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    bool caseSensitive = 38;                                          // If code comparison is case sensitive when codes within this system are compared to each other.
    Element caseSensitiveExtensionElement = 39;                       // Extensions for caseSensitive
    string valueSet = 40;                                             // Canonical URL of value set that contains the entire code system.
    Element valueSetExtensionElement = 41;                            // Extensions for valueSet
    CodeSystem_hierarchyMeaning hierarchyMeaning = 42;                // The meaning of the hierarchy of concepts.
    Element hierarchyMeaningExtensionElement = 43;                    // Extensions for hierarchyMeaning
    bool compositional = 44;                                          // True If code system defines a post-composition grammar.
    Element compositionalExtensionElement = 45;                       // Extensions for compositional
    bool versionNeeded = 46;                                          // This flag is used to signify that the code system has not (or does not) maintain the definitions, and a version must be specified when referencing this code system.
    Element versionNeededExtensionElement = 47;                       // Extensions for versionNeeded
    CodeSystem_content content = 48;                                  // How much of the content of the code system - the concepts and codes it defines - are represented in this resource.
    Element contentExtensionElement = 49;                             // Extensions for content
    int64 count = 50;                                                 // The total number of concepts defined by the code system. Where the code system has a compositional grammar, the count refers to the number of base (primitive) concepts.
    Element countExtensionElement = 51;                               // Extensions for count
    repeated CodeSystem_Filter filter = 52;                           // A filter that can be used in a value set compose statement when selecting concepts using a filter.
    repeated CodeSystem_Property property = 53;                       // A property defines an additional slot through which additional information can be provided about a concept.
    repeated CodeSystem_Concept concept = 54;                         // Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meaning of the hierarchical relationships are.
}

/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem_Filter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // The code that identifies this filter when it is used in the instance.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string description = 7;                                           // A description of how or why the filter is used.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    repeated string operator = 9;                                     // A list of operators that can be used with the filter.
    repeated Element operatorExtensionElement = 10;                   // Extensions for operator
    string value = 11;                                                // A description of what the value for the filter should be.
    Element valueExtensionElement = 12;                               // Extensions for value
}

enum CodeSystem_Property_type {
    CodeSystem_Property_type_dateTime = 0;
    CodeSystem_Property_type_code = 1;
    CodeSystem_Property_type_boolean = 2;
    CodeSystem_Property_type_string = 3;
    CodeSystem_Property_type_Coding = 4;
    CodeSystem_Property_type_integer = 5;
}


/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem_Property {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // A code that is used to identify the property. The code is used internally (in CodeSystem.concept.property.code) and also externally, such as in property filters.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string uri = 7;                                                   // Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
    Element uriExtensionElement = 8;                                  // Extensions for uri
    string description = 9;                                           // A description of the property- why it is defined, and how its value might be used.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    CodeSystem_Property_type type = 11;                               // The type of the property value. Properties of type "code" contain a code defined by the code system (e.g. a reference to anotherr defined concept).
    Element typeExtensionElement = 12;                                // Extensions for type
}

/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem_Concept {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // A code - a text symbol - that uniquely identifies the concept within the code system.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string display = 7;                                               // A human readable string that is the recommended default way to present this concept to a user.
    Element displayExtensionElement = 8;                              // Extensions for display
    string definition = 9;                                            // The formal definition of the concept. The code system resource does not make formal definitions required, because of the prevalence of legacy systems. However, they are highly recommended, as without them there is no formal meaning associated with the concept.
    Element definitionExtensionElement = 10;                          // Extensions for definition
    repeated CodeSystem_Designation designation = 11;                 // Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etc.
    repeated CodeSystem_Property1 property = 12;                      // A property value for this concept.
    repeated CodeSystem_Concept concept = 13;                         // Defines children of a concept to produce a hierarchy of concepts. The nature of the relationships is variable (is-a/contains/categorizes) - see hierarchyMeaning.
}

/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem_Designation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string language = 5;                                              // The language this designation is defined for.
    Element languageExtensionElement = 6;                             // Extensions for language
    Coding use = 7;                                                   // A code that details how this designation would be used.
    string value = 8;                                                 // The text value for this designation.
    Element valueExtensionElement = 9;                                // Extensions for value
}

/*
 * A code system resource specifies a set of codes drawn from one or more code systems.
 */
message CodeSystem_Property1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // A code that is a reference to CodeSystem.property.code.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string valueCode = 7;                                             // The value of this property.
    Element valueCodeExtensionElement = 8;                            // Extensions for valueCode
    Coding valueCoding = 9;                                           // The value of this property.
    string valueString = 10;                                          // The value of this property.
    Element valueStringExtensionElement = 11;                         // Extensions for valueString
    int64 valueInteger = 12;                                          // The value of this property.
    Element valueIntegerExtensionElement = 13;                        // Extensions for valueInteger
    bool valueBoolean = 14;                                           // The value of this property.
    Element valueBooleanExtensionElement = 15;                        // Extensions for valueBoolean
    string valueDateTime = 16;                                        // The value of this property.
    Element valueDateTimeExtensionElement = 17;                       // Extensions for valueDateTime
}

/*
 * An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency was notified about a reportable condition.
 */
message Communication {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    repeated Reference definition = 13;                               // A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.
    repeated Reference basedOn = 14;                                  // An order, proposal or plan fulfilled in whole or in part by this Communication.
    repeated Reference partOf = 15;                                   // Part of this action.
    string status = 16;                                               // The status of the transmission.
    Element statusExtensionElement = 17;                              // Extensions for status
    bool notDone = 18;                                                // If true, indicates that the described communication event did not actually occur.
    Element notDoneExtensionElement = 19;                             // Extensions for notDone
    CodeableConcept notDoneReason = 20;                               // Describes why the communication event did not occur in coded and/or textual form.
    repeated CodeableConcept category = 21;                           // The type of message conveyed such as alert, notification, reminder, instruction, etc.
    repeated CodeableConcept medium = 22;                             // A channel that was used for this communication (e.g. email, fax).
    Reference subject = 23;                                           // The patient or group that was the focus of this communication.
    repeated Reference recipient = 24;                                // The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).
    repeated Reference topic = 25;                                    // The resources which were responsible for or related to producing this communication.
    Reference context = 26;                                           // The encounter within which the communication was sent.
    string sent = 27;                                                 // The time when this communication was sent.
    Element sentExtensionElement = 28;                                // Extensions for sent
    string received = 29;                                             // The time when this communication arrived at the destination.
    Element receivedExtensionElement = 30;                            // Extensions for received
    Reference sender = 31;                                            // The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.
    repeated CodeableConcept reasonCode = 32;                         // The reason or justification for the communication.
    repeated Reference reasonReference = 33;                          // Indicates another resource whose existence justifies this communication.
    repeated Communication_Payload payload = 34;                      // Text, attachment(s), or resource(s) that was communicated to the recipient.
    repeated Annotation note = 35;                                    // Additional notes or commentary about the communication by the sender, receiver or other interested parties.
}

/*
 * An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency was notified about a reportable condition.
 */
message Communication_Payload {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string contentString = 5;                                         // A communicated content (or for multi-part communications, one portion of the communication).
    Element contentStringExtensionElement = 6;                        // Extensions for contentString
    Attachment contentAttachment = 7;                                 // A communicated content (or for multi-part communications, one portion of the communication).
    Reference contentReference = 8;                                   // A communicated content (or for multi-part communications, one portion of the communication).
}

/*
 * A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.
 */
message CommunicationRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique ID of this request for reference purposes. It must be provided if user wants it returned as part of any output, otherwise it will be autogenerated, if needed, by CDS system. Does not need to be the actual ID of the source system.
    repeated Reference basedOn = 13;                                  // A plan or proposal that is fulfilled in whole or in part by this request.
    repeated Reference replaces = 14;                                 // Completed or terminated request(s) whose function is taken by this new request.
    Identifier groupIdentifier = 15;                                  // A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.
    string status = 16;                                               // The status of the proposal or order.
    Element statusExtensionElement = 17;                              // Extensions for status
    repeated CodeableConcept category = 18;                           // The type of message to be sent such as alert, notification, reminder, instruction, etc.
    string priority = 19;                                             // Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
    Element priorityExtensionElement = 20;                            // Extensions for priority
    repeated CodeableConcept medium = 21;                             // A channel that was used for this communication (e.g. email, fax).
    Reference subject = 22;                                           // The patient or group that is the focus of this communication request.
    repeated Reference recipient = 23;                                // The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.
    repeated Reference topic = 24;                                    // The resources which were related to producing this communication request.
    Reference context = 25;                                           // The encounter or episode of care within which the communication request was created.
    repeated CommunicationRequest_Payload payload = 26;               // Text, attachment(s), or resource(s) to be communicated to the recipient.
    string occurrenceDateTime = 27;                                   // The time when this communication is to occur.
    Element occurrenceDateTimeExtensionElement = 28;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 29;                                     // The time when this communication is to occur.
    string authoredOn = 30;                                           // For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.
    Element authoredOnExtensionElement = 31;                          // Extensions for authoredOn
    Reference sender = 32;                                            // The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.
    CommunicationRequest_Requester requester = 33;                    // The individual who initiated the request and has responsibility for its activation.
    repeated CodeableConcept reasonCode = 34;                         // Describes why the request is being made in coded or textual form.
    repeated Reference reasonReference = 35;                          // Indicates another resource whose existence justifies this request.
    repeated Annotation note = 36;                                    // Comments made about the request by the requester, sender, recipient, subject or other participants.
}

/*
 * A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.
 */
message CommunicationRequest_Payload {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string contentString = 5;                                         // The communicated content (or for multi-part communications, one portion of the communication).
    Element contentStringExtensionElement = 6;                        // Extensions for contentString
    Attachment contentAttachment = 7;                                 // The communicated content (or for multi-part communications, one portion of the communication).
    Reference contentReference = 8;                                   // The communicated content (or for multi-part communications, one portion of the communication).
}

/*
 * A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.
 */
message CommunicationRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner, etc. who initiated the request.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

enum CompartmentDefinition_status {
    CompartmentDefinition_status_draft = 0;
    CompartmentDefinition_status_active = 1;
    CompartmentDefinition_status_retired = 2;
    CompartmentDefinition_status_unknown = 3;
}

enum CompartmentDefinition_code {
    CompartmentDefinition_code_Practitioner = 0;
    CompartmentDefinition_code_Device = 1;
    CompartmentDefinition_code_Patient = 2;
    CompartmentDefinition_code_Encounter = 3;
    CompartmentDefinition_code_RelatedPerson = 4;
}


/*
 * A compartment definition that defines how resources are accessed on a server.
 */
message CompartmentDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string name = 14;                                                 // A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 15;                                // Extensions for name
    string title = 16;                                                // A short, descriptive, user-friendly title for the compartment definition.
    Element titleExtensionElement = 17;                               // Extensions for title
    CompartmentDefinition_status status = 18;                         // The status of this compartment definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 19;                              // Extensions for status
    bool experimental = 20;                                           // A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 21;                        // Extensions for experimental
    string date = 22;                                                 // The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.
    Element dateExtensionElement = 23;                                // Extensions for date
    string publisher = 24;                                            // The name of the individual or organization that published the compartment definition.
    Element publisherExtensionElement = 25;                           // Extensions for publisher
    repeated ContactDetail contact = 26;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 27;                                          // A free text natural language description of the compartment definition from a consumer's perspective.
    Element descriptionExtensionElement = 28;                         // Extensions for description
    string purpose = 29;                                              // Explaination of why this compartment definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 30;                             // Extensions for purpose
    repeated UsageContext useContext = 31;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate compartment definition instances.
    repeated CodeableConcept jurisdiction = 32;                       // A legal or geographic region in which the compartment definition is intended to be used.
    CompartmentDefinition_code code = 33;                             // Which compartment this definition describes.
    Element codeExtensionElement = 34;                                // Extensions for code
    bool search = 35;                                                 // Whether the search syntax is supported,.
    Element searchExtensionElement = 36;                              // Extensions for search
    repeated CompartmentDefinition_Resource resource = 37;            // Information about how a resource is related to the compartment.
}

/*
 * A compartment definition that defines how resources are accessed on a server.
 */
message CompartmentDefinition_Resource {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // The name of a resource supported by the server.
    Element codeExtensionElement = 6;                                 // Extensions for code
    repeated string param = 7;                                        // The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.
    repeated Element paramExtensionElement = 8;                       // Extensions for param
    string documentation = 9;                                         // Additional documentation about the resource and compartment.
    Element documentationExtensionElement = 10;                       // Extensions for documentation
}

enum Composition_status {
    Composition_status_amended = 0;
    Composition_status_final = 1;
    Composition_status_preliminary = 2;
    Composition_status_entered_in_error = 3;
}


/*
 * A set of healthcare-related information that is assembled together into a single logical document that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. While a Composition defines the structure, it does not actually contain the content: rather the full content of a document is contained in a Bundle, of which the Composition is the first resource contained.
 */
message Composition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Logical identifier for the composition, assigned when created. This identifier stays constant as the composition is changed over time.
    Composition_status status = 13;                                   // The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept type = 15;                                        // Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.
    CodeableConcept class = 16;                                       // A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.
    Reference subject = 17;                                           // Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).
    Reference encounter = 18;                                         // Describes the clinical encounter or type of care this documentation is associated with.
    string date = 19;                                                 // The composition editing time, when the composition was last logically changed by the author.
    Element dateExtensionElement = 20;                                // Extensions for date
    repeated Reference author = 21;                                   // Identifies who is responsible for the information in the composition, not necessarily who typed it in.
    string title = 22;                                                // Official human-readable label for the composition.
    Element titleExtensionElement = 23;                               // Extensions for title
    string confidentiality = 24;                                      // The code specifying the level of confidentiality of the Composition.
    Element confidentialityExtensionElement = 25;                     // Extensions for confidentiality
    repeated Composition_Attester attester = 26;                      // A participant who has attested to the accuracy of the composition/document.
    Reference custodian = 27;                                         // Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.
    repeated Composition_RelatesTo relatesTo = 28;                    // Relationships that this composition has with other compositions or documents that already exist.
    repeated Composition_Event event = 29;                            // The clinical service, such as a colonoscopy or an appendectomy, being documented.
    repeated Composition_Section section = 30;                        // The root of the sections that make up the composition.
}

/*
 * A set of healthcare-related information that is assembled together into a single logical document that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. While a Composition defines the structure, it does not actually contain the content: rather the full content of a document is contained in a Bundle, of which the Composition is the first resource contained.
 */
message Composition_Attester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated string mode = 5;                                         // The type of attestation the authenticator offers.
    repeated Element modeExtensionElement = 6;                        // Extensions for mode
    string time = 7;                                                  // When the composition was attested by the party.
    Element timeExtensionElement = 8;                                 // Extensions for time
    Reference party = 9;                                              // Who attested the composition in the specified way.
}

/*
 * A set of healthcare-related information that is assembled together into a single logical document that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. While a Composition defines the structure, it does not actually contain the content: rather the full content of a document is contained in a Bundle, of which the Composition is the first resource contained.
 */
message Composition_RelatesTo {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // The type of relationship that this composition has with anther composition or document.
    Element codeExtensionElement = 6;                                 // Extensions for code
    Identifier targetIdentifier = 7;                                  // The target composition/document of this relationship.
    Reference targetReference = 8;                                    // The target composition/document of this relationship.
}

/*
 * A set of healthcare-related information that is assembled together into a single logical document that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. While a Composition defines the structure, it does not actually contain the content: rather the full content of a document is contained in a Bundle, of which the Composition is the first resource contained.
 */
message Composition_Event {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept code = 5;                                // This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a "History and Physical Report" in which the procedure being documented is necessarily a "History and Physical" act.
    Period period = 6;                                                // The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.
    repeated Reference detail = 7;                                    // The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.
}

/*
 * A set of healthcare-related information that is assembled together into a single logical document that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. While a Composition defines the structure, it does not actually contain the content: rather the full content of a document is contained in a Bundle, of which the Composition is the first resource contained.
 */
message Composition_Section {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string title = 5;                                                 // The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
    Element titleExtensionElement = 6;                                // Extensions for title
    CodeableConcept code = 7;                                         // A code identifying the kind of content contained within the section. This must be consistent with the section title.
    Narrative text = 8;                                               // A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative.
    string mode = 9;                                                  // How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
    Element modeExtensionElement = 10;                                // Extensions for mode
    CodeableConcept orderedBy = 11;                                   // Specifies the order applied to the items in the section entries.
    repeated Reference entry = 12;                                    // A reference to the actual resource from which the narrative in the section is derived.
    CodeableConcept emptyReason = 13;                                 // If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.
    repeated Composition_Section section = 14;                        // A nested sub-section within this section.
}

enum ConceptMap_status {
    ConceptMap_status_draft = 0;
    ConceptMap_status_active = 1;
    ConceptMap_status_retired = 2;
    ConceptMap_status_unknown = 3;
}


/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published. The URL SHOULD include the major version of the concept map. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    Identifier identifier = 14;                                       // A formal identifier that is used to identify this concept map when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the concept map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the concept map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the concept map. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the concept map.
    Element titleExtensionElement = 20;                               // Extensions for title
    ConceptMap_status status = 21;                                    // The status of this concept map. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this concept map is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the concept map was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the concept map.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the concept map from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate concept map instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the concept map is intended to be used.
    string purpose = 34;                                              // Explaination of why this concept map is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the concept map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the concept map.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    string sourceUri = 38;                                            // The source value set that specifies the concepts that are being mapped.
    Element sourceUriExtensionElement = 39;                           // Extensions for sourceUri
    Reference sourceReference = 40;                                   // The source value set that specifies the concepts that are being mapped.
    string targetUri = 41;                                            // The target value set provides context to the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.
    Element targetUriExtensionElement = 42;                           // Extensions for targetUri
    Reference targetReference = 43;                                   // The target value set provides context to the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.
    repeated ConceptMap_Group group = 44;                             // A group of mappings that all have the same source and target system.
}

/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap_Group {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string source = 5;                                                // An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).
    Element sourceExtensionElement = 6;                               // Extensions for source
    string sourceVersion = 7;                                         // The specific version of the code system, as determined by the code system authority.
    Element sourceVersionExtensionElement = 8;                        // Extensions for sourceVersion
    string target = 9;                                                // An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).
    Element targetExtensionElement = 10;                              // Extensions for target
    string targetVersion = 11;                                        // The specific version of the code system, as determined by the code system authority.
    Element targetVersionExtensionElement = 12;                       // Extensions for targetVersion
    repeated ConceptMap_Element element = 13;                         // Mappings for an individual concept in the source to one or more concepts in the target.
    ConceptMap_Unmapped unmapped = 14;                                // What to do when there is no match in the mappings in the group.
}

/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap_Element {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // Identity (code or path) or the element/item being mapped.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string display = 7;                                               // The display for the code. The display is only provided to help editors when editing the concept map.
    Element displayExtensionElement = 8;                              // Extensions for display
    repeated ConceptMap_Target target = 9;                            // A concept from the target value set that this concept maps to.
}

enum ConceptMap_Target_equivalence {
    ConceptMap_Target_equivalence_equal = 0;
    ConceptMap_Target_equivalence_inexact = 1;
    ConceptMap_Target_equivalence_equivalent = 2;
    ConceptMap_Target_equivalence_wider = 3;
    ConceptMap_Target_equivalence_specializes = 4;
    ConceptMap_Target_equivalence_disjoint = 5;
    ConceptMap_Target_equivalence_narrower = 6;
    ConceptMap_Target_equivalence_unmatched = 7;
    ConceptMap_Target_equivalence_relatedto = 8;
    ConceptMap_Target_equivalence_subsumes = 9;
}


/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap_Target {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // Identity (code or path) or the element/item that the map refers to.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string display = 7;                                               // The display for the code. The display is only provided to help editors when editing the concept map.
    Element displayExtensionElement = 8;                              // Extensions for display
    ConceptMap_Target_equivalence equivalence = 9;                    // The equivalence between the source and target concepts (counting for the dependencies and products). The equivalence is read from target to source (e.g. the target is 'wider' than the source).
    Element equivalenceExtensionElement = 10;                         // Extensions for equivalence
    string comment = 11;                                              // A description of status/issues in mapping that conveys additional information not represented in  the structured data.
    Element commentExtensionElement = 12;                             // Extensions for comment
    repeated ConceptMap_DependsOn dependsOn = 13;                     // A set of additional dependencies for this mapping to hold. This mapping is only applicable if the specified element can be resolved, and it has the specified value.
    repeated ConceptMap_DependsOn product = 14;                       // A set of additional outcomes from this mapping to other elements. To properly execute this mapping, the specified element must be mapped to some data element or source that is in context. The mapping may still be useful without a place for the additional data elements, but the equivalence cannot be relied on.
}

/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap_DependsOn {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string property = 5;                                              // A reference to an element that holds a coded value that corresponds to a code system property. The idea is that the information model carries an element somwhere that is labeled to correspond with a code system property.
    Element propertyExtensionElement = 6;                             // Extensions for property
    string system = 7;                                                // An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).
    Element systemExtensionElement = 8;                               // Extensions for system
    string code = 9;                                                  // Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.
    Element codeExtensionElement = 10;                                // Extensions for code
    string display = 11;                                              // The display for the code. The display is only provided to help editors when editing the concept map.
    Element displayExtensionElement = 12;                             // Extensions for display
}

enum ConceptMap_Unmapped_mode {
    ConceptMap_Unmapped_mode_provided = 0;
    ConceptMap_Unmapped_mode_fixed = 1;
    ConceptMap_Unmapped_mode_other_map = 2;
}


/*
 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
 */
message ConceptMap_Unmapped {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    ConceptMap_Unmapped_mode mode = 5;                                // Defines which action to take if there is no match in the group. One of 3 actions is possible: use the unmapped code (this is useful when doing a mapping between versions, and only a few codes have changed), use a fixed code (a default code), or alternatively, a reference to a different concept map can be provided (by canonical URL).
    Element modeExtensionElement = 6;                                 // Extensions for mode
    string code = 7;                                                  // The fixed code to use when the mode = 'fixed'  - all unmapped codes are mapped to a single fixed code.
    Element codeExtensionElement = 8;                                 // Extensions for code
    string display = 9;                                               // The display for the code. The display is only provided to help editors when editing the concept map.
    Element displayExtensionElement = 10;                             // Extensions for display
    string url = 11;                                                  // The canonical URL of the map to use if this map contains no mapping.
    Element urlExtensionElement = 12;                                 // Extensions for url
}

enum Condition_verificationStatus {
    Condition_verificationStatus_provisional = 0;
    Condition_verificationStatus_refuted = 1;
    Condition_verificationStatus_entered_in_error = 2;
    Condition_verificationStatus_confirmed = 3;
    Condition_verificationStatus_differential = 4;
    Condition_verificationStatus_unknown = 5;
}


/*
 * A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.
 */
message Condition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this condition that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    string clinicalStatus = 13;                                       // The clinical status of the condition.
    Element clinicalStatusExtensionElement = 14;                      // Extensions for clinicalStatus
    Condition_verificationStatus verificationStatus = 15;             // The verification status to support the clinical status of the condition.
    Element verificationStatusExtensionElement = 16;                  // Extensions for verificationStatus
    repeated CodeableConcept category = 17;                           // A category assigned to the condition.
    CodeableConcept severity = 18;                                    // A subjective assessment of the severity of the condition as evaluated by the clinician.
    CodeableConcept code = 19;                                        // Identification of the condition, problem or diagnosis.
    repeated CodeableConcept bodySite = 20;                           // The anatomical location where this condition manifests itself.
    Reference subject = 21;                                           // Indicates the patient or group who the condition record is associated with.
    Reference context = 22;                                           // Encounter during which the condition was first asserted.
    string onsetDateTime = 23;                                        // Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
    Element onsetDateTimeExtensionElement = 24;                       // Extensions for onsetDateTime
    Age onsetAge = 25;                                                // Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
    Period onsetPeriod = 26;                                          // Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
    Range onsetRange = 27;                                            // Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
    string onsetString = 28;                                          // Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
    Element onsetStringExtensionElement = 29;                         // Extensions for onsetString
    string abatementDateTime = 30;                                    // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    Element abatementDateTimeExtensionElement = 31;                   // Extensions for abatementDateTime
    Age abatementAge = 32;                                            // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    bool abatementBoolean = 33;                                       // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    Element abatementBooleanExtensionElement = 34;                    // Extensions for abatementBoolean
    Period abatementPeriod = 35;                                      // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    Range abatementRange = 36;                                        // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    string abatementString = 37;                                      // The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
    Element abatementStringExtensionElement = 38;                     // Extensions for abatementString
    string assertedDate = 39;                                         // The date on which the existance of the Condition was first asserted or acknowledged.
    Element assertedDateExtensionElement = 40;                        // Extensions for assertedDate
    Reference asserter = 41;                                          // Individual who is making the condition statement.
    Condition_Stage stage = 42;                                       // Clinical stage or grade of a condition. May include formal severity assessments.
    repeated Condition_Evidence evidence = 43;                        // Supporting Evidence / manifestations that are the basis on which this condition is suspected or confirmed.
    repeated Annotation note = 44;                                    // Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.
}

/*
 * A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.
 */
message Condition_Stage {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept summary = 5;                                      // A simple summary of the stage such as "Stage 3". The determination of the stage is disease-specific.
    repeated Reference assessment = 6;                                // Reference to a formal record of the evidence on which the staging assessment is based.
}

/*
 * A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.
 */
message Condition_Evidence {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept code = 5;                                // A manifestation or symptom that led to the recording of this condition.
    repeated Reference detail = 6;                                    // Links to other relevant information, including pathology reports.
}

enum Consent_status {
    Consent_status_inactive = 0;
    Consent_status_proposed = 1;
    Consent_status_rejected = 2;
    Consent_status_draft = 3;
    Consent_status_active = 4;
    Consent_status_entered_in_error = 5;
}


/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Unique identifier for this copy of the Consent Statement.
    Consent_status status = 13;                                       // Indicates the current state of this consent.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated CodeableConcept category = 15;                           // A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.
    Reference patient = 16;                                           // The patient/healthcare consumer to whom this consent applies.
    Period period = 17;                                               // Relevant time or time-period when this Consent is applicable.
    string dateTime = 18;                                             // When this  Consent was issued / created / indexed.
    Element dateTimeExtensionElement = 19;                            // Extensions for dateTime
    repeated Reference consentingParty = 20;                          // Either the Grantor, which is the entity responsible for granting the rights listed in a Consent Directive or the Grantee, which is the entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.
    repeated Consent_Actor actor = 21;                                // Who or what is controlled by this consent. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').
    repeated CodeableConcept action = 22;                             // Actions controlled by this consent.
    repeated Reference organization = 23;                             // The organization that manages the consent, and the framework within which it is executed.
    Attachment sourceAttachment = 24;                                 // The source on which this consent statement is based. The source might be a scanned original paper form, or a reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.
    Identifier sourceIdentifier = 25;                                 // The source on which this consent statement is based. The source might be a scanned original paper form, or a reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.
    Reference sourceReference = 26;                                   // The source on which this consent statement is based. The source might be a scanned original paper form, or a reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.
    repeated Consent_Policy policy = 27;                              // The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.
    string policyRule = 28;                                           // A referece to the specific computable policy.
    Element policyRuleExtensionElement = 29;                          // Extensions for policyRule
    repeated Coding securityLabel = 30;                               // A set of security labels that define which resources are controlled by this consent. If more than one label is specified, all resources must have all the specified labels.
    repeated Coding purpose = 31;                                     // The context of the activities a user is taking - why the user is accessing the data - that are controlled by this consent.
    Period dataPeriod = 32;                                           // Clinical or Operational Relevant period of time that bounds the data controlled by this consent.
    repeated Consent_Data data = 33;                                  // The resources controlled by this consent, if specific resources are referenced.
    repeated Consent_Except except = 34;                              // An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.
}

/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Actor {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // How the individual is involved in the resources content that is described in the consent.
    Reference reference = 6;                                          // The resource that identifies the actor. To identify a actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').
}

/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Policy {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string authority = 5;                                             // Entity or Organization having regulatory jurisdiction or accountability for  enforcing policies pertaining to Consent Directives.
    Element authorityExtensionElement = 6;                            // Extensions for authority
    string uri = 7;                                                   // The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.
    Element uriExtensionElement = 8;                                  // Extensions for uri
}

enum Consent_Data_meaning {
    Consent_Data_meaning_instance = 0;
    Consent_Data_meaning_related = 1;
    Consent_Data_meaning_dependents = 2;
    Consent_Data_meaning_authoredby = 3;
}


/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Data {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Consent_Data_meaning meaning = 5;                                 // How the resource reference is interpreted when testing consent restrictions.
    Element meaningExtensionElement = 6;                              // Extensions for meaning
    Reference reference = 7;                                          // A reference to a specific resource that defines which resources are covered by this consent.
}

enum Consent_Except_type {
    Consent_Except_type_deny = 0;
    Consent_Except_type_permit = 1;
}


/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Except {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Consent_Except_type type = 5;                                     // Action  to take - permit or deny - when the exception conditions are met.
    Element typeExtensionElement = 6;                                 // Extensions for type
    Period period = 7;                                                // The timeframe in this exception is valid.
    repeated Consent_Actor1 actor = 8;                                // Who or what is controlled by this Exception. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').
    repeated CodeableConcept action = 9;                              // Actions controlled by this Exception.
    repeated Coding securityLabel = 10;                               // A set of security labels that define which resources are controlled by this exception. If more than one label is specified, all resources must have all the specified labels.
    repeated Coding purpose = 11;                                     // The context of the activities a user is taking - why the user is accessing the data - that are controlled by this exception.
    repeated Coding class = 12;                                       // The class of information covered by this exception. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.
    repeated Coding code = 13;                                        // If this code is found in an instance, then the exception applies.
    Period dataPeriod = 14;                                           // Clinical or Operational Relevant period of time that bounds the data controlled by this exception.
    repeated Consent_Data1 data = 15;                                 // The resources controlled by this exception, if specific resources are referenced.
}

/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Actor1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // How the individual is involved in the resources content that is described in the exception.
    Reference reference = 6;                                          // The resource that identifies the actor. To identify a actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').
}

enum Consent_Data1_meaning {
    Consent_Data1_meaning_instance = 0;
    Consent_Data1_meaning_related = 1;
    Consent_Data1_meaning_dependents = 2;
    Consent_Data1_meaning_authoredby = 3;
}


/*
 * A record of a healthcare consumer’s policy choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
 */
message Consent_Data1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Consent_Data1_meaning meaning = 5;                                // How the resource reference is interpreted when testing consent restrictions.
    Element meaningExtensionElement = 6;                              // Extensions for meaning
    Reference reference = 7;                                          // A reference to a specific resource that defines which resources are covered by this consent.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Unique identifier for this Contract.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    string issued = 15;                                               // When this  Contract was issued.
    Element issuedExtensionElement = 16;                              // Extensions for issued
    Period applies = 17;                                              // Relevant time or time-period when this Contract is applicable.
    repeated Reference subject = 18;                                  // The target entity impacted by or of interest to parties to the agreement.
    repeated Reference topic = 19;                                    // The matter of concern in the context of this agreement.
    repeated Reference authority = 20;                                // A formally or informally recognized grouping of people, principals, organizations, or jurisdictions formed for the purpose of achieving some form of collective action such as the promulgation, administration and enforcement of contracts and policies.
    repeated Reference domain = 21;                                   // Recognized governance framework or system operating with a circumscribed scope in accordance with specified principles, policies, processes or procedures for managing rights, actions, or behaviors of parties or principals relative to resources.
    CodeableConcept type = 22;                                        // Type of Contract such as an insurance policy, real estate contract, a will, power of attorny, Privacy or Security policy , trust framework agreement, etc.
    repeated CodeableConcept subType = 23;                            // More specific type or specialization of an overarching or more general contract such as auto insurance, home owner  insurance, prenupial agreement, Advanced-Directive, or privacy consent.
    repeated CodeableConcept action = 24;                             // Action stipulated by this Contract.
    repeated CodeableConcept actionReason = 25;                       // Reason for action stipulated by this Contract.
    CodeableConcept decisionType = 26;                                // The type of decision made by a grantor with respect to an offer made by a grantee.
    CodeableConcept contentDerivative = 27;                           // The minimal content derived from the basal information source at a specific stage in its lifecycle.
    repeated Coding securityLabel = 28;                               // A set of security labels that define which resources are controlled by this consent. If more than one label is specified, all resources must have all the specified labels.
    repeated Contract_Agent agent = 29;                               // An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.
    repeated Contract_Signer signer = 30;                             // Parties with legal standing in the Contract, including the principal parties, the grantor(s) and grantee(s), which are any person or organization bound by the contract, and any ancillary parties, which facilitate the execution of the contract such as a notary or witness.
    repeated Contract_ValuedItem valuedItem = 31;                     // Contract Valued Item List.
    repeated Contract_Term term = 32;                                 // One or more Contract Provisions, which may be related and conveyed as a group, and may contain nested groups.
    Attachment bindingAttachment = 33;                                // Legally binding Contract: This is the signed and legally recognized representation of the Contract, which is considered the "source of truth" and which would be the basis for legal action related to enforcement of this Contract.
    Reference bindingReference = 34;                                  // Legally binding Contract: This is the signed and legally recognized representation of the Contract, which is considered the "source of truth" and which would be the basis for legal action related to enforcement of this Contract.
    repeated Contract_Friendly friendly = 35;                         // The "patient friendly language" versionof the Contract in whole or in parts. "Patient friendly language" means the representation of the Contract and Contract Provisions in a manner that is readily accessible and understandable by a layperson in accordance with best practices for communication styles that ensure that those agreeing to or signing the Contract understand the roles, actions, obligations, responsibilities, and implication of the agreement.
    repeated Contract_Legal legal = 36;                               // List of Legal expressions or representations of this Contract.
    repeated Contract_Rule rule = 37;                                 // List of Computable Policy Rule Language Representations of this Contract.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Agent {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference actor = 5;                                              // Who or what parties are assigned roles in this Contract.
    repeated CodeableConcept role = 6;                                // Role type of agent assigned roles in this Contract.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Signer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Coding type = 5;                                                  // Role of this Contract signer, e.g. notary, grantee.
    Reference party = 6;                                              // Party which is a signator to this Contract.
    repeated Signature signature = 7;                                 // Legally binding Contract DSIG signature contents in Base64.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_ValuedItem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept entityCodeableConcept = 5;                        // Specific type of Contract Valued Item that may be priced.
    Reference entityReference = 6;                                    // Specific type of Contract Valued Item that may be priced.
    Identifier identifier = 7;                                        // Identifies a Contract Valued Item instance.
    string effectiveTime = 8;                                         // Indicates the time during which this Contract ValuedItem information is effective.
    Element effectiveTimeExtensionElement = 9;                        // Extensions for effectiveTime
    Quantity quantity = 10;                                           // Specifies the units by which the Contract Valued Item is measured or counted, and quantifies the countable or measurable Contract Valued Item instances.
    Money unitPrice = 11;                                             // A Contract Valued Item unit valuation measure.
    double factor = 12;                                               // A real number that represents a multiplier used in determining the overall value of the Contract Valued Item delivered. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 13;                              // Extensions for factor
    double points = 14;                                               // An amount that expresses the weighting (based on difficulty, cost and/or resource intensiveness) associated with the Contract Valued Item delivered. The concept of Points allows for assignment of point values for a Contract Valued Item, such that a monetary amount can be assigned to each point.
    Element pointsExtensionElement = 15;                              // Extensions for points
    Money net = 16;                                                   // Expresses the product of the Contract Valued Item unitQuantity and the unitPriceAmt. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Term {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // Unique identifier for this particular Contract Provision.
    string issued = 6;                                                // When this Contract Provision was issued.
    Element issuedExtensionElement = 7;                               // Extensions for issued
    Period applies = 8;                                               // Relevant time or time-period when this Contract Provision is applicable.
    CodeableConcept type = 9;                                         // Type of Contract Provision such as specific requirements, purposes for actions, obligations, prohibitions, e.g. life time maximum benefit.
    CodeableConcept subType = 10;                                     // Subtype of this Contract Provision, e.g. life time maximum payment for a contract term for specific valued item, e.g. disability payment.
    repeated Reference topic = 11;                                    // The matter of concern in the context of this provision of the agrement.
    repeated CodeableConcept action = 12;                             // Action stipulated by this Contract Provision.
    repeated CodeableConcept actionReason = 13;                       // Reason or purpose for the action stipulated by this Contract Provision.
    repeated Coding securityLabel = 14;                               // A set of security labels that define which terms are controlled by this condition.
    repeated Contract_Agent1 agent = 15;                              // An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.
    string text = 16;                                                 // Human readable form of this Contract Provision.
    Element textExtensionElement = 17;                                // Extensions for text
    repeated Contract_ValuedItem1 valuedItem = 18;                    // Contract Provision Valued Item List.
    repeated Contract_Term group = 19;                                // Nested group of Contract Provisions.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Agent1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference actor = 5;                                              // The agent assigned a role in this Contract Provision.
    repeated CodeableConcept role = 6;                                // Role played by the agent assigned this role in the execution of this Contract Provision.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_ValuedItem1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept entityCodeableConcept = 5;                        // Specific type of Contract Provision Valued Item that may be priced.
    Reference entityReference = 6;                                    // Specific type of Contract Provision Valued Item that may be priced.
    Identifier identifier = 7;                                        // Identifies a Contract Provision Valued Item instance.
    string effectiveTime = 8;                                         // Indicates the time during which this Contract Term ValuedItem information is effective.
    Element effectiveTimeExtensionElement = 9;                        // Extensions for effectiveTime
    Quantity quantity = 10;                                           // Specifies the units by which the Contract Provision Valued Item is measured or counted, and quantifies the countable or measurable Contract Term Valued Item instances.
    Money unitPrice = 11;                                             // A Contract Provision Valued Item unit valuation measure.
    double factor = 12;                                               // A real number that represents a multiplier used in determining the overall value of the Contract Provision Valued Item delivered. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 13;                              // Extensions for factor
    double points = 14;                                               // An amount that expresses the weighting (based on difficulty, cost and/or resource intensiveness) associated with the Contract Provision Valued Item delivered. The concept of Points allows for assignment of point values for a Contract ProvisionValued Item, such that a monetary amount can be assigned to each point.
    Element pointsExtensionElement = 15;                              // Extensions for points
    Money net = 16;                                                   // Expresses the product of the Contract Provision Valued Item unitQuantity and the unitPriceAmt. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Friendly {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Attachment contentAttachment = 5;                                 // Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.
    Reference contentReference = 6;                                   // Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Legal {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Attachment contentAttachment = 5;                                 // Contract legal text in human renderable form.
    Reference contentReference = 6;                                   // Contract legal text in human renderable form.
}

/*
 * A formal agreement between parties regarding the conduct of business, exchange of information or other matters.
 */
message Contract_Rule {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Attachment contentAttachment = 5;                                 // Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).
    Reference contentReference = 6;                                   // Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).
}

/*
 * Financial instrument which may be used to reimburse or pay for health care products and services.
 */
message Coverage {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The main (and possibly only) identifier for the coverage - often referred to as a Member Id, Certificate number, Personal Health Number or Case ID. May be constructed as the concatination of the Coverage.SubscriberID and the Coverage.dependant.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept type = 15;                                        // The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.
    Reference policyHolder = 16;                                      // The party who 'owns' the insurance policy,  may be an individual, corporation or the subscriber's employer.
    Reference subscriber = 17;                                        // The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.
    string subscriberId = 18;                                         // The insurer assigned ID for the Subscriber.
    Element subscriberIdExtensionElement = 19;                        // Extensions for subscriberId
    Reference beneficiary = 20;                                       // The party who benefits from the insurance coverage., the patient when services are provided.
    CodeableConcept relationship = 21;                                // The relationship of beneficiary (patient) to the subscriber.
    Period period = 22;                                               // Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.
    repeated Reference payor = 23;                                    // The program or plan underwriter or payor including both insurance and non-insurance agreements, such as patient-pay agreements. May provide multiple identifiers such as insurance company identifier or business identifier (BIN number).
    Coverage_Grouping grouping = 24;                                  // A suite of underwrite specific classifiers, for example may be used to identify a class of coverage or employer group, Policy, Plan.
    string dependent = 25;                                            // A unique identifier for a dependent under the coverage.
    Element dependentExtensionElement = 26;                           // Extensions for dependent
    string sequence = 27;                                             // An optional counter for a particular instance of the identified coverage which increments upon each renewal.
    Element sequenceExtensionElement = 28;                            // Extensions for sequence
    int64 order = 29;                                                 // The order of applicability of this coverage relative to other coverages which are currently inforce. Note, there may be gaps in the numbering and this does not imply primary, secondard etc. as the specific positioning of coverages depends upon the episode of care.
    Element orderExtensionElement = 30;                               // Extensions for order
    string network = 31;                                              // The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.
    Element networkExtensionElement = 32;                             // Extensions for network
    repeated Reference contract = 33;                                 // The policy(s) which constitute this insurance coverage.
}

/*
 * Financial instrument which may be used to reimburse or pay for health care products and services.
 */
message Coverage_Grouping {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string group = 5;                                                 // Identifies a style or collective of coverage issued by the underwriter, for example may be used to identify an employer group. May also be referred to as a Policy or Group ID.
    Element groupExtensionElement = 6;                                // Extensions for group
    string groupDisplay = 7;                                          // A short description for the group.
    Element groupDisplayExtensionElement = 8;                         // Extensions for groupDisplay
    string subGroup = 9;                                              // Identifies a style or collective of coverage issued by the underwriter, for example may be used to identify a subset of an employer group.
    Element subGroupExtensionElement = 10;                            // Extensions for subGroup
    string subGroupDisplay = 11;                                      // A short description for the subgroup.
    Element subGroupDisplayExtensionElement = 12;                     // Extensions for subGroupDisplay
    string plan = 13;                                                 // Identifies a style or collective of coverage issued by the underwriter, for example may be used to identify a collection of benefits provided to employees. May be referred to as a Section or Division ID.
    Element planExtensionElement = 14;                                // Extensions for plan
    string planDisplay = 15;                                          // A short description for the plan.
    Element planDisplayExtensionElement = 16;                         // Extensions for planDisplay
    string subPlan = 17;                                              // Identifies a sub-style or sub-collective of coverage issued by the underwriter, for example may be used to identify a subset of a collection of benefits provided to employees.
    Element subPlanExtensionElement = 18;                             // Extensions for subPlan
    string subPlanDisplay = 19;                                       // A short description for the subplan.
    Element subPlanDisplayExtensionElement = 20;                      // Extensions for subPlanDisplay
    string class = 21;                                                // Identifies a style or collective of coverage issues by the underwriter, for example may be used to identify a class of coverage such as a level of deductables or co-payment.
    Element classExtensionElement = 22;                               // Extensions for class
    string classDisplay = 23;                                         // A short description for the class.
    Element classDisplayExtensionElement = 24;                        // Extensions for classDisplay
    string subClass = 25;                                             // Identifies a sub-style or sub-collective of coverage issues by the underwriter, for example may be used to identify a subclass of coverage such as a sub-level of deductables or co-payment.
    Element subClassExtensionElement = 26;                            // Extensions for subClass
    string subClassDisplay = 27;                                      // A short description for the subclass.
    Element subClassDisplayExtensionElement = 28;                     // Extensions for subClassDisplay
}

enum DataElement_status {
    DataElement_status_draft = 0;
    DataElement_status_active = 1;
    DataElement_status_retired = 2;
    DataElement_status_unknown = 3;
}

enum DataElement_stringency {
    DataElement_stringency_equivalent = 0;
    DataElement_stringency_scaleable = 1;
    DataElement_stringency_convertable = 2;
    DataElement_stringency_flexible = 3;
    DataElement_stringency_fully_specified = 4;
    DataElement_stringency_comparable = 5;
}


/*
 * The formal description of a single piece of information that can be gathered and reported.
 */
message DataElement {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this data element when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    DataElement_status status = 17;                                   // The status of this data element. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 18;                              // Extensions for status
    bool experimental = 19;                                           // A boolean value to indicate that this data element is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 20;                        // Extensions for experimental
    string date = 21;                                                 // The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.
    Element dateExtensionElement = 22;                                // Extensions for date
    string publisher = 23;                                            // The name of the individual or organization that published the data element.
    Element publisherExtensionElement = 24;                           // Extensions for publisher
    string name = 25;                                                 // A natural language name identifying the data element. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 26;                                // Extensions for name
    string title = 27;                                                // A short, descriptive, user-friendly title for the data element.
    Element titleExtensionElement = 28;                               // Extensions for title
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    repeated UsageContext useContext = 30;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate data element instances.
    repeated CodeableConcept jurisdiction = 31;                       // A legal or geographic region in which the data element is intended to be used.
    string copyright = 32;                                            // A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.
    Element copyrightExtensionElement = 33;                           // Extensions for copyright
    DataElement_stringency stringency = 34;                           // Identifies how precise the data element is in its definition.
    Element stringencyExtensionElement = 35;                          // Extensions for stringency
    repeated DataElement_Mapping mapping = 36;                        // Identifies a specification (other than a terminology) that the elements which make up the DataElement have some correspondence with.
    repeated ElementDefinition element = 37;                          // Defines the structure, type, allowed values and other constraining characteristics of the data element.
}

/*
 * The formal description of a single piece of information that can be gathered and reported.
 */
message DataElement_Mapping {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string identity = 5;                                              // An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.
    Element identityExtensionElement = 6;                             // Extensions for identity
    string uri = 7;                                                   // An absolute URI that identifies the specification that this mapping is expressed to.
    Element uriExtensionElement = 8;                                  // Extensions for uri
    string name = 9;                                                  // A name for the specification that is being mapped to.
    Element nameExtensionElement = 10;                                // Extensions for name
    string comment = 11;                                              // Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
    Element commentExtensionElement = 12;                             // Extensions for comment
}

enum DetectedIssue_severity {
    DetectedIssue_severity_high = 0;
    DetectedIssue_severity_low = 1;
    DetectedIssue_severity_moderate = 2;
}


/*
 * Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, Ineffective treatment frequency, Procedure-condition conflict, etc.
 */
message DetectedIssue {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Business identifier associated with the detected issue record.
    string status = 13;                                               // Indicates the status of the detected issue.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept category = 15;                                    // Identifies the general type of issue identified.
    DetectedIssue_severity severity = 16;                             // Indicates the degree of importance associated with the identified issue based on the potential impact on the patient.
    Element severityExtensionElement = 17;                            // Extensions for severity
    Reference patient = 18;                                           // Indicates the patient whose record the detected issue is associated with.
    string date = 19;                                                 // The date or date-time when the detected issue was initially identified.
    Element dateExtensionElement = 20;                                // Extensions for date
    Reference author = 21;                                            // Individual or device responsible for the issue being raised.  For example, a decision support application or a pharmacist conducting a medication review.
    repeated Reference implicated = 22;                               // Indicates the resource representing the current activity or proposed activity that is potentially problematic.
    string detail = 23;                                               // A textual explanation of the detected issue.
    Element detailExtensionElement = 24;                              // Extensions for detail
    string reference = 25;                                            // The literature, knowledge-base or similar reference that describes the propensity for the detected issue identified.
    Element referenceExtensionElement = 26;                           // Extensions for reference
    repeated DetectedIssue_Mitigation mitigation = 27;                // Indicates an action that has been taken or is committed to to reduce or eliminate the likelihood of the risk identified by the detected issue from manifesting.  Can also reflect an observation of known mitigating factors that may reduce/eliminate the need for any action.
}

/*
 * Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, Ineffective treatment frequency, Procedure-condition conflict, etc.
 */
message DetectedIssue_Mitigation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept action = 5;                                       // Describes the action that was taken or the observation that was made that reduces/eliminates the risk associated with the identified issue.
    string date = 6;                                                  // Indicates when the mitigating action was documented.
    Element dateExtensionElement = 7;                                 // Extensions for date
    Reference author = 8;                                             // Identifies the practitioner who determined the mitigation and takes responsibility for the mitigation step occurring.
}

enum Device_status {
    Device_status_inactive = 0;
    Device_status_active = 1;
    Device_status_entered_in_error = 2;
    Device_status_unknown = 3;
}


/*
 * This resource identifies an instance or a type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.  Medical devices include durable (reusable) medical equipment, implantable devices, as well as disposable equipment used for diagnostic, treatment, and research for healthcare and public health.  Non-medical devices may include items such as a machine, cellphone, computer, application, etc.
 */
message Device {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Unique instance identifiers assigned to a device by manufacturers other organizations or owners.
    Device_Udi udi = 13;                                              // [Unique device identifier (UDI)](device.html#5.11.3.2.2) assigned to device label or package.
    Device_status status = 14;                                        // Status of the Device availability.
    Element statusExtensionElement = 15;                              // Extensions for status
    CodeableConcept type = 16;                                        // Code or identifier to identify a kind of device.
    string lotNumber = 17;                                            // Lot number assigned by the manufacturer.
    Element lotNumberExtensionElement = 18;                           // Extensions for lotNumber
    string manufacturer = 19;                                         // A name of the manufacturer.
    Element manufacturerExtensionElement = 20;                        // Extensions for manufacturer
    string manufactureDate = 21;                                      // The date and time when the device was manufactured.
    Element manufactureDateExtensionElement = 22;                     // Extensions for manufactureDate
    string expirationDate = 23;                                       // The date and time beyond which this device is no longer valid or should not be used (if applicable).
    Element expirationDateExtensionElement = 24;                      // Extensions for expirationDate
    string model = 25;                                                // The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.
    Element modelExtensionElement = 26;                               // Extensions for model
    string version = 27;                                              // The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.
    Element versionExtensionElement = 28;                             // Extensions for version
    Reference patient = 29;                                           // Patient information, If the device is affixed to a person.
    Reference owner = 30;                                             // An organization that is responsible for the provision and ongoing maintenance of the device.
    repeated ContactPoint contact = 31;                               // Contact details for an organization or a particular human that is responsible for the device.
    Reference location = 32;                                          // The place where the device can be found.
    string url = 33;                                                  // A network address on which the device may be contacted directly.
    Element urlExtensionElement = 34;                                 // Extensions for url
    repeated Annotation note = 35;                                    // Descriptive information, usage information or implantation information that is not captured in an existing element.
    repeated CodeableConcept safety = 36;                             // Provides additional safety characteristics about a medical device.  For example devices containing latex.
}

enum Device_Udi_entryType {
    Device_Udi_entryType_self_reported = 0;
    Device_Udi_entryType_rfid = 1;
    Device_Udi_entryType_manual = 2;
    Device_Udi_entryType_barcode = 3;
    Device_Udi_entryType_card = 4;
    Device_Udi_entryType_unknown = 5;
}


/*
 * This resource identifies an instance or a type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.  Medical devices include durable (reusable) medical equipment, implantable devices, as well as disposable equipment used for diagnostic, treatment, and research for healthcare and public health.  Non-medical devices may include items such as a machine, cellphone, computer, application, etc.
 */
message Device_Udi {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string deviceIdentifier = 5;                                      // The device identifier (DI) is a mandatory, fixed portion of a UDI that identifies the labeler and the specific version or model of a device.
    Element deviceIdentifierExtensionElement = 6;                     // Extensions for deviceIdentifier
    string name = 7;                                                  // Name of device as used in labeling or catalog.
    Element nameExtensionElement = 8;                                 // Extensions for name
    string jurisdiction = 9;                                          // The identity of the authoritative source for UDI generation within a  jurisdiction.  All UDIs are globally unique within a single namespace. with the appropriate repository uri as the system.  For example,  UDIs of devices managed in the U.S. by the FDA, the value is  http://hl7.org/fhir/NamingSystem/fda-udi.
    Element jurisdictionExtensionElement = 10;                        // Extensions for jurisdiction
    string carrierHRF = 11;                                           // The full UDI carrier as the human readable form (HRF) representation of the barcode string as printed on the packaging of the device.
    Element carrierHRFExtensionElement = 12;                          // Extensions for carrierHRF
    string carrierAIDC = 13;                                          // The full UDI carrier of the Automatic Identification and Data Capture (AIDC) technology representation of the barcode string as printed on the packaging of the device - E.g a barcode or RFID.   Because of limitations on character sets in XML and the need to round-trip JSON data through XML, AIDC Formats *SHALL* be base64 encoded.
    Element carrierAIDCExtensionElement = 14;                         // Extensions for carrierAIDC
    string issuer = 15;                                               // Organization that is charged with issuing UDIs for devices.  For example, the US FDA issuers include : 1) GS1:  http://hl7.org/fhir/NamingSystem/gs1-di,  2) HIBCC: http://hl7.org/fhir/NamingSystem/hibcc-dI,  3) ICCBBA for blood containers: http://hl7.org/fhir/NamingSystem/iccbba-blood-di,  4) ICCBA for other devices: http://hl7.org/fhir/NamingSystem/iccbba-other-di.
    Element issuerExtensionElement = 16;                              // Extensions for issuer
    Device_Udi_entryType entryType = 17;                              // A coded entry to indicate how the data was entered.
    Element entryTypeExtensionElement = 18;                           // Extensions for entryType
}

enum DeviceComponent_measurementPrinciple {
    DeviceComponent_measurementPrinciple_other = 0;
    DeviceComponent_measurementPrinciple_chemical = 1;
    DeviceComponent_measurementPrinciple_thermal = 2;
    DeviceComponent_measurementPrinciple_electrical = 3;
    DeviceComponent_measurementPrinciple_impedance = 4;
    DeviceComponent_measurementPrinciple_biological = 5;
    DeviceComponent_measurementPrinciple_mechanical = 6;
    DeviceComponent_measurementPrinciple_acoustical = 7;
    DeviceComponent_measurementPrinciple_nuclear = 8;
    DeviceComponent_measurementPrinciple_manual = 9;
    DeviceComponent_measurementPrinciple_optical = 10;
}


/*
 * The characteristics, operational status and capabilities of a medical-related component of a medical device.
 */
message DeviceComponent {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // The locally assigned unique identification by the software. For example: handle ID.
    CodeableConcept type = 13;                                        // The component type as defined in the object-oriented or metric nomenclature partition.
    string lastSystemChange = 14;                                     // The timestamp for the most recent system change which includes device configuration or setting change.
    Element lastSystemChangeExtensionElement = 15;                    // Extensions for lastSystemChange
    Reference source = 16;                                            // The link to the source Device that contains administrative device information such as manufacture, serial number, etc.
    Reference parent = 17;                                            // The link to the parent resource. For example: Channel is linked to its VMD parent.
    repeated CodeableConcept operationalStatus = 18;                  // The current operational status of the device. For example: On, Off, Standby, etc.
    CodeableConcept parameterGroup = 19;                              // The parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular.
    DeviceComponent_measurementPrinciple measurementPrinciple = 20;   // The physical principle of the measurement. For example: thermal, chemical, acoustical, etc.
    Element measurementPrincipleExtensionElement = 21;                // Extensions for measurementPrinciple
    repeated DeviceComponent_ProductionSpecification productionSpecification = 22; // The production specification such as component revision, serial number, etc.
    CodeableConcept languageCode = 23;                                // The language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US.
}

/*
 * The characteristics, operational status and capabilities of a medical-related component of a medical device.
 */
message DeviceComponent_ProductionSpecification {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept specType = 5;                                     // The specification type, such as, serial number, part number, hardware revision, software revision, etc.
    Identifier componentId = 6;                                       // The internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacturer can make use of.
    string productionSpec = 7;                                        // The printable string defining the component.
    Element productionSpecExtensionElement = 8;                       // Extensions for productionSpec
}

enum DeviceMetric_operationalStatus {
    DeviceMetric_operationalStatus_standby = 0;
    DeviceMetric_operationalStatus_entered_in_error = 1;
    DeviceMetric_operationalStatus_off = 2;
    DeviceMetric_operationalStatus_on = 3;
}

enum DeviceMetric_color {
    DeviceMetric_color_red = 0;
    DeviceMetric_color_magenta = 1;
    DeviceMetric_color_green = 2;
    DeviceMetric_color_blue = 3;
    DeviceMetric_color_white = 4;
    DeviceMetric_color_black = 5;
    DeviceMetric_color_yellow = 6;
    DeviceMetric_color_cyan = 7;
}

enum DeviceMetric_category {
    DeviceMetric_category_calculation = 0;
    DeviceMetric_category_unspecified = 1;
    DeviceMetric_category_measurement = 2;
    DeviceMetric_category_setting = 3;
}


/*
 * Describes a measurement, calculation or setting capability of a medical device.
 */
message DeviceMetric {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Describes the unique identification of this metric that has been assigned by the device or gateway software. For example: handle ID.  It should be noted that in order to make the identifier unique, the system element of the identifier should be set to the unique identifier of the device.
    CodeableConcept type = 13;                                        // Describes the type of the metric. For example: Heart Rate, PEEP Setting, etc.
    CodeableConcept unit = 14;                                        // Describes the unit that an observed value determined for this metric will have. For example: Percent, Seconds, etc.
    Reference source = 15;                                            // Describes the link to the  Device that this DeviceMetric belongs to and that contains administrative device information such as manufacturer, serial number, etc.
    Reference parent = 16;                                            // Describes the link to the  DeviceComponent that this DeviceMetric belongs to and that provide information about the location of this DeviceMetric in the containment structure of the parent Device. An example would be a DeviceComponent that represents a Channel. This reference can be used by a client application to distinguish DeviceMetrics that have the same type, but should be interpreted based on their containment location.
    DeviceMetric_operationalStatus operationalStatus = 17;            // Indicates current operational state of the device. For example: On, Off, Standby, etc.
    Element operationalStatusExtensionElement = 18;                   // Extensions for operationalStatus
    DeviceMetric_color color = 19;                                    // Describes the color representation for the metric. This is often used to aid clinicians to track and identify parameter types by color. In practice, consider a Patient Monitor that has ECG/HR and Pleth for example; the parameters are displayed in different characteristic colors, such as HR-blue, BP-green, and PR and SpO2- magenta.
    Element colorExtensionElement = 20;                               // Extensions for color
    DeviceMetric_category category = 21;                              // Indicates the category of the observation generation process. A DeviceMetric can be for example a setting, measurement, or calculation.
    Element categoryExtensionElement = 22;                            // Extensions for category
    Timing measurementPeriod = 23;                                    // Describes the measurement repetition time. This is not necessarily the same as the update period. The measurement repetition time can range from milliseconds up to hours. An example for a measurement repetition time in the range of milliseconds is the sampling rate of an ECG. An example for a measurement repetition time in the range of hours is a NIBP that is triggered automatically every hour. The update period may be different than the measurement repetition time, if the device does not update the published observed value with the same frequency as it was measured.
    repeated DeviceMetric_Calibration calibration = 24;               // Describes the calibrations that have been performed or that are required to be performed.
}

enum DeviceMetric_Calibration_type {
    DeviceMetric_Calibration_type_offset = 0;
    DeviceMetric_Calibration_type_unspecified = 1;
    DeviceMetric_Calibration_type_two_point = 2;
    DeviceMetric_Calibration_type_gain = 3;
}

enum DeviceMetric_Calibration_state {
    DeviceMetric_Calibration_state_unspecified = 0;
    DeviceMetric_Calibration_state_not_calibrated = 1;
    DeviceMetric_Calibration_state_calibration_required = 2;
    DeviceMetric_Calibration_state_calibrated = 3;
}


/*
 * Describes a measurement, calculation or setting capability of a medical device.
 */
message DeviceMetric_Calibration {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    DeviceMetric_Calibration_type type = 5;                           // Describes the type of the calibration method.
    Element typeExtensionElement = 6;                                 // Extensions for type
    DeviceMetric_Calibration_state state = 7;                         // Describes the state of the calibration.
    Element stateExtensionElement = 8;                                // Extensions for state
    string time = 9;                                                  // Describes the time last calibration has been performed.
    Element timeExtensionElement = 10;                                // Extensions for time
}

/*
 * Represents a request for a patient to employ a medical device. The device may be an implantable device, or an external assistive device, such as a walker.
 */
message DeviceRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers assigned to this order by the orderer or by the receiver.
    repeated Reference definition = 13;                               // Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.
    repeated Reference basedOn = 14;                                  // Plan/proposal/order fulfilled by this request.
    repeated Reference priorRequest = 15;                             // The request takes the place of the referenced completed or terminated request(s).
    Identifier groupIdentifier = 16;                                  // Composite request this is part of.
    string status = 17;                                               // The status of the request.
    Element statusExtensionElement = 18;                              // Extensions for status
    CodeableConcept intent = 19;                                      // Whether the request is a proposal, plan, an original order or a reflex order.
    string priority = 20;                                             // Indicates how quickly the {{title}} should be addressed with respect to other requests.
    Element priorityExtensionElement = 21;                            // Extensions for priority
    Reference codeReference = 22;                                     // The details of the device to be used.
    CodeableConcept codeCodeableConcept = 23;                         // The details of the device to be used.
    Reference subject = 24;                                           // The patient who will use the device.
    Reference context = 25;                                           // An encounter that provides additional context in which this request is made.
    string occurrenceDateTime = 26;                                   // The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".
    Element occurrenceDateTimeExtensionElement = 27;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 28;                                     // The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".
    Timing occurrenceTiming = 29;                                     // The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".
    string authoredOn = 30;                                           // When the request transitioned to being actionable.
    Element authoredOnExtensionElement = 31;                          // Extensions for authoredOn
    DeviceRequest_Requester requester = 32;                           // The individual who initiated the request and has responsibility for its activation.
    CodeableConcept performerType = 33;                               // Desired type of performer for doing the diagnostic testing.
    Reference performer = 34;                                         // The desired perfomer for doing the diagnostic testing.
    repeated CodeableConcept reasonCode = 35;                         // Reason or justification for the use of this device.
    repeated Reference reasonReference = 36;                          // Reason or justification for the use of this device.
    repeated Reference supportingInfo = 37;                           // Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).
    repeated Annotation note = 38;                                    // Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.
    repeated Reference relevantHistory = 39;                          // Key events in the history of the request.
}

/*
 * Represents a request for a patient to employ a medical device. The device may be an implantable device, or an external assistive device, such as a walker.
 */
message DeviceRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner, etc. who initiated the request.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

enum DeviceUseStatement_status {
    DeviceUseStatement_status_stopped = 0;
    DeviceUseStatement_status_intended = 1;
    DeviceUseStatement_status_active = 2;
    DeviceUseStatement_status_completed = 3;
    DeviceUseStatement_status_entered_in_error = 4;
    DeviceUseStatement_status_on_hold = 5;
}


/*
 * A record of a device being used by a patient where the record is the result of a report from the patient or another clinician.
 */
message DeviceUseStatement {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // An external identifier for this statement such as an IRI.
    DeviceUseStatement_status status = 13;                            // A code representing the patient or other source's judgment about the state of the device used that this statement is about.  Generally this will be active or completed.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference subject = 15;                                           // The patient who used the device.
    Period whenUsed = 16;                                             // The time period over which the device was used.
    Timing timingTiming = 17;                                         // How often the device was used.
    Period timingPeriod = 18;                                         // How often the device was used.
    string timingDateTime = 19;                                       // How often the device was used.
    Element timingDateTimeExtensionElement = 20;                      // Extensions for timingDateTime
    string recordedOn = 21;                                           // The time at which the statement was made/recorded.
    Element recordedOnExtensionElement = 22;                          // Extensions for recordedOn
    Reference source = 23;                                            // Who reported the device was being used by the patient.
    Reference device = 24;                                            // The details of the device used.
    repeated CodeableConcept indication = 25;                         // Reason or justification for the use of the device.
    CodeableConcept bodySite = 26;                                    // Indicates the site on the subject's body where the device was used ( i.e. the target site).
    repeated Annotation note = 27;                                    // Details about the device statement that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.
}

enum DiagnosticReport_status {
    DiagnosticReport_status_amended = 0;
    DiagnosticReport_status_appended = 1;
    DiagnosticReport_status_final = 2;
    DiagnosticReport_status_registered = 3;
    DiagnosticReport_status_cancelled = 4;
    DiagnosticReport_status_preliminary = 5;
    DiagnosticReport_status_entered_in_error = 6;
    DiagnosticReport_status_partial = 7;
    DiagnosticReport_status_corrected = 8;
    DiagnosticReport_status_unknown = 9;
}


/*
 * The findings and interpretation of diagnostic  tests performed on patients, groups of patients, devices, and locations, and/or specimens derived from these. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretations, and formatted representation of diagnostic reports.
 */
message DiagnosticReport {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers assigned to this report by the performer or other systems.
    repeated Reference basedOn = 13;                                  // Details concerning a test or procedure requested.
    DiagnosticReport_status status = 14;                              // The status of the diagnostic report as a whole.
    Element statusExtensionElement = 15;                              // Extensions for status
    CodeableConcept category = 16;                                    // A code that classifies the clinical discipline, department or diagnostic service that created the report (e.g. cardiology, biochemistry, hematology, MRI). This is used for searching, sorting and display purposes.
    CodeableConcept code = 17;                                        // A code or name that describes this diagnostic report.
    Reference subject = 18;                                           // The subject of the report. Usually, but not always, this is a patient. However diagnostic services also perform analyses on specimens collected from a variety of other sources.
    Reference context = 19;                                           // The healthcare event  (e.g. a patient and healthcare provider interaction) which this DiagnosticReport per is about.
    string effectiveDateTime = 20;                                    // The time or time-period the observed values are related to. When the subject of the report is a patient, this is usually either the time of the procedure or of specimen collection(s), but very often the source of the date/time is not known, only the date/time itself.
    Element effectiveDateTimeExtensionElement = 21;                   // Extensions for effectiveDateTime
    Period effectivePeriod = 22;                                      // The time or time-period the observed values are related to. When the subject of the report is a patient, this is usually either the time of the procedure or of specimen collection(s), but very often the source of the date/time is not known, only the date/time itself.
    string issued = 23;                                               // The date and time that this version of the report was released from the source diagnostic service.
    Element issuedExtensionElement = 24;                              // Extensions for issued
    repeated DiagnosticReport_Performer performer = 25;               // Indicates who or what participated in producing the report.
    repeated Reference specimen = 26;                                 // Details about the specimens on which this diagnostic report is based.
    repeated Reference result = 27;                                   // Observations that are part of this diagnostic report. Observations can be simple name/value pairs (e.g. "atomic" results), or they can be grouping observations that include references to other members of the group (e.g. "panels").
    repeated Reference imagingStudy = 28;                             // One or more links to full details of any imaging performed during the diagnostic investigation. Typically, this is imaging performed by DICOM enabled modalities, but this is not required. A fully enabled PACS viewer can use this information to provide views of the source images.
    repeated DiagnosticReport_Image image = 29;                       // A list of key images associated with this report. The images are generally created during the diagnostic process, and may be directly of the patient, or of treated specimens (i.e. slides of interest).
    string conclusion = 30;                                           // Concise and clinically contextualized impression / summary of the diagnostic report.
    Element conclusionExtensionElement = 31;                          // Extensions for conclusion
    repeated CodeableConcept codedDiagnosis = 32;                     // Codes for the conclusion.
    repeated Attachment presentedForm = 33;                           // Rich text representation of the entire result as issued by the diagnostic service. Multiple formats are allowed but they SHALL be semantically equivalent.
}

/*
 * The findings and interpretation of diagnostic  tests performed on patients, groups of patients, devices, and locations, and/or specimens derived from these. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretations, and formatted representation of diagnostic reports.
 */
message DiagnosticReport_Performer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // Describes the type of participation (e.g.  a responsible party, author, or verifier).
    Reference actor = 6;                                              // The reference to the  practitioner or organization involved in producing the report. For example, the diagnostic service that is responsible for issuing the report.
}

/*
 * The findings and interpretation of diagnostic  tests performed on patients, groups of patients, devices, and locations, and/or specimens derived from these. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretations, and formatted representation of diagnostic reports.
 */
message DiagnosticReport_Image {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string comment = 5;                                               // A comment about the image. Typically, this is used to provide an explanation for why the image is included, or to draw the viewer's attention to important features.
    Element commentExtensionElement = 6;                              // Extensions for comment
    Reference link = 7;                                               // Reference to the image source.
}

enum DocumentManifest_status {
    DocumentManifest_status_current = 0;
    DocumentManifest_status_superseded = 1;
    DocumentManifest_status_entered_in_error = 2;
}


/*
 * A collection of documents compiled for a purpose together with metadata that applies to the collection.
 */
message DocumentManifest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier masterIdentifier = 12;                                 // A single identifier that uniquely identifies this manifest. Principally used to refer to the manifest in non-FHIR contexts.
    repeated Identifier identifier = 13;                              // Other identifiers associated with the document manifest, including version independent  identifiers.
    DocumentManifest_status status = 14;                              // The status of this document manifest.
    Element statusExtensionElement = 15;                              // Extensions for status
    CodeableConcept type = 16;                                        // Specifies the kind of this set of documents (e.g. Patient Summary, Discharge Summary, Prescription, etc.). The type of a set of documents may be the same as one of the documents in it - especially if there is only one - but it may be wider.
    Reference subject = 17;                                           // Who or what the set of documents is about. The documents can be about a person, (patient or healthcare practitioner), a device (i.e. machine) or even a group of subjects (such as a document about a herd of farm animals, or a set of patients that share a common exposure). If the documents cross more than one subject, then more than one subject is allowed here (unusual use case).
    string created = 18;                                              // When the document manifest was created for submission to the server (not necessarily the same thing as the actual resource last modified time, since it may be modified, replicated, etc.).
    Element createdExtensionElement = 19;                             // Extensions for created
    repeated Reference author = 20;                                   // Identifies who is responsible for creating the manifest, and adding  documents to it.
    repeated Reference recipient = 21;                                // A patient, practitioner, or organization for which this set of documents is intended.
    string source = 22;                                               // Identifies the source system, application, or software that produced the document manifest.
    Element sourceExtensionElement = 23;                              // Extensions for source
    string description = 24;                                          // Human-readable description of the source document. This is sometimes known as the "title".
    Element descriptionExtensionElement = 25;                         // Extensions for description
    repeated DocumentManifest_Content content = 26;                   // The list of Documents included in the manifest.
    repeated DocumentManifest_Related related = 27;                   // Related identifiers or resources associated with the DocumentManifest.
}

/*
 * A collection of documents compiled for a purpose together with metadata that applies to the collection.
 */
message DocumentManifest_Content {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Attachment pAttachment = 5;                                       // The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed.
    Reference pReference = 6;                                         // The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed.
}

/*
 * A collection of documents compiled for a purpose together with metadata that applies to the collection.
 */
message DocumentManifest_Related {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // Related identifier to this DocumentManifest.  For example, Order numbers, accession numbers, XDW workflow numbers.
    Reference ref = 6;                                                // Related Resource to this DocumentManifest. For example, Order, ProcedureRequest,  Procedure, EligibilityRequest, etc.
}

enum DocumentReference_status {
    DocumentReference_status_current = 0;
    DocumentReference_status_superseded = 1;
    DocumentReference_status_entered_in_error = 2;
}


/*
 * A reference to a document.
 */
message DocumentReference {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier masterIdentifier = 12;                                 // Document identifier as assigned by the source of the document. This identifier is specific to this version of the document. This unique identifier may be used elsewhere to identify this version of the document.
    repeated Identifier identifier = 13;                              // Other identifiers associated with the document, including version independent identifiers.
    DocumentReference_status status = 14;                             // The status of this document reference.
    Element statusExtensionElement = 15;                              // Extensions for status
    string docStatus = 16;                                            // The status of the underlying document.
    Element docStatusExtensionElement = 17;                           // Extensions for docStatus
    CodeableConcept type = 18;                                        // Specifies the particular kind of document referenced  (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the document referenced.
    CodeableConcept class = 19;                                       // A categorization for the type of document referenced - helps for indexing and searching. This may be implied by or derived from the code specified in the DocumentReference.type.
    Reference subject = 20;                                           // Who or what the document is about. The document can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of farm animals, or a set of patients that share a common exposure).
    string created = 21;                                              // When the document was created.
    Element createdExtensionElement = 22;                             // Extensions for created
    string indexed = 23;                                              // When the document reference was created.
    Element indexedExtensionElement = 24;                             // Extensions for indexed
    repeated Reference author = 25;                                   // Identifies who is responsible for adding the information to the document.
    Reference authenticator = 26;                                     // Which person or organization authenticates that this document is valid.
    Reference custodian = 27;                                         // Identifies the organization or group who is responsible for ongoing maintenance of and access to the document.
    repeated DocumentReference_RelatesTo relatesTo = 28;              // Relationships that this document has with other document references that already exist.
    string description = 29;                                          // Human-readable description of the source document. This is sometimes known as the "title".
    Element descriptionExtensionElement = 30;                         // Extensions for description
    repeated CodeableConcept securityLabel = 31;                      // A set of Security-Tag codes specifying the level of privacy/security of the Document. Note that DocumentReference.meta.security contains the security labels of the "reference" to the document, while DocumentReference.securityLabel contains a snapshot of the security labels on the document the reference refers to.
    repeated DocumentReference_Content content = 32;                  // The document and format referenced. There may be multiple content element repetitions, each with a different format.
    DocumentReference_Context context = 33;                           // The clinical context in which the document was prepared.
}

enum DocumentReference_RelatesTo_code {
    DocumentReference_RelatesTo_code_signs = 0;
    DocumentReference_RelatesTo_code_replaces = 1;
    DocumentReference_RelatesTo_code_transforms = 2;
    DocumentReference_RelatesTo_code_appends = 3;
}


/*
 * A reference to a document.
 */
message DocumentReference_RelatesTo {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    DocumentReference_RelatesTo_code code = 5;                        // The type of relationship that this document has with anther document.
    Element codeExtensionElement = 6;                                 // Extensions for code
    Reference target = 7;                                             // The target document of this relationship.
}

/*
 * A reference to a document.
 */
message DocumentReference_Content {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Attachment attachment = 5;                                        // The document or URL of the document along with critical metadata to prove content has integrity.
    Coding format = 6;                                                // An identifier of the document encoding, structure, and template that the document conforms to beyond the base format indicated in the mimeType.
}

/*
 * A reference to a document.
 */
message DocumentReference_Context {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference encounter = 5;                                          // Describes the clinical encounter or type of care that the document content is associated with.
    repeated CodeableConcept event = 6;                               // This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a "History and Physical Report" in which the procedure being documented is necessarily a "History and Physical" act.
    Period period = 7;                                                // The time period over which the service that is described by the document was provided.
    CodeableConcept facilityType = 8;                                 // The kind of facility where the patient was seen.
    CodeableConcept practiceSetting = 9;                              // This property may convey specifics about the practice setting where the content was created, often reflecting the clinical specialty.
    Reference sourcePatientInfo = 10;                                 // The Patient Information as known when the document was published. May be a reference to a version specific, or contained.
    repeated DocumentReference_Related related = 11;                  // Related identifiers or resources associated with the DocumentReference.
}

/*
 * A reference to a document.
 */
message DocumentReference_Related {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // Related identifier to this DocumentReference. If both id and ref are present they shall refer to the same thing.
    Reference ref = 6;                                                // Related Resource to this DocumentReference. If both id and ref are present they shall refer to the same thing.
}

/*
 * A resource that includes narrative, extensions, and contained resources.
 */
message DomainResource {
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
}

/*
 * The EligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an EligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.
 */
message EligibilityRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept priority = 15;                                    // Immediate (STAT), best effort (NORMAL), deferred (DEFER).
    Reference patient = 16;                                           // Patient Resource.
    string servicedDate = 17;                                         // The date or dates when the enclosed suite of services were performed or completed.
    Element servicedDateExtensionElement = 18;                        // Extensions for servicedDate
    Period servicedPeriod = 19;                                       // The date or dates when the enclosed suite of services were performed or completed.
    string created = 20;                                              // The date when this resource was created.
    Element createdExtensionElement = 21;                             // Extensions for created
    Reference enterer = 22;                                           // Person who created the invoice/claim/pre-determination or pre-authorization.
    Reference provider = 23;                                          // The practitioner who is responsible for the services rendered to the patient.
    Reference organization = 24;                                      // The organization which is responsible for the services rendered to the patient.
    Reference insurer = 25;                                           // The Insurer who is target  of the request.
    Reference facility = 26;                                          // Facility where the services were provided.
    Reference coverage = 27;                                          // Financial instrument by which payment information for health care.
    string businessArrangement = 28;                                  // The contract number of a business agreement which describes the terms and conditions.
    Element businessArrangementExtensionElement = 29;                 // Extensions for businessArrangement
    CodeableConcept benefitCategory = 30;                             // Dental, Vision, Medical, Pharmacy, Rehab etc.
    CodeableConcept benefitSubCategory = 31;                          // Dental: basic, major, ortho; Vision exam, glasses, contacts; etc.
}

/*
 * This resource provides eligibility and plan details from the processing of an Eligibility resource.
 */
message EligibilityResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    string created = 15;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 16;                             // Extensions for created
    Reference requestProvider = 17;                                   // The practitioner who is responsible for the services rendered to the patient.
    Reference requestOrganization = 18;                               // The organization which is responsible for the services rendered to the patient.
    Reference request = 19;                                           // Original request resource reference.
    CodeableConcept outcome = 20;                                     // Transaction status: error, complete.
    string disposition = 21;                                          // A description of the status of the adjudication.
    Element dispositionExtensionElement = 22;                         // Extensions for disposition
    Reference insurer = 23;                                           // The Insurer who produced this adjudicated response.
    bool inforce = 24;                                                // Flag indicating if the coverage provided is inforce currently  if no service date(s) specified or for the whole duration of the service dates.
    Element inforceExtensionElement = 25;                             // Extensions for inforce
    repeated EligibilityResponse_Insurance insurance = 26;            // The insurer may provide both the details for the requested coverage as well as details for additional coverages known to the insurer.
    CodeableConcept form = 27;                                        // The form to be used for printing the content.
    repeated EligibilityResponse_Error error = 28;                    // Mutually exclusive with Services Provided (Item).
}

/*
 * This resource provides eligibility and plan details from the processing of an Eligibility resource.
 */
message EligibilityResponse_Insurance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference coverage = 5;                                           // A suite of updated or additional Coverages from the Insurer.
    Reference contract = 6;                                           // The contract resource which may provide more detailed information.
    repeated EligibilityResponse_BenefitBalance benefitBalance = 7;   // Benefits and optionally current balances by Category.
}

/*
 * This resource provides eligibility and plan details from the processing of an Eligibility resource.
 */
message EligibilityResponse_BenefitBalance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // Dental, Vision, Medical, Pharmacy, Rehab etc.
    CodeableConcept subCategory = 6;                                  // Dental: basic, major, ortho; Vision exam, glasses, contacts; etc.
    bool excluded = 7;                                                // True if the indicated class of service is excluded from the plan, missing or False indicated the service is included in the coverage.
    Element excludedExtensionElement = 8;                             // Extensions for excluded
    string name = 9;                                                  // A short name or tag for the benefit, for example MED01, or DENT2.
    Element nameExtensionElement = 10;                                // Extensions for name
    string description = 11;                                          // A richer description of the benefit, for example 'DENT2 covers 100% of basic, 50% of major but exclused Ortho, Implants and Costmetic services'.
    Element descriptionExtensionElement = 12;                         // Extensions for description
    CodeableConcept network = 13;                                     // Network designation.
    CodeableConcept unit = 14;                                        // Unit designation: individual or family.
    CodeableConcept term = 15;                                        // The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual vistis'.
    repeated EligibilityResponse_Financial financial = 16;            // Benefits Used to date.
}

/*
 * This resource provides eligibility and plan details from the processing of an Eligibility resource.
 */
message EligibilityResponse_Financial {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Deductable, visits, benefit amount.
    int64 allowedUnsignedInt = 6;                                     // Benefits allowed.
    Element allowedUnsignedIntExtensionElement = 7;                   // Extensions for allowedUnsignedInt
    string allowedString = 8;                                         // Benefits allowed.
    Element allowedStringExtensionElement = 9;                        // Extensions for allowedString
    Money allowedMoney = 10;                                          // Benefits allowed.
    int64 usedUnsignedInt = 11;                                       // Benefits used.
    Element usedUnsignedIntExtensionElement = 12;                     // Extensions for usedUnsignedInt
    Money usedMoney = 13;                                             // Benefits used.
}

/*
 * This resource provides eligibility and plan details from the processing of an Eligibility resource.
 */
message EligibilityResponse_Error {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // An error code,from a specified code system, which details why the eligibility check could not be performed.
}

enum Encounter_status {
    Encounter_status_triaged = 0;
    Encounter_status_arrived = 1;
    Encounter_status_onleave = 2;
    Encounter_status_cancelled = 3;
    Encounter_status_finished = 4;
    Encounter_status_planned = 5;
    Encounter_status_entered_in_error = 6;
    Encounter_status_in_progress = 7;
    Encounter_status_unknown = 8;
}


/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier(s) by which this encounter is known.
    Encounter_status status = 13;                                     // planned | arrived | triaged | in-progress | onleave | finished | cancelled +.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated Encounter_StatusHistory statusHistory = 15;              // The status history permits the encounter resource to contain the status history without needing to read through the historical versions of the resource, or even have the server store them.
    Coding class = 16;                                                // inpatient | outpatient | ambulatory | emergency +.
    repeated Encounter_ClassHistory classHistory = 17;                // The class history permits the tracking of the encounters transitions without needing to go  through the resource history.  This would be used for a case where an admission starts of as an emergency encounter, then transisions into an inpatient scenario. Doing this and not restarting a new encounter ensures that any lab/diagnostic results can more easily follow the patient and not require re-processing and not get lost or cancelled during a kindof discharge from emergency to inpatient.
    repeated CodeableConcept type = 18;                               // Specific type of encounter (e.g. e-mail consultation, surgical day-care, skilled nursing, rehabilitation).
    CodeableConcept priority = 19;                                    // Indicates the urgency of the encounter.
    Reference subject = 20;                                           // The patient ro group present at the encounter.
    repeated Reference episodeOfCare = 21;                            // Where a specific encounter should be classified as a part of a specific episode(s) of care this field should be used. This association can facilitate grouping of related encounters together for a specific purpose, such as government reporting, issue tracking, association via a common problem.  The association is recorded on the encounter as these are typically created after the episode of care, and grouped on entry rather than editing the episode of care to append another encounter to it (the episode of care could span years).
    repeated Reference incomingReferral = 22;                         // The referral request this encounter satisfies (incoming referral).
    repeated Encounter_Participant participant = 23;                  // The list of people responsible for providing the service.
    Reference appointment = 24;                                       // The appointment that scheduled this encounter.
    Period period = 25;                                               // The start and end time of the encounter.
    Duration length = 26;                                             // Quantity of time the encounter lasted. This excludes the time during leaves of absence.
    repeated CodeableConcept reason = 27;                             // Reason the encounter takes place, expressed as a code. For admissions, this can be used for a coded admission diagnosis.
    repeated Encounter_Diagnosis diagnosis = 28;                      // The list of diagnosis relevant to this encounter.
    repeated Reference account = 29;                                  // The set of accounts that may be used for billing for this Encounter.
    Encounter_Hospitalization hospitalization = 30;                   // Details about the admission to a healthcare service.
    repeated Encounter_Location location = 31;                        // List of locations where  the patient has been during this encounter.
    Reference serviceProvider = 32;                                   // An organization that is in charge of maintaining the information of this Encounter (e.g. who maintains the report or the master service catalog item, etc.). This MAY be the same as the organization on the Patient record, however it could be different. This MAY not be not the Service Delivery Location's Organization.
    Reference partOf = 33;                                            // Another Encounter of which this encounter is a part of (administratively or in time).
}

enum Encounter_StatusHistory_status {
    Encounter_StatusHistory_status_triaged = 0;
    Encounter_StatusHistory_status_arrived = 1;
    Encounter_StatusHistory_status_onleave = 2;
    Encounter_StatusHistory_status_cancelled = 3;
    Encounter_StatusHistory_status_finished = 4;
    Encounter_StatusHistory_status_planned = 5;
    Encounter_StatusHistory_status_entered_in_error = 6;
    Encounter_StatusHistory_status_in_progress = 7;
    Encounter_StatusHistory_status_unknown = 8;
}


/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_StatusHistory {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Encounter_StatusHistory_status status = 5;                        // planned | arrived | triaged | in-progress | onleave | finished | cancelled +.
    Element statusExtensionElement = 6;                               // Extensions for status
    Period period = 7;                                                // The time that the episode was in the specified status.
}

/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_ClassHistory {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Coding class = 5;                                                 // inpatient | outpatient | ambulatory | emergency +.
    Period period = 6;                                                // The time that the episode was in the specified class.
}

/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept type = 5;                                // Role of participant in encounter.
    Period period = 6;                                                // The period of time that the specified participant participated in the encounter. These can overlap or be sub-sets of the overall encounter's period.
    Reference individual = 7;                                         // Persons involved in the encounter other than the patient.
}

/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_Diagnosis {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference condition = 5;                                          // Reason the encounter takes place, as specified using information from another resource. For admissions, this is the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.
    CodeableConcept role = 6;                                         // Role that this diagnosis has within the encounter (e.g. admission, billing, discharge …).
    int64 rank = 7;                                                   // Ranking of the diagnosis (for each role type).
    Element rankExtensionElement = 8;                                 // Extensions for rank
}

/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_Hospitalization {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier preAdmissionIdentifier = 5;                            // Pre-admission identifier.
    Reference origin = 6;                                             // The location from which the patient came before admission.
    CodeableConcept admitSource = 7;                                  // From where patient was admitted (physician referral, transfer).
    CodeableConcept reAdmission = 8;                                  // Whether this hospitalization is a readmission and why if known.
    repeated CodeableConcept dietPreference = 9;                      // Diet preferences reported by the patient.
    repeated CodeableConcept specialCourtesy = 10;                    // Special courtesies (VIP, board member).
    repeated CodeableConcept specialArrangement = 11;                 // Any special requests that have been made for this hospitalization encounter, such as the provision of specific equipment or other things.
    Reference destination = 12;                                       // Location to which the patient is discharged.
    CodeableConcept dischargeDisposition = 13;                        // Category or kind of location after discharge.
}

enum Encounter_Location_status {
    Encounter_Location_status_RESERVED = 0;
    Encounter_Location_status_active = 1;
    Encounter_Location_status_planned = 2;
    Encounter_Location_status_completed = 3;
}


/*
 * An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.
 */
message Encounter_Location {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference location = 5;                                           // The location where the encounter takes place.
    Encounter_Location_status status = 6;                             // The status of the participants' presence at the specified location during the period specified. If the participant is is no longer at the location, then the period will have an end date/time.
    Element statusExtensionElement = 7;                               // Extensions for status
    Period period = 8;                                                // Time period during which the patient was present at the location.
}

enum Endpoint_status {
    Endpoint_status_test = 0;
    Endpoint_status_active = 1;
    Endpoint_status_error = 2;
    Endpoint_status_entered_in_error = 3;
    Endpoint_status_suspended = 4;
    Endpoint_status_off = 5;
}


/*
 * The technical details of an endpoint that can be used for electronic services, such as for web services providing XDS.b or a REST endpoint for another FHIR server. This may include any security context information.
 */
message Endpoint {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for the organization that is used to identify the endpoint across multiple disparate systems.
    Endpoint_status status = 13;                                      // active | suspended | error | off | test.
    Element statusExtensionElement = 14;                              // Extensions for status
    Coding connectionType = 15;                                       // A coded value that represents the technical details of the usage of this endpoint, such as what WSDLs should be used in what way. (e.g. XDS.b/DICOM/cds-hook).
    string name = 16;                                                 // A friendly name that this endpoint can be referred to with.
    Element nameExtensionElement = 17;                                // Extensions for name
    Reference managingOrganization = 18;                              // The organization that manages this endpoint (even if technically another organisation is hosting this in the cloud, it is the organisation associated with the data).
    repeated ContactPoint contact = 19;                               // Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.
    Period period = 20;                                               // The interval during which the endpoint is expected to be operational.
    repeated CodeableConcept payloadType = 21;                        // The payload type describes the acceptable content that can be communicated on the endpoint.
    repeated string payloadMimeType = 22;                             // The mime type to send the payload in - e.g. application/fhir+xml, application/fhir+json. If the mime type is not specified, then the sender could send any content (including no content depending on the connectionType).
    repeated Element payloadMimeTypeExtensionElement = 23;            // Extensions for payloadMimeType
    string address = 24;                                              // The uri that describes the actual end-point to connect to.
    Element addressExtensionElement = 25;                             // Extensions for address
    repeated string header = 26;                                      // Additional headers / information to send as part of the notification.
    repeated Element headerExtensionElement = 27;                     // Extensions for header
}

/*
 * This resource provides the insurance enrollment details to the insurer regarding a specified coverage.
 */
message EnrollmentRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    string created = 15;                                              // The date when this resource was created.
    Element createdExtensionElement = 16;                             // Extensions for created
    Reference insurer = 17;                                           // The Insurer who is target  of the request.
    Reference provider = 18;                                          // The practitioner who is responsible for the services rendered to the patient.
    Reference organization = 19;                                      // The organization which is responsible for the services rendered to the patient.
    Reference subject = 20;                                           // Patient Resource.
    Reference coverage = 21;                                          // Reference to the program or plan identification, underwriter or payor.
}

/*
 * This resource provides enrollment and plan details from the processing of an Enrollment resource.
 */
message EnrollmentResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference request = 15;                                           // Original request resource reference.
    CodeableConcept outcome = 16;                                     // Processing status: error, complete.
    string disposition = 17;                                          // A description of the status of the adjudication.
    Element dispositionExtensionElement = 18;                         // Extensions for disposition
    string created = 19;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 20;                             // Extensions for created
    Reference organization = 21;                                      // The Insurer who produced this adjudicated response.
    Reference requestProvider = 22;                                   // The practitioner who is responsible for the services rendered to the patient.
    Reference requestOrganization = 23;                               // The organization which is responsible for the services rendered to the patient.
}

enum EpisodeOfCare_status {
    EpisodeOfCare_status_onhold = 0;
    EpisodeOfCare_status_waitlist = 1;
    EpisodeOfCare_status_active = 2;
    EpisodeOfCare_status_cancelled = 3;
    EpisodeOfCare_status_finished = 4;
    EpisodeOfCare_status_planned = 5;
    EpisodeOfCare_status_entered_in_error = 6;
}


/*
 * An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.
 */
message EpisodeOfCare {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The EpisodeOfCare may be known by different identifiers for different contexts of use, such as when an external agency is tracking the Episode for funding purposes.
    EpisodeOfCare_status status = 13;                                 // planned | waitlist | active | onhold | finished | cancelled.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated EpisodeOfCare_StatusHistory statusHistory = 15;          // The history of statuses that the EpisodeOfCare has been through (without requiring processing the history of the resource).
    repeated CodeableConcept type = 16;                               // A classification of the type of episode of care; e.g. specialist referral, disease management, type of funded care.
    repeated EpisodeOfCare_Diagnosis diagnosis = 17;                  // The list of diagnosis relevant to this episode of care.
    Reference patient = 18;                                           // The patient who is the focus of this episode of care.
    Reference managingOrganization = 19;                              // The organization that has assumed the specific responsibilities for the specified duration.
    Period period = 20;                                               // The interval during which the managing organization assumes the defined responsibility.
    repeated Reference referralRequest = 21;                          // Referral Request(s) that are fulfilled by this EpisodeOfCare, incoming referrals.
    Reference careManager = 22;                                       // The practitioner that is the care manager/care co-ordinator for this patient.
    repeated Reference team = 23;                                     // The list of practitioners that may be facilitating this episode of care for specific purposes.
    repeated Reference account = 24;                                  // The set of accounts that may be used for billing for this EpisodeOfCare.
}

enum EpisodeOfCare_StatusHistory_status {
    EpisodeOfCare_StatusHistory_status_onhold = 0;
    EpisodeOfCare_StatusHistory_status_waitlist = 1;
    EpisodeOfCare_StatusHistory_status_active = 2;
    EpisodeOfCare_StatusHistory_status_cancelled = 3;
    EpisodeOfCare_StatusHistory_status_finished = 4;
    EpisodeOfCare_StatusHistory_status_planned = 5;
    EpisodeOfCare_StatusHistory_status_entered_in_error = 6;
}


/*
 * An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.
 */
message EpisodeOfCare_StatusHistory {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    EpisodeOfCare_StatusHistory_status status = 5;                    // planned | waitlist | active | onhold | finished | cancelled.
    Element statusExtensionElement = 6;                               // Extensions for status
    Period period = 7;                                                // The period during this EpisodeOfCare that the specific status applied.
}

/*
 * An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.
 */
message EpisodeOfCare_Diagnosis {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference condition = 5;                                          // A list of conditions/problems/diagnoses that this episode of care is intended to be providing care for.
    CodeableConcept role = 6;                                         // Role that this diagnosis has within the episode of care (e.g. admission, billing, discharge …).
    int64 rank = 7;                                                   // Ranking of the diagnosis (for each role type).
    Element rankExtensionElement = 8;                                 // Extensions for rank
}

enum ExpansionProfile_status {
    ExpansionProfile_status_draft = 0;
    ExpansionProfile_status_active = 1;
    ExpansionProfile_status_retired = 2;
    ExpansionProfile_status_unknown = 3;
}


/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this expansion profile when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    Identifier identifier = 14;                                       // A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    ExpansionProfile_status status = 19;                              // The status of this expansion profile. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 20;                              // Extensions for status
    bool experimental = 21;                                           // A boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 22;                        // Extensions for experimental
    string date = 23;                                                 // The date  (and optionally time) when the expansion profile was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the expansion profile changes.
    Element dateExtensionElement = 24;                                // Extensions for date
    string publisher = 25;                                            // The name of the individual or organization that published the expansion profile.
    Element publisherExtensionElement = 26;                           // Extensions for publisher
    repeated ContactDetail contact = 27;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 28;                                          // A free text natural language description of the expansion profile from a consumer's perspective.
    Element descriptionExtensionElement = 29;                         // Extensions for description
    repeated UsageContext useContext = 30;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate expansion profile instances.
    repeated CodeableConcept jurisdiction = 31;                       // A legal or geographic region in which the expansion profile is intended to be used.
    repeated ExpansionProfile_FixedVersion fixedVersion = 32;         // Fix use of a particular code system to a particular version.
    ExpansionProfile_ExcludedSystem excludedSystem = 33;              // Code system, or a particular version of a code system to be excluded from value set expansions.
    bool includeDesignations = 34;                                    // Controls whether concept designations are to be included or excluded in value set expansions.
    Element includeDesignationsExtensionElement = 35;                 // Extensions for includeDesignations
    ExpansionProfile_Designation designation = 36;                    // A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.
    bool includeDefinition = 37;                                      // Controls whether the value set definition is included or excluded in value set expansions.
    Element includeDefinitionExtensionElement = 38;                   // Extensions for includeDefinition
    bool activeOnly = 39;                                             // Controls whether inactive concepts are included or excluded in value set expansions.
    Element activeOnlyExtensionElement = 40;                          // Extensions for activeOnly
    bool excludeNested = 41;                                          // Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
    Element excludeNestedExtensionElement = 42;                       // Extensions for excludeNested
    bool excludeNotForUI = 43;                                        // Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
    Element excludeNotForUIExtensionElement = 44;                     // Extensions for excludeNotForUI
    bool excludePostCoordinated = 45;                                 // Controls whether or not the value set expansion includes post coordinated codes.
    Element excludePostCoordinatedExtensionElement = 46;              // Extensions for excludePostCoordinated
    string displayLanguage = 47;                                      // Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
    Element displayLanguageExtensionElement = 48;                     // Extensions for displayLanguage
    bool limitedExpansion = 49;                                       // If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
    Element limitedExpansionExtensionElement = 50;                    // Extensions for limitedExpansion
}

enum ExpansionProfile_FixedVersion_mode {
    ExpansionProfile_FixedVersion_mode_default = 0;
    ExpansionProfile_FixedVersion_mode_check = 1;
    ExpansionProfile_FixedVersion_mode_override = 2;
}


/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_FixedVersion {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string system = 5;                                                // The specific system for which to fix the version.
    Element systemExtensionElement = 6;                               // Extensions for system
    string version = 7;                                               // The version of the code system from which codes in the expansion should be included.
    Element versionExtensionElement = 8;                              // Extensions for version
    ExpansionProfile_FixedVersion_mode mode = 9;                      // How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
    Element modeExtensionElement = 10;                                // Extensions for mode
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_ExcludedSystem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string system = 5;                                                // An absolute URI which is the code system to be excluded.
    Element systemExtensionElement = 6;                               // Extensions for system
    string version = 7;                                               // The version of the code system from which codes in the expansion should be excluded.
    Element versionExtensionElement = 8;                              // Extensions for version
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_Designation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    ExpansionProfile_Include include = 5;                             // Designations to be included.
    ExpansionProfile_Exclude exclude = 6;                             // Designations to be excluded.
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_Include {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated ExpansionProfile_Designation1 designation = 5;           // A data group for each designation to be included.
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_Designation1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string language = 5;                                              // The language this designation is defined for.
    Element languageExtensionElement = 6;                             // Extensions for language
    Coding use = 7;                                                   // Which kinds of designation to include in the expansion.
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_Exclude {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated ExpansionProfile_Designation2 designation = 5;           // A data group for each designation to be excluded.
}

/*
 * Resource to define constraints on the Expansion of a FHIR ValueSet.
 */
message ExpansionProfile_Designation2 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string language = 5;                                              // The language this designation is defined for.
    Element languageExtensionElement = 6;                             // Extensions for language
    Coding use = 7;                                                   // Which kinds of designation to exclude from the expansion.
}

enum ExplanationOfBenefit_status {
    ExplanationOfBenefit_status_draft = 0;
    ExplanationOfBenefit_status_active = 1;
    ExplanationOfBenefit_status_cancelled = 2;
    ExplanationOfBenefit_status_entered_in_error = 3;
}


/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The EOB Business Identifier.
    ExplanationOfBenefit_status status = 13;                          // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept type = 15;                                        // The category of claim, eg, oral, pharmacy, vision, insitutional, professional.
    repeated CodeableConcept subType = 16;                            // A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.
    Reference patient = 17;                                           // Patient Resource.
    Period billablePeriod = 18;                                       // The billable period for which charges are being submitted.
    string created = 19;                                              // The date when the EOB was created.
    Element createdExtensionElement = 20;                             // Extensions for created
    Reference enterer = 21;                                           // The person who created the explanation of benefit.
    Reference insurer = 22;                                           // The insurer which is responsible for the explanation of benefit.
    Reference provider = 23;                                          // The provider which is responsible for the claim.
    Reference organization = 24;                                      // The provider which is responsible for the claim.
    Reference referral = 25;                                          // The referral resource which lists the date, practitioner, reason and other supporting information.
    Reference facility = 26;                                          // Facility where the services were provided.
    Reference claim = 27;                                             // The business identifier for the instance: invoice number, claim number, pre-determination or pre-authorization number.
    Reference claimResponse = 28;                                     // The business identifier for the instance: invoice number, claim number, pre-determination or pre-authorization number.
    CodeableConcept outcome = 29;                                     // Processing outcome errror, partial or complete processing.
    string disposition = 30;                                          // A description of the status of the adjudication.
    Element dispositionExtensionElement = 31;                         // Extensions for disposition
    repeated ExplanationOfBenefit_Related related = 32;               // Other claims which are related to this claim such as prior claim versions or for related services.
    Reference prescription = 33;                                      // Prescription to support the dispensing of Pharmacy or Vision products.
    Reference originalPrescription = 34;                              // Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.
    ExplanationOfBenefit_Payee payee = 35;                            // The party to be reimbursed for the services.
    repeated ExplanationOfBenefit_Information information = 36;       // Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.
    repeated ExplanationOfBenefit_CareTeam careTeam = 37;             // The members of the team who provided the overall service as well as their role and whether responsible and qualifications.
    repeated ExplanationOfBenefit_Diagnosis diagnosis = 38;           // Ordered list of patient diagnosis for which care is sought.
    repeated ExplanationOfBenefit_Procedure procedure = 39;           // Ordered list of patient procedures performed to support the adjudication.
    int64 precedence = 40;                                            // Precedence (primary, secondary, etc.).
    Element precedenceExtensionElement = 41;                          // Extensions for precedence
    ExplanationOfBenefit_Insurance insurance = 42;                    // Financial instrument by which payment information for health care.
    ExplanationOfBenefit_Accident accident = 43;                      // An accident which resulted in the need for healthcare services.
    Period employmentImpacted = 44;                                   // The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).
    Period hospitalization = 45;                                      // The start and optional end dates of when the patient was confined to a treatment center.
    repeated ExplanationOfBenefit_Item item = 46;                     // First tier of goods and services.
    repeated ExplanationOfBenefit_AddItem addItem = 47;               // The first tier service adjudications for payor added services.
    Money totalCost = 48;                                             // The total cost of the services reported.
    Money unallocDeductable = 49;                                     // The amount of deductable applied which was not allocated to any particular service line.
    Money totalBenefit = 50;                                          // Total amount of benefit payable (Equal to sum of the Benefit amounts from all detail lines and additions less the Unallocated Deductable).
    ExplanationOfBenefit_Payment payment = 51;                        // Payment details for the claim if the claim has been paid.
    CodeableConcept form = 52;                                        // The form to be used for printing the content.
    repeated ExplanationOfBenefit_ProcessNote processNote = 53;       // Note text.
    repeated ExplanationOfBenefit_BenefitBalance benefitBalance = 54; // Balance by Benefit Category.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Related {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference claim = 5;                                              // Other claims which are related to this claim such as prior claim versions or for related services.
    CodeableConcept relationship = 6;                                 // For example prior or umbrella.
    Identifier reference = 7;                                         // An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Payee {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Type of Party to be reimbursed: Subscriber, provider, other.
    Reference party = 6;                                              // Party to be reimbursed: Subscriber, provider, other.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Information {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of the information element which serves to provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept category = 7;                                     // The general class of the information supplied: information; exception; accident, employment; onset, etc.
    CodeableConcept code = 8;                                         // System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.
    string timingDate = 9;                                            // The date when or period to which this information refers.
    Element timingDateExtensionElement = 10;                          // Extensions for timingDate
    Period timingPeriod = 11;                                         // The date when or period to which this information refers.
    string valueString = 12;                                          // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Element valueStringExtensionElement = 13;                         // Extensions for valueString
    Quantity valueQuantity = 14;                                      // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Attachment valueAttachment = 15;                                  // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Reference valueReference = 16;                                    // Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
    Coding reason = 17;                                               // For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_CareTeam {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of careteam which serves to order and provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    Reference provider = 7;                                           // The members of the team who provided the overall service.
    bool responsible = 8;                                             // The practitioner who is billing and responsible for the claimed services rendered to the patient.
    Element responsibleExtensionElement = 9;                          // Extensions for responsible
    CodeableConcept role = 10;                                        // The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.
    CodeableConcept qualification = 11;                               // The qualification which is applicable for this service.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Diagnosis {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of diagnosis which serves to provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept diagnosisCodeableConcept = 7;                     // The diagnosis.
    Reference diagnosisReference = 8;                                 // The diagnosis.
    repeated CodeableConcept type = 9;                                // The type of the Diagnosis, for example: admitting, primary, secondary, discharge.
    CodeableConcept packageCode = 10;                                 // The package billing code, for example DRG, based on the assigned grouping code system.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Procedure {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // Sequence of procedures which serves to order and provide a link.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    string date = 7;                                                  // Date and optionally time the procedure was performed .
    Element dateExtensionElement = 8;                                 // Extensions for date
    CodeableConcept procedureCodeableConcept = 9;                     // The procedure code.
    Reference procedureReference = 10;                                // The procedure code.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Insurance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference coverage = 5;                                           // Reference to the program or plan identification, underwriter or payor.
    repeated string preAuthRef = 6;                                   // A list of references from the Insurer to which these services pertain.
    repeated Element preAuthRefExtensionElement = 7;                  // Extensions for preAuthRef
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Accident {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string date = 5;                                                  // Date of an accident which these services are addressing.
    Element dateExtensionElement = 6;                                 // Extensions for date
    CodeableConcept type = 7;                                         // Type of accident: work, auto, etc.
    Address locationAddress = 8;                                      // Where the accident occurred.
    Reference locationReference = 9;                                  // Where the accident occurred.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    repeated int64 careTeamLinkId = 7;                                // Careteam applicable for this service or product line.
    repeated Element careTeamLinkIdExtensionElement = 8;              // Extensions for careTeamLinkId
    repeated int64 diagnosisLinkId = 9;                               // Diagnosis applicable for this service or product line.
    repeated Element diagnosisLinkIdExtensionElement = 10;            // Extensions for diagnosisLinkId
    repeated int64 procedureLinkId = 11;                              // Procedures applicable for this service or product line.
    repeated Element procedureLinkIdExtensionElement = 12;            // Extensions for procedureLinkId
    repeated int64 informationLinkId = 13;                            // Exceptions, special conditions and supporting information pplicable for this service or product line.
    repeated Element informationLinkIdExtensionElement = 14;          // Extensions for informationLinkId
    CodeableConcept revenue = 15;                                     // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 16;                                    // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 17;                                     // If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
    repeated CodeableConcept modifier = 18;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 19;                        // For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
    string servicedDate = 20;                                         // The date or dates when the enclosed suite of services were performed or completed.
    Element servicedDateExtensionElement = 21;                        // Extensions for servicedDate
    Period servicedPeriod = 22;                                       // The date or dates when the enclosed suite of services were performed or completed.
    CodeableConcept locationCodeableConcept = 23;                     // Where the service was provided.
    Address locationAddress = 24;                                     // Where the service was provided.
    Reference locationReference = 25;                                 // Where the service was provided.
    Quantity quantity = 26;                                           // The number of repetitions of a service or product.
    Money unitPrice = 27;                                             // If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
    double factor = 28;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 29;                              // Extensions for factor
    Money net = 30;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 31;                                      // List of Unique Device Identifiers associated with this line item.
    CodeableConcept bodySite = 32;                                    // Physical service site on the patient (limb, tooth, etc).
    repeated CodeableConcept subSite = 33;                            // A region or surface of the site, eg. limb region or tooth surface(s).
    repeated Reference encounter = 34;                                // A billed item may include goods or services provided in multiple encounters.
    repeated int64 noteNumber = 35;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 36;                 // Extensions for noteNumber
    repeated ExplanationOfBenefit_Adjudication adjudication = 37;     // The adjudications results.
    repeated ExplanationOfBenefit_Detail detail = 38;                 // Second tier of goods and services.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Adjudication {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // Code indicating: Co-Pay, deductable, elegible, benefit, tax, etc.
    CodeableConcept reason = 6;                                       // Adjudication reason such as limit reached.
    Money amount = 7;                                                 // Monitory amount associated with the code.
    double value = 8;                                                 // A non-monetary value for example a percentage. Mutually exclusive to the amount element above.
    Element valueExtensionElement = 9;                                // Extensions for value
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept type = 7;                                         // The type of product or service.
    CodeableConcept revenue = 8;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 9;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 10;                                     // If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
    repeated CodeableConcept modifier = 11;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 12;                        // For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
    Quantity quantity = 13;                                           // The number of repetitions of a service or product.
    Money unitPrice = 14;                                             // If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
    double factor = 15;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 16;                              // Extensions for factor
    Money net = 17;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 18;                                      // List of Unique Device Identifiers associated with this line item.
    repeated int64 noteNumber = 19;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 20;                 // Extensions for noteNumber
    repeated ExplanationOfBenefit_Adjudication adjudication = 21;     // The adjudications results.
    repeated ExplanationOfBenefit_SubDetail subDetail = 22;           // Third tier of goods and services.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_SubDetail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequence = 5;                                               // A service line number.
    Element sequenceExtensionElement = 6;                             // Extensions for sequence
    CodeableConcept type = 7;                                         // The type of product or service.
    CodeableConcept revenue = 8;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 9;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 10;                                     // A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).
    repeated CodeableConcept modifier = 11;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    repeated CodeableConcept programCode = 12;                        // For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
    Quantity quantity = 13;                                           // The number of repetitions of a service or product.
    Money unitPrice = 14;                                             // The fee for an addittional service or product or charge.
    double factor = 15;                                               // A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
    Element factorExtensionElement = 16;                              // Extensions for factor
    Money net = 17;                                                   // The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
    repeated Reference udi = 18;                                      // List of Unique Device Identifiers associated with this line item.
    repeated int64 noteNumber = 19;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 20;                 // Extensions for noteNumber
    repeated ExplanationOfBenefit_Adjudication adjudication = 21;     // The adjudications results.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_AddItem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated int64 sequenceLinkId = 5;                                // List of input service items which this service line is intended to replace.
    repeated Element sequenceLinkIdExtensionElement = 6;              // Extensions for sequenceLinkId
    CodeableConcept revenue = 7;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 8;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 9;                                      // If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
    repeated CodeableConcept modifier = 10;                           // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    Money fee = 11;                                                   // The fee charged for the professional service or product.
    repeated int64 noteNumber = 12;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 13;                 // Extensions for noteNumber
    repeated ExplanationOfBenefit_Adjudication adjudication = 14;     // The adjudications results.
    repeated ExplanationOfBenefit_Detail1 detail = 15;                // The second tier service adjudications for payor added services.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Detail1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept revenue = 5;                                      // The type of reveneu or cost center providing the product and/or service.
    CodeableConcept category = 6;                                     // Health Care Service Type Codes  to identify the classification of service or benefits.
    CodeableConcept service = 7;                                      // A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).
    repeated CodeableConcept modifier = 8;                            // Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
    Money fee = 9;                                                    // The fee charged for the professional service or product.
    repeated int64 noteNumber = 10;                                   // A list of note references to the notes provided below.
    repeated Element noteNumberExtensionElement = 11;                 // Extensions for noteNumber
    repeated ExplanationOfBenefit_Adjudication adjudication = 12;     // The adjudications results.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Payment {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Whether this represents partial or complete payment of the claim.
    Money adjustment = 6;                                             // Adjustment to the payment of this transaction which is not related to adjudication of this transaction.
    CodeableConcept adjustmentReason = 7;                             // Reason for the payment adjustment.
    string date = 8;                                                  // Estimated payment date.
    Element dateExtensionElement = 9;                                 // Extensions for date
    Money amount = 10;                                                // Payable less any payment adjustment.
    Identifier identifier = 11;                                       // Payment identifer.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_ProcessNote {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 number = 5;                                                 // An integer associated with each note which may be referred to from each service line item.
    Element numberExtensionElement = 6;                               // Extensions for number
    CodeableConcept type = 7;                                         // The note purpose: Print/Display.
    string text = 8;                                                  // The note text.
    Element textExtensionElement = 9;                                 // Extensions for text
    CodeableConcept language = 10;                                    // The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_BenefitBalance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // Dental, Vision, Medical, Pharmacy, Rehab etc.
    CodeableConcept subCategory = 6;                                  // Dental: basic, major, ortho; Vision exam, glasses, contacts; etc.
    bool excluded = 7;                                                // True if the indicated class of service is excluded from the plan, missing or False indicated the service is included in the coverage.
    Element excludedExtensionElement = 8;                             // Extensions for excluded
    string name = 9;                                                  // A short name or tag for the benefit, for example MED01, or DENT2.
    Element nameExtensionElement = 10;                                // Extensions for name
    string description = 11;                                          // A richer description of the benefit, for example 'DENT2 covers 100% of basic, 50% of major but exclused Ortho, Implants and Costmetic services'.
    Element descriptionExtensionElement = 12;                         // Extensions for description
    CodeableConcept network = 13;                                     // Network designation.
    CodeableConcept unit = 14;                                        // Unit designation: individual or family.
    CodeableConcept term = 15;                                        // The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual vistis'.
    repeated ExplanationOfBenefit_Financial financial = 16;           // Benefits Used to date.
}

/*
 * This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.
 */
message ExplanationOfBenefit_Financial {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Deductable, visits, benefit amount.
    int64 allowedUnsignedInt = 6;                                     // Benefits allowed.
    Element allowedUnsignedIntExtensionElement = 7;                   // Extensions for allowedUnsignedInt
    string allowedString = 8;                                         // Benefits allowed.
    Element allowedStringExtensionElement = 9;                        // Extensions for allowedString
    Money allowedMoney = 10;                                          // Benefits allowed.
    int64 usedUnsignedInt = 11;                                       // Benefits used.
    Element usedUnsignedIntExtensionElement = 12;                     // Extensions for usedUnsignedInt
    Money usedMoney = 13;                                             // Benefits used.
}

enum FamilyMemberHistory_status {
    FamilyMemberHistory_status_completed = 0;
    FamilyMemberHistory_status_entered_in_error = 1;
    FamilyMemberHistory_status_health_unknown = 2;
    FamilyMemberHistory_status_partial = 3;
}

enum FamilyMemberHistory_gender {
    FamilyMemberHistory_gender_other = 0;
    FamilyMemberHistory_gender_female = 1;
    FamilyMemberHistory_gender_male = 2;
    FamilyMemberHistory_gender_unknown = 3;
}


/*
 * Significant health events and conditions for a person related to the patient relevant in the context of care for the patient.
 */
message FamilyMemberHistory {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this family member history record that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    repeated Reference definition = 13;                               // A protocol or questionnaire that was adhered to in whole or in part by this event.
    FamilyMemberHistory_status status = 14;                           // A code specifying the status of the record of the family history of a specific family member.
    Element statusExtensionElement = 15;                              // Extensions for status
    bool notDone = 16;                                                // If true, indicates the taking of an individual family member's history did not occur. The notDone element should not be used to document negated conditions, such as a family member that did not have a condition.
    Element notDoneExtensionElement = 17;                             // Extensions for notDone
    CodeableConcept notDoneReason = 18;                               // Describes why the family member's history is absent.
    Reference patient = 19;                                           // The person who this history concerns.
    string date = 20;                                                 // The date (and possibly time) when the family member history was taken.
    Element dateExtensionElement = 21;                                // Extensions for date
    string name = 22;                                                 // This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".
    Element nameExtensionElement = 23;                                // Extensions for name
    CodeableConcept relationship = 24;                                // The type of relationship this person has to the patient (father, mother, brother etc.).
    FamilyMemberHistory_gender gender = 25;                           // Administrative Gender - the gender that the relative is considered to have for administration and record keeping purposes.
    Element genderExtensionElement = 26;                              // Extensions for gender
    Period bornPeriod = 27;                                           // The actual or approximate date of birth of the relative.
    string bornDate = 28;                                             // The actual or approximate date of birth of the relative.
    Element bornDateExtensionElement = 29;                            // Extensions for bornDate
    string bornString = 30;                                           // The actual or approximate date of birth of the relative.
    Element bornStringExtensionElement = 31;                          // Extensions for bornString
    Age ageAge = 32;                                                  // The age of the relative at the time the family member history is recorded.
    Range ageRange = 33;                                              // The age of the relative at the time the family member history is recorded.
    string ageString = 34;                                            // The age of the relative at the time the family member history is recorded.
    Element ageStringExtensionElement = 35;                           // Extensions for ageString
    bool estimatedAge = 36;                                           // If true, indicates that the age value specified is an estimated value.
    Element estimatedAgeExtensionElement = 37;                        // Extensions for estimatedAge
    bool deceasedBoolean = 38;                                        // Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
    Element deceasedBooleanExtensionElement = 39;                     // Extensions for deceasedBoolean
    Age deceasedAge = 40;                                             // Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
    Range deceasedRange = 41;                                         // Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
    string deceasedDate = 42;                                         // Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
    Element deceasedDateExtensionElement = 43;                        // Extensions for deceasedDate
    string deceasedString = 44;                                       // Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
    Element deceasedStringExtensionElement = 45;                      // Extensions for deceasedString
    repeated CodeableConcept reasonCode = 46;                         // Describes why the family member history occurred in coded or textual form.
    repeated Reference reasonReference = 47;                          // Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.
    repeated Annotation note = 48;                                    // This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.
    repeated FamilyMemberHistory_Condition condition = 49;            // The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.
}

/*
 * Significant health events and conditions for a person related to the patient relevant in the context of care for the patient.
 */
message FamilyMemberHistory_Condition {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.
    CodeableConcept outcome = 6;                                      // Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.
    Age onsetAge = 7;                                                 // Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.
    Range onsetRange = 8;                                             // Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.
    Period onsetPeriod = 9;                                           // Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.
    string onsetString = 10;                                          // Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.
    Element onsetStringExtensionElement = 11;                         // Extensions for onsetString
    repeated Annotation note = 12;                                    // An area where general notes can be placed about this specific condition.
}

enum Flag_status {
    Flag_status_inactive = 0;
    Flag_status_active = 1;
    Flag_status_entered_in_error = 2;
}


/*
 * Prospective warnings of potential issues when providing care to the patient.
 */
message Flag {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier assigned to the flag for external use (outside the FHIR environment).
    Flag_status status = 13;                                          // Supports basic workflow.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept category = 15;                                    // Allows an flag to be divided into different categories like clinical, administrative etc. Intended to be used as a means of filtering which flags are displayed to particular user or in a given context.
    CodeableConcept code = 16;                                        // The coded value or textual component of the flag to display to the user.
    Reference subject = 17;                                           // The patient, location, group , organization , or practitioner, etc. this is about record this flag is associated with.
    Period period = 18;                                               // The period of time from the activation of the flag to inactivation of the flag. If the flag is active, the end of the period should be unspecified.
    Reference encounter = 19;                                         // This alert is only relevant during the encounter.
    Reference author = 20;                                            // The person, organization or device that created the flag.
}

enum Goal_status {
    Goal_status_sustaining = 0;
    Goal_status_rejected = 1;
    Goal_status_accepted = 2;
    Goal_status_planned = 3;
    Goal_status_ahead_of_target = 4;
    Goal_status_in_progress = 5;
    Goal_status_proposed = 6;
    Goal_status_achieved = 7;
    Goal_status_cancelled = 8;
    Goal_status_on_target = 9;
    Goal_status_entered_in_error = 10;
    Goal_status_behind_target = 11;
    Goal_status_on_hold = 12;
}


/*
 * Describes the intended objective(s) for a patient, group or organization care, for example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.
 */
message Goal {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this care plan that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    Goal_status status = 13;                                          // Indicates whether the goal has been reached and is still considered relevant.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated CodeableConcept category = 15;                           // Indicates a category the goal falls within.
    CodeableConcept priority = 16;                                    // Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.
    CodeableConcept description = 17;                                 // Human-readable and/or coded description of a specific desired objective of care, such as "control blood pressure" or "negotiate an obstacle course" or "dance with child at wedding".
    Reference subject = 18;                                           // Identifies the patient, group or organization for whom the goal is being established.
    string startDate = 19;                                            // The date or event after which the goal should begin being pursued.
    Element startDateExtensionElement = 20;                           // Extensions for startDate
    CodeableConcept startCodeableConcept = 21;                        // The date or event after which the goal should begin being pursued.
    Goal_Target target = 22;                                          // Indicates what should be done by when.
    string statusDate = 23;                                           // Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.
    Element statusDateExtensionElement = 24;                          // Extensions for statusDate
    string statusReason = 25;                                         // Captures the reason for the current status.
    Element statusReasonExtensionElement = 26;                        // Extensions for statusReason
    Reference expressedBy = 27;                                       // Indicates whose goal this is - patient goal, practitioner goal, etc.
    repeated Reference addresses = 28;                                // The identified conditions and other health record elements that are intended to be addressed by the goal.
    repeated Annotation note = 29;                                    // Any comments related to the goal.
    repeated CodeableConcept outcomeCode = 30;                        // Identifies the change (or lack of change) at the point when the status of the goal is assessed.
    repeated Reference outcomeReference = 31;                         // Details of what's changed (or not changed).
}

/*
 * Describes the intended objective(s) for a patient, group or organization care, for example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.
 */
message Goal_Target {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept measure = 5;                                      // The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.
    Quantity detailQuantity = 6;                                      // The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.
    Range detailRange = 7;                                            // The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.
    CodeableConcept detailCodeableConcept = 8;                        // The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.
    string dueDate = 9;                                               // Indicates either the date or the duration after start by which the goal should be met.
    Element dueDateExtensionElement = 10;                             // Extensions for dueDate
    Duration dueDuration = 11;                                        // Indicates either the date or the duration after start by which the goal should be met.
}

enum GraphDefinition_status {
    GraphDefinition_status_draft = 0;
    GraphDefinition_status_active = 1;
    GraphDefinition_status_retired = 2;
    GraphDefinition_status_unknown = 3;
}


/*
 * A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.
 */
message GraphDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this graph definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this graph definition is (or will be) published. The URL SHOULD include the major version of the graph definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string version = 14;                                              // The identifier that is used to identify this version of the graph definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the graph definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 15;                             // Extensions for version
    string name = 16;                                                 // A natural language name identifying the graph definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 17;                                // Extensions for name
    GraphDefinition_status status = 18;                               // The status of this graph definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 19;                              // Extensions for status
    bool experimental = 20;                                           // A boolean value to indicate that this graph definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 21;                        // Extensions for experimental
    string date = 22;                                                 // The date  (and optionally time) when the graph definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the graph definition changes.
    Element dateExtensionElement = 23;                                // Extensions for date
    string publisher = 24;                                            // The name of the individual or organization that published the graph definition.
    Element publisherExtensionElement = 25;                           // Extensions for publisher
    repeated ContactDetail contact = 26;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 27;                                          // A free text natural language description of the graph definition from a consumer's perspective.
    Element descriptionExtensionElement = 28;                         // Extensions for description
    repeated UsageContext useContext = 29;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate graph definition instances.
    repeated CodeableConcept jurisdiction = 30;                       // A legal or geographic region in which the graph definition is intended to be used.
    string purpose = 31;                                              // Explaination of why this graph definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 32;                             // Extensions for purpose
    string start = 33;                                                // The type of FHIR resource at which instances of this graph start.
    Element startExtensionElement = 34;                               // Extensions for start
    string profile = 35;                                              // The profile that describes the use of the base resource.
    Element profileExtensionElement = 36;                             // Extensions for profile
    repeated GraphDefinition_Link link = 37;                          // Links this graph makes rules about.
}

/*
 * A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.
 */
message GraphDefinition_Link {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string path = 5;                                                  // Path in the resource that contains the link.
    Element pathExtensionElement = 6;                                 // Extensions for path
    string sliceName = 7;                                             // Which slice (if profiled).
    Element sliceNameExtensionElement = 8;                            // Extensions for sliceName
    int64 min = 9;                                                    // Minimum occurrences for this link.
    Element minExtensionElement = 10;                                 // Extensions for min
    string max = 11;                                                  // Maximum occurrences for this link.
    Element maxExtensionElement = 12;                                 // Extensions for max
    string description = 13;                                          // Information about why this link is of interest in this graph definition.
    Element descriptionExtensionElement = 14;                         // Extensions for description
    repeated GraphDefinition_Target target = 15;                      // Potential target for the link.
}

/*
 * A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.
 */
message GraphDefinition_Target {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // Type of resource this link refers to.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string profile = 7;                                               // Profile for the target resource.
    Element profileExtensionElement = 8;                              // Extensions for profile
    repeated GraphDefinition_Compartment compartment = 9;             // Compartment Consistency Rules.
    repeated GraphDefinition_Link link = 10;                          // Additional links from target resource.
}

enum GraphDefinition_Compartment_rule {
    GraphDefinition_Compartment_rule_identical = 0;
    GraphDefinition_Compartment_rule_custom = 1;
    GraphDefinition_Compartment_rule_different = 2;
    GraphDefinition_Compartment_rule_matching = 3;
}


/*
 * A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.
 */
message GraphDefinition_Compartment {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // Identifies the compartment.
    Element codeExtensionElement = 6;                                 // Extensions for code
    GraphDefinition_Compartment_rule rule = 7;                        // identical | matching | different | no-rule | custom.
    Element ruleExtensionElement = 8;                                 // Extensions for rule
    string expression = 9;                                            // Custom rule, as a FHIRPath expression.
    Element expressionExtensionElement = 10;                          // Extensions for expression
    string description = 11;                                          // Documentation for FHIRPath expression.
    Element descriptionExtensionElement = 12;                         // Extensions for description
}

enum Group_type {
    Group_type_practitioner = 0;
    Group_type_person = 1;
    Group_type_substance = 2;
    Group_type_animal = 3;
    Group_type_medication = 4;
    Group_type_device = 5;
}


/*
 * Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively and are not formally or legally recognized; i.e. a collection of entities that isn't an Organization.
 */
message Group {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique business identifier for this group.
    bool active = 13;                                                 // Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
    Element activeExtensionElement = 14;                              // Extensions for active
    Group_type type = 15;                                             // Identifies the broad classification of the kind of resources the group includes.
    Element typeExtensionElement = 16;                                // Extensions for type
    bool actual = 17;                                                 // If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
    Element actualExtensionElement = 18;                              // Extensions for actual
    CodeableConcept code = 19;                                        // Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
    string name = 20;                                                 // A label assigned to the group for human identification and communication.
    Element nameExtensionElement = 21;                                // Extensions for name
    int64 quantity = 22;                                              // A count of the number of resource instances that are part of the group.
    Element quantityExtensionElement = 23;                            // Extensions for quantity
    repeated Group_Characteristic characteristic = 24;                // Identifies the traits shared by members of the group.
    repeated Group_Member member = 25;                                // Identifies the resource instances that are members of the group.
}

/*
 * Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively and are not formally or legally recognized; i.e. a collection of entities that isn't an Organization.
 */
message Group_Characteristic {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // A code that identifies the kind of trait being asserted.
    CodeableConcept valueCodeableConcept = 6;                         // The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
    bool valueBoolean = 7;                                            // The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
    Element valueBooleanExtensionElement = 8;                         // Extensions for valueBoolean
    Quantity valueQuantity = 9;                                       // The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
    Range valueRange = 10;                                            // The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
    bool exclude = 11;                                                // If true, indicates the characteristic is one that is NOT held by members of the group.
    Element excludeExtensionElement = 12;                             // Extensions for exclude
    Period period = 13;                                               // The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
}

/*
 * Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively and are not formally or legally recognized; i.e. a collection of entities that isn't an Organization.
 */
message Group_Member {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference entity = 5;                                             // A reference to the entity that is a member of the group. Must be consistent with Group.type.
    Period period = 6;                                                // The period that the member was in the group, if known.
    bool inactive = 7;                                                // A flag to indicate that the member is no longer in the group, but previously may have been a member.
    Element inactiveExtensionElement = 8;                             // Extensions for inactive
}

enum GuidanceResponse_status {
    GuidanceResponse_status_success = 0;
    GuidanceResponse_status_failure = 1;
    GuidanceResponse_status_data_required = 2;
    GuidanceResponse_status_entered_in_error = 3;
    GuidanceResponse_status_in_progress = 4;
    GuidanceResponse_status_data_requested = 5;
}


/*
 * A guidance response is the formal response to a guidance request, including any output parameters returned by the evaluation, as well as the description of any proposed actions to be taken.
 */
message GuidanceResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string requestId = 12;                                            // The id of the request associated with this response. If an id was given as part of the request, it will be reproduced here to enable the requester to more easily identify the response in a multi-request scenario.
    Element requestIdExtensionElement = 13;                           // Extensions for requestId
    Identifier identifier = 14;                                       // Allows a service to provide a unique, business identifier for the response.
    Reference module = 15;                                            // A reference to the knowledge module that was invoked.
    GuidanceResponse_status status = 16;                              // The status of the response. If the evaluation is completed successfully, the status will indicate success. However, in order to complete the evaluation, the engine may require more information. In this case, the status will be data-required, and the response will contain a description of the additional required information. If the evaluation completed successfully, but the engine determines that a potentially more accurate response could be provided if more data was available, the status will be data-requested, and the response will contain a description of the additional requested information.
    Element statusExtensionElement = 17;                              // Extensions for status
    Reference subject = 18;                                           // The patient for which the request was processed.
    Reference context = 19;                                           // Allows the context of the guidance response to be provided if available. In a service context, this would likely be unavailable.
    string occurrenceDateTime = 20;                                   // Indicates when the guidance response was processed.
    Element occurrenceDateTimeExtensionElement = 21;                  // Extensions for occurrenceDateTime
    Reference performer = 22;                                         // Provides a reference to the device that performed the guidance.
    CodeableConcept reasonCodeableConcept = 23;                       // Indicates the reason the request was initiated. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.
    Reference reasonReference = 24;                                   // Indicates the reason the request was initiated. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.
    repeated Annotation note = 25;                                    // Provides a mechanism to communicate additional information about the response.
    repeated Reference evaluationMessage = 26;                        // Messages resulting from the evaluation of the artifact or artifacts. As part of evaluating the request, the engine may produce informational or warning messages. These messages will be provided by this element.
    Reference outputParameters = 27;                                  // The output parameters of the evaluation, if any. Many modules will result in the return of specific resources such as procedure or communication requests that are returned as part of the operation result. However, modules may define specific outputs that would be returned as the result of the evaluation, and these would be returned in this element.
    Reference result = 28;                                            // The actions, if any, produced by the evaluation of the artifact.
    repeated DataRequirement dataRequirement = 29;                    // If the evaluation could not be completed due to lack of information, or additional information would potentially result in a more accurate response, this element will a description of the data required in order to proceed with the evaluation. A subsequent request to the service should include this data.
}

/*
 * The details of a healthcare service available at a location.
 */
message HealthcareService {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // External identifiers for this item.
    bool active = 13;                                                 // Whether this healthcareservice record is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    Reference providedBy = 15;                                        // The organization that provides this healthcare service.
    CodeableConcept category = 16;                                    // Identifies the broad category of service being performed or delivered.
    repeated CodeableConcept type = 17;                               // The specific type of service that may be delivered or performed.
    repeated CodeableConcept specialty = 18;                          // Collection of specialties handled by the service site. This is more of a medical term.
    repeated Reference location = 19;                                 // The location(s) where this healthcare service may be provided.
    string name = 20;                                                 // Further description of the service as it would be presented to a consumer while searching.
    Element nameExtensionElement = 21;                                // Extensions for name
    string comment = 22;                                              // Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
    Element commentExtensionElement = 23;                             // Extensions for comment
    string extraDetails = 24;                                         // Extra details about the service that can't be placed in the other fields.
    Element extraDetailsExtensionElement = 25;                        // Extensions for extraDetails
    Attachment photo = 26;                                            // If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.
    repeated ContactPoint telecom = 27;                               // List of contacts related to this specific healthcare service.
    repeated Reference coverageArea = 28;                             // The location(s) that this service is available to (not where the service is provided).
    repeated CodeableConcept serviceProvisionCode = 29;               // The code(s) that detail the conditions under which the healthcare service is available/offered.
    CodeableConcept eligibility = 30;                                 // Does this service have specific eligibility requirements that need to be met in order to use the service?
    string eligibilityNote = 31;                                      // Describes the eligibility conditions for the service.
    Element eligibilityNoteExtensionElement = 32;                     // Extensions for eligibilityNote
    repeated string programName = 33;                                 // Program Names that can be used to categorize the service.
    repeated Element programNameExtensionElement = 34;                // Extensions for programName
    repeated CodeableConcept characteristic = 35;                     // Collection of characteristics (attributes).
    repeated CodeableConcept referralMethod = 36;                     // Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.
    bool appointmentRequired = 37;                                    // Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
    Element appointmentRequiredExtensionElement = 38;                 // Extensions for appointmentRequired
    repeated HealthcareService_AvailableTime availableTime = 39;      // A collection of times that the Service Site is available.
    repeated HealthcareService_NotAvailable notAvailable = 40;        // The HealthcareService is not available during this period of time due to the provided reason.
    string availabilityExceptions = 41;                               // A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
    Element availabilityExceptionsExtensionElement = 42;              // Extensions for availabilityExceptions
    repeated Reference endpoint = 43;                                 // Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.
}

/*
 * The details of a healthcare service available at a location.
 */
message HealthcareService_AvailableTime {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated string daysOfWeek = 5;                                   // Indicates which days of the week are available between the start and end Times.
    repeated Element daysOfWeekExtensionElement = 6;                  // Extensions for daysOfWeek
    bool allDay = 7;                                                  // Is this always available? (hence times are irrelevant) e.g. 24 hour service.
    Element allDayExtensionElement = 8;                               // Extensions for allDay
    string availableStartTime = 9;                                    // The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
    Element availableStartTimeExtensionElement = 10;                  // Extensions for availableStartTime
    string availableEndTime = 11;                                     // The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
    Element availableEndTimeExtensionElement = 12;                    // Extensions for availableEndTime
}

/*
 * The details of a healthcare service available at a location.
 */
message HealthcareService_NotAvailable {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // The reason that can be presented to the user as to why this time is not available.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    Period during = 7;                                                // Service is not available (seasonally or for a public holiday) from this date.
}

/*
 * A text description of the DICOM SOP instances selected in the ImagingManifest; or the reason for, or significance of, the selection.
 */
message ImagingManifest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Unique identifier of the DICOM Key Object Selection (KOS) that this resource represents.
    Reference patient = 13;                                           // A patient resource reference which is the patient subject of all DICOM SOP Instances in this ImagingManifest.
    string authoringTime = 14;                                        // Date and time when the selection of the referenced instances were made. It is (typically) different from the creation date of the selection resource, and from dates associated with the referenced instances (e.g. capture time of the referenced image).
    Element authoringTimeExtensionElement = 15;                       // Extensions for authoringTime
    Reference author = 16;                                            // Author of ImagingManifest. It can be a human author or a device which made the decision of the SOP instances selected. For example, a radiologist selected a set of imaging SOP instances to attach in a diagnostic report, and a CAD application may author a selection to describe SOP instances it used to generate a detection conclusion.
    string description = 17;                                          // Free text narrative description of the ImagingManifest.   The value may be derived from the DICOM Standard Part 16, CID-7010 descriptions (e.g. Best in Set, Complete Study Content). Note that those values cover the wide range of uses of the DICOM Key Object Selection object, several of which are not supported by ImagingManifest. Specifically, there is no expected behavior associated with descriptions that suggest referenced images be removed or not used.
    Element descriptionExtensionElement = 18;                         // Extensions for description
    repeated ImagingManifest_Study study = 19;                        // Study identity and locating information of the DICOM SOP instances in the selection.
}

/*
 * A text description of the DICOM SOP instances selected in the ImagingManifest; or the reason for, or significance of, the selection.
 */
message ImagingManifest_Study {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string uid = 5;                                                   // Study instance UID of the SOP instances in the selection.
    Element uidExtensionElement = 6;                                  // Extensions for uid
    Reference imagingStudy = 7;                                       // Reference to the Imaging Study in FHIR form.
    repeated Reference endpoint = 8;                                  // The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.
    repeated ImagingManifest_Series series = 9;                       // Series identity and locating information of the DICOM SOP instances in the selection.
}

/*
 * A text description of the DICOM SOP instances selected in the ImagingManifest; or the reason for, or significance of, the selection.
 */
message ImagingManifest_Series {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string uid = 5;                                                   // Series instance UID of the SOP instances in the selection.
    Element uidExtensionElement = 6;                                  // Extensions for uid
    repeated Reference endpoint = 7;                                  // The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.
    repeated ImagingManifest_Instance instance = 8;                   // Identity and locating information of the selected DICOM SOP instances.
}

/*
 * A text description of the DICOM SOP instances selected in the ImagingManifest; or the reason for, or significance of, the selection.
 */
message ImagingManifest_Instance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string sopClass = 5;                                              // SOP class UID of the selected instance.
    Element sopClassExtensionElement = 6;                             // Extensions for sopClass
    string uid = 7;                                                   // SOP Instance UID of the selected instance.
    Element uidExtensionElement = 8;                                  // Extensions for uid
}

enum ImagingStudy_availability {
    ImagingStudy_availability_NEARLINE = 0;
    ImagingStudy_availability_UNAVAILABLE = 1;
    ImagingStudy_availability_ONLINE = 2;
    ImagingStudy_availability_OFFLINE = 3;
}


/*
 * Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context.  A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.
 */
message ImagingStudy {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string uid = 12;                                                  // Formal identifier for the study.
    Element uidExtensionElement = 13;                                 // Extensions for uid
    Identifier accession = 14;                                        // Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).
    repeated Identifier identifier = 15;                              // Other identifiers for the study.
    ImagingStudy_availability availability = 16;                      // Availability of study (online, offline, or nearline).
    Element availabilityExtensionElement = 17;                        // Extensions for availability
    repeated Coding modalityList = 18;                                // A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).
    Reference patient = 19;                                           // The patient imaged in the study.
    Reference context = 20;                                           // The encounter or episode at which the request is initiated.
    string started = 21;                                              // Date and time the study started.
    Element startedExtensionElement = 22;                             // Extensions for started
    repeated Reference basedOn = 23;                                  // A list of the diagnostic requests that resulted in this imaging study being performed.
    Reference referrer = 24;                                          // The requesting/referring physician.
    repeated Reference interpreter = 25;                              // Who read the study and interpreted the images or other content.
    repeated Reference endpoint = 26;                                 // The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.
    int64 numberOfSeries = 27;                                        // Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.
    Element numberOfSeriesExtensionElement = 28;                      // Extensions for numberOfSeries
    int64 numberOfInstances = 29;                                     // Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
    Element numberOfInstancesExtensionElement = 30;                   // Extensions for numberOfInstances
    repeated Reference procedureReference = 31;                       // A reference to the performed Procedure.
    repeated CodeableConcept procedureCode = 32;                      // The code for the performed procedure type.
    CodeableConcept reason = 33;                                      // Description of clinical condition indicating why the ImagingStudy was requested.
    string description = 34;                                          // Institution-generated description or classification of the Study performed.
    Element descriptionExtensionElement = 35;                         // Extensions for description
    repeated ImagingStudy_Series series = 36;                         // Each study has one or more series of images or other content.
}

enum ImagingStudy_Series_availability {
    ImagingStudy_Series_availability_NEARLINE = 0;
    ImagingStudy_Series_availability_UNAVAILABLE = 1;
    ImagingStudy_Series_availability_ONLINE = 2;
    ImagingStudy_Series_availability_OFFLINE = 3;
}


/*
 * Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context.  A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.
 */
message ImagingStudy_Series {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string uid = 5;                                                   // Formal identifier for this series.
    Element uidExtensionElement = 6;                                  // Extensions for uid
    int64 number = 7;                                                 // The numeric identifier of this series in the study.
    Element numberExtensionElement = 8;                               // Extensions for number
    Coding modality = 9;                                              // The modality of this series sequence.
    string description = 10;                                          // A description of the series.
    Element descriptionExtensionElement = 11;                         // Extensions for description
    int64 numberOfInstances = 12;                                     // Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
    Element numberOfInstancesExtensionElement = 13;                   // Extensions for numberOfInstances
    ImagingStudy_Series_availability availability = 14;               // Availability of series (online, offline or nearline).
    Element availabilityExtensionElement = 15;                        // Extensions for availability
    repeated Reference endpoint = 16;                                 // The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.
    Coding bodySite = 17;                                             // The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.
    Coding laterality = 18;                                           // The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.
    string started = 19;                                              // The date and time the series was started.
    Element startedExtensionElement = 20;                             // Extensions for started
    repeated Reference performer = 21;                                // The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.
    repeated ImagingStudy_Instance instance = 22;                     // A single SOP instance within the series, e.g. an image, or presentation state.
}

/*
 * Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context.  A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.
 */
message ImagingStudy_Instance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string uid = 5;                                                   // Formal identifier for this image or other content.
    Element uidExtensionElement = 6;                                  // Extensions for uid
    int64 number = 7;                                                 // The number of instance in the series.
    Element numberExtensionElement = 8;                               // Extensions for number
    string sopClass = 9;                                              // DICOM instance  type.
    Element sopClassExtensionElement = 10;                            // Extensions for sopClass
    string title = 11;                                                // The description of the instance.
    Element titleExtensionElement = 12;                               // Extensions for title
}

/*
 * Describes the event of a patient being administered a vaccination or a record of a vaccination as reported by a patient, a clinician or another party and may include vaccine reaction information and what vaccination protocol was followed.
 */
message Immunization {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique identifier assigned to this immunization record.
    string status = 13;                                               // Indicates the current status of the vaccination event.
    Element statusExtensionElement = 14;                              // Extensions for status
    bool notGiven = 15;                                               // Indicates if the vaccination was or was not given.
    Element notGivenExtensionElement = 16;                            // Extensions for notGiven
    CodeableConcept vaccineCode = 17;                                 // Vaccine that was administered or was to be administered.
    Reference patient = 18;                                           // The patient who either received or did not receive the immunization.
    Reference encounter = 19;                                         // The visit or admission or other contact between patient and health care provider the immunization was performed as part of.
    string date = 20;                                                 // Date vaccine administered or was to be administered.
    Element dateExtensionElement = 21;                                // Extensions for date
    bool primarySource = 22;                                          // An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.
    Element primarySourceExtensionElement = 23;                       // Extensions for primarySource
    CodeableConcept reportOrigin = 24;                                // The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.
    Reference location = 25;                                          // The service delivery location where the vaccine administration occurred.
    Reference manufacturer = 26;                                      // Name of vaccine manufacturer.
    string lotNumber = 27;                                            // Lot number of the  vaccine product.
    Element lotNumberExtensionElement = 28;                           // Extensions for lotNumber
    string expirationDate = 29;                                       // Date vaccine batch expires.
    Element expirationDateExtensionElement = 30;                      // Extensions for expirationDate
    CodeableConcept site = 31;                                        // Body site where vaccine was administered.
    CodeableConcept route = 32;                                       // The path by which the vaccine product is taken into the body.
    Quantity doseQuantity = 33;                                       // The quantity of vaccine product that was administered.
    repeated Immunization_Practitioner practitioner = 34;             // Indicates who or what performed the event.
    repeated Annotation note = 35;                                    // Extra information about the immunization that is not conveyed by the other attributes.
    Immunization_Explanation explanation = 36;                        // Reasons why a vaccine was or was not administered.
    repeated Immunization_Reaction reaction = 37;                     // Categorical data indicating that an adverse event is associated in time to an immunization.
    repeated Immunization_VaccinationProtocol vaccinationProtocol = 38; // Contains information about the protocol(s) under which the vaccine was administered.
}

/*
 * Describes the event of a patient being administered a vaccination or a record of a vaccination as reported by a patient, a clinician or another party and may include vaccine reaction information and what vaccination protocol was followed.
 */
message Immunization_Practitioner {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // Describes the type of performance (e.g. ordering provider, administering provider, etc.).
    Reference actor = 6;                                              // The device, practitioner, etc. who performed the action.
}

/*
 * Describes the event of a patient being administered a vaccination or a record of a vaccination as reported by a patient, a clinician or another party and may include vaccine reaction information and what vaccination protocol was followed.
 */
message Immunization_Explanation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept reason = 5;                              // Reasons why a vaccine was administered.
    repeated CodeableConcept reasonNotGiven = 6;                      // Reason why a vaccine was not administered.
}

/*
 * Describes the event of a patient being administered a vaccination or a record of a vaccination as reported by a patient, a clinician or another party and may include vaccine reaction information and what vaccination protocol was followed.
 */
message Immunization_Reaction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string date = 5;                                                  // Date of reaction to the immunization.
    Element dateExtensionElement = 6;                                 // Extensions for date
    Reference detail = 7;                                             // Details of the reaction.
    bool reported = 8;                                                // Self-reported indicator.
    Element reportedExtensionElement = 9;                             // Extensions for reported
}

/*
 * Describes the event of a patient being administered a vaccination or a record of a vaccination as reported by a patient, a clinician or another party and may include vaccine reaction information and what vaccination protocol was followed.
 */
message Immunization_VaccinationProtocol {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 doseSequence = 5;                                           // Nominal position in a series.
    Element doseSequenceExtensionElement = 6;                         // Extensions for doseSequence
    string description = 7;                                           // Contains the description about the protocol under which the vaccine was administered.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    Reference authority = 9;                                          // Indicates the authority who published the protocol.  E.g. ACIP.
    string series = 10;                                               // One possible path to achieve presumed immunity against a disease - within the context of an authority.
    Element seriesExtensionElement = 11;                              // Extensions for series
    int64 seriesDoses = 12;                                           // The recommended number of doses to achieve immunity.
    Element seriesDosesExtensionElement = 13;                         // Extensions for seriesDoses
    repeated CodeableConcept targetDisease = 14;                      // The targeted disease.
    CodeableConcept doseStatus = 15;                                  // Indicates if the immunization event should "count" against  the protocol.
    CodeableConcept doseStatusReason = 16;                            // Provides an explanation as to why an immunization event should or should not count against the protocol.
}

/*
 * A patient's point-in-time immunization and recommendation (i.e. forecasting a patient's immunization eligibility according to a published schedule) with optional supporting justification.
 */
message ImmunizationRecommendation {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique identifier assigned to this particular recommendation record.
    Reference patient = 13;                                           // The patient the recommendations are for.
    repeated ImmunizationRecommendation_Recommendation recommendation = 14; // Vaccine administration recommendations.
}

/*
 * A patient's point-in-time immunization and recommendation (i.e. forecasting a patient's immunization eligibility according to a published schedule) with optional supporting justification.
 */
message ImmunizationRecommendation_Recommendation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string date = 5;                                                  // The date the immunization recommendation was created.
    Element dateExtensionElement = 6;                                 // Extensions for date
    CodeableConcept vaccineCode = 7;                                  // Vaccine that pertains to the recommendation.
    CodeableConcept targetDisease = 8;                                // The targeted disease for the recommendation.
    int64 doseNumber = 9;                                             // The next recommended dose number (e.g. dose 2 is the next recommended dose).
    Element doseNumberExtensionElement = 10;                          // Extensions for doseNumber
    CodeableConcept forecastStatus = 11;                              // Vaccine administration status.
    repeated ImmunizationRecommendation_DateCriterion dateCriterion = 12; // Vaccine date recommendations.  For example, earliest date to administer, latest date to administer, etc.
    ImmunizationRecommendation_Protocol protocol = 13;                // Contains information about the protocol under which the vaccine was administered.
    repeated Reference supportingImmunization = 14;                   // Immunization event history that supports the status and recommendation.
    repeated Reference supportingPatientInformation = 15;             // Patient Information that supports the status and recommendation.  This includes patient observations, adverse reactions and allergy/intolerance information.
}

/*
 * A patient's point-in-time immunization and recommendation (i.e. forecasting a patient's immunization eligibility according to a published schedule) with optional supporting justification.
 */
message ImmunizationRecommendation_DateCriterion {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // Date classification of recommendation.  For example, earliest date to give, latest date to give, etc.
    string value = 6;                                                 // The date whose meaning is specified by dateCriterion.code.
    Element valueExtensionElement = 7;                                // Extensions for value
}

/*
 * A patient's point-in-time immunization and recommendation (i.e. forecasting a patient's immunization eligibility according to a published schedule) with optional supporting justification.
 */
message ImmunizationRecommendation_Protocol {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 doseSequence = 5;                                           // Indicates the nominal position in a series of the next dose.  This is the recommended dose number as per a specified protocol.
    Element doseSequenceExtensionElement = 6;                         // Extensions for doseSequence
    string description = 7;                                           // Contains the description about the protocol under which the vaccine was administered.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    Reference authority = 9;                                          // Indicates the authority who published the protocol.  For example, ACIP.
    string series = 10;                                               // One possible path to achieve presumed immunity against a disease - within the context of an authority.
    Element seriesExtensionElement = 11;                              // Extensions for series
}

enum ImplementationGuide_status {
    ImplementationGuide_status_draft = 0;
    ImplementationGuide_status_active = 1;
    ImplementationGuide_status_retired = 2;
    ImplementationGuide_status_unknown = 3;
}


/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this implementation guide when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this implementation guide is (or will be) published. The URL SHOULD include the major version of the implementation guide. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string version = 14;                                              // The identifier that is used to identify this version of the implementation guide when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the implementation guide author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 15;                             // Extensions for version
    string name = 16;                                                 // A natural language name identifying the implementation guide. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 17;                                // Extensions for name
    ImplementationGuide_status status = 18;                           // The status of this implementation guide. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 19;                              // Extensions for status
    bool experimental = 20;                                           // A boolean value to indicate that this implementation guide is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 21;                        // Extensions for experimental
    string date = 22;                                                 // The date  (and optionally time) when the implementation guide was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the implementation guide changes.
    Element dateExtensionElement = 23;                                // Extensions for date
    string publisher = 24;                                            // The name of the individual or organization that published the implementation guide.
    Element publisherExtensionElement = 25;                           // Extensions for publisher
    repeated ContactDetail contact = 26;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 27;                                          // A free text natural language description of the implementation guide from a consumer's perspective.
    Element descriptionExtensionElement = 28;                         // Extensions for description
    repeated UsageContext useContext = 29;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate implementation guide instances.
    repeated CodeableConcept jurisdiction = 30;                       // A legal or geographic region in which the implementation guide is intended to be used.
    string copyright = 31;                                            // A copyright statement relating to the implementation guide and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the implementation guide.
    Element copyrightExtensionElement = 32;                           // Extensions for copyright
    string fhirVersion = 33;                                          // The version of the FHIR specification on which this ImplementationGuide is based - this is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 3.0.1 for this version.
    Element fhirVersionExtensionElement = 34;                         // Extensions for fhirVersion
    repeated ImplementationGuide_Dependency dependency = 35;          // Another implementation guide that this implementation depends on. Typically, an implementation guide uses value sets, profiles etc.defined in other implementation guides.
    repeated ImplementationGuide_Package package = 36;                // A logical group of resources. Logical groups can be used when building pages.
    repeated ImplementationGuide_Global global = 37;                  // A set of profiles that all resources covered by this implementation guide must conform to.
    repeated string binary = 38;                                      // A binary file that is included in the  implementation guide when it is published.
    repeated Element binaryExtensionElement = 39;                     // Extensions for binary
    ImplementationGuide_Page page = 40;                               // A page / section in the implementation guide. The root page is the implementation guide home page.
}

enum ImplementationGuide_Dependency_type {
    ImplementationGuide_Dependency_type_reference = 0;
    ImplementationGuide_Dependency_type_inclusion = 1;
}


/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide_Dependency {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    ImplementationGuide_Dependency_type type = 5;                     // How the dependency is represented when the guide is published.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string uri = 7;                                                   // Where the dependency is located.
    Element uriExtensionElement = 8;                                  // Extensions for uri
}

/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide_Package {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name for the group, as used in page.package.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string description = 7;                                           // Human readable text describing the package.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    repeated ImplementationGuide_Resource resource = 9;               // A resource that is part of the implementation guide. Conformance resources (value set, structure definition, capability statements etc.) are obvious candidates for inclusion, but any kind of resource can be included as an example resource.
}

/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide_Resource {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool example = 5;                                                 // Whether a resource is included in the guide as part of the rules defined by the guide, or just as an example of a resource that conforms to the rules and/or help implementers understand the intent of the guide.
    Element exampleExtensionElement = 6;                              // Extensions for example
    string name = 7;                                                  // A human assigned name for the resource. All resources SHOULD have a name, but the name may be extracted from the resource (e.g. ValueSet.name).
    Element nameExtensionElement = 8;                                 // Extensions for name
    string description = 9;                                           // A description of the reason that a resource has been included in the implementation guide.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    string acronym = 11;                                              // A short code that may be used to identify the resource throughout the implementation guide.
    Element acronymExtensionElement = 12;                             // Extensions for acronym
    string sourceUri = 13;                                            // Where this resource is found.
    Element sourceUriExtensionElement = 14;                           // Extensions for sourceUri
    Reference sourceReference = 15;                                   // Where this resource is found.
    Reference exampleFor = 16;                                        // Another resource that this resource is an example for. This is mostly used for resources that are included as examples of StructureDefinitions.
}

/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide_Global {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string type = 5;                                                  // The type of resource that all instances must conform to.
    Element typeExtensionElement = 6;                                 // Extensions for type
    Reference profile = 7;                                            // A reference to the profile that all instances must conform to.
}

enum ImplementationGuide_Page_kind {
    ImplementationGuide_Page_kind_include = 0;
    ImplementationGuide_Page_kind_dictionary = 1;
    ImplementationGuide_Page_kind_resource = 2;
    ImplementationGuide_Page_kind_toc = 3;
    ImplementationGuide_Page_kind_page = 4;
    ImplementationGuide_Page_kind_list = 5;
    ImplementationGuide_Page_kind_directory = 6;
    ImplementationGuide_Page_kind_example = 7;
}


/*
 * A set of rules of how FHIR is used to solve a particular problem. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.
 */
message ImplementationGuide_Page {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string source = 5;                                                // The source address for the page.
    Element sourceExtensionElement = 6;                               // Extensions for source
    string title = 7;                                                 // A short title used to represent this page in navigational structures such as table of contents, bread crumbs, etc.
    Element titleExtensionElement = 8;                                // Extensions for title
    ImplementationGuide_Page_kind kind = 9;                           // The kind of page that this is. Some pages are autogenerated (list, example), and other kinds are of interest so that tools can navigate the user to the page of interest.
    Element kindExtensionElement = 10;                                // Extensions for kind
    repeated string type = 11;                                        // For constructed pages, what kind of resources to include in the list.
    repeated Element typeExtensionElement = 12;                       // Extensions for type
    repeated string package = 13;                                     // For constructed pages, a list of packages to include in the page (or else empty for everything).
    repeated Element packageExtensionElement = 14;                    // Extensions for package
    string format = 15;                                               // The format of the page.
    Element formatExtensionElement = 16;                              // Extensions for format
    repeated ImplementationGuide_Page page = 17;                      // Nested Pages/Sections under this page.
}

enum Library_status {
    Library_status_draft = 0;
    Library_status_active = 1;
    Library_status_retired = 2;
    Library_status_unknown = 3;
}


/*
 * The Library resource is a general-purpose container for knowledge asset definitions. It can be used to describe and expose existing knowledge assets such as logic libraries and information model descriptions, as well as to describe a collection of knowledge assets.
 */
message Library {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this library when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this library is (or will be) published. The URL SHOULD include the major version of the library. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this library when it is represented in other formats, or referenced in a specification, model, design or an instance. e.g. CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.
    string version = 15;                                              // The identifier that is used to identify this version of the library when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the library author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the library. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the library.
    Element titleExtensionElement = 20;                               // Extensions for title
    Library_status status = 21;                                       // The status of this library. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this library is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    CodeableConcept type = 25;                                        // Identifies the type of library such as a Logic Library, Model Definition, Asset Collection, or Module Definition.
    string date = 26;                                                 // The date  (and optionally time) when the library was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the library changes.
    Element dateExtensionElement = 27;                                // Extensions for date
    string publisher = 28;                                            // The name of the individual or organization that published the library.
    Element publisherExtensionElement = 29;                           // Extensions for publisher
    string description = 30;                                          // A free text natural language description of the library from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    string purpose = 32;                                              // Explaination of why this library is needed and why it has been designed as it has.
    Element purposeExtensionElement = 33;                             // Extensions for purpose
    string usage = 34;                                                // A detailed description of how the library is used from a clinical perspective.
    Element usageExtensionElement = 35;                               // Extensions for usage
    string approvalDate = 36;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 37;                        // Extensions for approvalDate
    string lastReviewDate = 38;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 39;                      // Extensions for lastReviewDate
    Period effectivePeriod = 40;                                      // The period during which the library content was or is planned to be in active use.
    repeated UsageContext useContext = 41;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate library instances.
    repeated CodeableConcept jurisdiction = 42;                       // A legal or geographic region in which the library is intended to be used.
    repeated CodeableConcept topic = 43;                              // Descriptive topics related to the content of the library. Topics provide a high-level categorization of the library that can be useful for filtering and searching.
    repeated Contributor contributor = 44;                            // A contributor to the content of the library, including authors, editors, reviewers, and endorsers.
    repeated ContactDetail contact = 45;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 46;                                            // A copyright statement relating to the library and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the library.
    Element copyrightExtensionElement = 47;                           // Extensions for copyright
    repeated RelatedArtifact relatedArtifact = 48;                    // Related artifacts such as additional documentation, justification, or bibliographic references.
    repeated ParameterDefinition parameter = 49;                      // The parameter element defines parameters used by the library.
    repeated DataRequirement dataRequirement = 50;                    // Describes a set of data that must be provided in order to be able to successfully perform the computations defined by the library.
    repeated Attachment content = 51;                                 // The content of the library as an Attachment. The content may be a reference to a url, or may be directly embedded as a base-64 string. Either way, the contentType of the attachment determines how to interpret the content.
}

/*
 * Identifies two or more records (resource instances) that are referring to the same real-world "occurrence".
 */
message Linkage {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    bool active = 12;                                                 // Indicates whether the asserted set of linkages are considered to be "in effect".
    Element activeExtensionElement = 13;                              // Extensions for active
    Reference author = 14;                                            // Identifies the user or organization responsible for asserting the linkages and who establishes the context for evaluating the nature of each linkage.
    repeated Linkage_Item item = 15;                                  // Identifies one of the records that is considered to refer to the same real-world occurrence as well as how the items hould be evaluated within the collection of linked items.
}

enum Linkage_Item_type {
    Linkage_Item_type_alternate = 0;
    Linkage_Item_type_historical = 1;
    Linkage_Item_type_source = 2;
}


/*
 * Identifies two or more records (resource instances) that are referring to the same real-world "occurrence".
 */
message Linkage_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Linkage_Item_type type = 5;                                       // Distinguishes which item is "source of truth" (if any) and which items are no longer considered to be current representations.
    Element typeExtensionElement = 6;                                 // Extensions for type
    Reference resource = 7;                                           // The resource instance being linked as part of the group.
}

enum List_status {
    List_status_current = 0;
    List_status_retired = 1;
    List_status_entered_in_error = 2;
}

enum List_mode {
    List_mode_changes = 0;
    List_mode_working = 1;
    List_mode_snapshot = 2;
}


/*
 * A set of information summarized from a list of other resources.
 */
message List {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for the List assigned for business purposes outside the context of FHIR.
    List_status status = 13;                                          // Indicates the current state of this list.
    Element statusExtensionElement = 14;                              // Extensions for status
    List_mode mode = 15;                                              // How this list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
    Element modeExtensionElement = 16;                                // Extensions for mode
    string title = 17;                                                // A label for the list assigned by the author.
    Element titleExtensionElement = 18;                               // Extensions for title
    CodeableConcept code = 19;                                        // This code defines the purpose of the list - why it was created.
    Reference subject = 20;                                           // The common subject (or patient) of the resources that are in the list, if there is one.
    Reference encounter = 21;                                         // The encounter that is the context in which this list was created.
    string date = 22;                                                 // The date that the list was prepared.
    Element dateExtensionElement = 23;                                // Extensions for date
    Reference source = 24;                                            // The entity responsible for deciding what the contents of the list were. Where the list was created by a human, this is the same as the author of the list.
    CodeableConcept orderedBy = 25;                                   // What order applies to the items in the list.
    repeated Annotation note = 26;                                    // Comments that apply to the overall list.
    repeated List_Entry entry = 27;                                   // Entries in this list.
    CodeableConcept emptyReason = 28;                                 // If the list is empty, why the list is empty.
}

/*
 * A set of information summarized from a list of other resources.
 */
message List_Entry {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept flag = 5;                                         // The flag allows the system constructing the list to indicate the role and significance of the item in the list.
    bool deleted = 6;                                                 // True if this item is marked as deleted in the list.
    Element deletedExtensionElement = 7;                              // Extensions for deleted
    string date = 8;                                                  // When this item was added to the list.
    Element dateExtensionElement = 9;                                 // Extensions for date
    Reference item = 10;                                              // A reference to the actual resource from which data was derived.
}

enum Location_status {
    Location_status_inactive = 0;
    Location_status_active = 1;
    Location_status_suspended = 2;
}

enum Location_mode {
    Location_mode_instance = 0;
    Location_mode_kind = 1;
}


/*
 * Details and position information for a physical place where services are provided  and resources and participants may be stored, found, contained or accommodated.
 */
message Location {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Unique code or number identifying the location to its users.
    Location_status status = 13;                                      // The status property covers the general availability of the resource, not the current value which may be covered by the operationStatus, or by a schedule/slots if they are configured for the location.
    Element statusExtensionElement = 14;                              // Extensions for status
    Coding operationalStatus = 15;                                    // The Operational status covers operation values most relevant to beds (but can also apply to rooms/units/chair/etc such as an isolation unit/dialisys chair). This typically covers concepts such as contamination, housekeeping and other activities like maintenance.
    string name = 16;                                                 // Name of the location as used by humans. Does not need to be unique.
    Element nameExtensionElement = 17;                                // Extensions for name
    repeated string alias = 18;                                       // A list of alternate names that the location is known as, or was known as in the past.
    repeated Element aliasExtensionElement = 19;                      // Extensions for alias
    string description = 20;                                          // Description of the Location, which helps in finding or referencing the place.
    Element descriptionExtensionElement = 21;                         // Extensions for description
    Location_mode mode = 22;                                          // Indicates whether a resource instance represents a specific location or a class of locations.
    Element modeExtensionElement = 23;                                // Extensions for mode
    CodeableConcept type = 24;                                        // Indicates the type of function performed at the location.
    repeated ContactPoint telecom = 25;                               // The contact details of communication devices available at the location. This can include phone numbers, fax numbers, mobile numbers, email addresses and web sites.
    Address address = 26;                                             // Physical location.
    CodeableConcept physicalType = 27;                                // Physical form of the location, e.g. building, room, vehicle, road.
    Location_Position position = 28;                                  // The absolute geographic location of the Location, expressed using the WGS84 datum (This is the same co-ordinate system used in KML).
    Reference managingOrganization = 29;                              // The organization responsible for the provisioning and upkeep of the location.
    Reference partOf = 30;                                            // Another Location which this Location is physically part of.
    repeated Reference endpoint = 31;                                 // Technical endpoints providing access to services operated for the location.
}

/*
 * Details and position information for a physical place where services are provided  and resources and participants may be stored, found, contained or accommodated.
 */
message Location_Position {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    double longitude = 5;                                             // Longitude. The value domain and the interpretation are the same as for the text of the longitude element in KML (see notes below).
    Element longitudeExtensionElement = 6;                            // Extensions for longitude
    double latitude = 7;                                              // Latitude. The value domain and the interpretation are the same as for the text of the latitude element in KML (see notes below).
    Element latitudeExtensionElement = 8;                             // Extensions for latitude
    double altitude = 9;                                              // Altitude. The value domain and the interpretation are the same as for the text of the altitude element in KML (see notes below).
    Element altitudeExtensionElement = 10;                            // Extensions for altitude
}

enum Measure_status {
    Measure_status_draft = 0;
    Measure_status_active = 1;
    Measure_status_retired = 2;
    Measure_status_unknown = 3;
}


/*
 * The Measure resource provides the definition of a quality measure.
 */
message Measure {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this measure when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this measure is (or will be) published. The URL SHOULD include the major version of the measure. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this measure when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the measure when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the measure author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the measure. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the measure.
    Element titleExtensionElement = 20;                               // Extensions for title
    Measure_status status = 21;                                       // The status of this measure. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this measure is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the measure was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the measure changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the measure.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    string description = 29;                                          // A free text natural language description of the measure from a consumer's perspective.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    string purpose = 31;                                              // Explaination of why this measure is needed and why it has been designed as it has.
    Element purposeExtensionElement = 32;                             // Extensions for purpose
    string usage = 33;                                                // A detailed description of how the measure is used from a clinical perspective.
    Element usageExtensionElement = 34;                               // Extensions for usage
    string approvalDate = 35;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 36;                        // Extensions for approvalDate
    string lastReviewDate = 37;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 38;                      // Extensions for lastReviewDate
    Period effectivePeriod = 39;                                      // The period during which the measure content was or is planned to be in active use.
    repeated UsageContext useContext = 40;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate measure instances.
    repeated CodeableConcept jurisdiction = 41;                       // A legal or geographic region in which the measure is intended to be used.
    repeated CodeableConcept topic = 42;                              // Descriptive topics related to the content of the measure. Topics provide a high-level categorization of the type of the measure that can be useful for filtering and searching.
    repeated Contributor contributor = 43;                            // A contributor to the content of the measure, including authors, editors, reviewers, and endorsers.
    repeated ContactDetail contact = 44;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 45;                                            // A copyright statement relating to the measure and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the measure.
    Element copyrightExtensionElement = 46;                           // Extensions for copyright
    repeated RelatedArtifact relatedArtifact = 47;                    // Related artifacts such as additional documentation, justification, or bibliographic references.
    repeated Reference library = 48;                                  // A reference to a Library resource containing the formal logic used by the measure.
    string disclaimer = 49;                                           // Notices and disclaimers regarding the use of the measure, or related to intellectual property (such as code systems) referenced by the measure.
    Element disclaimerExtensionElement = 50;                          // Extensions for disclaimer
    CodeableConcept scoring = 51;                                     // Indicates how the calculation is performed for the measure, including proportion, ratio, continuous variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented.
    CodeableConcept compositeScoring = 52;                            // If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.
    repeated CodeableConcept type = 53;                               // Indicates whether the measure is used to examine a process, an outcome over time, a patient-reported outcome, or a structure measure such as utilization.
    string riskAdjustment = 54;                                       // A description of the risk adjustment factors that may impact the resulting score for the measure and how they may be accounted for when computing and reporting measure results.
    Element riskAdjustmentExtensionElement = 55;                      // Extensions for riskAdjustment
    string rateAggregation = 56;                                      // Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.
    Element rateAggregationExtensionElement = 57;                     // Extensions for rateAggregation
    string rationale = 58;                                            // Provides a succint statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.
    Element rationaleExtensionElement = 59;                           // Extensions for rationale
    string clinicalRecommendationStatement = 60;                      // Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.
    Element clinicalRecommendationStatementExtensionElement = 61;     // Extensions for clinicalRecommendationStatement
    string improvementNotation = 62;                                  // Information on whether an increase or decrease in score is the preferred result (e.g., a higher score indicates better quality OR a lower score indicates better quality OR quality is whthin a range).
    Element improvementNotationExtensionElement = 63;                 // Extensions for improvementNotation
    repeated string definition = 64;                                  // Provides a description of an individual term used within the measure.
    repeated Element definitionExtensionElement = 65;                 // Extensions for definition
    string guidance = 66;                                             // Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.
    Element guidanceExtensionElement = 67;                            // Extensions for guidance
    string set = 68;                                                  // The measure set, e.g. Preventive Care and Screening.
    Element setExtensionElement = 69;                                 // Extensions for set
    repeated Measure_Group group = 70;                                // A group of population criteria for the measure.
    repeated Measure_SupplementalData supplementalData = 71;          // The supplemental data criteria for the measure report, specified as either the name of a valid CQL expression within a referenced library, or a valid FHIR Resource Path.
}

/*
 * The Measure resource provides the definition of a quality measure.
 */
message Measure_Group {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // A unique identifier for the group. This identifier will used to report data for the group in the measure report.
    string name = 6;                                                  // Optional name or short description of this group.
    Element nameExtensionElement = 7;                                 // Extensions for name
    string description = 8;                                           // The human readable description of this population group.
    Element descriptionExtensionElement = 9;                          // Extensions for description
    repeated Measure_Population population = 10;                      // A population criteria for the measure.
    repeated Measure_Stratifier stratifier = 11;                      // The stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library, or a valid FHIR Resource Path.
}

/*
 * The Measure resource provides the definition of a quality measure.
 */
message Measure_Population {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // A unique identifier for the population criteria. This identifier is used to report data against this criteria within the measure report.
    CodeableConcept code = 6;                                         // The type of population criteria.
    string name = 7;                                                  // Optional name or short description of this population.
    Element nameExtensionElement = 8;                                 // Extensions for name
    string description = 9;                                           // The human readable description of this population criteria.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    string criteria = 11;                                             // The name of a valid referenced CQL expression (may be namespaced) that defines this population criteria.
    Element criteriaExtensionElement = 12;                            // Extensions for criteria
}

/*
 * The Measure resource provides the definition of a quality measure.
 */
message Measure_Stratifier {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // The identifier for the stratifier used to coordinate the reported data back to this stratifier.
    string criteria = 6;                                              // The criteria for the stratifier. This must be the name of an expression defined within a referenced library.
    Element criteriaExtensionElement = 7;                             // Extensions for criteria
    string path = 8;                                                  // The path to an element that defines the stratifier, specified as a valid FHIR resource path.
    Element pathExtensionElement = 9;                                 // Extensions for path
}

/*
 * The Measure resource provides the definition of a quality measure.
 */
message Measure_SupplementalData {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // An identifier for the supplemental data.
    repeated CodeableConcept usage = 6;                               // An indicator of the intended usage for the supplemental data element. Supplemental data indicates the data is additional information requested to augment the measure information. Risk adjustment factor indicates the data is additional information used to calculate risk adjustment factors when applying a risk model to the measure calculation.
    string criteria = 7;                                              // The criteria for the supplemental data. This must be the name of a valid expression defined within a referenced library, and defines the data to be returned for this element.
    Element criteriaExtensionElement = 8;                             // Extensions for criteria
    string path = 9;                                                  // The supplemental data to be supplied as part of the measure response, specified as a valid FHIR Resource Path.
    Element pathExtensionElement = 10;                                // Extensions for path
}

enum MeasureReport_status {
    MeasureReport_status_pending = 0;
    MeasureReport_status_complete = 1;
    MeasureReport_status_error = 2;
}

enum MeasureReport_type {
    MeasureReport_type_summary = 0;
    MeasureReport_type_individual = 1;
    MeasureReport_type_patient_list = 2;
}


/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // A formal identifier that is used to identify this report when it is represented in other formats, or referenced in a specification, model, design or an instance.
    MeasureReport_status status = 13;                                 // The report status. No data will be available until the report status is complete.
    Element statusExtensionElement = 14;                              // Extensions for status
    MeasureReport_type type = 15;                                     // The type of measure report. This may be an individual report, which provides a single patient's score for the measure; a patient listing, which returns the list of patients that meet the various criteria in the measure; or a summary report, which returns a population count for each of the criteria in the measure.
    Element typeExtensionElement = 16;                                // Extensions for type
    Reference measure = 17;                                           // A reference to the Measure that was evaluated to produce this report.
    Reference patient = 18;                                           // Optional Patient if the report was requested for a single patient.
    string date = 19;                                                 // The date this measure report was generated.
    Element dateExtensionElement = 20;                                // Extensions for date
    Reference reportingOrganization = 21;                             // Reporting Organization.
    Period period = 22;                                               // The reporting period for which the report was calculated.
    repeated MeasureReport_Group group = 23;                          // The results of the calculation, one for each population group in the measure.
    Reference evaluatedResources = 24;                                // A reference to a Bundle containing the Resources that were used in the evaluation of this report.
}

/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport_Group {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // The identifier of the population group as defined in the measure definition.
    repeated MeasureReport_Population population = 6;                 // The populations that make up the population group, one for each type of population appropriate for the measure.
    double measureScore = 7;                                          // The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.
    Element measureScoreExtensionElement = 8;                         // Extensions for measureScore
    repeated MeasureReport_Stratifier stratifier = 9;                 // When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
}

/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport_Population {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // The identifier of the population being reported, as defined by the population element of the measure.
    CodeableConcept code = 6;                                         // The type of the population.
    int64 count = 7;                                                  // The number of members of the population.
    Element countExtensionElement = 8;                                // Extensions for count
    Reference patients = 9;                                           // This element refers to a List of patient level MeasureReport resources, one for each patient in this population.
}

/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport_Stratifier {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // The identifier of this stratifier, as defined in the measure definition.
    repeated MeasureReport_Stratum stratum = 6;                       // This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.
}

/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport_Stratum {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string value = 5;                                                 // The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
    Element valueExtensionElement = 6;                                // Extensions for value
    repeated MeasureReport_Population1 population = 7;                // The populations that make up the stratum, one for each type of population appropriate to the measure.
    double measureScore = 8;                                          // The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.
    Element measureScoreExtensionElement = 9;                         // Extensions for measureScore
}

/*
 * The MeasureReport resource contains the results of evaluating a measure.
 */
message MeasureReport_Population1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // The identifier of the population being reported, as defined by the population element of the measure.
    CodeableConcept code = 6;                                         // The type of the population.
    int64 count = 7;                                                  // The number of members of the population in this stratum.
    Element countExtensionElement = 8;                                // Extensions for count
    Reference patients = 9;                                           // This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.
}

enum Media_type {
    Media_type_photo = 0;
    Media_type_video = 1;
    Media_type_audio = 2;
}


/*
 * A photo, video, or audio recording acquired or used in healthcare. The actual content may be inline or provided by direct reference.
 */
message Media {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers associated with the image - these may include identifiers for the image itself, identifiers for the context of its collection (e.g. series ids) and context ids such as accession numbers or other workflow identifiers.
    repeated Reference basedOn = 13;                                  // A procedure that is fulfilled in whole or in part by the creation of this media.
    Media_type type = 14;                                             // Whether the media is a photo (still image), an audio recording, or a video recording.
    Element typeExtensionElement = 15;                                // Extensions for type
    CodeableConcept subtype = 16;                                     // Details of the type of the media - usually, how it was acquired (what type of device). If images sourced from a DICOM system, are wrapped in a Media resource, then this is the modality.
    CodeableConcept view = 17;                                        // The name of the imaging view e.g. Lateral or Antero-posterior (AP).
    Reference subject = 18;                                           // Who/What this Media is a record of.
    Reference context = 19;                                           // The encounter or episode of care that establishes the context for this media.
    string occurrenceDateTime = 20;                                   // The date and time(s) at which the media was collected.
    Element occurrenceDateTimeExtensionElement = 21;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 22;                                     // The date and time(s) at which the media was collected.
    Reference operator = 23;                                          // The person who administered the collection of the image.
    repeated CodeableConcept reasonCode = 24;                         // Describes why the event occurred in coded or textual form.
    CodeableConcept bodySite = 25;                                    // Indicates the site on the subject's body where the media was collected (i.e. the target site).
    Reference device = 26;                                            // The device used to collect the media.
    int64 height = 27;                                                // Height of the image in pixels (photo/video).
    Element heightExtensionElement = 28;                              // Extensions for height
    int64 width = 29;                                                 // Width of the image in pixels (photo/video).
    Element widthExtensionElement = 30;                               // Extensions for width
    int64 frames = 31;                                                // The number of frames in a photo. This is used with a multi-page fax, or an imaging acquisition context that takes multiple slices in a single image, or an animated gif. If there is more than one frame, this SHALL have a value in order to alert interface software that a multi-frame capable rendering widget is required.
    Element framesExtensionElement = 32;                              // Extensions for frames
    int64 duration = 33;                                              // The duration of the recording in seconds - for audio and video.
    Element durationExtensionElement = 34;                            // Extensions for duration
    Attachment content = 35;                                          // The actual content of the media - inline or by direct reference to the media source file.
    repeated Annotation note = 36;                                    // Comments made about the media by the performer, subject or other participants.
}

enum Medication_status {
    Medication_status_inactive = 0;
    Medication_status_active = 1;
    Medication_status_entered_in_error = 2;
}


/*
 * This resource is primarily used for the identification and definition of a medication. It covers the ingredients and the packaging for a medication.
 */
message Medication {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    CodeableConcept code = 12;                                        // A code (or set of codes) that specify this medication, or a textual description if no code is available. Usage note: This could be a standard medication code such as a code from RxNorm, SNOMED CT, IDMP etc. It could also be a national or local formulary code, optionally with translations to other code systems.
    Medication_status status = 13;                                    // A code to indicate if the medication is in active use.
    Element statusExtensionElement = 14;                              // Extensions for status
    bool isBrand = 15;                                                // Set to true if the item is attributable to a specific manufacturer.
    Element isBrandExtensionElement = 16;                             // Extensions for isBrand
    bool isOverTheCounter = 17;                                       // Set to true if the medication can be obtained without an order from a prescriber.
    Element isOverTheCounterExtensionElement = 18;                    // Extensions for isOverTheCounter
    Reference manufacturer = 19;                                      // Describes the details of the manufacturer of the medication product.  This is not intended to represent the distributor of a medication product.
    CodeableConcept form = 20;                                        // Describes the form of the item.  Powder; tablets; capsule.
    repeated Medication_Ingredient ingredient = 21;                   // Identifies a particular constituent of interest in the product.
    Medication_Package package = 22;                                  // Information that only applies to packages (not products).
    repeated Attachment image = 23;                                   // Photo(s) or graphic representation(s) of the medication.
}

/*
 * This resource is primarily used for the identification and definition of a medication. It covers the ingredients and the packaging for a medication.
 */
message Medication_Ingredient {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept itemCodeableConcept = 5;                          // The actual ingredient - either a substance (simple ingredient) or another medication.
    Reference itemReference = 6;                                      // The actual ingredient - either a substance (simple ingredient) or another medication.
    bool isActive = 7;                                                // Indication of whether this ingredient affects the therapeutic action of the drug.
    Element isActiveExtensionElement = 8;                             // Extensions for isActive
    Ratio amount = 9;                                                 // Specifies how many (or how much) of the items there are in this Medication.  For example, 250 mg per tablet.  This is expressed as a ratio where the numerator is 250mg and the denominator is 1 tablet.
}

/*
 * This resource is primarily used for the identification and definition of a medication. It covers the ingredients and the packaging for a medication.
 */
message Medication_Package {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept container = 5;                                    // The kind of container that this package comes as.
    repeated Medication_Content content = 6;                          // A set of components that go to make up the described item.
    repeated Medication_Batch batch = 7;                              // Information about a group of medication produced or packaged from one production run.
}

/*
 * This resource is primarily used for the identification and definition of a medication. It covers the ingredients and the packaging for a medication.
 */
message Medication_Content {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept itemCodeableConcept = 5;                          // Identifies one of the items in the package.
    Reference itemReference = 6;                                      // Identifies one of the items in the package.
    Quantity amount = 7;                                              // The amount of the product that is in the package.
}

/*
 * This resource is primarily used for the identification and definition of a medication. It covers the ingredients and the packaging for a medication.
 */
message Medication_Batch {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string lotNumber = 5;                                             // The assigned lot number of a batch of the specified product.
    Element lotNumberExtensionElement = 6;                            // Extensions for lotNumber
    string expirationDate = 7;                                        // When this specific batch of product will expire.
    Element expirationDateExtensionElement = 8;                       // Extensions for expirationDate
}

enum MedicationAdministration_status {
    MedicationAdministration_status_stopped = 0;
    MedicationAdministration_status_completed = 1;
    MedicationAdministration_status_entered_in_error = 2;
    MedicationAdministration_status_in_progress = 3;
    MedicationAdministration_status_on_hold = 4;
    MedicationAdministration_status_unknown = 5;
}


/*
 * Describes the event of a patient consuming or otherwise being administered a medication.  This may be as simple as swallowing a tablet or it may be a long running infusion.  Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.
 */
message MedicationAdministration {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // External identifier - FHIR will generate its own internal identifiers (probably URLs) which do not need to be explicitly managed by the resource.  The identifier here is one that would be used by another non-FHIR system - for example an automated medication pump would provide a record each time it operated; an administration while the patient was off the ward might be made with a different system and entered after the event.  Particularly important if these records have to be updated.
    repeated Reference definition = 13;                               // A protocol, guideline, orderset or other definition that was adhered to in whole or in part by this event.
    repeated Reference partOf = 14;                                   // A larger event of which this particular event is a component or step.
    MedicationAdministration_status status = 15;                      // Will generally be set to show that the administration has been completed.  For some long running administrations such as infusions it is possible for an administration to be started but not completed or it may be paused while some other process is under way.
    Element statusExtensionElement = 16;                              // Extensions for status
    CodeableConcept category = 17;                                    // Indicates the type of medication administration and where the medication is expected to be consumed or administered.
    CodeableConcept medicationCodeableConcept = 18;                   // Identifies the medication that was administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    Reference medicationReference = 19;                               // Identifies the medication that was administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    Reference subject = 20;                                           // The person or animal or group receiving the medication.
    Reference context = 21;                                           // The visit, admission or other contact between patient and health care provider the medication administration was performed as part of.
    repeated Reference supportingInformation = 22;                    // Additional information (for example, patient height and weight) that supports the administration of the medication.
    string effectiveDateTime = 23;                                    // A specific date/time or interval of time during which the administration took place (or did not take place, when the 'notGiven' attribute is true). For many administrations, such as swallowing a tablet the use of dateTime is more appropriate.
    Element effectiveDateTimeExtensionElement = 24;                   // Extensions for effectiveDateTime
    Period effectivePeriod = 25;                                      // A specific date/time or interval of time during which the administration took place (or did not take place, when the 'notGiven' attribute is true). For many administrations, such as swallowing a tablet the use of dateTime is more appropriate.
    repeated MedicationAdministration_Performer performer = 26;       // The individual who was responsible for giving the medication to the patient.
    bool notGiven = 27;                                               // Set this to true if the record is saying that the medication was NOT administered.
    Element notGivenExtensionElement = 28;                            // Extensions for notGiven
    repeated CodeableConcept reasonNotGiven = 29;                     // A code indicating why the administration was not performed.
    repeated CodeableConcept reasonCode = 30;                         // A code indicating why the medication was given.
    repeated Reference reasonReference = 31;                          // Condition or observation that supports why the medication was administered.
    Reference prescription = 32;                                      // The original request, instruction or authority to perform the administration.
    repeated Reference device = 33;                                   // The device used in administering the medication to the patient.  For example, a particular infusion pump.
    repeated Annotation note = 34;                                    // Extra information about the medication administration that is not conveyed by the other attributes.
    MedicationAdministration_Dosage dosage = 35;                      // Describes the medication dosage information details e.g. dose, rate, site, route, etc.
    repeated Reference eventHistory = 36;                             // A summary of the events of interest that have occurred, such as when the administration was verified.
}

/*
 * Describes the event of a patient consuming or otherwise being administered a medication.  This may be as simple as swallowing a tablet or it may be a long running infusion.  Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.
 */
message MedicationAdministration_Performer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference actor = 5;                                              // The device, practitioner, etc. who performed the action.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

/*
 * Describes the event of a patient consuming or otherwise being administered a medication.  This may be as simple as swallowing a tablet or it may be a long running infusion.  Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.
 */
message MedicationAdministration_Dosage {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string text = 5;                                                  // Free text dosage can be used for cases where the dosage administered is too complex to code. When coded dosage is present, the free text dosage may still be present for display to humans.  The dosage instructions should reflect the dosage of the medication that was administered.
    Element textExtensionElement = 6;                                 // Extensions for text
    CodeableConcept site = 7;                                         // A coded specification of the anatomic site where the medication first entered the body.  For example, "left arm".
    CodeableConcept route = 8;                                        // A code specifying the route or physiological path of administration of a therapeutic agent into or onto the patient.  For example, topical, intravenous, etc.
    CodeableConcept method = 9;                                       // A coded value indicating the method by which the medication is intended to be or was introduced into or on the body.  This attribute will most often NOT be populated.  It is most commonly used for injections.  For example, Slow Push, Deep IV.
    Quantity dose = 10;                                               // The amount of the medication given at one administration event.   Use this value when the administration is essentially an instantaneous event such as a swallowing a tablet or giving an injection.
    Ratio rateRatio = 11;                                             // Identifies the speed with which the medication was or will be introduced into the patient.  Typically the rate for an infusion e.g. 100 ml per 1 hour or 100 ml/hr.  May also be expressed as a rate per unit of time e.g. 500 ml per 2 hours.  Other examples:  200 mcg/min or 200 mcg/1 minute; 1 liter/8 hours.
    Quantity rateSimpleQuantity = 12;                                 // Identifies the speed with which the medication was or will be introduced into the patient.  Typically the rate for an infusion e.g. 100 ml per 1 hour or 100 ml/hr.  May also be expressed as a rate per unit of time e.g. 500 ml per 2 hours.  Other examples:  200 mcg/min or 200 mcg/1 minute; 1 liter/8 hours.
}

enum MedicationDispense_status {
    MedicationDispense_status_stopped = 0;
    MedicationDispense_status_completed = 1;
    MedicationDispense_status_entered_in_error = 2;
    MedicationDispense_status_in_progress = 3;
    MedicationDispense_status_on_hold = 4;
    MedicationDispense_status_preparation = 5;
}


/*
 * Indicates that a medication product is to be or has been dispensed for a named person/patient.  This includes a description of the medication product (supply) provided and the instructions for administering the medication.  The medication dispense is the result of a pharmacy system responding to a medication order.
 */
message MedicationDispense {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier assigned by the dispensing facility - this is an identifier assigned outside FHIR.
    repeated Reference partOf = 13;                                   // The procedure that the dispense is done because of.
    MedicationDispense_status status = 14;                            // A code specifying the state of the set of dispense events.
    Element statusExtensionElement = 15;                              // Extensions for status
    CodeableConcept category = 16;                                    // Indicates type of medication dispense and where the medication is expected to be consumed or administered.
    CodeableConcept medicationCodeableConcept = 17;                   // Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    Reference medicationReference = 18;                               // Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    Reference subject = 19;                                           // A link to a resource representing the person or the group to whom the medication will be given.
    Reference context = 20;                                           // The encounter or episode of care that establishes the context for this event.
    repeated Reference supportingInformation = 21;                    // Additional information that supports the medication being dispensed.
    repeated MedicationDispense_Performer performer = 22;             // Indicates who or what performed the event.  It should be assumed that the performer is the dispenser of the medication.
    repeated Reference authorizingPrescription = 23;                  // Indicates the medication order that is being dispensed against.
    CodeableConcept type = 24;                                        // Indicates the type of dispensing event that is performed. For example, Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.
    Quantity quantity = 25;                                           // The amount of medication that has been dispensed. Includes unit of measure.
    Quantity daysSupply = 26;                                         // The amount of medication expressed as a timing amount.
    string whenPrepared = 27;                                         // The time when the dispensed product was packaged and reviewed.
    Element whenPreparedExtensionElement = 28;                        // Extensions for whenPrepared
    string whenHandedOver = 29;                                       // The time the dispensed product was provided to the patient or their representative.
    Element whenHandedOverExtensionElement = 30;                      // Extensions for whenHandedOver
    Reference destination = 31;                                       // Identification of the facility/location where the medication was shipped to, as part of the dispense event.
    repeated Reference receiver = 32;                                 // Identifies the person who picked up the medication.  This will usually be a patient or their caregiver, but some cases exist where it can be a healthcare professional.
    repeated Annotation note = 33;                                    // Extra information about the dispense that could not be conveyed in the other attributes.
    repeated Dosage dosageInstruction = 34;                           // Indicates how the medication is to be used by the patient.
    MedicationDispense_Substitution substitution = 35;                // Indicates whether or not substitution was made as part of the dispense.  In some cases substitution will be expected but does not happen, in other cases substitution is not expected but does happen.  This block explains what substitution did or did not happen and why.  If nothing is specified, substitution was not done.
    repeated Reference detectedIssue = 36;                            // Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, duplicate therapy, dosage alert etc.
    bool notDone = 37;                                                // True if the dispense was not performed for some reason.
    Element notDoneExtensionElement = 38;                             // Extensions for notDone
    CodeableConcept notDoneReasonCodeableConcept = 39;                // Indicates the reason why a dispense was not performed.
    Reference notDoneReasonReference = 40;                            // Indicates the reason why a dispense was not performed.
    repeated Reference eventHistory = 41;                             // A summary of the events of interest that have occurred, such as when the dispense was verified.
}

/*
 * Indicates that a medication product is to be or has been dispensed for a named person/patient.  This includes a description of the medication product (supply) provided and the instructions for administering the medication.  The medication dispense is the result of a pharmacy system responding to a medication order.
 */
message MedicationDispense_Performer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference actor = 5;                                              // The device, practitioner, etc. who performed the action.  It should be assumed that the actor is the dispenser of the medication.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

/*
 * Indicates that a medication product is to be or has been dispensed for a named person/patient.  This includes a description of the medication product (supply) provided and the instructions for administering the medication.  The medication dispense is the result of a pharmacy system responding to a medication order.
 */
message MedicationDispense_Substitution {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool wasSubstituted = 5;                                          // True if the dispenser dispensed a different drug or product from what was prescribed.
    Element wasSubstitutedExtensionElement = 6;                       // Extensions for wasSubstituted
    CodeableConcept type = 7;                                         // A code signifying whether a different drug was dispensed from what was prescribed.
    repeated CodeableConcept reason = 8;                              // Indicates the reason for the substitution of (or lack of substitution) from what was prescribed.
    repeated Reference responsibleParty = 9;                          // The person or organization that has primary responsibility for the substitution.
}

enum MedicationRequest_status {
    MedicationRequest_status_stopped = 0;
    MedicationRequest_status_draft = 1;
    MedicationRequest_status_active = 2;
    MedicationRequest_status_cancelled = 3;
    MedicationRequest_status_completed = 4;
    MedicationRequest_status_entered_in_error = 5;
    MedicationRequest_status_on_hold = 6;
    MedicationRequest_status_unknown = 7;
}

enum MedicationRequest_intent {
    MedicationRequest_intent_proposal = 0;
    MedicationRequest_intent_instance_order = 1;
    MedicationRequest_intent_plan = 2;
    MedicationRequest_intent_order = 3;
}

enum MedicationRequest_priority {
    MedicationRequest_priority_stat = 0;
    MedicationRequest_priority_routine = 1;
    MedicationRequest_priority_urgent = 2;
    MedicationRequest_priority_asap = 3;
}


/*
 * An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called "MedicationRequest" rather than "MedicationPrescription" or "MedicationOrder" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.
 */
message MedicationRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this medication request that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate. For example a re-imbursement system might issue its own id for each prescription that is created.  This is particularly important where FHIR only provides part of an entire workflow process where records must be tracked through an entire system.
    repeated Reference definition = 13;                               // Protocol or definition followed by this request.
    repeated Reference basedOn = 14;                                  // A plan or request that is fulfilled in whole or in part by this medication request.
    Identifier groupIdentifier = 15;                                  // A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition or prescription.
    MedicationRequest_status status = 16;                             // A code specifying the current state of the order.  Generally this will be active or completed state.
    Element statusExtensionElement = 17;                              // Extensions for status
    MedicationRequest_intent intent = 18;                             // Whether the request is a proposal, plan, or an original order.
    Element intentExtensionElement = 19;                              // Extensions for intent
    CodeableConcept category = 20;                                    // Indicates the type of medication order and where the medication is expected to be consumed or administered.
    MedicationRequest_priority priority = 21;                         // Indicates how quickly the Medication Request should be addressed with respect to other requests.
    Element priorityExtensionElement = 22;                            // Extensions for priority
    CodeableConcept medicationCodeableConcept = 23;                   // Identifies the medication being requested. This is a link to a resource that represents the medication which may be the details of the medication or simply an attribute carrying a code that identifies the medication from a known list of medications.
    Reference medicationReference = 24;                               // Identifies the medication being requested. This is a link to a resource that represents the medication which may be the details of the medication or simply an attribute carrying a code that identifies the medication from a known list of medications.
    Reference subject = 25;                                           // A link to a resource representing the person or set of individuals to whom the medication will be given.
    Reference context = 26;                                           // A link to an encounter, or episode of care, that identifies the particular occurrence or set occurrences of contact between patient and health care provider.
    repeated Reference supportingInformation = 27;                    // Include additional information (for example, patient height and weight) that supports the ordering of the medication.
    string authoredOn = 28;                                           // The date (and perhaps time) when the prescription was initially written or authored on.
    Element authoredOnExtensionElement = 29;                          // Extensions for authoredOn
    MedicationRequest_Requester requester = 30;                       // The individual, organization or device that initiated the request and has responsibility for its activation.
    Reference recorder = 31;                                          // The person who entered the order on behalf of another individual for example in the case of a verbal or a telephone order.
    repeated CodeableConcept reasonCode = 32;                         // The reason or the indication for ordering the medication.
    repeated Reference reasonReference = 33;                          // Condition or observation that supports why the medication was ordered.
    repeated Annotation note = 34;                                    // Extra information about the prescription that could not be conveyed by the other attributes.
    repeated Dosage dosageInstruction = 35;                           // Indicates how the medication is to be used by the patient.
    MedicationRequest_DispenseRequest dispenseRequest = 36;           // Indicates the specific details for the dispense or medication supply part of a medication request (also known as a Medication Prescription or Medication Order).  Note that this information is not always sent with the order.  There may be in some settings (e.g. hospitals) institutional or system support for completing the dispense details in the pharmacy department.
    MedicationRequest_Substitution substitution = 37;                 // Indicates whether or not substitution can or should be part of the dispense. In some cases substitution must happen, in other cases substitution must not happen. This block explains the prescriber's intent. If nothing is specified substitution may be done.
    Reference priorPrescription = 38;                                 // A link to a resource representing an earlier order related order or prescription.
    repeated Reference detectedIssue = 39;                            // Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, duplicate therapy, dosage alert etc.
    repeated Reference eventHistory = 40;                             // Links to Provenance records for past versions of this resource or fulfilling request or event resources that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the resource.
}

/*
 * An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called "MedicationRequest" rather than "MedicationPrescription" or "MedicationOrder" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.
 */
message MedicationRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The healthcare professional responsible for authorizing the initial prescription.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

/*
 * An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called "MedicationRequest" rather than "MedicationPrescription" or "MedicationOrder" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.
 */
message MedicationRequest_DispenseRequest {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Period validityPeriod = 5;                                        // This indicates the validity period of a prescription (stale dating the Prescription).
    int64 numberOfRepeatsAllowed = 6;                                 // An integer indicating the number of times, in addition to the original dispense, (aka refills or repeats) that the patient can receive the prescribed medication. Usage Notes: This integer does not include the original order dispense. This means that if an order indicates dispense 30 tablets plus "3 repeats", then the order can be dispensed a total of 4 times and the patient can receive a total of 120 tablets.
    Element numberOfRepeatsAllowedExtensionElement = 7;               // Extensions for numberOfRepeatsAllowed
    Quantity quantity = 8;                                            // The amount that is to be dispensed for one fill.
    Duration expectedSupplyDuration = 9;                              // Identifies the period time over which the supplied product is expected to be used, or the length of time the dispense is expected to last.
    Reference performer = 10;                                         // Indicates the intended dispensing Organization specified by the prescriber.
}

/*
 * An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called "MedicationRequest" rather than "MedicationPrescription" or "MedicationOrder" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.
 */
message MedicationRequest_Substitution {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool allowed = 5;                                                 // True if the prescriber allows a different drug to be dispensed from what was prescribed.
    Element allowedExtensionElement = 6;                              // Extensions for allowed
    CodeableConcept reason = 7;                                       // Indicates the reason for the substitution, or why substitution must or must not be performed.
}

enum MedicationStatement_status {
    MedicationStatement_status_stopped = 0;
    MedicationStatement_status_intended = 1;
    MedicationStatement_status_active = 2;
    MedicationStatement_status_completed = 3;
    MedicationStatement_status_entered_in_error = 4;
    MedicationStatement_status_on_hold = 5;
}

enum MedicationStatement_taken {
    MedicationStatement_taken_unk = 0;
    MedicationStatement_taken_na = 1;
    MedicationStatement_taken_y = 2;
    MedicationStatement_taken_n = 3;
}


/*
 * A record of a medication that is being consumed by a patient.   A MedicationStatement may indicate that the patient may be taking the medication now, or has taken the medication in the past or will be taking the medication in the future.  The source of this information can be the patient, significant other (such as a family member or spouse), or a clinician.  A common scenario where this information is captured is during the history taking process during a patient visit or stay.   The medication information may come from sources such as the patient's memory, from a prescription bottle,  or from a list of medications the patient, clinician or other party maintains 

The primary difference between a medication statement and a medication administration is that the medication administration has complete administration information and is based on actual administration information from the person who administered the medication.  A medication statement is often, if not always, less specific.  There is no required date/time when the medication was administered, in fact we only know that a source has reported the patient is taking this medication, where details such as time, quantity, or rate or even medication product may be incomplete or missing or less precise.  As stated earlier, the medication statement information may come from the patient's memory, from a prescription bottle or from a list of medications the patient, clinician or other party maintains.  Medication administration is more formal and is not missing detailed information.
 */
message MedicationStatement {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // External identifier - FHIR will generate its own internal identifiers (probably URLs) which do not need to be explicitly managed by the resource.  The identifier here is one that would be used by another non-FHIR system - for example an automated medication pump would provide a record each time it operated; an administration while the patient was off the ward might be made with a different system and entered after the event.  Particularly important if these records have to be updated.
    repeated Reference basedOn = 13;                                  // A plan, proposal or order that is fulfilled in whole or in part by this event.
    repeated Reference partOf = 14;                                   // A larger event of which this particular event is a component or step.
    Reference context = 15;                                           // The encounter or episode of care that establishes the context for this MedicationStatement.
    MedicationStatement_status status = 16;                           // A code representing the patient or other source's judgment about the state of the medication used that this statement is about.  Generally this will be active or completed.
    Element statusExtensionElement = 17;                              // Extensions for status
    CodeableConcept category = 18;                                    // Indicates where type of medication statement and where the medication is expected to be consumed or administered.
    CodeableConcept medicationCodeableConcept = 19;                   // Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    Reference medicationReference = 20;                               // Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.
    string effectiveDateTime = 21;                                    // The interval of time during which it is being asserted that the patient was taking the medication (or was not taking, when the wasNotGiven element is true).
    Element effectiveDateTimeExtensionElement = 22;                   // Extensions for effectiveDateTime
    Period effectivePeriod = 23;                                      // The interval of time during which it is being asserted that the patient was taking the medication (or was not taking, when the wasNotGiven element is true).
    string dateAsserted = 24;                                         // The date when the medication statement was asserted by the information source.
    Element dateAssertedExtensionElement = 25;                        // Extensions for dateAsserted
    Reference informationSource = 26;                                 // The person or organization that provided the information about the taking of this medication. Note: Use derivedFrom when a MedicationStatement is derived from other resources, e.g Claim or MedicationRequest.
    Reference subject = 27;                                           // The person, animal or group who is/was taking the medication.
    repeated Reference derivedFrom = 28;                              // Allows linking the MedicationStatement to the underlying MedicationRequest, or to other information that supports or is used to derive the MedicationStatement.
    MedicationStatement_taken taken = 29;                             // Indicator of the certainty of whether the medication was taken by the patient.
    Element takenExtensionElement = 30;                               // Extensions for taken
    repeated CodeableConcept reasonNotTaken = 31;                     // A code indicating why the medication was not taken.
    repeated CodeableConcept reasonCode = 32;                         // A reason for why the medication is being/was taken.
    repeated Reference reasonReference = 33;                          // Condition or observation that supports why the medication is being/was taken.
    repeated Annotation note = 34;                                    // Provides extra information about the medication statement that is not conveyed by the other attributes.
    repeated Dosage dosage = 35;                                      // Indicates how the medication is/was or should be taken by the patient.
}

enum MessageDefinition_status {
    MessageDefinition_status_draft = 0;
    MessageDefinition_status_active = 1;
    MessageDefinition_status_retired = 2;
    MessageDefinition_status_unknown = 3;
}


/*
 * Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.
 */
message MessageDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this message definition is (or will be) published. The URL SHOULD include the major version of the message definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    Identifier identifier = 14;                                       // A formal identifier that is used to identify this message definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the message definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the message definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the message definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the message definition.
    Element titleExtensionElement = 20;                               // Extensions for title
    MessageDefinition_status status = 21;                             // The status of this message definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this message definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the message definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the message definition changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the message definition.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the message definition from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate message definition instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the message definition is intended to be used.
    string purpose = 34;                                              // Explaination of why this message definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the message definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the message definition.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    Reference base = 38;                                              // The MessageDefinition that is the basis for the contents of this resource.
    repeated Reference parent = 39;                                   // Identifies a protocol or workflow that this MessageDefinition represents a step in.
    repeated Reference replaces = 40;                                 // A MessageDefinition that is superseded by this definition.
    Coding event = 41;                                                // A coded identifier of a supported messaging event.
    string category = 42;                                             // The impact of the content of the message.
    Element categoryExtensionElement = 43;                            // Extensions for category
    repeated MessageDefinition_Focus focus = 44;                      // Identifies the resource (or resources) that are being addressed by the event.  For example, the Encounter for an admit message or two Account records for a merge.
    bool responseRequired = 45;                                       // Indicates whether a response is required for this message.
    Element responseRequiredExtensionElement = 46;                    // Extensions for responseRequired
    repeated MessageDefinition_AllowedResponse allowedResponse = 47;  // Indicates what types of messages may be sent as an application-level response to this message.
}

/*
 * Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.
 */
message MessageDefinition_Focus {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // The kind of resource that must be the focus for this message.
    Element codeExtensionElement = 6;                                 // Extensions for code
    Reference profile = 7;                                            // A profile that reflects constraints for the focal resource (and potentially for related resources).
    int64 min = 8;                                                    // Identifies the minimum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.
    Element minExtensionElement = 9;                                  // Extensions for min
    string max = 10;                                                  // Identifies the maximum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.
    Element maxExtensionElement = 11;                                 // Extensions for max
}

/*
 * Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.
 */
message MessageDefinition_AllowedResponse {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference message = 5;                                            // A reference to the message definition that must be adhered to by this supported response.
    string situation = 6;                                             // Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).
    Element situationExtensionElement = 7;                            // Extensions for situation
}

/*
 * The header for a message exchange that is either requesting or responding to an action.  The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.
 */
message MessageHeader {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Coding event = 12;                                                // Code that identifies the event this message represents and connects it with its definition. Events defined as part of the FHIR specification have the system value "http://hl7.org/fhir/message-events".
    repeated MessageHeader_Destination destination = 13;              // The destination application which the message is intended for.
    Reference receiver = 14;                                          // Allows data conveyed by a message to be addressed to a particular person or department when routing to a specific application isn't sufficient.
    Reference sender = 15;                                            // Identifies the sending system to allow the use of a trust relationship.
    string timestamp = 16;                                            // The time that the message was sent.
    Element timestampExtensionElement = 17;                           // Extensions for timestamp
    Reference enterer = 18;                                           // The person or device that performed the data entry leading to this message. When there is more than one candidate, pick the most proximal to the message. Can provide other enterers in extensions.
    Reference author = 19;                                            // The logical author of the message - the person or device that decided the described event should happen. When there is more than one candidate, pick the most proximal to the MessageHeader. Can provide other authors in extensions.
    MessageHeader_Source source = 20;                                 // The source application from which this message originated.
    Reference responsible = 21;                                       // The person or organization that accepts overall responsibility for the contents of the message. The implication is that the message event happened under the policies of the responsible party.
    CodeableConcept reason = 22;                                      // Coded indication of the cause for the event - indicates  a reason for the occurrence of the event that is a focus of this message.
    MessageHeader_Response response = 23;                             // Information about the message that this message is a response to.  Only present if this message is a response.
    repeated Reference focus = 24;                                    // The actual data of the message - a reference to the root/focus class of the event.
}

/*
 * The header for a message exchange that is either requesting or responding to an action.  The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.
 */
message MessageHeader_Destination {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Human-readable name for the target system.
    Element nameExtensionElement = 6;                                 // Extensions for name
    Reference target = 7;                                             // Identifies the target end system in situations where the initial message transmission is to an intermediary system.
    string endpoint = 8;                                              // Indicates where the message should be routed to.
    Element endpointExtensionElement = 9;                             // Extensions for endpoint
}

/*
 * The header for a message exchange that is either requesting or responding to an action.  The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.
 */
message MessageHeader_Source {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Human-readable name for the source system.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string software = 7;                                              // May include configuration or other information useful in debugging.
    Element softwareExtensionElement = 8;                             // Extensions for software
    string version = 9;                                               // Can convey versions of multiple systems in situations where a message passes through multiple hands.
    Element versionExtensionElement = 10;                             // Extensions for version
    ContactPoint contact = 11;                                        // An e-mail, phone, website or other contact point to use to resolve issues with message communications.
    string endpoint = 12;                                             // Identifies the routing target to send acknowledgements to.
    Element endpointExtensionElement = 13;                            // Extensions for endpoint
}

enum MessageHeader_Response_code {
    MessageHeader_Response_code_fatal_error = 0;
    MessageHeader_Response_code_ok = 1;
    MessageHeader_Response_code_transient_error = 2;
}


/*
 * The header for a message exchange that is either requesting or responding to an action.  The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.
 */
message MessageHeader_Response {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string identifier = 5;                                            // The MessageHeader.id of the message to which this message is a response.
    Element identifierExtensionElement = 6;                           // Extensions for identifier
    MessageHeader_Response_code code = 7;                             // Code that identifies the type of response to the message - whether it was successful or not, and whether it should be resent or not.
    Element codeExtensionElement = 8;                                 // Extensions for code
    Reference details = 9;                                            // Full details of any issues found in the message.
}

enum NamingSystem_status {
    NamingSystem_status_draft = 0;
    NamingSystem_status_active = 1;
    NamingSystem_status_retired = 2;
    NamingSystem_status_unknown = 3;
}

enum NamingSystem_kind {
    NamingSystem_kind_identifier = 0;
    NamingSystem_kind_codesystem = 1;
    NamingSystem_kind_root = 2;
}


/*
 * A curated namespace that issues unique symbols within that namespace for the identification of concepts, people, devices, etc.  Represents a "System" used within the Identifier and Coding data types.
 */
message NamingSystem {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string name = 12;                                                 // A natural language name identifying the naming system. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 13;                                // Extensions for name
    NamingSystem_status status = 14;                                  // The status of this naming system. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 15;                              // Extensions for status
    NamingSystem_kind kind = 16;                                      // Indicates the purpose for the naming system - what kinds of things does it make unique?
    Element kindExtensionElement = 17;                                // Extensions for kind
    string date = 18;                                                 // The date  (and optionally time) when the naming system was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the naming system changes.
    Element dateExtensionElement = 19;                                // Extensions for date
    string publisher = 20;                                            // The name of the individual or organization that published the naming system.
    Element publisherExtensionElement = 21;                           // Extensions for publisher
    repeated ContactDetail contact = 22;                              // Contact details to assist a user in finding and communicating with the publisher.
    string responsible = 23;                                          // The name of the organization that is responsible for issuing identifiers or codes for this namespace and ensuring their non-collision.
    Element responsibleExtensionElement = 24;                         // Extensions for responsible
    CodeableConcept type = 25;                                        // Categorizes a naming system for easier search by grouping related naming systems.
    string description = 26;                                          // A free text natural language description of the naming system from a consumer's perspective. Details about what the namespace identifies including scope, granularity, version labeling, etc.
    Element descriptionExtensionElement = 27;                         // Extensions for description
    repeated UsageContext useContext = 28;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate naming system instances.
    repeated CodeableConcept jurisdiction = 29;                       // A legal or geographic region in which the naming system is intended to be used.
    string usage = 30;                                                // Provides guidance on the use of the namespace, including the handling of formatting characters, use of upper vs. lower case, etc.
    Element usageExtensionElement = 31;                               // Extensions for usage
    repeated NamingSystem_UniqueId uniqueId = 32;                     // Indicates how the system may be identified when referenced in electronic exchange.
    Reference replacedBy = 33;                                        // For naming systems that are retired, indicates the naming system that should be used in their place (if any).
}

enum NamingSystem_UniqueId_type {
    NamingSystem_UniqueId_type_other = 0;
    NamingSystem_UniqueId_type_oid = 1;
    NamingSystem_UniqueId_type_uuid = 2;
    NamingSystem_UniqueId_type_uri = 3;
}


/*
 * A curated namespace that issues unique symbols within that namespace for the identification of concepts, people, devices, etc.  Represents a "System" used within the Identifier and Coding data types.
 */
message NamingSystem_UniqueId {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    NamingSystem_UniqueId_type type = 5;                              // Identifies the unique identifier scheme used for this particular identifier.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string value = 7;                                                 // The string that should be sent over the wire to identify the code system or identifier system.
    Element valueExtensionElement = 8;                                // Extensions for value
    bool preferred = 9;                                               // Indicates whether this identifier is the "preferred" identifier of this type.
    Element preferredExtensionElement = 10;                           // Extensions for preferred
    string comment = 11;                                              // Notes about the past or intended usage of this identifier.
    Element commentExtensionElement = 12;                             // Extensions for comment
    Period period = 13;                                               // Identifies the period of time over which this identifier is considered appropriate to refer to the naming system.  Outside of this window, the identifier might be non-deterministic.
}

enum NutritionOrder_status {
    NutritionOrder_status_requested = 0;
    NutritionOrder_status_proposed = 1;
    NutritionOrder_status_draft = 2;
    NutritionOrder_status_active = 3;
    NutritionOrder_status_cancelled = 4;
    NutritionOrder_status_planned = 5;
    NutritionOrder_status_completed = 6;
    NutritionOrder_status_entered_in_error = 7;
    NutritionOrder_status_on_hold = 8;
}


/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers assigned to this order by the order sender or by the order receiver.
    NutritionOrder_status status = 13;                                // The workflow status of the nutrition order/request.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference patient = 15;                                           // The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.
    Reference encounter = 16;                                         // An encounter that provides additional information about the healthcare context in which this request is made.
    string dateTime = 17;                                             // The date and time that this nutrition order was requested.
    Element dateTimeExtensionElement = 18;                            // Extensions for dateTime
    Reference orderer = 19;                                           // The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.
    repeated Reference allergyIntolerance = 20;                       // A link to a record of allergies or intolerances  which should be included in the nutrition order.
    repeated CodeableConcept foodPreferenceModifier = 21;             // This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.
    repeated CodeableConcept excludeFoodModifier = 22;                // This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient’s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.
    NutritionOrder_OralDiet oralDiet = 23;                            // Diet given orally in contrast to enteral (tube) feeding.
    repeated NutritionOrder_Supplement supplement = 24;               // Oral nutritional products given in order to add further nutritional value to the patient's diet.
    NutritionOrder_EnteralFormula enteralFormula = 25;                // Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_OralDiet {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept type = 5;                                // The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.
    repeated Timing schedule = 6;                                     // The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present.
    repeated NutritionOrder_Nutrient nutrient = 7;                    // Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.
    repeated NutritionOrder_Texture texture = 8;                      // Class that describes any texture modifications required for the patient to safely consume various types of solid foods.
    repeated CodeableConcept fluidConsistencyType = 9;                // The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.
    string instruction = 10;                                          // Free text or additional instructions or information pertaining to the oral diet.
    Element instructionExtensionElement = 11;                         // Extensions for instruction
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_Nutrient {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept modifier = 5;                                     // The nutrient that is being modified such as carbohydrate or sodium.
    Quantity amount = 6;                                              // The quantity of the specified nutrient to include in diet.
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_Texture {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept modifier = 5;                                     // Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.
    CodeableConcept foodType = 6;                                     // The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_Supplement {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.
    string productName = 6;                                           // The product or brand name of the nutritional supplement such as "Acme Protein Shake".
    Element productNameExtensionElement = 7;                          // Extensions for productName
    repeated Timing schedule = 8;                                     // The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present.
    Quantity quantity = 9;                                            // The amount of the nutritional supplement to be given.
    string instruction = 10;                                          // Free text or additional instructions or information pertaining to the oral supplement.
    Element instructionExtensionElement = 11;                         // Extensions for instruction
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_EnteralFormula {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept baseFormulaType = 5;                              // The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.
    string baseFormulaProductName = 6;                                // The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".
    Element baseFormulaProductNameExtensionElement = 7;               // Extensions for baseFormulaProductName
    CodeableConcept additiveType = 8;                                 // Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.
    string additiveProductName = 9;                                   // The product or brand name of the type of modular component to be added to the formula.
    Element additiveProductNameExtensionElement = 10;                 // Extensions for additiveProductName
    Quantity caloricDensity = 11;                                     // The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.
    CodeableConcept routeofAdministration = 12;                       // The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.
    repeated NutritionOrder_Administration administration = 13;       // Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.
    Quantity maxVolumeToDeliver = 14;                                 // The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.
    string administrationInstruction = 15;                            // Free text formula administration, feeding instructions or additional instructions or information.
    Element administrationInstructionExtensionElement = 16;           // Extensions for administrationInstruction
}

/*
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 */
message NutritionOrder_Administration {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Timing schedule = 5;                                              // The time period and frequency at which the enteral formula should be delivered to the patient.
    Quantity quantity = 6;                                            // The volume of formula to provide to the patient per the specified administration schedule.
    Quantity rateSimpleQuantity = 7;                                  // The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.
    Ratio rateRatio = 8;                                              // The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.
}

enum Observation_status {
    Observation_status_amended = 0;
    Observation_status_final = 1;
    Observation_status_registered = 2;
    Observation_status_cancelled = 3;
    Observation_status_preliminary = 4;
    Observation_status_entered_in_error = 5;
    Observation_status_corrected = 6;
    Observation_status_unknown = 7;
}


/*
 * Measurements and simple assertions made about a patient, device or other subject.
 */
message Observation {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique identifier assigned to this observation.
    repeated Reference basedOn = 13;                                  // A plan, proposal or order that is fulfilled in whole or in part by this event.
    Observation_status status = 14;                                   // The status of the result value.
    Element statusExtensionElement = 15;                              // Extensions for status
    repeated CodeableConcept category = 16;                           // A code that classifies the general type of observation being made.
    CodeableConcept code = 17;                                        // Describes what was observed. Sometimes this is called the observation "name".
    Reference subject = 18;                                           // The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.
    Reference context = 19;                                           // The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.
    string effectiveDateTime = 20;                                    // The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.
    Element effectiveDateTimeExtensionElement = 21;                   // Extensions for effectiveDateTime
    Period effectivePeriod = 22;                                      // The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.
    string issued = 23;                                               // The date and time this observation was made available to providers, typically after the results have been reviewed and verified.
    Element issuedExtensionElement = 24;                              // Extensions for issued
    repeated Reference performer = 25;                                // Who was responsible for asserting the observed value as "true".
    Quantity valueQuantity = 26;                                      // The information determined as a result of making the observation, if the information has a simple value.
    CodeableConcept valueCodeableConcept = 27;                        // The information determined as a result of making the observation, if the information has a simple value.
    string valueString = 28;                                          // The information determined as a result of making the observation, if the information has a simple value.
    Element valueStringExtensionElement = 29;                         // Extensions for valueString
    bool valueBoolean = 30;                                           // The information determined as a result of making the observation, if the information has a simple value.
    Element valueBooleanExtensionElement = 31;                        // Extensions for valueBoolean
    Range valueRange = 32;                                            // The information determined as a result of making the observation, if the information has a simple value.
    Ratio valueRatio = 33;                                            // The information determined as a result of making the observation, if the information has a simple value.
    SampledData valueSampledData = 34;                                // The information determined as a result of making the observation, if the information has a simple value.
    Attachment valueAttachment = 35;                                  // The information determined as a result of making the observation, if the information has a simple value.
    string valueTime = 36;                                            // The information determined as a result of making the observation, if the information has a simple value.
    Element valueTimeExtensionElement = 37;                           // Extensions for valueTime
    string valueDateTime = 38;                                        // The information determined as a result of making the observation, if the information has a simple value.
    Element valueDateTimeExtensionElement = 39;                       // Extensions for valueDateTime
    Period valuePeriod = 40;                                          // The information determined as a result of making the observation, if the information has a simple value.
    CodeableConcept dataAbsentReason = 41;                            // Provides a reason why the expected value in the element Observation.value[x] is missing.
    CodeableConcept interpretation = 42;                              // The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.
    string comment = 43;                                              // May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.
    Element commentExtensionElement = 44;                             // Extensions for comment
    CodeableConcept bodySite = 45;                                    // Indicates the site on the subject's body where the observation was made (i.e. the target site).
    CodeableConcept method = 46;                                      // Indicates the mechanism used to perform the observation.
    Reference specimen = 47;                                          // The specimen that was used when this observation was made.
    Reference device = 48;                                            // The device used to generate the observation data.
    repeated Observation_ReferenceRange referenceRange = 49;          // Guidance on how to interpret the value by comparison to a normal or recommended range.
    repeated Observation_Related related = 50;                        // A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code.
    repeated Observation_Component component = 51;                    // Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.
}

/*
 * Measurements and simple assertions made about a patient, device or other subject.
 */
message Observation_ReferenceRange {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Quantity low = 5;                                                 // The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).
    Quantity high = 6;                                                // The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).
    CodeableConcept type = 7;                                         // Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.
    repeated CodeableConcept appliesTo = 8;                           // Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race.
    Range age = 9;                                                    // The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.
    string text = 10;                                                 // Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.
    Element textExtensionElement = 11;                                // Extensions for text
}

enum Observation_Related_type {
    Observation_Related_type_replaces = 0;
    Observation_Related_type_sequel_to = 1;
    Observation_Related_type_interfered_by = 2;
    Observation_Related_type_derived_from = 3;
    Observation_Related_type_has_member = 4;
    Observation_Related_type_qualified_by = 5;
}


/*
 * Measurements and simple assertions made about a patient, device or other subject.
 */
message Observation_Related {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Observation_Related_type type = 5;                                // A code specifying the kind of relationship that exists with the target resource.
    Element typeExtensionElement = 6;                                 // Extensions for type
    Reference target = 7;                                             // A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.
}

/*
 * Measurements and simple assertions made about a patient, device or other subject.
 */
message Observation_Component {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept code = 5;                                         // Describes what was observed. Sometimes this is called the observation "code".
    Quantity valueQuantity = 6;                                       // The information determined as a result of making the observation, if the information has a simple value.
    CodeableConcept valueCodeableConcept = 7;                         // The information determined as a result of making the observation, if the information has a simple value.
    string valueString = 8;                                           // The information determined as a result of making the observation, if the information has a simple value.
    Element valueStringExtensionElement = 9;                          // Extensions for valueString
    Range valueRange = 10;                                            // The information determined as a result of making the observation, if the information has a simple value.
    Ratio valueRatio = 11;                                            // The information determined as a result of making the observation, if the information has a simple value.
    SampledData valueSampledData = 12;                                // The information determined as a result of making the observation, if the information has a simple value.
    Attachment valueAttachment = 13;                                  // The information determined as a result of making the observation, if the information has a simple value.
    string valueTime = 14;                                            // The information determined as a result of making the observation, if the information has a simple value.
    Element valueTimeExtensionElement = 15;                           // Extensions for valueTime
    string valueDateTime = 16;                                        // The information determined as a result of making the observation, if the information has a simple value.
    Element valueDateTimeExtensionElement = 17;                       // Extensions for valueDateTime
    Period valuePeriod = 18;                                          // The information determined as a result of making the observation, if the information has a simple value.
    CodeableConcept dataAbsentReason = 19;                            // Provides a reason why the expected value in the element Observation.value[x] is missing.
    CodeableConcept interpretation = 20;                              // The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.
    repeated Observation_ReferenceRange referenceRange = 21;          // Guidance on how to interpret the value by comparison to a normal or recommended range.
}

enum OperationDefinition_status {
    OperationDefinition_status_draft = 0;
    OperationDefinition_status_active = 1;
    OperationDefinition_status_retired = 2;
    OperationDefinition_status_unknown = 3;
}

enum OperationDefinition_kind {
    OperationDefinition_kind_query = 0;
    OperationDefinition_kind_operation = 1;
}


/*
 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
 */
message OperationDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this operation definition is (or will be) published. The URL SHOULD include the major version of the operation definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string version = 14;                                              // The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 15;                             // Extensions for version
    string name = 16;                                                 // A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 17;                                // Extensions for name
    OperationDefinition_status status = 18;                           // The status of this operation definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 19;                              // Extensions for status
    OperationDefinition_kind kind = 20;                               // Whether this is an operation or a named query.
    Element kindExtensionElement = 21;                                // Extensions for kind
    bool experimental = 22;                                           // A boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 23;                        // Extensions for experimental
    string date = 24;                                                 // The date  (and optionally time) when the operation definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.
    Element dateExtensionElement = 25;                                // Extensions for date
    string publisher = 26;                                            // The name of the individual or organization that published the operation definition.
    Element publisherExtensionElement = 27;                           // Extensions for publisher
    repeated ContactDetail contact = 28;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 29;                                          // A free text natural language description of the operation definition from a consumer's perspective.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    repeated UsageContext useContext = 31;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate operation definition instances.
    repeated CodeableConcept jurisdiction = 32;                       // A legal or geographic region in which the operation definition is intended to be used.
    string purpose = 33;                                              // Explaination of why this operation definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 34;                             // Extensions for purpose
    bool idempotent = 35;                                             // Operations that are idempotent (see [HTTP specification definition of idempotent](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)) may be invoked by performing an HTTP GET operation instead of a POST.
    Element idempotentExtensionElement = 36;                          // Extensions for idempotent
    string code = 37;                                                 // The name used to invoke the operation.
    Element codeExtensionElement = 38;                                // Extensions for code
    string comment = 39;                                              // Additional information about how to use this operation or named query.
    Element commentExtensionElement = 40;                             // Extensions for comment
    Reference base = 41;                                              // Indicates that this operation definition is a constraining profile on the base.
    repeated string resource = 42;                                    // The types on which this operation can be executed.
    repeated Element resourceExtensionElement = 43;                   // Extensions for resource
    bool system = 44;                                                 // Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).
    Element systemExtensionElement = 45;                              // Extensions for system
    bool type = 46;                                                   // Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).
    Element typeExtensionElement = 47;                                // Extensions for type
    bool instance = 48;                                               // Indicates whether this operation can be invoked on a particular instance of one of the given types.
    Element instanceExtensionElement = 49;                            // Extensions for instance
    repeated OperationDefinition_Parameter parameter = 50;            // The parameters for the operation/query.
    repeated OperationDefinition_Overload overload = 51;              // Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.
}

enum OperationDefinition_Parameter_use {
    OperationDefinition_Parameter_use_IN = 0;
    OperationDefinition_Parameter_use_out = 1;
}

enum OperationDefinition_Parameter_searchType {
    OperationDefinition_Parameter_searchType_date = 0;
    OperationDefinition_Parameter_searchType_reference = 1;
    OperationDefinition_Parameter_searchType_number = 2;
    OperationDefinition_Parameter_searchType_quantity = 3;
    OperationDefinition_Parameter_searchType_string = 4;
    OperationDefinition_Parameter_searchType_composite = 5;
    OperationDefinition_Parameter_searchType_uri = 6;
    OperationDefinition_Parameter_searchType_token = 7;
}


/*
 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
 */
message OperationDefinition_Parameter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of used to identify the parameter.
    Element nameExtensionElement = 6;                                 // Extensions for name
    OperationDefinition_Parameter_use use = 7;                        // Whether this is an input or an output parameter.
    Element useExtensionElement = 8;                                  // Extensions for use
    int64 min = 9;                                                    // The minimum number of times this parameter SHALL appear in the request or response.
    Element minExtensionElement = 10;                                 // Extensions for min
    string max = 11;                                                  // The maximum number of times this element is permitted to appear in the request or response.
    Element maxExtensionElement = 12;                                 // Extensions for max
    string documentation = 13;                                        // Describes the meaning or use of this parameter.
    Element documentationExtensionElement = 14;                       // Extensions for documentation
    string type = 15;                                                 // The type for this parameter.
    Element typeExtensionElement = 16;                                // Extensions for type
    OperationDefinition_Parameter_searchType searchType = 17;         // How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
    Element searchTypeExtensionElement = 18;                          // Extensions for searchType
    Reference profile = 19;                                           // A profile the specifies the rules that this parameter must conform to.
    OperationDefinition_Binding binding = 20;                         // Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).
    repeated OperationDefinition_Parameter part = 21;                 // The parts of a nested Parameter.
}

enum OperationDefinition_Binding_strength {
    OperationDefinition_Binding_strength_extensible = 0;
    OperationDefinition_Binding_strength_required = 1;
    OperationDefinition_Binding_strength_preferred = 2;
    OperationDefinition_Binding_strength_example = 3;
}


/*
 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
 */
message OperationDefinition_Binding {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    OperationDefinition_Binding_strength strength = 5;                // Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
    Element strengthExtensionElement = 6;                             // Extensions for strength
    string valueSetUri = 7;                                           // Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
    Element valueSetUriExtensionElement = 8;                          // Extensions for valueSetUri
    Reference valueSetReference = 9;                                  // Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
}

/*
 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
 */
message OperationDefinition_Overload {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated string parameterName = 5;                                // Name of parameter to include in overload.
    repeated Element parameterNameExtensionElement = 6;               // Extensions for parameterName
    string comment = 7;                                               // Comments to go on overload.
    Element commentExtensionElement = 8;                              // Extensions for comment
}

/*
 * A collection of error, warning or information messages that result from a system action.
 */
message OperationOutcome {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated OperationOutcome_Issue issue = 12;                       // An error, warning or information message that results from a system action.
}

enum OperationOutcome_Issue_severity {
    OperationOutcome_Issue_severity_warning = 0;
    OperationOutcome_Issue_severity_information = 1;
    OperationOutcome_Issue_severity_error = 2;
    OperationOutcome_Issue_severity_fatal = 3;
}

enum OperationOutcome_Issue_code {
    OperationOutcome_Issue_code_exception = 0;
    OperationOutcome_Issue_code_extension = 1;
    OperationOutcome_Issue_code_login = 2;
    OperationOutcome_Issue_code_required = 3;
    OperationOutcome_Issue_code_timeout = 4;
    OperationOutcome_Issue_code_unknown = 5;
    OperationOutcome_Issue_code_security = 6;
    OperationOutcome_Issue_code_incomplete = 7;
    OperationOutcome_Issue_code_expired = 8;
    OperationOutcome_Issue_code_informational = 9;
    OperationOutcome_Issue_code_suppressed = 10;
    OperationOutcome_Issue_code_not_supported = 11;
    OperationOutcome_Issue_code_value = 12;
    OperationOutcome_Issue_code_too_costly = 13;
    OperationOutcome_Issue_code_lock_error = 14;
    OperationOutcome_Issue_code_business_rule = 15;
    OperationOutcome_Issue_code_code_invalid = 16;
    OperationOutcome_Issue_code_forbidden = 17;
    OperationOutcome_Issue_code_too_long = 18;
    OperationOutcome_Issue_code_duplicate = 19;
    OperationOutcome_Issue_code_structure = 20;
    OperationOutcome_Issue_code_invariant = 21;
    OperationOutcome_Issue_code_not_found = 22;
    OperationOutcome_Issue_code_transient = 23;
    OperationOutcome_Issue_code_invalid = 24;
    OperationOutcome_Issue_code_processing = 25;
    OperationOutcome_Issue_code_conflict = 26;
    OperationOutcome_Issue_code_no_store = 27;
    OperationOutcome_Issue_code_throttled = 28;
}


/*
 * A collection of error, warning or information messages that result from a system action.
 */
message OperationOutcome_Issue {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    OperationOutcome_Issue_severity severity = 5;                     // Indicates whether the issue indicates a variation from successful processing.
    Element severityExtensionElement = 6;                             // Extensions for severity
    OperationOutcome_Issue_code code = 7;                             // Describes the type of the issue. The system that creates an OperationOutcome SHALL choose the most applicable code from the IssueType value set, and may additional provide its own code for the error in the details element.
    Element codeExtensionElement = 8;                                 // Extensions for code
    CodeableConcept details = 9;                                      // Additional details about the error. This may be a text description of the error, or a system code that identifies the error.
    string diagnostics = 10;                                          // Additional diagnostic information about the issue.  Typically, this may be a description of how a value is erroneous, or a stack dump to help trace the issue.
    Element diagnosticsExtensionElement = 11;                         // Extensions for diagnostics
    repeated string location = 12;                                    // For resource issues, this will be a simple XPath limited to element names, repetition indicators and the default child access that identifies one of the elements in the resource that caused this issue to be raised.  For HTTP errors, will be "http." + the parameter name.
    repeated Element locationExtensionElement = 13;                   // Extensions for location
    repeated string expression = 14;                                  // A simple FHIRPath limited to element names, repetition indicators and the default child access that identifies one of the elements in the resource that caused this issue to be raised.
    repeated Element expressionExtensionElement = 15;                 // Extensions for expression
}

/*
 * A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action.  Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, etc.
 */
message Organization {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for the organization that is used to identify the organization across multiple disparate systems.
    bool active = 13;                                                 // Whether the organization's record is still in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    repeated CodeableConcept type = 15;                               // The kind(s) of organization that this is.
    string name = 16;                                                 // A name associated with the organization.
    Element nameExtensionElement = 17;                                // Extensions for name
    repeated string alias = 18;                                       // A list of alternate names that the organization is known as, or was known as in the past.
    repeated Element aliasExtensionElement = 19;                      // Extensions for alias
    repeated ContactPoint telecom = 20;                               // A contact detail for the organization.
    repeated Address address = 21;                                    // An address for the organization.
    Reference partOf = 22;                                            // The organization of which this organization forms a part.
    repeated Organization_Contact contact = 23;                       // Contact for the organization for a certain purpose.
    repeated Reference endpoint = 24;                                 // Technical endpoints providing access to services operated for the organization.
}

/*
 * A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action.  Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, etc.
 */
message Organization_Contact {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept purpose = 5;                                      // Indicates a purpose for which the contact can be reached.
    HumanName name = 6;                                               // A name associated with the contact.
    repeated ContactPoint telecom = 7;                                // A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.
    Address address = 8;                                              // Visiting or postal addresses for the contact.
}

/*
 * This special resource type is used to represent an operation request and response (operations.html). It has no other use, and there is no RESTful endpoint associated with it.
 */
message Parameters {
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    repeated Parameters_Parameter parameter = 9;                      // A parameter passed to or received from the operation.
}

/*
 * This special resource type is used to represent an operation request and response (operations.html). It has no other use, and there is no RESTful endpoint associated with it.
 */
message Parameters_Parameter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of the parameter (reference to the operation definition).
    Element nameExtensionElement = 6;                                 // Extensions for name
    bool valueBoolean = 7;                                            // If the parameter is a data type.
    Element valueBooleanExtensionElement = 8;                         // Extensions for valueBoolean
    int64 valueInteger = 9;                                           // If the parameter is a data type.
    Element valueIntegerExtensionElement = 10;                        // Extensions for valueInteger
    double valueDecimal = 11;                                         // If the parameter is a data type.
    Element valueDecimalExtensionElement = 12;                        // Extensions for valueDecimal
    string valueBase64Binary = 13;                                    // If the parameter is a data type.
    Element valueBase64BinaryExtensionElement = 14;                   // Extensions for valueBase64Binary
    string valueInstant = 15;                                         // If the parameter is a data type.
    Element valueInstantExtensionElement = 16;                        // Extensions for valueInstant
    string valueString = 17;                                          // If the parameter is a data type.
    Element valueStringExtensionElement = 18;                         // Extensions for valueString
    string valueUri = 19;                                             // If the parameter is a data type.
    Element valueUriExtensionElement = 20;                            // Extensions for valueUri
    string valueDate = 21;                                            // If the parameter is a data type.
    Element valueDateExtensionElement = 22;                           // Extensions for valueDate
    string valueDateTime = 23;                                        // If the parameter is a data type.
    Element valueDateTimeExtensionElement = 24;                       // Extensions for valueDateTime
    string valueTime = 25;                                            // If the parameter is a data type.
    Element valueTimeExtensionElement = 26;                           // Extensions for valueTime
    string valueCode = 27;                                            // If the parameter is a data type.
    Element valueCodeExtensionElement = 28;                           // Extensions for valueCode
    string valueOid = 29;                                             // If the parameter is a data type.
    Element valueOidExtensionElement = 30;                            // Extensions for valueOid
    string valueUuid = 31;                                            // If the parameter is a data type.
    Element valueUuidExtensionElement = 32;                           // Extensions for valueUuid
    string valueId = 33;                                              // If the parameter is a data type.
    Element valueIdExtensionElement = 34;                             // Extensions for valueId
    int64 valueUnsignedInt = 35;                                      // If the parameter is a data type.
    Element valueUnsignedIntExtensionElement = 36;                    // Extensions for valueUnsignedInt
    int64 valuePositiveInt = 37;                                      // If the parameter is a data type.
    Element valuePositiveIntExtensionElement = 38;                    // Extensions for valuePositiveInt
    string valueMarkdown = 39;                                        // If the parameter is a data type.
    Element valueMarkdownExtensionElement = 40;                       // Extensions for valueMarkdown
    Element valueElement = 41;                                        // If the parameter is a data type.
    Extension valueExtension = 42;                                    // If the parameter is a data type.
    BackboneElement valueBackboneElement = 43;                        // If the parameter is a data type.
    Narrative valueNarrative = 44;                                    // If the parameter is a data type.
    Annotation valueAnnotation = 45;                                  // If the parameter is a data type.
    Attachment valueAttachment = 46;                                  // If the parameter is a data type.
    Identifier valueIdentifier = 47;                                  // If the parameter is a data type.
    CodeableConcept valueCodeableConcept = 48;                        // If the parameter is a data type.
    Coding valueCoding = 49;                                          // If the parameter is a data type.
    Quantity valueQuantity = 50;                                      // If the parameter is a data type.
    Duration valueDuration = 51;                                      // If the parameter is a data type.
    Quantity valueSimpleQuantity = 52;                                // If the parameter is a data type.
    Distance valueDistance = 53;                                      // If the parameter is a data type.
    Count valueCount = 54;                                            // If the parameter is a data type.
    Money valueMoney = 55;                                            // If the parameter is a data type.
    Age valueAge = 56;                                                // If the parameter is a data type.
    Range valueRange = 57;                                            // If the parameter is a data type.
    Period valuePeriod = 58;                                          // If the parameter is a data type.
    Ratio valueRatio = 59;                                            // If the parameter is a data type.
    Reference valueReference = 60;                                    // If the parameter is a data type.
    SampledData valueSampledData = 61;                                // If the parameter is a data type.
    Signature valueSignature = 62;                                    // If the parameter is a data type.
    HumanName valueHumanName = 63;                                    // If the parameter is a data type.
    Address valueAddress = 64;                                        // If the parameter is a data type.
    ContactPoint valueContactPoint = 65;                              // If the parameter is a data type.
    Timing valueTiming = 66;                                          // If the parameter is a data type.
    Meta valueMeta = 67;                                              // If the parameter is a data type.
    ElementDefinition valueElementDefinition = 68;                    // If the parameter is a data type.
    ContactDetail valueContactDetail = 69;                            // If the parameter is a data type.
    Contributor valueContributor = 70;                                // If the parameter is a data type.
    Dosage valueDosage = 71;                                          // If the parameter is a data type.
    RelatedArtifact valueRelatedArtifact = 72;                        // If the parameter is a data type.
    UsageContext valueUsageContext = 73;                              // If the parameter is a data type.
    DataRequirement valueDataRequirement = 74;                        // If the parameter is a data type.
    ParameterDefinition valueParameterDefinition = 75;                // If the parameter is a data type.
    TriggerDefinition valueTriggerDefinition = 76;                    // If the parameter is a data type.
    ResourceList resource = 77;                                       // If the parameter is a whole resource.
    repeated Parameters_Parameter part = 78;                          // A named part of a multi-part parameter.
}

enum Patient_gender {
    Patient_gender_other = 0;
    Patient_gender_female = 1;
    Patient_gender_male = 2;
    Patient_gender_unknown = 3;
}


/*
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
message Patient {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // An identifier for this patient.
    bool active = 13;                                                 // Whether this patient record is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    repeated HumanName name = 15;                                     // A name associated with the individual.
    repeated ContactPoint telecom = 16;                               // A contact detail (e.g. a telephone number or an email address) by which the individual may be contacted.
    Patient_gender gender = 17;                                       // Administrative Gender - the gender that the patient is considered to have for administration and record keeping purposes.
    Element genderExtensionElement = 18;                              // Extensions for gender
    string birthDate = 19;                                            // The date of birth for the individual.
    Element birthDateExtensionElement = 20;                           // Extensions for birthDate
    bool deceasedBoolean = 21;                                        // Indicates if the individual is deceased or not.
    Element deceasedBooleanExtensionElement = 22;                     // Extensions for deceasedBoolean
    string deceasedDateTime = 23;                                     // Indicates if the individual is deceased or not.
    Element deceasedDateTimeExtensionElement = 24;                    // Extensions for deceasedDateTime
    repeated Address address = 25;                                    // Addresses for the individual.
    CodeableConcept maritalStatus = 26;                               // This field contains a patient's most recent marital (civil) status.
    bool multipleBirthBoolean = 27;                                   // Indicates whether the patient is part of a multiple (bool) or indicates the actual birth order (integer).
    Element multipleBirthBooleanExtensionElement = 28;                // Extensions for multipleBirthBoolean
    int64 multipleBirthInteger = 29;                                  // Indicates whether the patient is part of a multiple (bool) or indicates the actual birth order (integer).
    Element multipleBirthIntegerExtensionElement = 30;                // Extensions for multipleBirthInteger
    repeated Attachment photo = 31;                                   // Image of the patient.
    repeated Patient_Contact contact = 32;                            // A contact party (e.g. guardian, partner, friend) for the patient.
    Patient_Animal animal = 33;                                       // This patient is known to be an animal.
    repeated Patient_Communication communication = 34;                // Languages which may be used to communicate with the patient about his or her health.
    repeated Reference generalPractitioner = 35;                      // Patient's nominated care provider.
    Reference managingOrganization = 36;                              // Organization that is the custodian of the patient record.
    repeated Patient_Link link = 37;                                  // Link to another patient resource that concerns the same actual patient.
}

enum Patient_Contact_gender {
    Patient_Contact_gender_other = 0;
    Patient_Contact_gender_female = 1;
    Patient_Contact_gender_male = 2;
    Patient_Contact_gender_unknown = 3;
}


/*
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
message Patient_Contact {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept relationship = 5;                        // The nature of the relationship between the patient and the contact person.
    HumanName name = 6;                                               // A name associated with the contact person.
    repeated ContactPoint telecom = 7;                                // A contact detail for the person, e.g. a telephone number or an email address.
    Address address = 8;                                              // Address for the contact person.
    Patient_Contact_gender gender = 9;                                // Administrative Gender - the gender that the contact person is considered to have for administration and record keeping purposes.
    Element genderExtensionElement = 10;                              // Extensions for gender
    Reference organization = 11;                                      // Organization on behalf of which the contact is acting or for which the contact is working.
    Period period = 12;                                               // The period during which this contact person or organization is valid to be contacted relating to this patient.
}

/*
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
message Patient_Animal {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept species = 5;                                      // Identifies the high level taxonomic categorization of the kind of animal.
    CodeableConcept breed = 6;                                        // Identifies the detailed categorization of the kind of animal.
    CodeableConcept genderStatus = 7;                                 // Indicates the current state of the animal's reproductive organs.
}

/*
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
message Patient_Communication {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept language = 5;                                     // The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.
    bool preferred = 6;                                               // Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
    Element preferredExtensionElement = 7;                            // Extensions for preferred
}

enum Patient_Link_type {
    Patient_Link_type_refer = 0;
    Patient_Link_type_replaces = 1;
    Patient_Link_type_seealso = 2;
    Patient_Link_type_replaced_by = 3;
}


/*
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
message Patient_Link {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference other = 5;                                              // The other patient resource that the link refers to.
    Patient_Link_type type = 6;                                       // The type of link between this patient resource and another patient resource.
    Element typeExtensionElement = 7;                                 // Extensions for type
}

/*
 * This resource provides the status of the payment for goods and services rendered, and the request and response resource references.
 */
message PaymentNotice {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The notice business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference request = 15;                                           // Reference of resource for which payment is being made.
    Reference response = 16;                                          // Reference of response to resource for which payment is being made.
    string statusDate = 17;                                           // The date when the above payment action occurrred.
    Element statusDateExtensionElement = 18;                          // Extensions for statusDate
    string created = 19;                                              // The date when this resource was created.
    Element createdExtensionElement = 20;                             // Extensions for created
    Reference target = 21;                                            // The Insurer who is target  of the request.
    Reference provider = 22;                                          // The practitioner who is responsible for the services rendered to the patient.
    Reference organization = 23;                                      // The organization which is responsible for the services rendered to the patient.
    CodeableConcept paymentStatus = 24;                               // The payment status, typically paid: payment sent, cleared: payment received.
}

/*
 * This resource provides payment details and claim references supporting a bulk payment.
 */
message PaymentReconciliation {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    Period period = 15;                                               // The period of time for which payments have been gathered into this bulk payment for settlement.
    string created = 16;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 17;                             // Extensions for created
    Reference organization = 18;                                      // The Insurer who produced this adjudicated response.
    Reference request = 19;                                           // Original request resource reference.
    CodeableConcept outcome = 20;                                     // Transaction status: error, complete.
    string disposition = 21;                                          // A description of the status of the adjudication.
    Element dispositionExtensionElement = 22;                         // Extensions for disposition
    Reference requestProvider = 23;                                   // The practitioner who is responsible for the services rendered to the patient.
    Reference requestOrganization = 24;                               // The organization which is responsible for the services rendered to the patient.
    repeated PaymentReconciliation_Detail detail = 25;                // List of individual settlement amounts and the corresponding transaction.
    CodeableConcept form = 26;                                        // The form to be used for printing the content.
    Money total = 27;                                                 // Total payment amount.
    repeated PaymentReconciliation_ProcessNote processNote = 28;      // Suite of notes.
}

/*
 * This resource provides payment details and claim references supporting a bulk payment.
 */
message PaymentReconciliation_Detail {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // Code to indicate the nature of the payment, adjustment, funds advance, etc.
    Reference request = 6;                                            // The claim or financial resource.
    Reference response = 7;                                           // The claim response resource.
    Reference submitter = 8;                                          // The Organization which submitted the claim or financial transaction.
    Reference payee = 9;                                              // The organization which is receiving the payment.
    string date = 10;                                                 // The date of the invoice or financial resource.
    Element dateExtensionElement = 11;                                // Extensions for date
    Money amount = 12;                                                // Amount paid for this detail.
}

/*
 * This resource provides payment details and claim references supporting a bulk payment.
 */
message PaymentReconciliation_ProcessNote {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // The note purpose: Print/Display.
    string text = 6;                                                  // The note text.
    Element textExtensionElement = 7;                                 // Extensions for text
}

enum Person_gender {
    Person_gender_other = 0;
    Person_gender_female = 1;
    Person_gender_male = 2;
    Person_gender_unknown = 3;
}


/*
 * Demographics and administrative information about a person independent of a specific health-related context.
 */
message Person {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for a person within a particular scope.
    repeated HumanName name = 13;                                     // A name associated with the person.
    repeated ContactPoint telecom = 14;                               // A contact detail for the person, e.g. a telephone number or an email address.
    Person_gender gender = 15;                                        // Administrative Gender.
    Element genderExtensionElement = 16;                              // Extensions for gender
    string birthDate = 17;                                            // The birth date for the person.
    Element birthDateExtensionElement = 18;                           // Extensions for birthDate
    repeated Address address = 19;                                    // One or more addresses for the person.
    Attachment photo = 20;                                            // An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.
    Reference managingOrganization = 21;                              // The organization that is the custodian of the person record.
    bool active = 22;                                                 // Whether this person's record is in active use.
    Element activeExtensionElement = 23;                              // Extensions for active
    repeated Person_Link link = 24;                                   // Link to a resource that concerns the same actual person.
}

enum Person_Link_assurance {
    Person_Link_assurance_level4 = 0;
    Person_Link_assurance_level1 = 1;
    Person_Link_assurance_level3 = 2;
    Person_Link_assurance_level2 = 3;
}


/*
 * Demographics and administrative information about a person independent of a specific health-related context.
 */
message Person_Link {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference target = 5;                                             // The resource to which this actual person is associated.
    Person_Link_assurance assurance = 6;                              // Level of assurance that this link is actually associated with the target resource.
    Element assuranceExtensionElement = 7;                            // Extensions for assurance
}

enum PlanDefinition_status {
    PlanDefinition_status_draft = 0;
    PlanDefinition_status_active = 1;
    PlanDefinition_status_retired = 2;
    PlanDefinition_status_unknown = 3;
}


/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this plan definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this plan definition is (or will be) published. The URL SHOULD include the major version of the plan definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this plan definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the plan definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the plan definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the plan definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the plan definition.
    Element titleExtensionElement = 20;                               // Extensions for title
    CodeableConcept type = 21;                                        // The type of asset the plan definition represents, e.g. an order set, protocol, or event-condition-action rule.
    PlanDefinition_status status = 22;                                // The status of this plan definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 23;                              // Extensions for status
    bool experimental = 24;                                           // A boolean value to indicate that this plan definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 25;                        // Extensions for experimental
    string date = 26;                                                 // The date  (and optionally time) when the plan definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the plan definition changes.
    Element dateExtensionElement = 27;                                // Extensions for date
    string publisher = 28;                                            // The name of the individual or organization that published the plan definition.
    Element publisherExtensionElement = 29;                           // Extensions for publisher
    string description = 30;                                          // A free text natural language description of the plan definition from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    string purpose = 32;                                              // Explaination of why this plan definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 33;                             // Extensions for purpose
    string usage = 34;                                                // A detailed description of how the asset is used from a clinical perspective.
    Element usageExtensionElement = 35;                               // Extensions for usage
    string approvalDate = 36;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 37;                        // Extensions for approvalDate
    string lastReviewDate = 38;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 39;                      // Extensions for lastReviewDate
    Period effectivePeriod = 40;                                      // The period during which the plan definition content was or is planned to be in active use.
    repeated UsageContext useContext = 41;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate plan definition instances.
    repeated CodeableConcept jurisdiction = 42;                       // A legal or geographic region in which the plan definition is intended to be used.
    repeated CodeableConcept topic = 43;                              // Descriptive topics related to the content of the plan definition. Topics provide a high-level categorization of the definition that can be useful for filtering and searching.
    repeated Contributor contributor = 44;                            // A contributor to the content of the asset, including authors, editors, reviewers, and endorsers.
    repeated ContactDetail contact = 45;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 46;                                            // A copyright statement relating to the plan definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the plan definition.
    Element copyrightExtensionElement = 47;                           // Extensions for copyright
    repeated RelatedArtifact relatedArtifact = 48;                    // Related artifacts such as additional documentation, justification, or bibliographic references.
    repeated Reference library = 49;                                  // A reference to a Library resource containing any formal logic used by the plan definition.
    repeated PlanDefinition_Goal goal = 50;                           // Goals that describe what the activities within the plan are intended to achieve. For example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.
    repeated PlanDefinition_Action action = 51;                       // An action to be taken as part of the plan.
}

/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_Goal {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept category = 5;                                     // Indicates a category the goal falls within.
    CodeableConcept description = 6;                                  // Human-readable and/or coded description of a specific desired objective of care, such as "control blood pressure" or "negotiate an obstacle course" or "dance with child at wedding".
    CodeableConcept priority = 7;                                     // Identifies the expected level of importance associated with reaching/sustaining the defined goal.
    CodeableConcept start = 8;                                        // The event after which the goal should begin being pursued.
    repeated CodeableConcept addresses = 9;                           // Identifies problems, conditions, issues, or concerns the goal is intended to address.
    repeated RelatedArtifact documentation = 10;                      // Didactic or other informational resources associated with the goal that provide further supporting information about the goal. Information resources can include inline text commentary and links to web resources.
    repeated PlanDefinition_Target target = 11;                       // Indicates what should be done and within what timeframe.
}

/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_Target {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept measure = 5;                                      // The parameter whose value is to be tracked, e.g. body weigth, blood pressure, or hemoglobin A1c level.
    Quantity detailQuantity = 6;                                      // The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. Whan a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.
    Range detailRange = 7;                                            // The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. Whan a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.
    CodeableConcept detailCodeableConcept = 8;                        // The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. Whan a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.
    Duration due = 9;                                                 // Indicates the timeframe after the start of the goal in which the goal should be met.
}

enum PlanDefinition_Action_groupingBehavior {
    PlanDefinition_Action_groupingBehavior_visual_group = 0;
    PlanDefinition_Action_groupingBehavior_sentence_group = 1;
    PlanDefinition_Action_groupingBehavior_logical_group = 2;
}

enum PlanDefinition_Action_selectionBehavior {
    PlanDefinition_Action_selectionBehavior_all = 0;
    PlanDefinition_Action_selectionBehavior_exactly_one = 1;
    PlanDefinition_Action_selectionBehavior_at_most_one = 2;
    PlanDefinition_Action_selectionBehavior_all_or_none = 3;
    PlanDefinition_Action_selectionBehavior_any = 4;
    PlanDefinition_Action_selectionBehavior_one_or_more = 5;
}

enum PlanDefinition_Action_requiredBehavior {
    PlanDefinition_Action_requiredBehavior_could = 0;
    PlanDefinition_Action_requiredBehavior_must = 1;
    PlanDefinition_Action_requiredBehavior_must_unless_documented = 2;
}

enum PlanDefinition_Action_precheckBehavior {
    PlanDefinition_Action_precheckBehavior_no = 0;
    PlanDefinition_Action_precheckBehavior_yes = 1;
}

enum PlanDefinition_Action_cardinalityBehavior {
    PlanDefinition_Action_cardinalityBehavior_single = 0;
    PlanDefinition_Action_cardinalityBehavior_multiple = 1;
}


/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_Action {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string label = 5;                                                 // A user-visible label for the action.
    Element labelExtensionElement = 6;                                // Extensions for label
    string title = 7;                                                 // The title of the action displayed to a user.
    Element titleExtensionElement = 8;                                // Extensions for title
    string description = 9;                                           // A short description of the action used to provide a summary to display to the user.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    string textEquivalent = 11;                                       // A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.
    Element textEquivalentExtensionElement = 12;                      // Extensions for textEquivalent
    repeated CodeableConcept code = 13;                               // A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.
    repeated CodeableConcept reason = 14;                             // A description of why this action is necessary or appropriate.
    repeated RelatedArtifact documentation = 15;                      // Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.
    repeated string goalId = 16;                                      // Identifies goals that this action supports. The reference must be to a goal element defined within this plan definition.
    repeated Element goalIdExtensionElement = 17;                     // Extensions for goalId
    repeated TriggerDefinition triggerDefinition = 18;                // A description of when the action should be triggered.
    repeated PlanDefinition_Condition condition = 19;                 // An expression that describes applicability criteria, or start/stop conditions for the action.
    repeated DataRequirement input = 20;                              // Defines input data requirements for the action.
    repeated DataRequirement output = 21;                             // Defines the outputs of the action, if any.
    repeated PlanDefinition_RelatedAction relatedAction = 22;         // A relationship to another action such as "before" or "30-60 minutes after start of".
    string timingDateTime = 23;                                       // An optional value describing when the action should be performed.
    Element timingDateTimeExtensionElement = 24;                      // Extensions for timingDateTime
    Period timingPeriod = 25;                                         // An optional value describing when the action should be performed.
    Duration timingDuration = 26;                                     // An optional value describing when the action should be performed.
    Range timingRange = 27;                                           // An optional value describing when the action should be performed.
    Timing timingTiming = 28;                                         // An optional value describing when the action should be performed.
    repeated PlanDefinition_Participant participant = 29;             // Indicates who should participate in performing the action described.
    Coding type = 30;                                                 // The type of action to perform (create, update, remove).
    PlanDefinition_Action_groupingBehavior groupingBehavior = 31;     // Defines the grouping behavior for the action and its children.
    Element groupingBehaviorExtensionElement = 32;                    // Extensions for groupingBehavior
    PlanDefinition_Action_selectionBehavior selectionBehavior = 33;   // Defines the selection behavior for the action and its children.
    Element selectionBehaviorExtensionElement = 34;                   // Extensions for selectionBehavior
    PlanDefinition_Action_requiredBehavior requiredBehavior = 35;     // Defines the requiredness behavior for the action.
    Element requiredBehaviorExtensionElement = 36;                    // Extensions for requiredBehavior
    PlanDefinition_Action_precheckBehavior precheckBehavior = 37;     // Defines whether the action should usually be preselected.
    Element precheckBehaviorExtensionElement = 38;                    // Extensions for precheckBehavior
    PlanDefinition_Action_cardinalityBehavior cardinalityBehavior = 39; // Defines whether the action can be selected multiple times.
    Element cardinalityBehaviorExtensionElement = 40;                 // Extensions for cardinalityBehavior
    Reference definition = 41;                                        // A reference to an ActivityDefinition that describes the action to be taken in detail, or a PlanDefinition that describes a series of actions to be taken.
    Reference transform = 42;                                         // A reference to a StructureMap resource that defines a transform that can be executed to produce the intent resource using the ActivityDefinition instance as the input.
    repeated PlanDefinition_DynamicValue dynamicValue = 43;           // Customizations that should be applied to the statically defined resource. For example, if the dosage of a medication must be computed based on the patient's weight, a customization would be used to specify an expression that calculated the weight, and the path on the resource that would contain the result.
    repeated PlanDefinition_Action action = 44;                       // Sub actions that are contained within the action. The behavior of this action determines the functionality of the sub-actions. For example, a selection behavior of at-most-one indicates that of the sub-actions, at most one may be chosen as part of realizing the action definition.
}

enum PlanDefinition_Condition_kind {
    PlanDefinition_Condition_kind_stop = 0;
    PlanDefinition_Condition_kind_start = 1;
    PlanDefinition_Condition_kind_applicability = 2;
}


/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_Condition {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    PlanDefinition_Condition_kind kind = 5;                           // The kind of condition.
    Element kindExtensionElement = 6;                                 // Extensions for kind
    string description = 7;                                           // A brief, natural language description of the condition that effectively communicates the intended semantics.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    string language = 9;                                              // The media type of the language for the expression.
    Element languageExtensionElement = 10;                            // Extensions for language
    string expression = 11;                                           // An expression that returns true or false, indicating whether or not the condition is satisfied.
    Element expressionExtensionElement = 12;                          // Extensions for expression
}

enum PlanDefinition_RelatedAction_relationship {
    PlanDefinition_RelatedAction_relationship_after_end = 0;
    PlanDefinition_RelatedAction_relationship_before = 1;
    PlanDefinition_RelatedAction_relationship_concurrent_with_start = 2;
    PlanDefinition_RelatedAction_relationship_concurrent = 3;
    PlanDefinition_RelatedAction_relationship_before_end = 4;
    PlanDefinition_RelatedAction_relationship_after = 5;
    PlanDefinition_RelatedAction_relationship_concurrent_with_end = 6;
    PlanDefinition_RelatedAction_relationship_after_start = 7;
    PlanDefinition_RelatedAction_relationship_before_start = 8;
}


/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_RelatedAction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string actionId = 5;                                              // The element id of the related action.
    Element actionIdExtensionElement = 6;                             // Extensions for actionId
    PlanDefinition_RelatedAction_relationship relationship = 7;       // The relationship of this action to the related action.
    Element relationshipExtensionElement = 8;                         // Extensions for relationship
    Duration offsetDuration = 9;                                      // A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
    Range offsetRange = 10;                                           // A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
}

enum PlanDefinition_Participant_type {
    PlanDefinition_Participant_type_related_person = 0;
    PlanDefinition_Participant_type_practitioner = 1;
    PlanDefinition_Participant_type_patient = 2;
}


/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    PlanDefinition_Participant_type type = 5;                         // The type of participant in the action.
    Element typeExtensionElement = 6;                                 // Extensions for type
    CodeableConcept role = 7;                                         // The role the participant should play in performing the described action.
}

/*
 * This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.
 */
message PlanDefinition_DynamicValue {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // A brief, natural language description of the intended semantics of the dynamic value.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    string path = 7;                                                  // The path to the element to be customized. This is the path on the resource that will hold the result of the calculation defined by the expression.
    Element pathExtensionElement = 8;                                 // Extensions for path
    string language = 9;                                              // The media type of the language for the expression.
    Element languageExtensionElement = 10;                            // Extensions for language
    string expression = 11;                                           // An expression specifying the value of the customized element.
    Element expressionExtensionElement = 12;                          // Extensions for expression
}

enum Practitioner_gender {
    Practitioner_gender_other = 0;
    Practitioner_gender_female = 1;
    Practitioner_gender_male = 2;
    Practitioner_gender_unknown = 3;
}


/*
 * A person who is directly or indirectly involved in the provisioning of healthcare.
 */
message Practitioner {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // An identifier that applies to this person in this role.
    bool active = 13;                                                 // Whether this practitioner's record is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    repeated HumanName name = 15;                                     // The name(s) associated with the practitioner.
    repeated ContactPoint telecom = 16;                               // A contact detail for the practitioner, e.g. a telephone number or an email address.
    repeated Address address = 17;                                    // Address(es) of the practitioner that are not role specific (typically home address).  Work addresses are not typically entered in this property as they are usually role dependent.
    Practitioner_gender gender = 18;                                  // Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
    Element genderExtensionElement = 19;                              // Extensions for gender
    string birthDate = 20;                                            // The date of birth for the practitioner.
    Element birthDateExtensionElement = 21;                           // Extensions for birthDate
    repeated Attachment photo = 22;                                   // Image of the person.
    repeated Practitioner_Qualification qualification = 23;           // Qualifications obtained by training and certification.
    repeated CodeableConcept communication = 24;                      // A language the practitioner is able to use in patient communication.
}

/*
 * A person who is directly or indirectly involved in the provisioning of healthcare.
 */
message Practitioner_Qualification {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated Identifier identifier = 5;                               // An identifier that applies to this person's qualification in this role.
    CodeableConcept code = 6;                                         // Coded representation of the qualification.
    Period period = 7;                                                // Period during which the qualification is valid.
    Reference issuer = 8;                                             // Organization that regulates and issues the qualification.
}

/*
 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
 */
message PractitionerRole {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Business Identifiers that are specific to a role/location.
    bool active = 13;                                                 // Whether this practitioner's record is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    Period period = 15;                                               // The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
    Reference practitioner = 16;                                      // Practitioner that is able to provide the defined services for the organation.
    Reference organization = 17;                                      // The organization where the Practitioner performs the roles associated.
    repeated CodeableConcept code = 18;                               // Roles which this practitioner is authorized to perform for the organization.
    repeated CodeableConcept specialty = 19;                          // Specific specialty of the practitioner.
    repeated Reference location = 20;                                 // The location(s) at which this practitioner provides care.
    repeated Reference healthcareService = 21;                        // The list of healthcare services that this worker provides for this role's Organization/Location(s).
    repeated ContactPoint telecom = 22;                               // Contact details that are specific to the role/location/service.
    repeated PractitionerRole_AvailableTime availableTime = 23;       // A collection of times that the Service Site is available.
    repeated PractitionerRole_NotAvailable notAvailable = 24;         // The HealthcareService is not available during this period of time due to the provided reason.
    string availabilityExceptions = 25;                               // A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
    Element availabilityExceptionsExtensionElement = 26;              // Extensions for availabilityExceptions
    repeated Reference endpoint = 27;                                 // Technical endpoints providing access to services operated for the practitioner with this role.
}

/*
 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
 */
message PractitionerRole_AvailableTime {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated string daysOfWeek = 5;                                   // Indicates which days of the week are available between the start and end Times.
    repeated Element daysOfWeekExtensionElement = 6;                  // Extensions for daysOfWeek
    bool allDay = 7;                                                  // Is this always available? (hence times are irrelevant) e.g. 24 hour service.
    Element allDayExtensionElement = 8;                               // Extensions for allDay
    string availableStartTime = 9;                                    // The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
    Element availableStartTimeExtensionElement = 10;                  // Extensions for availableStartTime
    string availableEndTime = 11;                                     // The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
    Element availableEndTimeExtensionElement = 12;                    // Extensions for availableEndTime
}

/*
 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
 */
message PractitionerRole_NotAvailable {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // The reason that can be presented to the user as to why this time is not available.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    Period during = 7;                                                // Service is not available (seasonally or for a public holiday) from this date.
}

/*
 * An action that is or was performed on a patient. This can be a physical intervention like an operation, or less invasive like counseling or hypnotherapy.
 */
message Procedure {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // This records identifiers associated with this procedure that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
    repeated Reference definition = 13;                               // A protocol, guideline, orderset or other definition that was adhered to in whole or in part by this procedure.
    repeated Reference basedOn = 14;                                  // A reference to a resource that contains details of the request for this procedure.
    repeated Reference partOf = 15;                                   // A larger event of which this particular procedure is a component or step.
    string status = 16;                                               // A code specifying the state of the procedure. Generally this will be in-progress or completed state.
    Element statusExtensionElement = 17;                              // Extensions for status
    bool notDone = 18;                                                // Set this to true if the record is saying that the procedure was NOT performed.
    Element notDoneExtensionElement = 19;                             // Extensions for notDone
    CodeableConcept notDoneReason = 20;                               // A code indicating why the procedure was not performed.
    CodeableConcept category = 21;                                    // A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").
    CodeableConcept code = 22;                                        // The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. "Laparoscopic Appendectomy").
    Reference subject = 23;                                           // The person, animal or group on which the procedure was performed.
    Reference context = 24;                                           // The encounter during which the procedure was performed.
    string performedDateTime = 25;                                    // The date(time)/period over which the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.
    Element performedDateTimeExtensionElement = 26;                   // Extensions for performedDateTime
    Period performedPeriod = 27;                                      // The date(time)/period over which the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.
    repeated Procedure_Performer performer = 28;                      // Limited to 'real' people rather than equipment.
    Reference location = 29;                                          // The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.
    repeated CodeableConcept reasonCode = 30;                         // The coded reason why the procedure was performed. This may be coded entity of some type, or may simply be present as text.
    repeated Reference reasonReference = 31;                          // The condition that is the reason why the procedure was performed.
    repeated CodeableConcept bodySite = 32;                           // Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.
    CodeableConcept outcome = 33;                                     // The outcome of the procedure - did it resolve reasons for the procedure being performed?
    repeated Reference report = 34;                                   // This could be a histology result, pathology report, surgical report, etc..
    repeated CodeableConcept complication = 35;                       // Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues.
    repeated Reference complicationDetail = 36;                       // Any complications that occurred during the procedure, or in the immediate post-performance period.
    repeated CodeableConcept followUp = 37;                           // If the procedure required specific follow up - e.g. removal of sutures. The followup may be represented as a simple note, or could potentially be more complex in which case the CarePlan resource can be used.
    repeated Annotation note = 38;                                    // Any other notes about the procedure.  E.g. the operative notes.
    repeated Procedure_FocalDevice focalDevice = 39;                  // A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.
    repeated Reference usedReference = 40;                            // Identifies medications, devices and any other substance used as part of the procedure.
    repeated CodeableConcept usedCode = 41;                           // Identifies coded items that were used as part of the procedure.
}

/*
 * An action that is or was performed on a patient. This can be a physical intervention like an operation, or less invasive like counseling or hypnotherapy.
 */
message Procedure_Performer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept role = 5;                                         // For example: surgeon, anaethetist, endoscopist.
    Reference actor = 6;                                              // The practitioner who was involved in the procedure.
    Reference onBehalfOf = 7;                                         // The organization the device or practitioner was acting on behalf of.
}

/*
 * An action that is or was performed on a patient. This can be a physical intervention like an operation, or less invasive like counseling or hypnotherapy.
 */
message Procedure_FocalDevice {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept action = 5;                                       // The kind of change that happened to the device during the procedure.
    Reference manipulated = 6;                                        // The device that was manipulated (changed) during the procedure.
}

/*
 * A record of a request for diagnostic investigations, treatments, or operations to be performed.
 */
message ProcedureRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.
    repeated Reference definition = 13;                               // Protocol or definition followed by this request.
    repeated Reference basedOn = 14;                                  // Plan/proposal/order fulfilled by this request.
    repeated Reference replaces = 15;                                 // The request takes the place of the referenced completed or terminated request(s).
    Identifier requisition = 16;                                      // A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.
    string status = 17;                                               // The status of the order.
    Element statusExtensionElement = 18;                              // Extensions for status
    string intent = 19;                                               // Whether the request is a proposal, plan, an original order or a reflex order.
    Element intentExtensionElement = 20;                              // Extensions for intent
    string priority = 21;                                             // Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.
    Element priorityExtensionElement = 22;                            // Extensions for priority
    bool doNotPerform = 23;                                           // Set this to true if the record is saying that the procedure should NOT be performed.
    Element doNotPerformExtensionElement = 24;                        // Extensions for doNotPerform
    repeated CodeableConcept category = 25;                           // A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").
    CodeableConcept code = 26;                                        // A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.
    Reference subject = 27;                                           // On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).
    Reference context = 28;                                           // An encounter or episode of care that provides additional information about the healthcare context in which this request is made.
    string occurrenceDateTime = 29;                                   // The date/time at which the diagnostic testing should occur.
    Element occurrenceDateTimeExtensionElement = 30;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 31;                                     // The date/time at which the diagnostic testing should occur.
    Timing occurrenceTiming = 32;                                     // The date/time at which the diagnostic testing should occur.
    bool asNeededBoolean = 33;                                        // If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.
    Element asNeededBooleanExtensionElement = 34;                     // Extensions for asNeededBoolean
    CodeableConcept asNeededCodeableConcept = 35;                     // If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.
    string authoredOn = 36;                                           // When the request transitioned to being actionable.
    Element authoredOnExtensionElement = 37;                          // Extensions for authoredOn
    ProcedureRequest_Requester requester = 38;                        // The individual who initiated the request and has responsibility for its activation.
    CodeableConcept performerType = 39;                               // Desired type of performer for doing the diagnostic testing.
    Reference performer = 40;                                         // The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.
    repeated CodeableConcept reasonCode = 41;                         // An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation.
    repeated Reference reasonReference = 42;                          // Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.
    repeated Reference supportingInfo = 43;                           // Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as "ask at order entry questions (AOEs)".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.
    repeated Reference specimen = 44;                                 // One or more specimens that the laboratory procedure will use.
    repeated CodeableConcept bodySite = 45;                           // Anatomic location where the procedure should be performed. This is the target site.
    repeated Annotation note = 46;                                    // Any other notes and comments made about the service request. For example, letting provider know that "patient hates needles" or other provider instructions.
    repeated Reference relevantHistory = 47;                          // Key events in the history of the request.
}

/*
 * A record of a request for diagnostic investigations, treatments, or operations to be performed.
 */
message ProcedureRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner or organization who initiated the request.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

enum ProcessRequest_action {
    ProcessRequest_action_cancel = 0;
    ProcessRequest_action_reprocess = 1;
    ProcessRequest_action_poll = 2;
    ProcessRequest_action_status = 3;
}


/*
 * This resource provides the target, request and response, and action details for an action to be performed by the target on or about existing resources.
 */
message ProcessRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The ProcessRequest business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    ProcessRequest_action action = 15;                                // The type of processing action being requested, for example Reversal, Readjudication, StatusRequest,PendedRequest.
    Element actionExtensionElement = 16;                              // Extensions for action
    Reference target = 17;                                            // The organization which is the target of the request.
    string created = 18;                                              // The date when this resource was created.
    Element createdExtensionElement = 19;                             // Extensions for created
    Reference provider = 20;                                          // The practitioner who is responsible for the action specified in this request.
    Reference organization = 21;                                      // The organization which is responsible for the action speccified in this request.
    Reference request = 22;                                           // Reference of resource which is the target or subject of this action.
    Reference response = 23;                                          // Reference of a prior response to resource which is the target or subject of this action.
    bool nullify = 24;                                                // If true remove all history excluding audit.
    Element nullifyExtensionElement = 25;                             // Extensions for nullify
    string reference = 26;                                            // A reference to supply which authenticates the process.
    Element referenceExtensionElement = 27;                           // Extensions for reference
    repeated ProcessRequest_Item item = 28;                           // List of top level items to be re-adjudicated, if none specified then the entire submission is re-adjudicated.
    repeated string include = 29;                                     // Names of resource types to include.
    repeated Element includeExtensionElement = 30;                    // Extensions for include
    repeated string exclude = 31;                                     // Names of resource types to exclude.
    repeated Element excludeExtensionElement = 32;                    // Extensions for exclude
    Period period = 33;                                               // A period of time during which the fulfilling resources would have been created.
}

/*
 * This resource provides the target, request and response, and action details for an action to be performed by the target on or about existing resources.
 */
message ProcessRequest_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 sequenceLinkId = 5;                                         // A service line number.
    Element sequenceLinkIdExtensionElement = 6;                       // Extensions for sequenceLinkId
}

/*
 * This resource provides processing status, errors and notes from the processing of a resource.
 */
message ProcessResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The Response business identifier.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    string created = 15;                                              // The date when the enclosed suite of services were performed or completed.
    Element createdExtensionElement = 16;                             // Extensions for created
    Reference organization = 17;                                      // The organization who produced this adjudicated response.
    Reference request = 18;                                           // Original request resource reference.
    CodeableConcept outcome = 19;                                     // Transaction status: error, complete, held.
    string disposition = 20;                                          // A description of the status of the adjudication or processing.
    Element dispositionExtensionElement = 21;                         // Extensions for disposition
    Reference requestProvider = 22;                                   // The practitioner who is responsible for the services rendered to the patient.
    Reference requestOrganization = 23;                               // The organization which is responsible for the services rendered to the patient.
    CodeableConcept form = 24;                                        // The form to be used for printing the content.
    repeated ProcessResponse_ProcessNote processNote = 25;            // Suite of processing notes or additional requirements if the processing has been held.
    repeated CodeableConcept error = 26;                              // Processing errors.
    repeated Reference communicationRequest = 27;                     // Request for additional supporting or authorizing information, such as: documents, images or resources.
}

/*
 * This resource provides processing status, errors and notes from the processing of a resource.
 */
message ProcessResponse_ProcessNote {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // The note purpose: Print/Display.
    string text = 6;                                                  // The note text.
    Element textExtensionElement = 7;                                 // Extensions for text
}

/*
 * Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.
 */
message Provenance {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Reference target = 12;                                   // The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.
    Period period = 13;                                               // The period during which the activity occurred.
    string recorded = 14;                                             // The instant of time at which the activity was recorded.
    Element recordedExtensionElement = 15;                            // Extensions for recorded
    repeated string policy = 16;                                      // Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.
    repeated Element policyExtensionElement = 17;                     // Extensions for policy
    Reference location = 18;                                          // Where the activity occurred, if relevant.
    repeated Coding reason = 19;                                      // The reason that the activity was taking place.
    Coding activity = 20;                                             // An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.
    repeated Provenance_Agent agent = 21;                             // An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.
    repeated Provenance_Entity entity = 22;                           // An entity used in this activity.
    repeated Signature signature = 23;                                // A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.
}

/*
 * Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.
 */
message Provenance_Agent {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated CodeableConcept role = 5;                                // The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.
    string whoUri = 6;                                                // The individual, device or organization that participated in the event.
    Element whoUriExtensionElement = 7;                               // Extensions for whoUri
    Reference whoReference = 8;                                       // The individual, device or organization that participated in the event.
    string onBehalfOfUri = 9;                                         // The individual, device, or organization for whom the change was made.
    Element onBehalfOfUriExtensionElement = 10;                       // Extensions for onBehalfOfUri
    Reference onBehalfOfReference = 11;                               // The individual, device, or organization for whom the change was made.
    CodeableConcept relatedAgentType = 12;                            // The type of relationship between agents.
}

enum Provenance_Entity_role {
    Provenance_Entity_role_removal = 0;
    Provenance_Entity_role_derivation = 1;
    Provenance_Entity_role_source = 2;
    Provenance_Entity_role_quotation = 3;
    Provenance_Entity_role_revision = 4;
}


/*
 * Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.
 */
message Provenance_Entity {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Provenance_Entity_role role = 5;                                  // How the entity was used during the activity.
    Element roleExtensionElement = 6;                                 // Extensions for role
    string whatUri = 7;                                               // Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.
    Element whatUriExtensionElement = 8;                              // Extensions for whatUri
    Reference whatReference = 9;                                      // Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.
    Identifier whatIdentifier = 10;                                   // Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.
    repeated Provenance_Agent agent = 11;                             // The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.
}

enum Questionnaire_status {
    Questionnaire_status_draft = 0;
    Questionnaire_status_active = 1;
    Questionnaire_status_retired = 2;
    Questionnaire_status_unknown = 3;
}


/*
 * A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.
 */
message Questionnaire {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this questionnaire when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this questionnaire is (or will be) published. The URL SHOULD include the major version of the questionnaire. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this questionnaire when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the questionnaire when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the questionnaire author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the questionnaire. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the questionnaire.
    Element titleExtensionElement = 20;                               // Extensions for title
    Questionnaire_status status = 21;                                 // The status of this questionnaire. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this questionnaire is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the questionnaire was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the questionnaire changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the questionnaire.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    string description = 29;                                          // A free text natural language description of the questionnaire from a consumer's perspective.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    string purpose = 31;                                              // Explaination of why this questionnaire is needed and why it has been designed as it has.
    Element purposeExtensionElement = 32;                             // Extensions for purpose
    string approvalDate = 33;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 34;                        // Extensions for approvalDate
    string lastReviewDate = 35;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 36;                      // Extensions for lastReviewDate
    Period effectivePeriod = 37;                                      // The period during which the questionnaire content was or is planned to be in active use.
    repeated UsageContext useContext = 38;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate questionnaire instances.
    repeated CodeableConcept jurisdiction = 39;                       // A legal or geographic region in which the questionnaire is intended to be used.
    repeated ContactDetail contact = 40;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 41;                                            // A copyright statement relating to the questionnaire and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the questionnaire.
    Element copyrightExtensionElement = 42;                           // Extensions for copyright
    repeated Coding code = 43;                                        // An identifier for this question or group of questions in a particular terminology such as LOINC.
    repeated string subjectType = 44;                                 // The types of subjects that can be the subject of responses created for the questionnaire.
    repeated Element subjectTypeExtensionElement = 45;                // Extensions for subjectType
    repeated Questionnaire_Item item = 46;                            // A particular question, question grouping or display text that is part of the questionnaire.
}

enum Questionnaire_Item_type {
    Questionnaire_Item_type_date = 0;
    Questionnaire_Item_type_dateTime = 1;
    Questionnaire_Item_type_quantity = 2;
    Questionnaire_Item_type_string = 3;
    Questionnaire_Item_type_open_choice = 4;
    Questionnaire_Item_type_display = 5;
    Questionnaire_Item_type_integer = 6;
    Questionnaire_Item_type_url = 7;
    Questionnaire_Item_type_reference = 8;
    Questionnaire_Item_type_boolean = 9;
    Questionnaire_Item_type_attachment = 10;
    Questionnaire_Item_type_time = 11;
    Questionnaire_Item_type_text = 12;
    Questionnaire_Item_type_decimal = 13;
    Questionnaire_Item_type_choice = 14;
    Questionnaire_Item_type_group = 15;
}


/*
 * A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.
 */
message Questionnaire_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string linkId = 5;                                                // An identifier that is unique within the Questionnaire allowing linkage to the equivalent item in a QuestionnaireResponse resource.
    Element linkIdExtensionElement = 6;                               // Extensions for linkId
    string definition = 7;                                            // A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be inferred from the definition:   * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding)  Any information provided in these elements on a Questionnaire Item overrides the information from the definition.
    Element definitionExtensionElement = 8;                           // Extensions for definition
    repeated Coding code = 9;                                         // A terminology code that corresponds to this group or question (e.g. a code from LOINC, which defines many questions and answers).
    string prefix = 10;                                               // A short label for a particular group, question or set of display text within the questionnaire used for reference by the individual completing the questionnaire.
    Element prefixExtensionElement = 11;                              // Extensions for prefix
    string text = 12;                                                 // The name of a section, the text of a question or text content for a display item.
    Element textExtensionElement = 13;                                // Extensions for text
    Questionnaire_Item_type type = 14;                                // The type of questionnaire item this is - whether text for display, a grouping of other items or a particular type of data to be captured (string, integer, coded choice, etc.).
    Element typeExtensionElement = 15;                                // Extensions for type
    repeated Questionnaire_EnableWhen enableWhen = 16;                // A constraint indicating that this item should only be enabled (displayed/allow answers to be captured) when the specified condition is true.
    bool required = 17;                                               // An indication, if true, that the item must be present in a "completed" QuestionnaireResponse.  If false, the item may be skipped when answering the questionnaire.
    Element requiredExtensionElement = 18;                            // Extensions for required
    bool repeats = 19;                                                // An indication, if true, that the item may occur multiple times in the response, collecting multiple answers answers for questions or multiple sets of answers for groups.
    Element repeatsExtensionElement = 20;                             // Extensions for repeats
    bool readOnly = 21;                                               // An indication, when true, that the value cannot be changed by a human respondent to the Questionnaire.
    Element readOnlyExtensionElement = 22;                            // Extensions for readOnly
    int64 maxLength = 23;                                             // The maximum number of characters that are permitted in the answer to be considered a "valid" QuestionnaireResponse.
    Element maxLengthExtensionElement = 24;                           // Extensions for maxLength
    Reference options = 25;                                           // A reference to a value set containing a list of codes representing permitted answers for a "choice" or "open-choice" question.
    repeated Questionnaire_Option option = 26;                        // One of the permitted answers for a "choice" or "open-choice" question.
    bool initialBoolean = 27;                                         // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialBooleanExtensionElement = 28;                      // Extensions for initialBoolean
    double initialDecimal = 29;                                       // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialDecimalExtensionElement = 30;                      // Extensions for initialDecimal
    int64 initialInteger = 31;                                        // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialIntegerExtensionElement = 32;                      // Extensions for initialInteger
    string initialDate = 33;                                          // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialDateExtensionElement = 34;                         // Extensions for initialDate
    string initialDateTime = 35;                                      // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialDateTimeExtensionElement = 36;                     // Extensions for initialDateTime
    string initialTime = 37;                                          // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialTimeExtensionElement = 38;                         // Extensions for initialTime
    string initialString = 39;                                        // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialStringExtensionElement = 40;                       // Extensions for initialString
    string initialUri = 41;                                           // The value that should be defaulted when initially rendering the questionnaire for user input.
    Element initialUriExtensionElement = 42;                          // Extensions for initialUri
    Attachment initialAttachment = 43;                                // The value that should be defaulted when initially rendering the questionnaire for user input.
    Coding initialCoding = 44;                                        // The value that should be defaulted when initially rendering the questionnaire for user input.
    Quantity initialQuantity = 45;                                    // The value that should be defaulted when initially rendering the questionnaire for user input.
    Reference initialReference = 46;                                  // The value that should be defaulted when initially rendering the questionnaire for user input.
    repeated Questionnaire_Item item = 47;                            // Text, questions and other groups to be nested beneath a question or group.
}

/*
 * A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.
 */
message Questionnaire_EnableWhen {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string question = 5;                                              // The linkId for the question whose answer (or lack of answer) governs whether this item is enabled.
    Element questionExtensionElement = 6;                             // Extensions for question
    bool hasAnswer = 7;                                               // An indication that this item should be enabled only if the specified question is answered (hasAnswer=true) or not answered (hasAnswer=false).
    Element hasAnswerExtensionElement = 8;                            // Extensions for hasAnswer
    bool answerBoolean = 9;                                           // An answer that the referenced question must match in order for the item to be enabled.
    Element answerBooleanExtensionElement = 10;                       // Extensions for answerBoolean
    double answerDecimal = 11;                                        // An answer that the referenced question must match in order for the item to be enabled.
    Element answerDecimalExtensionElement = 12;                       // Extensions for answerDecimal
    int64 answerInteger = 13;                                         // An answer that the referenced question must match in order for the item to be enabled.
    Element answerIntegerExtensionElement = 14;                       // Extensions for answerInteger
    string answerDate = 15;                                           // An answer that the referenced question must match in order for the item to be enabled.
    Element answerDateExtensionElement = 16;                          // Extensions for answerDate
    string answerDateTime = 17;                                       // An answer that the referenced question must match in order for the item to be enabled.
    Element answerDateTimeExtensionElement = 18;                      // Extensions for answerDateTime
    string answerTime = 19;                                           // An answer that the referenced question must match in order for the item to be enabled.
    Element answerTimeExtensionElement = 20;                          // Extensions for answerTime
    string answerString = 21;                                         // An answer that the referenced question must match in order for the item to be enabled.
    Element answerStringExtensionElement = 22;                        // Extensions for answerString
    string answerUri = 23;                                            // An answer that the referenced question must match in order for the item to be enabled.
    Element answerUriExtensionElement = 24;                           // Extensions for answerUri
    Attachment answerAttachment = 25;                                 // An answer that the referenced question must match in order for the item to be enabled.
    Coding answerCoding = 26;                                         // An answer that the referenced question must match in order for the item to be enabled.
    Quantity answerQuantity = 27;                                     // An answer that the referenced question must match in order for the item to be enabled.
    Reference answerReference = 28;                                   // An answer that the referenced question must match in order for the item to be enabled.
}

/*
 * A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.
 */
message Questionnaire_Option {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 valueInteger = 5;                                           // A potential answer that's allowed as the answer to this question.
    Element valueIntegerExtensionElement = 6;                         // Extensions for valueInteger
    string valueDate = 7;                                             // A potential answer that's allowed as the answer to this question.
    Element valueDateExtensionElement = 8;                            // Extensions for valueDate
    string valueTime = 9;                                             // A potential answer that's allowed as the answer to this question.
    Element valueTimeExtensionElement = 10;                           // Extensions for valueTime
    string valueString = 11;                                          // A potential answer that's allowed as the answer to this question.
    Element valueStringExtensionElement = 12;                         // Extensions for valueString
    Coding valueCoding = 13;                                          // A potential answer that's allowed as the answer to this question.
}

enum QuestionnaireResponse_status {
    QuestionnaireResponse_status_amended = 0;
    QuestionnaireResponse_status_stopped = 1;
    QuestionnaireResponse_status_completed = 2;
    QuestionnaireResponse_status_entered_in_error = 3;
    QuestionnaireResponse_status_in_progress = 4;
}


/*
 * A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.
 */
message QuestionnaireResponse {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // A business identifier assigned to a particular completed (or partially completed) questionnaire.
    repeated Reference basedOn = 13;                                  // The order, proposal or plan that is fulfilled in whole or in part by this QuestionnaireResponse.  For example, a ProcedureRequest seeking an intake assessment or a decision support recommendation to assess for post-partum depression.
    repeated Reference parent = 14;                                   // A procedure or observation that this questionnaire was performed as part of the execution of.  For example, the surgery a checklist was executed as part of.
    Reference questionnaire = 15;                                     // The Questionnaire that defines and organizes the questions for which answers are being provided.
    QuestionnaireResponse_status status = 16;                         // The position of the questionnaire response within its overall lifecycle.
    Element statusExtensionElement = 17;                              // Extensions for status
    Reference subject = 18;                                           // The subject of the questionnaire response.  This could be a patient, organization, practitioner, device, etc.  This is who/what the answers apply to, but is not necessarily the source of information.
    Reference context = 19;                                           // The encounter or episode of care with primary association to the questionnaire response.
    string authored = 20;                                             // The date and/or time that this set of answers were last changed.
    Element authoredExtensionElement = 21;                            // Extensions for authored
    Reference author = 22;                                            // Person who received the answers to the questions in the QuestionnaireResponse and recorded them in the system.
    Reference source = 23;                                            // The person who answered the questions about the subject.
    repeated QuestionnaireResponse_Item item = 24;                    // A group or question item from the original questionnaire for which answers are provided.
}

/*
 * A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.
 */
message QuestionnaireResponse_Item {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string linkId = 5;                                                // The item from the Questionnaire that corresponds to this item in the QuestionnaireResponse resource.
    Element linkIdExtensionElement = 6;                               // Extensions for linkId
    string definition = 7;                                            // A reference to an [[[ElementDefinition]]] that provides the details for the item.
    Element definitionExtensionElement = 8;                           // Extensions for definition
    string text = 9;                                                  // Text that is displayed above the contents of the group or as the text of the question being answered.
    Element textExtensionElement = 10;                                // Extensions for text
    Reference subject = 11;                                           // More specific subject this section's answers are about, details the subject given in QuestionnaireResponse.
    repeated QuestionnaireResponse_Answer answer = 12;                // The respondent's answer(s) to the question.
    repeated QuestionnaireResponse_Item item = 13;                    // Questions or sub-groups nested beneath a question or group.
}

/*
 * A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.
 */
message QuestionnaireResponse_Answer {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool valueBoolean = 5;                                            // The answer (or one of the answers) provided by the respondent to the question.
    Element valueBooleanExtensionElement = 6;                         // Extensions for valueBoolean
    double valueDecimal = 7;                                          // The answer (or one of the answers) provided by the respondent to the question.
    Element valueDecimalExtensionElement = 8;                         // Extensions for valueDecimal
    int64 valueInteger = 9;                                           // The answer (or one of the answers) provided by the respondent to the question.
    Element valueIntegerExtensionElement = 10;                        // Extensions for valueInteger
    string valueDate = 11;                                            // The answer (or one of the answers) provided by the respondent to the question.
    Element valueDateExtensionElement = 12;                           // Extensions for valueDate
    string valueDateTime = 13;                                        // The answer (or one of the answers) provided by the respondent to the question.
    Element valueDateTimeExtensionElement = 14;                       // Extensions for valueDateTime
    string valueTime = 15;                                            // The answer (or one of the answers) provided by the respondent to the question.
    Element valueTimeExtensionElement = 16;                           // Extensions for valueTime
    string valueString = 17;                                          // The answer (or one of the answers) provided by the respondent to the question.
    Element valueStringExtensionElement = 18;                         // Extensions for valueString
    string valueUri = 19;                                             // The answer (or one of the answers) provided by the respondent to the question.
    Element valueUriExtensionElement = 20;                            // Extensions for valueUri
    Attachment valueAttachment = 21;                                  // The answer (or one of the answers) provided by the respondent to the question.
    Coding valueCoding = 22;                                          // The answer (or one of the answers) provided by the respondent to the question.
    Quantity valueQuantity = 23;                                      // The answer (or one of the answers) provided by the respondent to the question.
    Reference valueReference = 24;                                    // The answer (or one of the answers) provided by the respondent to the question.
    repeated QuestionnaireResponse_Item item = 25;                    // Nested groups and/or questions found within this particular answer.
}

/*
 * Used to record and send details about a request for referral service or transfer of a patient to the care of another provider or provider organization.
 */
message ReferralRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Business identifier that uniquely identifies the referral/care transfer request instance.
    repeated Reference definition = 13;                               // A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
    repeated Reference basedOn = 14;                                  // Indicates any plans, proposals or orders that this request is intended to satisfy - in whole or in part.
    repeated Reference replaces = 15;                                 // Completed or terminated request(s) whose function is taken by this new request.
    Identifier groupIdentifier = 16;                                  // The business identifier of the logical "grouping" request/order that this referral is a part of.
    string status = 17;                                               // The status of the authorization/intention reflected by the referral request record.
    Element statusExtensionElement = 18;                              // Extensions for status
    string intent = 19;                                               // Distinguishes the "level" of authorization/demand implicit in this request.
    Element intentExtensionElement = 20;                              // Extensions for intent
    CodeableConcept type = 21;                                        // An indication of the type of referral (or where applicable the type of transfer of care) request.
    string priority = 22;                                             // An indication of the urgency of referral (or where applicable the type of transfer of care) request.
    Element priorityExtensionElement = 23;                            // Extensions for priority
    repeated CodeableConcept serviceRequested = 24;                   // The service(s) that is/are requested to be provided to the patient.  For example: cardiac pacemaker insertion.
    Reference subject = 25;                                           // The patient who is the subject of a referral or transfer of care request.
    Reference context = 26;                                           // The encounter at which the request for referral or transfer of care is initiated.
    string occurrenceDateTime = 27;                                   // The period of time within which the services identified in the referral/transfer of care is specified or required to occur.
    Element occurrenceDateTimeExtensionElement = 28;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 29;                                     // The period of time within which the services identified in the referral/transfer of care is specified or required to occur.
    string authoredOn = 30;                                           // Date/DateTime of creation for draft requests and date of activation for active requests.
    Element authoredOnExtensionElement = 31;                          // Extensions for authoredOn
    ReferralRequest_Requester requester = 32;                         // The individual who initiated the request and has responsibility for its activation.
    CodeableConcept specialty = 33;                                   // Indication of the clinical domain or discipline to which the referral or transfer of care request is sent.  For example: Cardiology Gastroenterology Diabetology.
    repeated Reference recipient = 34;                                // The healthcare provider(s) or provider organization(s) who/which is to receive the referral/transfer of care request.
    repeated CodeableConcept reasonCode = 35;                         // Description of clinical condition indicating why referral/transfer of care is requested.  For example:  Pathological Anomalies, Disabled (physical or mental),  Behavioral Management.
    repeated Reference reasonReference = 36;                          // Indicates another resource whose existence justifies this request.
    string description = 37;                                          // The reason element gives a short description of why the referral is being made, the description expands on this to support a more complete clinical summary.
    Element descriptionExtensionElement = 38;                         // Extensions for description
    repeated Reference supportingInfo = 39;                           // Any additional (administrative, financial or clinical) information required to support request for referral or transfer of care.  For example: Presenting problems/chief complaints Medical History Family History Alerts Allergy/Intolerance and Adverse Reactions Medications Observations/Assessments (may include cognitive and fundtional assessments) Diagnostic Reports Care Plan.
    repeated Annotation note = 40;                                    // Comments made about the referral request by any of the participants.
    repeated Reference relevantHistory = 41;                          // Links to Provenance records for past versions of this resource or fulfilling request or event resources that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the resource.
}

/*
 * Used to record and send details about a request for referral service or transfer of a patient to the care of another provider or provider organization.
 */
message ReferralRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner, etc. who initiated the request.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

enum RelatedPerson_gender {
    RelatedPerson_gender_other = 0;
    RelatedPerson_gender_female = 1;
    RelatedPerson_gender_male = 2;
    RelatedPerson_gender_unknown = 3;
}


/*
 * Information about a person that is involved in the care for a patient, but who is not the target of healthcare, nor has a formal responsibility in the care process.
 */
message RelatedPerson {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifier for a person within a particular scope.
    bool active = 13;                                                 // Whether this related person record is in active use.
    Element activeExtensionElement = 14;                              // Extensions for active
    Reference patient = 15;                                           // The patient this person is related to.
    CodeableConcept relationship = 16;                                // The nature of the relationship between a patient and the related person.
    repeated HumanName name = 17;                                     // A name associated with the person.
    repeated ContactPoint telecom = 18;                               // A contact detail for the person, e.g. a telephone number or an email address.
    RelatedPerson_gender gender = 19;                                 // Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
    Element genderExtensionElement = 20;                              // Extensions for gender
    string birthDate = 21;                                            // The date on which the related person was born.
    Element birthDateExtensionElement = 22;                           // Extensions for birthDate
    repeated Address address = 23;                                    // Address where the related person can be contacted or visited.
    repeated Attachment photo = 24;                                   // Image of the person.
    Period period = 25;                                               // The period of time that this relationship is considered to be valid. If there are no dates defined, then the interval is unknown.
}

/*
 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
 */
message RequestGroup {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Allows a service to provide a unique, business identifier for the request.
    repeated Reference definition = 13;                               // A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
    repeated Reference basedOn = 14;                                  // A plan, proposal or order that is fulfilled in whole or in part by this request.
    repeated Reference replaces = 15;                                 // Completed or terminated request(s) whose function is taken by this new request.
    Identifier groupIdentifier = 16;                                  // A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.
    string status = 17;                                               // The current state of the request. For request groups, the status reflects the status of all the requests in the group.
    Element statusExtensionElement = 18;                              // Extensions for status
    string intent = 19;                                               // Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
    Element intentExtensionElement = 20;                              // Extensions for intent
    string priority = 21;                                             // Indicates how quickly the request should be addressed with respect to other requests.
    Element priorityExtensionElement = 22;                            // Extensions for priority
    Reference subject = 23;                                           // The subject for which the request group was created.
    Reference context = 24;                                           // Describes the context of the request group, if any.
    string authoredOn = 25;                                           // Indicates when the request group was created.
    Element authoredOnExtensionElement = 26;                          // Extensions for authoredOn
    Reference author = 27;                                            // Provides a reference to the author of the request group.
    CodeableConcept reasonCodeableConcept = 28;                       // Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.
    Reference reasonReference = 29;                                   // Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.
    repeated Annotation note = 30;                                    // Provides a mechanism to communicate additional information about the response.
    repeated RequestGroup_Action action = 31;                         // The actions, if any, produced by the evaluation of the artifact.
}

/*
 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
 */
message RequestGroup_Action {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string label = 5;                                                 // A user-visible label for the action.
    Element labelExtensionElement = 6;                                // Extensions for label
    string title = 7;                                                 // The title of the action displayed to a user.
    Element titleExtensionElement = 8;                                // Extensions for title
    string description = 9;                                           // A short description of the action used to provide a summary to display to the user.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    string textEquivalent = 11;                                       // A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.
    Element textEquivalentExtensionElement = 12;                      // Extensions for textEquivalent
    repeated CodeableConcept code = 13;                               // A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.
    repeated RelatedArtifact documentation = 14;                      // Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.
    repeated RequestGroup_Condition condition = 15;                   // An expression that describes applicability criteria, or start/stop conditions for the action.
    repeated RequestGroup_RelatedAction relatedAction = 16;           // A relationship to another action such as "before" or "30-60 minutes after start of".
    string timingDateTime = 17;                                       // An optional value describing when the action should be performed.
    Element timingDateTimeExtensionElement = 18;                      // Extensions for timingDateTime
    Period timingPeriod = 19;                                         // An optional value describing when the action should be performed.
    Duration timingDuration = 20;                                     // An optional value describing when the action should be performed.
    Range timingRange = 21;                                           // An optional value describing when the action should be performed.
    Timing timingTiming = 22;                                         // An optional value describing when the action should be performed.
    repeated Reference participant = 23;                              // The participant that should perform or be responsible for this action.
    Coding type = 24;                                                 // The type of action to perform (create, update, remove).
    string groupingBehavior = 25;                                     // Defines the grouping behavior for the action and its children.
    Element groupingBehaviorExtensionElement = 26;                    // Extensions for groupingBehavior
    string selectionBehavior = 27;                                    // Defines the selection behavior for the action and its children.
    Element selectionBehaviorExtensionElement = 28;                   // Extensions for selectionBehavior
    string requiredBehavior = 29;                                     // Defines the requiredness behavior for the action.
    Element requiredBehaviorExtensionElement = 30;                    // Extensions for requiredBehavior
    string precheckBehavior = 31;                                     // Defines whether the action should usually be preselected.
    Element precheckBehaviorExtensionElement = 32;                    // Extensions for precheckBehavior
    string cardinalityBehavior = 33;                                  // Defines whether the action can be selected multiple times.
    Element cardinalityBehaviorExtensionElement = 34;                 // Extensions for cardinalityBehavior
    Reference resource = 35;                                          // The resource that is the target of the action (e.g. CommunicationRequest).
    repeated RequestGroup_Action action = 36;                         // Sub actions.
}

/*
 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
 */
message RequestGroup_Condition {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string kind = 5;                                                  // The kind of condition.
    Element kindExtensionElement = 6;                                 // Extensions for kind
    string description = 7;                                           // A brief, natural language description of the condition that effectively communicates the intended semantics.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    string language = 9;                                              // The media type of the language for the expression.
    Element languageExtensionElement = 10;                            // Extensions for language
    string expression = 11;                                           // An expression that returns true or false, indicating whether or not the condition is satisfied.
    Element expressionExtensionElement = 12;                          // Extensions for expression
}

/*
 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
 */
message RequestGroup_RelatedAction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string actionId = 5;                                              // The element id of the action this is related to.
    Element actionIdExtensionElement = 6;                             // Extensions for actionId
    string relationship = 7;                                          // The relationship of this action to the related action.
    Element relationshipExtensionElement = 8;                         // Extensions for relationship
    Duration offsetDuration = 9;                                      // A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
    Range offsetRange = 10;                                           // A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
}

enum ResearchStudy_status {
    ResearchStudy_status_stopped = 0;
    ResearchStudy_status_draft = 1;
    ResearchStudy_status_completed = 2;
    ResearchStudy_status_entered_in_error = 3;
    ResearchStudy_status_in_progress = 4;
    ResearchStudy_status_suspended = 5;
}


/*
 * A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge.  This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques.  A ResearchStudy involves the gathering of information about human or animal subjects.
 */
message ResearchStudy {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Identifiers assigned to this research study by the sponsor or other systems.
    string title = 13;                                                // A short, descriptive user-friendly label for the study.
    Element titleExtensionElement = 14;                               // Extensions for title
    repeated Reference protocol = 15;                                 // The set of steps expected to be performed as part of the execution of the study.
    repeated Reference partOf = 16;                                   // A larger research study of which this particular study is a component or step.
    ResearchStudy_status status = 17;                                 // The current state of the study.
    Element statusExtensionElement = 18;                              // Extensions for status
    repeated CodeableConcept category = 19;                           // Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.
    repeated CodeableConcept focus = 20;                              // The condition(s), medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.
    repeated ContactDetail contact = 21;                              // Contact details to assist a user in learning more about or engaging with the study.
    repeated RelatedArtifact relatedArtifact = 22;                    // Citations, references and other related documents.
    repeated CodeableConcept keyword = 23;                            // Key terms to aid in searching for or filtering the study.
    repeated CodeableConcept jurisdiction = 24;                       // Indicates a country, state or other region where the study is taking place.
    string description = 25;                                          // A full description of how the study is being conducted.
    Element descriptionExtensionElement = 26;                         // Extensions for description
    repeated Reference enrollment = 27;                               // Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. " 200 female Europeans between the ages of 20 and 45 with early onset diabetes".
    Period period = 28;                                               // Identifies the start date and the expected (or actual, depending on status) end date for the study.
    Reference sponsor = 29;                                           // The organization responsible for the execution of the study.
    Reference principalInvestigator = 30;                             // Indicates the individual who has primary oversite of the execution of the study.
    repeated Reference site = 31;                                     // Clinic, hospital or other healthcare location that is participating in the study.
    CodeableConcept reasonStopped = 32;                               // A description and/or code explaining the premature termination of the study.
    repeated Annotation note = 33;                                    // Comments made about the event by the performer, subject or other participants.
    repeated ResearchStudy_Arm arm = 34;                              // Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.
}

/*
 * A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge.  This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques.  A ResearchStudy involves the gathering of information about human or animal subjects.
 */
message ResearchStudy_Arm {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Unique, human-readable label for this arm of the study.
    Element nameExtensionElement = 6;                                 // Extensions for name
    CodeableConcept code = 7;                                         // Categorization of study arm, e.g. experimental, active comparator, placebo comparater.
    string description = 8;                                           // A succinct description of the path through the study that would be followed by a subject adhering to this arm.
    Element descriptionExtensionElement = 9;                          // Extensions for description
}

enum ResearchSubject_status {
    ResearchSubject_status_candidate = 0;
    ResearchSubject_status_withdrawn = 1;
    ResearchSubject_status_active = 2;
    ResearchSubject_status_completed = 3;
    ResearchSubject_status_enrolled = 4;
    ResearchSubject_status_suspended = 5;
}


/*
 * A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge.  This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques.  A ResearchStudy involves the gathering of information about human or animal subjects.
 */
message ResearchSubject {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Identifiers assigned to this research study by the sponsor or other systems.
    ResearchSubject_status status = 13;                               // The current state of the subject.
    Element statusExtensionElement = 14;                              // Extensions for status
    Period period = 15;                                               // The dates the subject began and ended their participation in the study.
    Reference study = 16;                                             // Reference to the study the subject is participating in.
    Reference individual = 17;                                        // The record of the person or animal who is involved in the study.
    string assignedArm = 18;                                          // The name of the arm in the study the subject is expected to follow as part of this study.
    Element assignedArmExtensionElement = 19;                         // Extensions for assignedArm
    string actualArm = 20;                                            // The name of the arm in the study the subject actually followed as part of this study.
    Element actualArmExtensionElement = 21;                           // Extensions for actualArm
    Reference consent = 22;                                           // A record of the patient's informed agreement to participate in the study.
}

/*
 * This is the base resource type for everything.
 */
message Resource {
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
}

/*
 * An assessment of the likely outcome(s) for a patient or other subject as well as the likelihood of each outcome.
 */
message RiskAssessment {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Business identifier assigned to the risk assessment.
    Reference basedOn = 13;                                           // A reference to the request that is fulfilled by this risk assessment.
    Reference parent = 14;                                            // A reference to a resource that this risk assessment is part of, such as a Procedure.
    string status = 15;                                               // The status of the RiskAssessment, using the same statuses as an Observation.
    Element statusExtensionElement = 16;                              // Extensions for status
    CodeableConcept method = 17;                                      // The algorithm, process or mechanism used to evaluate the risk.
    CodeableConcept code = 18;                                        // The type of the risk assessment performed.
    Reference subject = 19;                                           // The patient or group the risk assessment applies to.
    Reference context = 20;                                           // The encounter where the assessment was performed.
    string occurrenceDateTime = 21;                                   // The date (and possibly time) the risk assessment was performed.
    Element occurrenceDateTimeExtensionElement = 22;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 23;                                     // The date (and possibly time) the risk assessment was performed.
    Reference condition = 24;                                         // For assessments or prognosis specific to a particular condition, indicates the condition being assessed.
    Reference performer = 25;                                         // The provider or software application that performed the assessment.
    CodeableConcept reasonCodeableConcept = 26;                       // The reason the risk assessment was performed.
    Reference reasonReference = 27;                                   // The reason the risk assessment was performed.
    repeated Reference basis = 28;                                    // Indicates the source data considered as part of the assessment (FamilyHistory, Observations, Procedures, Conditions, etc.).
    repeated RiskAssessment_Prediction prediction = 29;               // Describes the expected outcome for the subject.
    string mitigation = 30;                                           // A description of the steps that might be taken to reduce the identified risk(s).
    Element mitigationExtensionElement = 31;                          // Extensions for mitigation
    string comment = 32;                                              // Additional comments about the risk assessment.
    Element commentExtensionElement = 33;                             // Extensions for comment
}

/*
 * An assessment of the likely outcome(s) for a patient or other subject as well as the likelihood of each outcome.
 */
message RiskAssessment_Prediction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept outcome = 5;                                      // One of the potential outcomes for the patient (e.g. remission, death,  a particular condition).
    double probabilityDecimal = 6;                                    // How likely is the outcome (in the specified timeframe).
    Element probabilityDecimalExtensionElement = 7;                   // Extensions for probabilityDecimal
    Range probabilityRange = 8;                                       // How likely is the outcome (in the specified timeframe).
    CodeableConcept qualitativeRisk = 9;                              // How likely is the outcome (in the specified timeframe), expressed as a qualitative value (e.g. low, medium, high).
    double relativeRisk = 10;                                         // Indicates the risk for this particular subject (with their specific characteristics) divided by the risk of the population in general.  (Numbers greater than 1 = higher risk than the population, numbers less than 1 = lower risk.).
    Element relativeRiskExtensionElement = 11;                        // Extensions for relativeRisk
    Period whenPeriod = 12;                                           // Indicates the period of time or age range of the subject to which the specified probability applies.
    Range whenRange = 13;                                             // Indicates the period of time or age range of the subject to which the specified probability applies.
    string rationale = 14;                                            // Additional information explaining the basis for the prediction.
    Element rationaleExtensionElement = 15;                           // Extensions for rationale
}

/*
 * A container for slots of time that may be available for booking appointments.
 */
message Schedule {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // External Ids for this item.
    bool active = 13;                                                 // Whether this schedule record is in active use, or should not be used (such as was entered in error).
    Element activeExtensionElement = 14;                              // Extensions for active
    CodeableConcept serviceCategory = 15;                             // A broad categorisation of the service that is to be performed during this appointment.
    repeated CodeableConcept serviceType = 16;                        // The specific service that is to be performed during this appointment.
    repeated CodeableConcept specialty = 17;                          // The specialty of a practitioner that would be required to perform the service requested in this appointment.
    repeated Reference actor = 18;                                    // The resource this Schedule resource is providing availability information for. These are expected to usually be one of HealthcareService, Location, Practitioner, PractitionerRole, Device, Patient or RelatedPerson.
    Period planningHorizon = 19;                                      // The period of time that the slots that are attached to this Schedule resource cover (even if none exist). These  cover the amount of time that an organization's planning horizon; the interval for which they are currently accepting appointments. This does not define a "template" for planning outside these dates.
    string comment = 20;                                              // Comments on the availability to describe any extended information. Such as custom constraints on the slots that may be associated.
    Element commentExtensionElement = 21;                             // Extensions for comment
}

enum SearchParameter_status {
    SearchParameter_status_draft = 0;
    SearchParameter_status_active = 1;
    SearchParameter_status_retired = 2;
    SearchParameter_status_unknown = 3;
}

enum SearchParameter_type {
    SearchParameter_type_date = 0;
    SearchParameter_type_reference = 1;
    SearchParameter_type_number = 2;
    SearchParameter_type_quantity = 3;
    SearchParameter_type_string = 4;
    SearchParameter_type_composite = 5;
    SearchParameter_type_uri = 6;
    SearchParameter_type_token = 7;
}

enum SearchParameter_xpathUsage {
    SearchParameter_xpathUsage_normal = 0;
    SearchParameter_xpathUsage_other = 1;
    SearchParameter_xpathUsage_phonetic = 2;
    SearchParameter_xpathUsage_distance = 3;
    SearchParameter_xpathUsage_nearby = 4;
}


/*
 * A search parameter that defines a named search item that can be used to search/filter on a resource.
 */
message SearchParameter {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    string version = 14;                                              // The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 15;                             // Extensions for version
    string name = 16;                                                 // A natural language name identifying the search parameter. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 17;                                // Extensions for name
    SearchParameter_status status = 18;                               // The status of this search parameter. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 19;                              // Extensions for status
    bool experimental = 20;                                           // A boolean value to indicate that this search parameter is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 21;                        // Extensions for experimental
    string date = 22;                                                 // The date  (and optionally time) when the search parameter was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.
    Element dateExtensionElement = 23;                                // Extensions for date
    string publisher = 24;                                            // The name of the individual or organization that published the search parameter.
    Element publisherExtensionElement = 25;                           // Extensions for publisher
    repeated ContactDetail contact = 26;                              // Contact details to assist a user in finding and communicating with the publisher.
    repeated UsageContext useContext = 27;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate search parameter instances.
    repeated CodeableConcept jurisdiction = 28;                       // A legal or geographic region in which the search parameter is intended to be used.
    string purpose = 29;                                              // Explaination of why this search parameter is needed and why it has been designed as it has.
    Element purposeExtensionElement = 30;                             // Extensions for purpose
    string code = 31;                                                 // The code used in the URL or the parameter name in a parameters resource for this search parameter.
    Element codeExtensionElement = 32;                                // Extensions for code
    repeated string base = 33;                                        // The base resource type(s) that this search parameter can be used against.
    repeated Element baseExtensionElement = 34;                       // Extensions for base
    SearchParameter_type type = 35;                                   // The type of value a search parameter refers to, and how the content is interpreted.
    Element typeExtensionElement = 36;                                // Extensions for type
    string derivedFrom = 37;                                          // Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.
    Element derivedFromExtensionElement = 38;                         // Extensions for derivedFrom
    string description = 39;                                          // A free text natural language description of the search parameter from a consumer's perspective. and how it used.
    Element descriptionExtensionElement = 40;                         // Extensions for description
    string expression = 41;                                           // A FHIRPath expression that returns a set of elements for the search parameter.
    Element expressionExtensionElement = 42;                          // Extensions for expression
    string xpath = 43;                                                // An XPath expression that returns a set of elements for the search parameter.
    Element xpathExtensionElement = 44;                               // Extensions for xpath
    SearchParameter_xpathUsage xpathUsage = 45;                       // How the search parameter relates to the set of elements returned by evaluating the xpath query.
    Element xpathUsageExtensionElement = 46;                          // Extensions for xpathUsage
    repeated string target = 47;                                      // Types of resource (if a resource is referenced).
    repeated Element targetExtensionElement = 48;                     // Extensions for target
    repeated string comparator = 49;                                  // Comparators supported for the search parameter.
    repeated Element comparatorExtensionElement = 50;                 // Extensions for comparator
    repeated string modifier = 51;                                    // A modifier supported for the search parameter.
    repeated Element modifierExtensionElement = 52;                   // Extensions for modifier
    repeated string chain = 53;                                       // Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.
    repeated Element chainExtensionElement = 54;                      // Extensions for chain
    repeated SearchParameter_Component component = 55;                // Used to define the parts of a composite search parameter.
}

/*
 * A search parameter that defines a named search item that can be used to search/filter on a resource.
 */
message SearchParameter_Component {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference definition = 5;                                         // The definition of the search parameter that describes this part.
    string expression = 6;                                            // A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.
    Element expressionExtensionElement = 7;                           // Extensions for expression
}

enum Sequence_type {
    Sequence_type_aa = 0;
    Sequence_type_rna = 1;
    Sequence_type_dna = 2;
}


/*
 * Raw data describing a biological sequence.
 */
message Sequence {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // A unique identifier for this particular sequence instance. This is a FHIR-defined id.
    Sequence_type type = 13;                                          // Amino Acid Sequence/ DNA Sequence / RNA Sequence.
    Element typeExtensionElement = 14;                                // Extensions for type
    int64 coordinateSystem = 15;                                      // Whether the sequence is numbered starting at 0 (0-based numbering or coordinates, inclusive start, exclusive end) or starting at 1 (1-based numbering, inclusive start and inclusive end).
    Element coordinateSystemExtensionElement = 16;                    // Extensions for coordinateSystem
    Reference patient = 17;                                           // The patient whose sequencing results are described by this resource.
    Reference specimen = 18;                                          // Specimen used for sequencing.
    Reference device = 19;                                            // The method for sequencing, for example, chip information.
    Reference performer = 20;                                         // The organization or lab that should be responsible for this result.
    Quantity quantity = 21;                                           // The number of copies of the seqeunce of interest. (RNASeq).
    Sequence_ReferenceSeq referenceSeq = 22;                          // A sequence that is used as a reference to describe variants that are present in a sequence analyzed.
    repeated Sequence_Variant variant = 23;                           // The definition of variant here originates from Sequence ontology ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)). This element can represent amino acid or nucleic sequence change(including insertion,deletion,SNP,etc.)  It can represent some complex mutation or segment variation with the assist of CIGAR string.
    string observedSeq = 24;                                          // Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall starts from referenceSeq.windowStart and end by referenceSeq.windowEnd.
    Element observedSeqExtensionElement = 25;                         // Extensions for observedSeq
    repeated Sequence_Quality quality = 26;                           // An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).
    int64 readCoverage = 27;                                          // Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.
    Element readCoverageExtensionElement = 28;                        // Extensions for readCoverage
    repeated Sequence_Repository repository = 29;                     // Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.
    repeated Reference pointer = 30;                                  // Pointer to next atomic sequence which at most contains one variant.
}

/*
 * Raw data describing a biological sequence.
 */
message Sequence_ReferenceSeq {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept chromosome = 5;                                   // Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).
    string genomeBuild = 6;                                           // The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'.  Version number must be included if a versioned release of a primary build was used.
    Element genomeBuildExtensionElement = 7;                          // Extensions for genomeBuild
    CodeableConcept referenceSeqId = 8;                               // Reference identifier of reference sequence submitted to NCBI. It must match the type in the Sequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.
    Reference referenceSeqPointer = 9;                                // A Pointer to another Sequence entity as reference sequence.
    string referenceSeqString = 10;                                   // A string like "ACGT".
    Element referenceSeqStringExtensionElement = 11;                  // Extensions for referenceSeqString
    int64 strand = 12;                                                // Directionality of DNA sequence. Available values are "1" for the plus strand (5' to 3')/Watson/Sense/positive  and "-1" for the minus strand(3' to 5')/Crick/Antisense/negative.
    Element strandExtensionElement = 13;                              // Extensions for strand
    int64 windowStart = 14;                                           // Start position of the window on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.
    Element windowStartExtensionElement = 15;                         // Extensions for windowStart
    int64 windowEnd = 16;                                             // End position of the window on the reference sequence. If the coordinate system is 0-based then end is is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.
    Element windowEndExtensionElement = 17;                           // Extensions for windowEnd
}

/*
 * Raw data describing a biological sequence.
 */
message Sequence_Variant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 start = 5;                                                  // Start position of the variant on the  reference sequence.If the coordinate system is either 0-based or 1-based, then start position is inclusive.
    Element startExtensionElement = 6;                                // Extensions for start
    int64 end = 7;                                                    // End position of the variant on the reference sequence.If the coordinate system is 0-based then end is is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.
    Element endExtensionElement = 8;                                  // Extensions for end
    string observedAllele = 9;                                        // An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).  Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the observed  sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.
    Element observedAlleleExtensionElement = 10;                      // Extensions for observedAllele
    string referenceAllele = 11;                                      // An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the reference sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.
    Element referenceAlleleExtensionElement = 12;                     // Extensions for referenceAllele
    string cigar = 13;                                                // Extended CIGAR string for aligning the sequence with reference bases. See detailed documentation [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).
    Element cigarExtensionElement = 14;                               // Extensions for cigar
    Reference variantPointer = 15;                                    // A pointer to an Observation containing variant information.
}

enum Sequence_Quality_type {
    Sequence_Quality_type_snp = 0;
    Sequence_Quality_type_indel = 1;
    Sequence_Quality_type_unknown = 2;
}


/*
 * Raw data describing a biological sequence.
 */
message Sequence_Quality {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Sequence_Quality_type type = 5;                                   // INDEL / SNP / Undefined variant.
    Element typeExtensionElement = 6;                                 // Extensions for type
    CodeableConcept standardSequence = 7;                             // Gold standard sequence used for comparing against.
    int64 start = 8;                                                  // Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.
    Element startExtensionElement = 9;                                // Extensions for start
    int64 end = 10;                                                   // End position of the sequence.If the coordinate system is 0-based then end is is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.
    Element endExtensionElement = 11;                                 // Extensions for end
    Quantity score = 12;                                              // The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).
    CodeableConcept method = 13;                                      // Which method is used to get sequence quality.
    double truthTP = 14;                                              // True positives, from the perspective of the truth data, i.e. the number of sites in the Truth Call Set for which there are paths through the Query Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.
    Element truthTPExtensionElement = 15;                             // Extensions for truthTP
    double queryTP = 16;                                              // True positives, from the perspective of the query data, i.e. the number of sites in the Query Call Set for which there are paths through the Truth Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.
    Element queryTPExtensionElement = 17;                             // Extensions for queryTP
    double truthFN = 18;                                              // False negatives, i.e. the number of sites in the Truth Call Set for which there is no path through the Query Call Set that is consistent with all of the alleles at this site, or sites for which there is an inaccurate genotype call for the event. Sites with correct variant but incorrect genotype are counted here.
    Element truthFNExtensionElement = 19;                             // Extensions for truthFN
    double queryFP = 20;                                              // False positives, i.e. the number of sites in the Query Call Set for which there is no path through the Truth Call Set that is consistent with this site. Sites with correct variant but incorrect genotype are counted here.
    Element queryFPExtensionElement = 21;                             // Extensions for queryFP
    double gtFP = 22;                                                 // The number of false positives where the non-REF alleles in the Truth and Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1 or similar).
    Element gtFPExtensionElement = 23;                                // Extensions for gtFP
    double precision = 24;                                            // QUERY.TP / (QUERY.TP + QUERY.FP).
    Element precisionExtensionElement = 25;                           // Extensions for precision
    double recall = 26;                                               // TRUTH.TP / (TRUTH.TP + TRUTH.FN).
    Element recallExtensionElement = 27;                              // Extensions for recall
    double fScore = 28;                                               // Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).
    Element fScoreExtensionElement = 29;                              // Extensions for fScore
}

enum Sequence_Repository_type {
    Sequence_Repository_type_directlink = 0;
    Sequence_Repository_type_other = 1;
    Sequence_Repository_type_openapi = 2;
    Sequence_Repository_type_login = 3;
    Sequence_Repository_type_oauth = 4;
}


/*
 * Raw data describing a biological sequence.
 */
message Sequence_Repository {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Sequence_Repository_type type = 5;                                // Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string url = 7;                                                   // URI of an external repository which contains further details about the genetics data.
    Element urlExtensionElement = 8;                                  // Extensions for url
    string name = 9;                                                  // URI of an external repository which contains further details about the genetics data.
    Element nameExtensionElement = 10;                                // Extensions for name
    string datasetId = 11;                                            // Id of the variant in this external repository. The server will understand how to use this id to call for more info about datasets in external repository.
    Element datasetIdExtensionElement = 12;                           // Extensions for datasetId
    string variantsetId = 13;                                         // Id of the variantset in this external repository. The server will understand how to use this id to call for more info about variantsets in external repository.
    Element variantsetIdExtensionElement = 14;                        // Extensions for variantsetId
    string readsetId = 15;                                            // Id of the read in this external repository.
    Element readsetIdExtensionElement = 16;                           // Extensions for readsetId
}

enum ServiceDefinition_status {
    ServiceDefinition_status_draft = 0;
    ServiceDefinition_status_active = 1;
    ServiceDefinition_status_retired = 2;
    ServiceDefinition_status_unknown = 3;
}


/*
 * The ServiceDefinition describes a unit of decision support functionality that is made available as a service, such as immunization modules or drug-drug interaction checking.
 */
message ServiceDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this service definition when it is represented in other formats, or referenced in a specification, model, design or an instance. This is used for CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.
    string version = 15;                                              // The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the service definition.
    Element titleExtensionElement = 20;                               // Extensions for title
    ServiceDefinition_status status = 21;                             // The status of this service definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the service definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the service definition changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the service definition.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    string description = 29;                                          // A free text natural language description of the service definition from a consumer's perspective.
    Element descriptionExtensionElement = 30;                         // Extensions for description
    string purpose = 31;                                              // Explaination of why this service definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 32;                             // Extensions for purpose
    string usage = 33;                                                // A detailed description of how the module is used from a clinical perspective.
    Element usageExtensionElement = 34;                               // Extensions for usage
    string approvalDate = 35;                                         // The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
    Element approvalDateExtensionElement = 36;                        // Extensions for approvalDate
    string lastReviewDate = 37;                                       // The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
    Element lastReviewDateExtensionElement = 38;                      // Extensions for lastReviewDate
    Period effectivePeriod = 39;                                      // The period during which the service definition content was or is planned to be in active use.
    repeated UsageContext useContext = 40;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate service definition instances.
    repeated CodeableConcept jurisdiction = 41;                       // A legal or geographic region in which the service definition is intended to be used.
    repeated CodeableConcept topic = 42;                              // Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.
    repeated Contributor contributor = 43;                            // A contributor to the content of the module, including authors, editors, reviewers, and endorsers.
    repeated ContactDetail contact = 44;                              // Contact details to assist a user in finding and communicating with the publisher.
    string copyright = 45;                                            // A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.
    Element copyrightExtensionElement = 46;                           // Extensions for copyright
    repeated RelatedArtifact relatedArtifact = 47;                    // Related resources such as additional documentation, justification, or bibliographic references.
    repeated TriggerDefinition trigger = 48;                          // The trigger element defines when the rule should be invoked. This information is used by consumers of the rule to determine how to integrate the rule into a specific workflow.
    repeated DataRequirement dataRequirement = 49;                    // Data requirements are a machine processable description of the data required by the module in order to perform a successful evaluation.
    Reference operationDefinition = 50;                               // A reference to the operation that is used to invoke this service.
}

enum Slot_status {
    Slot_status_busy_unavailable = 0;
    Slot_status_busy = 1;
    Slot_status_busy_tentative = 2;
    Slot_status_free = 3;
    Slot_status_entered_in_error = 4;
}


/*
 * A slot of time on a schedule that may be available for booking appointments.
 */
message Slot {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // External Ids for this item.
    CodeableConcept serviceCategory = 13;                             // A broad categorisation of the service that is to be performed during this appointment.
    repeated CodeableConcept serviceType = 14;                        // The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.
    repeated CodeableConcept specialty = 15;                          // The specialty of a practitioner that would be required to perform the service requested in this appointment.
    CodeableConcept appointmentType = 16;                             // The style of appointment or patient that may be booked in the slot (not service type).
    Reference schedule = 17;                                          // The schedule resource that this slot defines an interval of status information.
    Slot_status status = 18;                                          // busy | free | busy-unavailable | busy-tentative | entered-in-error.
    Element statusExtensionElement = 19;                              // Extensions for status
    string start = 20;                                                // Date/Time that the slot is to begin.
    Element startExtensionElement = 21;                               // Extensions for start
    string end = 22;                                                  // Date/Time that the slot is to conclude.
    Element endExtensionElement = 23;                                 // Extensions for end
    bool overbooked = 24;                                             // This slot has already been overbooked, appointments are unlikely to be accepted for this time.
    Element overbookedExtensionElement = 25;                          // Extensions for overbooked
    string comment = 26;                                              // Comments on the slot to describe any extended information. Such as custom constraints on the slot.
    Element commentExtensionElement = 27;                             // Extensions for comment
}

enum Specimen_status {
    Specimen_status_unavailable = 0;
    Specimen_status_available = 1;
    Specimen_status_unsatisfactory = 2;
    Specimen_status_entered_in_error = 3;
}


/*
 * A sample to be used for analysis.
 */
message Specimen {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Id for specimen.
    Identifier accessionIdentifier = 13;                              // The identifier assigned by the lab when accessioning specimen(s). This is not necessarily the same as the specimen identifier, depending on local lab procedures.
    Specimen_status status = 14;                                      // The availability of the specimen.
    Element statusExtensionElement = 15;                              // Extensions for status
    CodeableConcept type = 16;                                        // The kind of material that forms the specimen.
    Reference subject = 17;                                           // Where the specimen came from. This may be from the patient(s) or from the environment or a device.
    string receivedTime = 18;                                         // Time when specimen was received for processing or testing.
    Element receivedTimeExtensionElement = 19;                        // Extensions for receivedTime
    repeated Reference parent = 20;                                   // Reference to the parent (source) specimen which is used when the specimen was either derived from or a component of another specimen.
    repeated Reference request = 21;                                  // Details concerning a test or procedure request that required a specimen to be collected.
    Specimen_Collection collection = 22;                              // Details concerning the specimen collection.
    repeated Specimen_Processing processing = 23;                     // Details concerning processing and processing steps for the specimen.
    repeated Specimen_Container container = 24;                       // The container holding the specimen.  The recursive nature of containers; i.e. blood in tube in tray in rack is not addressed here.
    repeated Annotation note = 25;                                    // To communicate any details or issues about the specimen or during the specimen collection. (for example: broken vial, sent with patient, frozen).
}

/*
 * A sample to be used for analysis.
 */
message Specimen_Collection {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference collector = 5;                                          // Person who collected the specimen.
    string collectedDateTime = 6;                                     // Time when specimen was collected from subject - the physiologically relevant time.
    Element collectedDateTimeExtensionElement = 7;                    // Extensions for collectedDateTime
    Period collectedPeriod = 8;                                       // Time when specimen was collected from subject - the physiologically relevant time.
    Quantity quantity = 9;                                            // The quantity of specimen collected; for instance the volume of a blood sample, or the physical measurement of an anatomic pathology sample.
    CodeableConcept method = 10;                                      // A coded value specifying the technique that is used to perform the procedure.
    CodeableConcept bodySite = 11;                                    // Anatomical location from which the specimen was collected (if subject is a patient). This is the target site.  This element is not used for environmental specimens.
}

/*
 * A sample to be used for analysis.
 */
message Specimen_Processing {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string description = 5;                                           // Textual description of procedure.
    Element descriptionExtensionElement = 6;                          // Extensions for description
    CodeableConcept procedure = 7;                                    // A coded value specifying the procedure used to process the specimen.
    repeated Reference additive = 8;                                  // Material used in the processing step.
    string timeDateTime = 9;                                          // A record of the time or period when the specimen processing occurred.  For example the time of sample fixation or the period of time the sample was in formalin.
    Element timeDateTimeExtensionElement = 10;                        // Extensions for timeDateTime
    Period timePeriod = 11;                                           // A record of the time or period when the specimen processing occurred.  For example the time of sample fixation or the period of time the sample was in formalin.
}

/*
 * A sample to be used for analysis.
 */
message Specimen_Container {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated Identifier identifier = 5;                               // Id for container. There may be multiple; a manufacturer's bar code, lab assigned identifier, etc. The container ID may differ from the specimen id in some circumstances.
    string description = 6;                                           // Textual description of the container.
    Element descriptionExtensionElement = 7;                          // Extensions for description
    CodeableConcept type = 8;                                         // The type of container associated with the specimen (e.g. slide, aliquot, etc.).
    Quantity capacity = 9;                                            // The capacity (volume or other measure) the container may contain.
    Quantity specimenQuantity = 10;                                   // The quantity of specimen in the container; may be volume, dimensions, or other appropriate measurements, depending on the specimen type.
    CodeableConcept additiveCodeableConcept = 11;                     // Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
    Reference additiveReference = 12;                                 // Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
}

enum StructureDefinition_status {
    StructureDefinition_status_draft = 0;
    StructureDefinition_status_active = 1;
    StructureDefinition_status_retired = 2;
    StructureDefinition_status_unknown = 3;
}

enum StructureDefinition_kind {
    StructureDefinition_kind_primitive_type = 0;
    StructureDefinition_kind_resource = 1;
    StructureDefinition_kind_complex_type = 2;
    StructureDefinition_kind_logical = 3;
}

enum StructureDefinition_contextType {
    StructureDefinition_contextType_extension = 0;
    StructureDefinition_contextType_resource = 1;
    StructureDefinition_contextType_datatype = 2;
}

enum StructureDefinition_derivation {
    StructureDefinition_derivation_specialization = 0;
    StructureDefinition_derivation_constraint = 1;
}


/*
 * A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.
 */
message StructureDefinition {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this structure definition is (or will be) published. The URL SHOULD include the major version of the structure definition. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this structure definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the structure definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the structure definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the structure definition.
    Element titleExtensionElement = 20;                               // Extensions for title
    StructureDefinition_status status = 21;                           // The status of this structure definition. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the structure definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the structure definition.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the structure definition from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the structure definition is intended to be used.
    string purpose = 34;                                              // Explaination of why this structure definition is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the structure definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure definition.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    repeated Coding keyword = 38;                                     // A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates.
    string fhirVersion = 39;                                          // The version of the FHIR specification on which this StructureDefinition is based - this is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 3.0.1 for this version.
    Element fhirVersionExtensionElement = 40;                         // Extensions for fhirVersion
    repeated StructureDefinition_Mapping mapping = 41;                // An external specification that the content is mapped to.
    StructureDefinition_kind kind = 42;                               // Defines the kind of structure that this definition is describing.
    Element kindExtensionElement = 43;                                // Extensions for kind
    bool abstract = 44;                                               // Whether structure this definition describes is abstract or not  - that is, whether the structure is not intended to be instantiated. For Resources and Data types, abstract types will never be exchanged  between systems.
    Element abstractExtensionElement = 45;                            // Extensions for abstract
    StructureDefinition_contextType contextType = 46;                 // If this is an extension, Identifies the context within FHIR resources where the extension can be used.
    Element contextTypeExtensionElement = 47;                         // Extensions for contextType
    repeated string context = 48;                                     // Identifies the types of resource or data type elements to which the extension can be applied.
    repeated Element contextExtensionElement = 49;                    // Extensions for context
    repeated string contextInvariant = 50;                            // A set of rules as Fluent Invariants about when the extension can be used (e.g. co-occurrence variants for the extension).
    repeated Element contextInvariantExtensionElement = 51;           // Extensions for contextInvariant
    string type = 52;                                                 // The type this structure describes. If the derivation kind is 'specialization' then this is the master definition for a type, and there is always one of these (a data type, an extension, a resource, including abstract ones). Otherwise the structure definition is a constraint on the stated type (and in this case, the type cannot be an abstract type).
    Element typeExtensionElement = 53;                                // Extensions for type
    string baseDefinition = 54;                                       // An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.
    Element baseDefinitionExtensionElement = 55;                      // Extensions for baseDefinition
    StructureDefinition_derivation derivation = 56;                   // How the type relates to the baseDefinition.
    Element derivationExtensionElement = 57;                          // Extensions for derivation
    StructureDefinition_Snapshot snapshot = 58;                       // A snapshot view is expressed in a stand alone form that can be used and interpreted without considering the base StructureDefinition.
    StructureDefinition_Differential differential = 59;               // A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.
}

/*
 * A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.
 */
message StructureDefinition_Mapping {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string identity = 5;                                              // An Internal id that is used to identify this mapping set when specific mappings are made.
    Element identityExtensionElement = 6;                             // Extensions for identity
    string uri = 7;                                                   // An absolute URI that identifies the specification that this mapping is expressed to.
    Element uriExtensionElement = 8;                                  // Extensions for uri
    string name = 9;                                                  // A name for the specification that is being mapped to.
    Element nameExtensionElement = 10;                                // Extensions for name
    string comment = 11;                                              // Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
    Element commentExtensionElement = 12;                             // Extensions for comment
}

/*
 * A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.
 */
message StructureDefinition_Snapshot {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated ElementDefinition element = 5;                           // Captures constraints on each element within the resource.
}

/*
 * A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.
 */
message StructureDefinition_Differential {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated ElementDefinition element = 5;                           // Captures constraints on each element within the resource.
}

enum StructureMap_status {
    StructureMap_status_draft = 0;
    StructureMap_status_active = 1;
    StructureMap_status_retired = 2;
    StructureMap_status_unknown = 3;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this structure map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this structure map is (or will be) published. The URL SHOULD include the major version of the structure map. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this structure map when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the structure map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the structure map. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the structure map.
    Element titleExtensionElement = 20;                               // Extensions for title
    StructureMap_status status = 21;                                  // The status of this structure map. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this structure map is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the structure map was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure map changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the structure map.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the structure map from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure map instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the structure map is intended to be used.
    string purpose = 34;                                              // Explaination of why this structure map is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the structure map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure map.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    repeated StructureMap_Structure structure = 38;                   // A structure definition used by this map. The structure definition may describe instances that are converted, or the instances that are produced.
    repeated string import = 39;                                      // Other maps used by this map (canonical URLs).
    repeated Element importExtensionElement = 40;                     // Extensions for import
    repeated StructureMap_Group group = 41;                           // Organizes the mapping into managable chunks for human review/ease of maintenance.
}

enum StructureMap_Structure_mode {
    StructureMap_Structure_mode_source = 0;
    StructureMap_Structure_mode_queried = 1;
    StructureMap_Structure_mode_target = 2;
    StructureMap_Structure_mode_produced = 3;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Structure {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string url = 5;                                                   // The canonical URL that identifies the structure.
    Element urlExtensionElement = 6;                                  // Extensions for url
    StructureMap_Structure_mode mode = 7;                             // How the referenced structure is used in this mapping.
    Element modeExtensionElement = 8;                                 // Extensions for mode
    string alias = 9;                                                 // The name used for this type in the map.
    Element aliasExtensionElement = 10;                               // Extensions for alias
    string documentation = 11;                                        // Documentation that describes how the structure is used in the mapping.
    Element documentationExtensionElement = 12;                       // Extensions for documentation
}

enum StructureMap_Group_typeMode {
    StructureMap_Group_typeMode_types = 0;
    StructureMap_Group_typeMode_none = 1;
    StructureMap_Group_typeMode_type_and_types = 2;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Group {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // A unique name for the group for the convenience of human readers.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string extends = 7;                                               // Another group that this group adds rules to.
    Element extendsExtensionElement = 8;                              // Extensions for extends
    StructureMap_Group_typeMode typeMode = 9;                         // If this is the default rule set to apply for thie source type, or this combination of types.
    Element typeModeExtensionElement = 10;                            // Extensions for typeMode
    string documentation = 11;                                        // Additional supporting documentation that explains the purpose of the group and the types of mappings within it.
    Element documentationExtensionElement = 12;                       // Extensions for documentation
    repeated StructureMap_Input input = 13;                           // A name assigned to an instance of data. The instance must be provided when the mapping is invoked.
    repeated StructureMap_Rule rule = 14;                             // Transform Rule from source to target.
}

enum StructureMap_Input_mode {
    StructureMap_Input_mode_source = 0;
    StructureMap_Input_mode_target = 1;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Input {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Name for this instance of data.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string type = 7;                                                  // Type for this instance of data.
    Element typeExtensionElement = 8;                                 // Extensions for type
    StructureMap_Input_mode mode = 9;                                 // Mode for this instance of data.
    Element modeExtensionElement = 10;                                // Extensions for mode
    string documentation = 11;                                        // Documentation for this instance of data.
    Element documentationExtensionElement = 12;                       // Extensions for documentation
}

/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Rule {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Name of the rule for internal references.
    Element nameExtensionElement = 6;                                 // Extensions for name
    repeated StructureMap_Source source = 7;                          // Source inputs to the mapping.
    repeated StructureMap_Target target = 8;                          // Content to create because of this mapping rule.
    repeated StructureMap_Rule rule = 9;                              // Rules contained in this rule.
    repeated StructureMap_Dependent dependent = 10;                   // Which other rules to apply in the context of this rule.
    string documentation = 11;                                        // Documentation for this instance of data.
    Element documentationExtensionElement = 12;                       // Extensions for documentation
}

enum StructureMap_Source_listMode {
    StructureMap_Source_listMode_only_one = 0;
    StructureMap_Source_listMode_last = 1;
    StructureMap_Source_listMode_not_last = 2;
    StructureMap_Source_listMode_not_first = 3;
    StructureMap_Source_listMode_first = 4;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Source {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string context = 5;                                               // Type or variable this rule applies to.
    Element contextExtensionElement = 6;                              // Extensions for context
    int64 min = 7;                                                    // Specified minimum cardinality for the element. This is optional; if present, it acts an implicit check on the input content.
    Element minExtensionElement = 8;                                  // Extensions for min
    string max = 9;                                                   // Specified maximum cardinality for the element - a number or a "*". This is optional; if present, it acts an implicit check on the input content (* just serves as documentation; it's the default value).
    Element maxExtensionElement = 10;                                 // Extensions for max
    string type = 11;                                                 // Specified type for the element. This works as a condition on the mapping - use for polymorphic elements.
    Element typeExtensionElement = 12;                                // Extensions for type
    bool defaultValueBoolean = 13;                                    // A value to use if there is no existing value in the source object.
    Element defaultValueBooleanExtensionElement = 14;                 // Extensions for defaultValueBoolean
    int64 defaultValueInteger = 15;                                   // A value to use if there is no existing value in the source object.
    Element defaultValueIntegerExtensionElement = 16;                 // Extensions for defaultValueInteger
    double defaultValueDecimal = 17;                                  // A value to use if there is no existing value in the source object.
    Element defaultValueDecimalExtensionElement = 18;                 // Extensions for defaultValueDecimal
    string defaultValueBase64Binary = 19;                             // A value to use if there is no existing value in the source object.
    Element defaultValueBase64BinaryExtensionElement = 20;            // Extensions for defaultValueBase64Binary
    string defaultValueInstant = 21;                                  // A value to use if there is no existing value in the source object.
    Element defaultValueInstantExtensionElement = 22;                 // Extensions for defaultValueInstant
    string defaultValueString = 23;                                   // A value to use if there is no existing value in the source object.
    Element defaultValueStringExtensionElement = 24;                  // Extensions for defaultValueString
    string defaultValueUri = 25;                                      // A value to use if there is no existing value in the source object.
    Element defaultValueUriExtensionElement = 26;                     // Extensions for defaultValueUri
    string defaultValueDate = 27;                                     // A value to use if there is no existing value in the source object.
    Element defaultValueDateExtensionElement = 28;                    // Extensions for defaultValueDate
    string defaultValueDateTime = 29;                                 // A value to use if there is no existing value in the source object.
    Element defaultValueDateTimeExtensionElement = 30;                // Extensions for defaultValueDateTime
    string defaultValueTime = 31;                                     // A value to use if there is no existing value in the source object.
    Element defaultValueTimeExtensionElement = 32;                    // Extensions for defaultValueTime
    string defaultValueCode = 33;                                     // A value to use if there is no existing value in the source object.
    Element defaultValueCodeExtensionElement = 34;                    // Extensions for defaultValueCode
    string defaultValueOid = 35;                                      // A value to use if there is no existing value in the source object.
    Element defaultValueOidExtensionElement = 36;                     // Extensions for defaultValueOid
    string defaultValueUuid = 37;                                     // A value to use if there is no existing value in the source object.
    Element defaultValueUuidExtensionElement = 38;                    // Extensions for defaultValueUuid
    string defaultValueId = 39;                                       // A value to use if there is no existing value in the source object.
    Element defaultValueIdExtensionElement = 40;                      // Extensions for defaultValueId
    int64 defaultValueUnsignedInt = 41;                               // A value to use if there is no existing value in the source object.
    Element defaultValueUnsignedIntExtensionElement = 42;             // Extensions for defaultValueUnsignedInt
    int64 defaultValuePositiveInt = 43;                               // A value to use if there is no existing value in the source object.
    Element defaultValuePositiveIntExtensionElement = 44;             // Extensions for defaultValuePositiveInt
    string defaultValueMarkdown = 45;                                 // A value to use if there is no existing value in the source object.
    Element defaultValueMarkdownExtensionElement = 46;                // Extensions for defaultValueMarkdown
    Element defaultValueElement = 47;                                 // A value to use if there is no existing value in the source object.
    Extension defaultValueExtension = 48;                             // A value to use if there is no existing value in the source object.
    BackboneElement defaultValueBackboneElement = 49;                 // A value to use if there is no existing value in the source object.
    Narrative defaultValueNarrative = 50;                             // A value to use if there is no existing value in the source object.
    Annotation defaultValueAnnotation = 51;                           // A value to use if there is no existing value in the source object.
    Attachment defaultValueAttachment = 52;                           // A value to use if there is no existing value in the source object.
    Identifier defaultValueIdentifier = 53;                           // A value to use if there is no existing value in the source object.
    CodeableConcept defaultValueCodeableConcept = 54;                 // A value to use if there is no existing value in the source object.
    Coding defaultValueCoding = 55;                                   // A value to use if there is no existing value in the source object.
    Quantity defaultValueQuantity = 56;                               // A value to use if there is no existing value in the source object.
    Duration defaultValueDuration = 57;                               // A value to use if there is no existing value in the source object.
    Quantity defaultValueSimpleQuantity = 58;                         // A value to use if there is no existing value in the source object.
    Distance defaultValueDistance = 59;                               // A value to use if there is no existing value in the source object.
    Count defaultValueCount = 60;                                     // A value to use if there is no existing value in the source object.
    Money defaultValueMoney = 61;                                     // A value to use if there is no existing value in the source object.
    Age defaultValueAge = 62;                                         // A value to use if there is no existing value in the source object.
    Range defaultValueRange = 63;                                     // A value to use if there is no existing value in the source object.
    Period defaultValuePeriod = 64;                                   // A value to use if there is no existing value in the source object.
    Ratio defaultValueRatio = 65;                                     // A value to use if there is no existing value in the source object.
    Reference defaultValueReference = 66;                             // A value to use if there is no existing value in the source object.
    SampledData defaultValueSampledData = 67;                         // A value to use if there is no existing value in the source object.
    Signature defaultValueSignature = 68;                             // A value to use if there is no existing value in the source object.
    HumanName defaultValueHumanName = 69;                             // A value to use if there is no existing value in the source object.
    Address defaultValueAddress = 70;                                 // A value to use if there is no existing value in the source object.
    ContactPoint defaultValueContactPoint = 71;                       // A value to use if there is no existing value in the source object.
    Timing defaultValueTiming = 72;                                   // A value to use if there is no existing value in the source object.
    Meta defaultValueMeta = 73;                                       // A value to use if there is no existing value in the source object.
    ElementDefinition defaultValueElementDefinition = 74;             // A value to use if there is no existing value in the source object.
    ContactDetail defaultValueContactDetail = 75;                     // A value to use if there is no existing value in the source object.
    Contributor defaultValueContributor = 76;                         // A value to use if there is no existing value in the source object.
    Dosage defaultValueDosage = 77;                                   // A value to use if there is no existing value in the source object.
    RelatedArtifact defaultValueRelatedArtifact = 78;                 // A value to use if there is no existing value in the source object.
    UsageContext defaultValueUsageContext = 79;                       // A value to use if there is no existing value in the source object.
    DataRequirement defaultValueDataRequirement = 80;                 // A value to use if there is no existing value in the source object.
    ParameterDefinition defaultValueParameterDefinition = 81;         // A value to use if there is no existing value in the source object.
    TriggerDefinition defaultValueTriggerDefinition = 82;             // A value to use if there is no existing value in the source object.
    string element = 83;                                              // Optional field for this source.
    Element elementExtensionElement = 84;                             // Extensions for element
    StructureMap_Source_listMode listMode = 85;                       // How to handle the list mode for this element.
    Element listModeExtensionElement = 86;                            // Extensions for listMode
    string variable = 87;                                             // Named context for field, if a field is specified.
    Element variableExtensionElement = 88;                            // Extensions for variable
    string condition = 89;                                            // FHIRPath expression  - must be true or the rule does not apply.
    Element conditionExtensionElement = 90;                           // Extensions for condition
    string check = 91;                                                // FHIRPath expression  - must be true or the mapping engine throws an error instead of completing.
    Element checkExtensionElement = 92;                               // Extensions for check
}

enum StructureMap_Target_contextType {
    StructureMap_Target_contextType_variable = 0;
    StructureMap_Target_contextType_type = 1;
}

enum StructureMap_Target_transform {
    StructureMap_Target_transform_cc = 0;
    StructureMap_Target_transform_pointer = 1;
    StructureMap_Target_transform_c = 2;
    StructureMap_Target_transform_uuid = 3;
    StructureMap_Target_transform_cp = 4;
    StructureMap_Target_transform_translate = 5;
    StructureMap_Target_transform_reference = 6;
    StructureMap_Target_transform_cast = 7;
    StructureMap_Target_transform_truncate = 8;
    StructureMap_Target_transform_qty = 9;
    StructureMap_Target_transform_create = 10;
    StructureMap_Target_transform_copy = 11;
    StructureMap_Target_transform_id = 12;
    StructureMap_Target_transform_escape = 13;
    StructureMap_Target_transform_evaluate = 14;
    StructureMap_Target_transform_append = 15;
    StructureMap_Target_transform_dateOp = 16;
}


/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Target {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string context = 5;                                               // Type or variable this rule applies to.
    Element contextExtensionElement = 6;                              // Extensions for context
    StructureMap_Target_contextType contextType = 7;                  // How to interpret the context.
    Element contextTypeExtensionElement = 8;                          // Extensions for contextType
    string element = 9;                                               // Field to create in the context.
    Element elementExtensionElement = 10;                             // Extensions for element
    string variable = 11;                                             // Named context for field, if desired, and a field is specified.
    Element variableExtensionElement = 12;                            // Extensions for variable
    repeated string listMode = 13;                                    // If field is a list, how to manage the list.
    repeated Element listModeExtensionElement = 14;                   // Extensions for listMode
    string listRuleId = 15;                                           // Internal rule reference for shared list items.
    Element listRuleIdExtensionElement = 16;                          // Extensions for listRuleId
    StructureMap_Target_transform transform = 17;                     // How the data is copied / created.
    Element transformExtensionElement = 18;                           // Extensions for transform
    repeated StructureMap_Parameter parameter = 19;                   // Parameters to the transform.
}

/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Parameter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string valueId = 5;                                               // Parameter value - variable or literal.
    Element valueIdExtensionElement = 6;                              // Extensions for valueId
    string valueString = 7;                                           // Parameter value - variable or literal.
    Element valueStringExtensionElement = 8;                          // Extensions for valueString
    bool valueBoolean = 9;                                            // Parameter value - variable or literal.
    Element valueBooleanExtensionElement = 10;                        // Extensions for valueBoolean
    int64 valueInteger = 11;                                          // Parameter value - variable or literal.
    Element valueIntegerExtensionElement = 12;                        // Extensions for valueInteger
    double valueDecimal = 13;                                         // Parameter value - variable or literal.
    Element valueDecimalExtensionElement = 14;                        // Extensions for valueDecimal
}

/*
 * A Map of relationships between 2 structures that can be used to transform data.
 */
message StructureMap_Dependent {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Name of a rule or group to apply.
    Element nameExtensionElement = 6;                                 // Extensions for name
    repeated string variable = 7;                                     // Variable to pass to the rule or group.
    repeated Element variableExtensionElement = 8;                    // Extensions for variable
}

enum Subscription_status {
    Subscription_status_requested = 0;
    Subscription_status_active = 1;
    Subscription_status_error = 2;
    Subscription_status_off = 3;
}


/*
 * The subscription resource is used to define a push based subscription from a server to another system. Once a subscription is registered with the server, the server checks every resource that is created or updated, and if the resource matches the given criteria, it sends a message on the defined "channel" so that another system is able to take an appropriate action.
 */
message Subscription {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Subscription_status status = 12;                                  // The status of the subscription, which marks the server state for managing the subscription.
    Element statusExtensionElement = 13;                              // Extensions for status
    repeated ContactPoint contact = 14;                               // Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.
    string end = 15;                                                  // The time for the server to turn the subscription off.
    Element endExtensionElement = 16;                                 // Extensions for end
    string reason = 17;                                               // A description of why this subscription is defined.
    Element reasonExtensionElement = 18;                              // Extensions for reason
    string criteria = 19;                                             // The rules that the server should use to determine when to generate notifications for this subscription.
    Element criteriaExtensionElement = 20;                            // Extensions for criteria
    string error = 21;                                                // A record of the last error that occurred when the server processed a notification.
    Element errorExtensionElement = 22;                               // Extensions for error
    Subscription_Channel channel = 23;                                // Details where to send notifications when resources are received that meet the criteria.
    repeated Coding tag = 24;                                         // A tag to add to any resource that matches the criteria, after the subscription is processed.
}

enum Subscription_Channel_type {
    Subscription_Channel_type_rest_hook = 0;
    Subscription_Channel_type_websocket = 1;
    Subscription_Channel_type_sms = 2;
    Subscription_Channel_type_message = 3;
    Subscription_Channel_type_email = 4;
}


/*
 * The subscription resource is used to define a push based subscription from a server to another system. Once a subscription is registered with the server, the server checks every resource that is created or updated, and if the resource matches the given criteria, it sends a message on the defined "channel" so that another system is able to take an appropriate action.
 */
message Subscription_Channel {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Subscription_Channel_type type = 5;                               // The type of channel to send notifications on.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string endpoint = 7;                                              // The uri that describes the actual end-point to send messages to.
    Element endpointExtensionElement = 8;                             // Extensions for endpoint
    string payload = 9;                                               // The mime type to send the payload in - either application/fhir+xml, or application/fhir+json. If the payload is not present, then there is no payload in the notification, just a notification.
    Element payloadExtensionElement = 10;                             // Extensions for payload
    repeated string header = 11;                                      // Additional headers / information to send as part of the notification.
    repeated Element headerExtensionElement = 12;                     // Extensions for header
}

enum Substance_status {
    Substance_status_inactive = 0;
    Substance_status_active = 1;
    Substance_status_entered_in_error = 2;
}


/*
 * A homogeneous material with a definite composition.
 */
message Substance {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Unique identifier for the substance.
    Substance_status status = 13;                                     // A code to indicate if the substance is actively used.
    Element statusExtensionElement = 14;                              // Extensions for status
    repeated CodeableConcept category = 15;                           // A code that classifies the general type of substance.  This is used  for searching, sorting and display purposes.
    CodeableConcept code = 16;                                        // A code (or set of codes) that identify this substance.
    string description = 17;                                          // A description of the substance - its appearance, handling requirements, and other usage notes.
    Element descriptionExtensionElement = 18;                         // Extensions for description
    repeated Substance_Instance instance = 19;                        // Substance may be used to describe a kind of substance, or a specific package/container of the substance: an instance.
    repeated Substance_Ingredient ingredient = 20;                    // A substance can be composed of other substances.
}

/*
 * A homogeneous material with a definite composition.
 */
message Substance_Instance {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Identifier identifier = 5;                                        // Identifier associated with the package/container (usually a label affixed directly).
    string expiry = 6;                                                // When the substance is no longer valid to use. For some substances, a single arbitrary date is used for expiry.
    Element expiryExtensionElement = 7;                               // Extensions for expiry
    Quantity quantity = 8;                                            // The amount of the substance.
}

/*
 * A homogeneous material with a definite composition.
 */
message Substance_Ingredient {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Ratio quantity = 5;                                               // The amount of the ingredient in the substance - a concentration ratio.
    CodeableConcept substanceCodeableConcept = 6;                     // Another substance that is a component of this substance.
    Reference substanceReference = 7;                                 // Another substance that is a component of this substance.
}

enum SupplyDelivery_status {
    SupplyDelivery_status_completed = 0;
    SupplyDelivery_status_abandoned = 1;
    SupplyDelivery_status_entered_in_error = 2;
    SupplyDelivery_status_in_progress = 3;
}


/*
 * Record of delivery of what is supplied.
 */
message SupplyDelivery {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Identifier assigned by the dispensing facility when the item(s) is dispensed.
    repeated Reference basedOn = 13;                                  // A plan, proposal or order that is fulfilled in whole or in part by this event.
    repeated Reference partOf = 14;                                   // A larger event of which this particular event is a component or step.
    SupplyDelivery_status status = 15;                                // A code specifying the state of the dispense event.
    Element statusExtensionElement = 16;                              // Extensions for status
    Reference patient = 17;                                           // A link to a resource representing the person whom the delivered item is for.
    CodeableConcept type = 18;                                        // Indicates the type of dispensing event that is performed. Examples include: Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.
    SupplyDelivery_SuppliedItem suppliedItem = 19;                    // The item that is being delivered or has been supplied.
    string occurrenceDateTime = 20;                                   // The date or time(s) the activity occurred.
    Element occurrenceDateTimeExtensionElement = 21;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 22;                                     // The date or time(s) the activity occurred.
    Timing occurrenceTiming = 23;                                     // The date or time(s) the activity occurred.
    Reference supplier = 24;                                          // The individual responsible for dispensing the medication, supplier or device.
    Reference destination = 25;                                       // Identification of the facility/location where the Supply was shipped to, as part of the dispense event.
    repeated Reference receiver = 26;                                 // Identifies the person who picked up the Supply.
}

/*
 * Record of delivery of what is supplied.
 */
message SupplyDelivery_SuppliedItem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Quantity quantity = 5;                                            // The amount of supply that has been dispensed. Includes unit of measure.
    CodeableConcept itemCodeableConcept = 6;                          // Identifies the medication, substance or device being dispensed. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.
    Reference itemReference = 7;                                      // Identifies the medication, substance or device being dispensed. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.
}

enum SupplyRequest_status {
    SupplyRequest_status_draft = 0;
    SupplyRequest_status_active = 1;
    SupplyRequest_status_cancelled = 2;
    SupplyRequest_status_completed = 3;
    SupplyRequest_status_entered_in_error = 4;
    SupplyRequest_status_suspended = 5;
    SupplyRequest_status_unknown = 6;
}


/*
 * A record of a request for a medication, substance or device used in the healthcare setting.
 */
message SupplyRequest {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Unique identifier for this supply request.
    SupplyRequest_status status = 13;                                 // Status of the supply request.
    Element statusExtensionElement = 14;                              // Extensions for status
    CodeableConcept category = 15;                                    // Category of supply, e.g.  central, non-stock, etc. This is used to support work flows associated with the supply process.
    string priority = 16;                                             // Indicates how quickly this SupplyRequest should be addressed with respect to other requests.
    Element priorityExtensionElement = 17;                            // Extensions for priority
    SupplyRequest_OrderedItem orderedItem = 18;                       // The item being requested.
    string occurrenceDateTime = 19;                                   // When the request should be fulfilled.
    Element occurrenceDateTimeExtensionElement = 20;                  // Extensions for occurrenceDateTime
    Period occurrencePeriod = 21;                                     // When the request should be fulfilled.
    Timing occurrenceTiming = 22;                                     // When the request should be fulfilled.
    string authoredOn = 23;                                           // When the request was made.
    Element authoredOnExtensionElement = 24;                          // Extensions for authoredOn
    SupplyRequest_Requester requester = 25;                           // The individual who initiated the request and has responsibility for its activation.
    repeated Reference supplier = 26;                                 // Who is intended to fulfill the request.
    CodeableConcept reasonCodeableConcept = 27;                       // Why the supply item was requested.
    Reference reasonReference = 28;                                   // Why the supply item was requested.
    Reference deliverFrom = 29;                                       // Where the supply is expected to come from.
    Reference deliverTo = 30;                                         // Where the supply is destined to go.
}

/*
 * A record of a request for a medication, substance or device used in the healthcare setting.
 */
message SupplyRequest_OrderedItem {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Quantity quantity = 5;                                            // The amount that is being ordered of the indicated item.
    CodeableConcept itemCodeableConcept = 6;                          // The item that is requested to be supplied. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.
    Reference itemReference = 7;                                      // The item that is requested to be supplied. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.
}

/*
 * A record of a request for a medication, substance or device used in the healthcare setting.
 */
message SupplyRequest_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner, etc. who initiated the request.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of.
}

enum Task_status {
    Task_status_requested = 0;
    Task_status_rejected = 1;
    Task_status_ready = 2;
    Task_status_draft = 3;
    Task_status_accepted = 4;
    Task_status_cancelled = 5;
    Task_status_received = 6;
    Task_status_failed = 7;
    Task_status_completed = 8;
    Task_status_entered_in_error = 9;
    Task_status_in_progress = 10;
    Task_status_on_hold = 11;
}


/*
 * A task to be performed.
 */
message Task {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // The business identifier for this task.
    string definitionUri = 13;                                        // A reference to a formal or informal definition of the task.  For example, a protocol, a step within a defined workflow definition, etc.
    Element definitionUriExtensionElement = 14;                       // Extensions for definitionUri
    Reference definitionReference = 15;                               // A reference to a formal or informal definition of the task.  For example, a protocol, a step within a defined workflow definition, etc.
    repeated Reference basedOn = 16;                                  // BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a "request" resource such as a ProcedureRequest, MedicationRequest, ProcedureRequest, CarePlan, etc. which is distinct from the "request" resource the task is seeking to fulfil.  This latter resource is referenced by FocusOn.  For example, based on a ProcedureRequest (= BasedOn), a task is created to fulfil a procedureRequest ( = FocusOn ) to collect a specimen from a patient.
    Identifier groupIdentifier = 17;                                  // An identifier that links together multiple tasks and other requests that were created in the same context.
    repeated Reference partOf = 18;                                   // Task that this particular task is part of.
    Task_status status = 19;                                          // The current status of the task.
    Element statusExtensionElement = 20;                              // Extensions for status
    CodeableConcept statusReason = 21;                                // An explanation as to why this task is held, failed, was refused, etc.
    CodeableConcept businessStatus = 22;                              // Contains business-specific nuances of the business state.
    string intent = 23;                                               // Indicates the "level" of actionability associated with the Task.  I.e. Is this a proposed task, a planned task, an actionable task, etc.
    Element intentExtensionElement = 24;                              // Extensions for intent
    string priority = 25;                                             // Indicates how quickly the Task should be addressed with respect to other requests.
    Element priorityExtensionElement = 26;                            // Extensions for priority
    CodeableConcept code = 27;                                        // A name or code (or both) briefly describing what the task involves.
    string description = 28;                                          // A free-text description of what is to be performed.
    Element descriptionExtensionElement = 29;                         // Extensions for description
    Reference focus = 30;                                             // The request being actioned or the resource being manipulated by this task.
    Reference for = 31;                                               // The entity who benefits from the performance of the service specified in the task (e.g., the patient).
    Reference context = 32;                                           // The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.
    Period executionPeriod = 33;                                      // Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).
    string authoredOn = 34;                                           // The date and time this task was created.
    Element authoredOnExtensionElement = 35;                          // Extensions for authoredOn
    string lastModified = 36;                                         // The date and time of last modification to this task.
    Element lastModifiedExtensionElement = 37;                        // Extensions for lastModified
    Task_Requester requester = 38;                                    // The creator of the task.
    repeated CodeableConcept performerType = 39;                      // The type of participant that can execute the task.
    Reference owner = 40;                                             // Individual organization or Device currently responsible for task execution.
    CodeableConcept reason = 41;                                      // A description or code indicating why this task needs to be performed.
    repeated Annotation note = 42;                                    // Free-text information captured about the task as it progresses.
    repeated Reference relevantHistory = 43;                          // Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.
    Task_Restriction restriction = 44;                                // If the Task.focus is a request resource and the task is seeking fulfillment (i.e is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.
    repeated Task_Input input = 45;                                   // Additional information that may be needed in the execution of the task.
    repeated Task_Output output = 46;                                 // Outputs produced by the Task.
}

/*
 * A task to be performed.
 */
message Task_Requester {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference agent = 5;                                              // The device, practitioner, etc. who initiated the task.
    Reference onBehalfOf = 6;                                         // The organization the device or practitioner was acting on behalf of when they initiated the task.
}

/*
 * A task to be performed.
 */
message Task_Restriction {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 repetitions = 5;                                            // Indicates the number of times the requested action should occur.
    Element repetitionsExtensionElement = 6;                          // Extensions for repetitions
    Period period = 7;                                                // Over what time-period is fulfillment sought.
    repeated Reference recipient = 8;                                 // For requests that are targeted to more than on potential recipient/target, for whom is fulfillment sought?
}

/*
 * A task to be performed.
 */
message Task_Input {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // A code or description indicating how the input is intended to be used as part of the task execution.
    bool valueBoolean = 6;                                            // The value of the input parameter as a basic type.
    Element valueBooleanExtensionElement = 7;                         // Extensions for valueBoolean
    int64 valueInteger = 8;                                           // The value of the input parameter as a basic type.
    Element valueIntegerExtensionElement = 9;                         // Extensions for valueInteger
    double valueDecimal = 10;                                         // The value of the input parameter as a basic type.
    Element valueDecimalExtensionElement = 11;                        // Extensions for valueDecimal
    string valueBase64Binary = 12;                                    // The value of the input parameter as a basic type.
    Element valueBase64BinaryExtensionElement = 13;                   // Extensions for valueBase64Binary
    string valueInstant = 14;                                         // The value of the input parameter as a basic type.
    Element valueInstantExtensionElement = 15;                        // Extensions for valueInstant
    string valueString = 16;                                          // The value of the input parameter as a basic type.
    Element valueStringExtensionElement = 17;                         // Extensions for valueString
    string valueUri = 18;                                             // The value of the input parameter as a basic type.
    Element valueUriExtensionElement = 19;                            // Extensions for valueUri
    string valueDate = 20;                                            // The value of the input parameter as a basic type.
    Element valueDateExtensionElement = 21;                           // Extensions for valueDate
    string valueDateTime = 22;                                        // The value of the input parameter as a basic type.
    Element valueDateTimeExtensionElement = 23;                       // Extensions for valueDateTime
    string valueTime = 24;                                            // The value of the input parameter as a basic type.
    Element valueTimeExtensionElement = 25;                           // Extensions for valueTime
    string valueCode = 26;                                            // The value of the input parameter as a basic type.
    Element valueCodeExtensionElement = 27;                           // Extensions for valueCode
    string valueOid = 28;                                             // The value of the input parameter as a basic type.
    Element valueOidExtensionElement = 29;                            // Extensions for valueOid
    string valueUuid = 30;                                            // The value of the input parameter as a basic type.
    Element valueUuidExtensionElement = 31;                           // Extensions for valueUuid
    string valueId = 32;                                              // The value of the input parameter as a basic type.
    Element valueIdExtensionElement = 33;                             // Extensions for valueId
    int64 valueUnsignedInt = 34;                                      // The value of the input parameter as a basic type.
    Element valueUnsignedIntExtensionElement = 35;                    // Extensions for valueUnsignedInt
    int64 valuePositiveInt = 36;                                      // The value of the input parameter as a basic type.
    Element valuePositiveIntExtensionElement = 37;                    // Extensions for valuePositiveInt
    string valueMarkdown = 38;                                        // The value of the input parameter as a basic type.
    Element valueMarkdownExtensionElement = 39;                       // Extensions for valueMarkdown
    Element valueElement = 40;                                        // The value of the input parameter as a basic type.
    Extension valueExtension = 41;                                    // The value of the input parameter as a basic type.
    BackboneElement valueBackboneElement = 42;                        // The value of the input parameter as a basic type.
    Narrative valueNarrative = 43;                                    // The value of the input parameter as a basic type.
    Annotation valueAnnotation = 44;                                  // The value of the input parameter as a basic type.
    Attachment valueAttachment = 45;                                  // The value of the input parameter as a basic type.
    Identifier valueIdentifier = 46;                                  // The value of the input parameter as a basic type.
    CodeableConcept valueCodeableConcept = 47;                        // The value of the input parameter as a basic type.
    Coding valueCoding = 48;                                          // The value of the input parameter as a basic type.
    Quantity valueQuantity = 49;                                      // The value of the input parameter as a basic type.
    Duration valueDuration = 50;                                      // The value of the input parameter as a basic type.
    Quantity valueSimpleQuantity = 51;                                // The value of the input parameter as a basic type.
    Distance valueDistance = 52;                                      // The value of the input parameter as a basic type.
    Count valueCount = 53;                                            // The value of the input parameter as a basic type.
    Money valueMoney = 54;                                            // The value of the input parameter as a basic type.
    Age valueAge = 55;                                                // The value of the input parameter as a basic type.
    Range valueRange = 56;                                            // The value of the input parameter as a basic type.
    Period valuePeriod = 57;                                          // The value of the input parameter as a basic type.
    Ratio valueRatio = 58;                                            // The value of the input parameter as a basic type.
    Reference valueReference = 59;                                    // The value of the input parameter as a basic type.
    SampledData valueSampledData = 60;                                // The value of the input parameter as a basic type.
    Signature valueSignature = 61;                                    // The value of the input parameter as a basic type.
    HumanName valueHumanName = 62;                                    // The value of the input parameter as a basic type.
    Address valueAddress = 63;                                        // The value of the input parameter as a basic type.
    ContactPoint valueContactPoint = 64;                              // The value of the input parameter as a basic type.
    Timing valueTiming = 65;                                          // The value of the input parameter as a basic type.
    Meta valueMeta = 66;                                              // The value of the input parameter as a basic type.
    ElementDefinition valueElementDefinition = 67;                    // The value of the input parameter as a basic type.
    ContactDetail valueContactDetail = 68;                            // The value of the input parameter as a basic type.
    Contributor valueContributor = 69;                                // The value of the input parameter as a basic type.
    Dosage valueDosage = 70;                                          // The value of the input parameter as a basic type.
    RelatedArtifact valueRelatedArtifact = 71;                        // The value of the input parameter as a basic type.
    UsageContext valueUsageContext = 72;                              // The value of the input parameter as a basic type.
    DataRequirement valueDataRequirement = 73;                        // The value of the input parameter as a basic type.
    ParameterDefinition valueParameterDefinition = 74;                // The value of the input parameter as a basic type.
    TriggerDefinition valueTriggerDefinition = 75;                    // The value of the input parameter as a basic type.
}

/*
 * A task to be performed.
 */
message Task_Output {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept type = 5;                                         // The name of the Output parameter.
    bool valueBoolean = 6;                                            // The value of the Output parameter as a basic type.
    Element valueBooleanExtensionElement = 7;                         // Extensions for valueBoolean
    int64 valueInteger = 8;                                           // The value of the Output parameter as a basic type.
    Element valueIntegerExtensionElement = 9;                         // Extensions for valueInteger
    double valueDecimal = 10;                                         // The value of the Output parameter as a basic type.
    Element valueDecimalExtensionElement = 11;                        // Extensions for valueDecimal
    string valueBase64Binary = 12;                                    // The value of the Output parameter as a basic type.
    Element valueBase64BinaryExtensionElement = 13;                   // Extensions for valueBase64Binary
    string valueInstant = 14;                                         // The value of the Output parameter as a basic type.
    Element valueInstantExtensionElement = 15;                        // Extensions for valueInstant
    string valueString = 16;                                          // The value of the Output parameter as a basic type.
    Element valueStringExtensionElement = 17;                         // Extensions for valueString
    string valueUri = 18;                                             // The value of the Output parameter as a basic type.
    Element valueUriExtensionElement = 19;                            // Extensions for valueUri
    string valueDate = 20;                                            // The value of the Output parameter as a basic type.
    Element valueDateExtensionElement = 21;                           // Extensions for valueDate
    string valueDateTime = 22;                                        // The value of the Output parameter as a basic type.
    Element valueDateTimeExtensionElement = 23;                       // Extensions for valueDateTime
    string valueTime = 24;                                            // The value of the Output parameter as a basic type.
    Element valueTimeExtensionElement = 25;                           // Extensions for valueTime
    string valueCode = 26;                                            // The value of the Output parameter as a basic type.
    Element valueCodeExtensionElement = 27;                           // Extensions for valueCode
    string valueOid = 28;                                             // The value of the Output parameter as a basic type.
    Element valueOidExtensionElement = 29;                            // Extensions for valueOid
    string valueUuid = 30;                                            // The value of the Output parameter as a basic type.
    Element valueUuidExtensionElement = 31;                           // Extensions for valueUuid
    string valueId = 32;                                              // The value of the Output parameter as a basic type.
    Element valueIdExtensionElement = 33;                             // Extensions for valueId
    int64 valueUnsignedInt = 34;                                      // The value of the Output parameter as a basic type.
    Element valueUnsignedIntExtensionElement = 35;                    // Extensions for valueUnsignedInt
    int64 valuePositiveInt = 36;                                      // The value of the Output parameter as a basic type.
    Element valuePositiveIntExtensionElement = 37;                    // Extensions for valuePositiveInt
    string valueMarkdown = 38;                                        // The value of the Output parameter as a basic type.
    Element valueMarkdownExtensionElement = 39;                       // Extensions for valueMarkdown
    Element valueElement = 40;                                        // The value of the Output parameter as a basic type.
    Extension valueExtension = 41;                                    // The value of the Output parameter as a basic type.
    BackboneElement valueBackboneElement = 42;                        // The value of the Output parameter as a basic type.
    Narrative valueNarrative = 43;                                    // The value of the Output parameter as a basic type.
    Annotation valueAnnotation = 44;                                  // The value of the Output parameter as a basic type.
    Attachment valueAttachment = 45;                                  // The value of the Output parameter as a basic type.
    Identifier valueIdentifier = 46;                                  // The value of the Output parameter as a basic type.
    CodeableConcept valueCodeableConcept = 47;                        // The value of the Output parameter as a basic type.
    Coding valueCoding = 48;                                          // The value of the Output parameter as a basic type.
    Quantity valueQuantity = 49;                                      // The value of the Output parameter as a basic type.
    Duration valueDuration = 50;                                      // The value of the Output parameter as a basic type.
    Quantity valueSimpleQuantity = 51;                                // The value of the Output parameter as a basic type.
    Distance valueDistance = 52;                                      // The value of the Output parameter as a basic type.
    Count valueCount = 53;                                            // The value of the Output parameter as a basic type.
    Money valueMoney = 54;                                            // The value of the Output parameter as a basic type.
    Age valueAge = 55;                                                // The value of the Output parameter as a basic type.
    Range valueRange = 56;                                            // The value of the Output parameter as a basic type.
    Period valuePeriod = 57;                                          // The value of the Output parameter as a basic type.
    Ratio valueRatio = 58;                                            // The value of the Output parameter as a basic type.
    Reference valueReference = 59;                                    // The value of the Output parameter as a basic type.
    SampledData valueSampledData = 60;                                // The value of the Output parameter as a basic type.
    Signature valueSignature = 61;                                    // The value of the Output parameter as a basic type.
    HumanName valueHumanName = 62;                                    // The value of the Output parameter as a basic type.
    Address valueAddress = 63;                                        // The value of the Output parameter as a basic type.
    ContactPoint valueContactPoint = 64;                              // The value of the Output parameter as a basic type.
    Timing valueTiming = 65;                                          // The value of the Output parameter as a basic type.
    Meta valueMeta = 66;                                              // The value of the Output parameter as a basic type.
    ElementDefinition valueElementDefinition = 67;                    // The value of the Output parameter as a basic type.
    ContactDetail valueContactDetail = 68;                            // The value of the Output parameter as a basic type.
    Contributor valueContributor = 69;                                // The value of the Output parameter as a basic type.
    Dosage valueDosage = 70;                                          // The value of the Output parameter as a basic type.
    RelatedArtifact valueRelatedArtifact = 71;                        // The value of the Output parameter as a basic type.
    UsageContext valueUsageContext = 72;                              // The value of the Output parameter as a basic type.
    DataRequirement valueDataRequirement = 73;                        // The value of the Output parameter as a basic type.
    ParameterDefinition valueParameterDefinition = 74;                // The value of the Output parameter as a basic type.
    TriggerDefinition valueTriggerDefinition = 75;                    // The value of the Output parameter as a basic type.
}

enum TestReport_status {
    TestReport_status_stopped = 0;
    TestReport_status_waiting = 1;
    TestReport_status_completed = 2;
    TestReport_status_entered_in_error = 3;
    TestReport_status_in_progress = 4;
}

enum TestReport_result {
    TestReport_result_fail = 0;
    TestReport_result_pass = 1;
    TestReport_result_pending = 2;
}


/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    Identifier identifier = 12;                                       // Identifier for the TestScript assigned for external purposes outside the context of FHIR.
    string name = 13;                                                 // A free text natural language name identifying the executed TestScript.
    Element nameExtensionElement = 14;                                // Extensions for name
    TestReport_status status = 15;                                    // The current state of this test report.
    Element statusExtensionElement = 16;                              // Extensions for status
    Reference testScript = 17;                                        // Ideally this is an absolute URL that is used to identify the version-specific TestScript that was executed, matching the `TestScript.url`.
    TestReport_result result = 18;                                    // The overall result from the execution of the TestScript.
    Element resultExtensionElement = 19;                              // Extensions for result
    double score = 20;                                                // The final score (percentage of tests passed) resulting from the execution of the TestScript.
    Element scoreExtensionElement = 21;                               // Extensions for score
    string tester = 22;                                               // Name of the tester producing this report (Organization or individual).
    Element testerExtensionElement = 23;                              // Extensions for tester
    string issued = 24;                                               // When the TestScript was executed and this TestReport was generated.
    Element issuedExtensionElement = 25;                              // Extensions for issued
    repeated TestReport_Participant participant = 26;                 // A participant in the test execution, either the execution engine, a client, or a server.
    TestReport_Setup setup = 27;                                      // The results of the series of required setup operations before the tests were executed.
    repeated TestReport_Test test = 28;                               // A test executed from the test script.
    TestReport_Teardown teardown = 29;                                // The results of the series of operations required to clean up after the all the tests were executed (successfully or otherwise).
}

enum TestReport_Participant_type {
    TestReport_Participant_type_server = 0;
    TestReport_Participant_type_client = 1;
    TestReport_Participant_type_test_engine = 2;
}


/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Participant {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Participant_type type = 5;                             // The type of participant.
    Element typeExtensionElement = 6;                                 // Extensions for type
    string uri = 7;                                                   // The uri of the participant. An absolute URL is preferred.
    Element uriExtensionElement = 8;                                  // Extensions for uri
    string display = 9;                                               // The display name of the participant.
    Element displayExtensionElement = 10;                             // Extensions for display
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Setup {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated TestReport_Action action = 5;                            // Action would contain either an operation or an assertion.
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Action {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Operation operation = 5;                               // The operation performed.
    TestReport_Assert assert = 6;                                     // The results of the assertion performed on the previous operations.
}

enum TestReport_Operation_result {
    TestReport_Operation_result_fail = 0;
    TestReport_Operation_result_pass = 1;
    TestReport_Operation_result_warning = 2;
    TestReport_Operation_result_skip = 3;
    TestReport_Operation_result_error = 4;
}


/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Operation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Operation_result result = 5;                           // The result of this operation.
    Element resultExtensionElement = 6;                               // Extensions for result
    string message = 7;                                               // An explanatory message associated with the result.
    Element messageExtensionElement = 8;                              // Extensions for message
    string detail = 9;                                                // A link to further details on the result.
    Element detailExtensionElement = 10;                              // Extensions for detail
}

enum TestReport_Assert_result {
    TestReport_Assert_result_fail = 0;
    TestReport_Assert_result_pass = 1;
    TestReport_Assert_result_warning = 2;
    TestReport_Assert_result_skip = 3;
    TestReport_Assert_result_error = 4;
}


/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Assert {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Assert_result result = 5;                              // The result of this assertion.
    Element resultExtensionElement = 6;                               // Extensions for result
    string message = 7;                                               // An explanatory message associated with the result.
    Element messageExtensionElement = 8;                              // Extensions for message
    string detail = 9;                                                // A link to further details on the result.
    Element detailExtensionElement = 10;                              // Extensions for detail
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Test {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of this test used for tracking/logging purposes by test engines.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string description = 7;                                           // A short description of the test used by test engines for tracking and reporting purposes.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    repeated TestReport_Action1 action = 9;                           // Action would contain either an operation or an assertion.
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Action1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Operation operation = 5;                               // An operation would involve a REST request to a server.
    TestReport_Assert assert = 6;                                     // The results of the assertion performed on the previous operations.
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Teardown {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated TestReport_Action2 action = 5;                           // The teardown action will only contain an operation.
}

/*
 * A summary of information based on the results of executing a TestScript.
 */
message TestReport_Action2 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestReport_Operation operation = 5;                               // An operation would involve a REST request to a server.
}

enum TestScript_status {
    TestScript_status_draft = 0;
    TestScript_status_active = 1;
    TestScript_status_retired = 2;
    TestScript_status_unknown = 3;
}


/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this test script when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this test script is (or will be) published. The URL SHOULD include the major version of the test script. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    Identifier identifier = 14;                                       // A formal identifier that is used to identify this test script when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the test script when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the test script author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the test script. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the test script.
    Element titleExtensionElement = 20;                               // Extensions for title
    TestScript_status status = 21;                                    // The status of this test script. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this test script is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the test script was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the test script changes.
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the test script.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the test script from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate test script instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the test script is intended to be used.
    string purpose = 34;                                              // Explaination of why this test script is needed and why it has been designed as it has.
    Element purposeExtensionElement = 35;                             // Extensions for purpose
    string copyright = 36;                                            // A copyright statement relating to the test script and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the test script.
    Element copyrightExtensionElement = 37;                           // Extensions for copyright
    repeated TestScript_Origin origin = 38;                           // An abstract server used in operations within this test script in the origin element.
    repeated TestScript_Destination destination = 39;                 // An abstract server used in operations within this test script in the destination element.
    TestScript_Metadata metadata = 40;                                // The required capability must exist and are assumed to function correctly on the FHIR server being tested.
    repeated TestScript_Fixture fixture = 41;                         // Fixture in the test script - by reference (uri). All fixtures are required for the test script to execute.
    repeated Reference profile = 42;                                  // Reference to the profile to be used for validation.
    repeated TestScript_Variable variable = 43;                       // Variable is set based either on element value in response body or on header field value in the response headers.
    repeated TestScript_Rule rule = 44;                               // Assert rule to be used in one or more asserts within the test script.
    repeated TestScript_Ruleset ruleset = 45;                         // Contains one or more rules.  Offers a way to group rules so assertions could reference the group of rules and have them all applied.
    TestScript_Setup setup = 46;                                      // A series of required setup operations before tests are executed.
    repeated TestScript_Test test = 47;                               // A test in this script.
    TestScript_Teardown teardown = 48;                                // A series of operations required to clean up after the all the tests are executed (successfully or otherwise).
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Origin {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 index = 5;                                                  // Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.
    Element indexExtensionElement = 6;                                // Extensions for index
    Coding profile = 7;                                               // The type of origin profile the test system supports.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Destination {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    int64 index = 5;                                                  // Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.
    Element indexExtensionElement = 6;                                // Extensions for index
    Coding profile = 7;                                               // The type of destination profile the test system supports.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Metadata {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated TestScript_Link link = 5;                                // A link to the FHIR specification that this test is covering.
    repeated TestScript_Capability capability = 6;                    // Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Link {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string url = 5;                                                   // URL to a particular requirement or feature within the FHIR specification.
    Element urlExtensionElement = 6;                                  // Extensions for url
    string description = 7;                                           // Short description of the link.
    Element descriptionExtensionElement = 8;                          // Extensions for description
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Capability {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool required = 5;                                                // Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.
    Element requiredExtensionElement = 6;                             // Extensions for required
    bool validated = 7;                                               // Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.
    Element validatedExtensionElement = 8;                            // Extensions for validated
    string description = 9;                                           // Description of the capabilities that this test script is requiring the server to support.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    repeated int64 origin = 11;                                       // Which origin server these requirements apply to.
    repeated Element originExtensionElement = 12;                     // Extensions for origin
    int64 destination = 13;                                           // Which server these requirements apply to.
    Element destinationExtensionElement = 14;                         // Extensions for destination
    repeated string link = 15;                                        // Links to the FHIR specification that describes this interaction and the resources involved in more detail.
    repeated Element linkExtensionElement = 16;                       // Extensions for link
    Reference capabilities = 17;                                      // Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Fixture {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    bool autocreate = 5;                                              // Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.
    Element autocreateExtensionElement = 6;                           // Extensions for autocreate
    bool autodelete = 7;                                              // Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.
    Element autodeleteExtensionElement = 8;                           // Extensions for autodelete
    Reference resource = 9;                                           // Reference to the resource (containing the contents of the resource needed for operations).
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Variable {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Descriptive name for this variable.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string defaultValue = 7;                                          // A default, hard-coded, or user-defined value for this variable.
    Element defaultValueExtensionElement = 8;                         // Extensions for defaultValue
    string description = 9;                                           // A free text natural language description of the variable and its purpose.
    Element descriptionExtensionElement = 10;                         // Extensions for description
    string expression = 11;                                           // The fluentpath expression to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.
    Element expressionExtensionElement = 12;                          // Extensions for expression
    string headerField = 13;                                          // Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.
    Element headerFieldExtensionElement = 14;                         // Extensions for headerField
    string hint = 15;                                                 // Displayable text string with hint help information to the user when entering a default value.
    Element hintExtensionElement = 16;                                // Extensions for hint
    string path = 17;                                                 // XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.
    Element pathExtensionElement = 18;                                // Extensions for path
    string sourceId = 19;                                             // Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.
    Element sourceIdExtensionElement = 20;                            // Extensions for sourceId
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Rule {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference resource = 5;                                           // Reference to the resource (containing the contents of the rule needed for assertions).
    repeated TestScript_Param param = 6;                              // Each rule template can take one or more parameters for rule evaluation.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Param {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Descriptive name for this parameter that matches the external assert rule parameter name.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string value = 7;                                                 // The explicit or dynamic value for the parameter that will be passed on to the external rule template.
    Element valueExtensionElement = 8;                                // Extensions for value
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Ruleset {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Reference resource = 5;                                           // Reference to the resource (containing the contents of the ruleset needed for assertions).
    repeated TestScript_Rule1 rule = 6;                               // The referenced rule within the external ruleset template.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Rule1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string ruleId = 5;                                                // Id of the referenced rule within the external ruleset template.
    Element ruleIdExtensionElement = 6;                               // Extensions for ruleId
    repeated TestScript_Param1 param = 7;                             // Each rule template can take one or more parameters for rule evaluation.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Param1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Descriptive name for this parameter that matches the external assert ruleset rule parameter name.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string value = 7;                                                 // The value for the parameter that will be passed on to the external ruleset rule template.
    Element valueExtensionElement = 8;                                // Extensions for value
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Setup {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated TestScript_Action action = 5;                            // Action would contain either an operation or an assertion.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Action {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestScript_Operation operation = 5;                               // The operation to perform.
    TestScript_Assert assert = 6;                                     // Evaluates the results of previous operations to determine if the server under test behaves appropriately.
}

enum TestScript_Operation_accept {
    TestScript_Operation_accept_xml = 0;
    TestScript_Operation_accept_json = 1;
    TestScript_Operation_accept_none = 2;
    TestScript_Operation_accept_ttl = 3;
}

enum TestScript_Operation_contentType {
    TestScript_Operation_contentType_xml = 0;
    TestScript_Operation_contentType_json = 1;
    TestScript_Operation_contentType_none = 2;
    TestScript_Operation_contentType_ttl = 3;
}


/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Operation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    Coding type = 5;                                                  // Server interaction or operation type.
    string resource = 6;                                              // The type of the resource.  See http://build.fhir.org/resourcelist.html.
    Element resourceExtensionElement = 7;                             // Extensions for resource
    string label = 8;                                                 // The label would be used for tracking/logging purposes by test engines.
    Element labelExtensionElement = 9;                                // Extensions for label
    string description = 10;                                          // The description would be used by test engines for tracking and reporting purposes.
    Element descriptionExtensionElement = 11;                         // Extensions for description
    TestScript_Operation_accept accept = 12;                          // The content-type or mime-type to use for RESTful operation in the 'Accept' header.
    Element acceptExtensionElement = 13;                              // Extensions for accept
    TestScript_Operation_contentType contentType = 14;                // The content-type or mime-type to use for RESTful operation in the 'Content-Type' header.
    Element contentTypeExtensionElement = 15;                         // Extensions for contentType
    int64 destination = 16;                                           // The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.
    Element destinationExtensionElement = 17;                         // Extensions for destination
    bool encodeRequestUrl = 18;                                       // Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.
    Element encodeRequestUrlExtensionElement = 19;                    // Extensions for encodeRequestUrl
    int64 origin = 20;                                                // The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.
    Element originExtensionElement = 21;                              // Extensions for origin
    string params = 22;                                               // Path plus parameters after [type].  Used to set parts of the request URL explicitly.
    Element paramsExtensionElement = 23;                              // Extensions for params
    repeated TestScript_RequestHeader requestHeader = 24;             // Header elements would be used to set HTTP headers.
    string requestId = 25;                                            // The fixture id (maybe new) to map to the request.
    Element requestIdExtensionElement = 26;                           // Extensions for requestId
    string responseId = 27;                                           // The fixture id (maybe new) to map to the response.
    Element responseIdExtensionElement = 28;                          // Extensions for responseId
    string sourceId = 29;                                             // The id of the fixture used as the body of a PUT or POST request.
    Element sourceIdExtensionElement = 30;                            // Extensions for sourceId
    string targetId = 31;                                             // Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.
    Element targetIdExtensionElement = 32;                            // Extensions for targetId
    string url = 33;                                                  // Complete request URL.
    Element urlExtensionElement = 34;                                 // Extensions for url
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_RequestHeader {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string field = 5;                                                 // The HTTP header field e.g. "Accept".
    Element fieldExtensionElement = 6;                                // Extensions for field
    string value = 7;                                                 // The value of the header e.g. "application/fhir+xml".
    Element valueExtensionElement = 8;                                // Extensions for value
}

enum TestScript_Assert_direction {
    TestScript_Assert_direction_request = 0;
    TestScript_Assert_direction_response = 1;
}

enum TestScript_Assert_contentType {
    TestScript_Assert_contentType_xml = 0;
    TestScript_Assert_contentType_json = 1;
    TestScript_Assert_contentType_none = 2;
    TestScript_Assert_contentType_ttl = 3;
}

enum TestScript_Assert_operator {
    TestScript_Assert_operator_contains = 0;
    TestScript_Assert_operator_eval = 1;
    TestScript_Assert_operator_IN = 2;
    TestScript_Assert_operator_notContains = 3;
    TestScript_Assert_operator_equals = 4;
    TestScript_Assert_operator_lessThan = 5;
    TestScript_Assert_operator_notEquals = 6;
    TestScript_Assert_operator_notIn = 7;
    TestScript_Assert_operator_notEmpty = 8;
    TestScript_Assert_operator_greaterThan = 9;
    TestScript_Assert_operator_empty = 10;
}

enum TestScript_Assert_requestMethod {
    TestScript_Assert_requestMethod_patch = 0;
    TestScript_Assert_requestMethod_post = 1;
    TestScript_Assert_requestMethod_get = 2;
    TestScript_Assert_requestMethod_options = 3;
    TestScript_Assert_requestMethod_delete = 4;
    TestScript_Assert_requestMethod_put = 5;
}

enum TestScript_Assert_response {
    TestScript_Assert_response_okay = 0;
    TestScript_Assert_response_noContent = 1;
    TestScript_Assert_response_bad = 2;
    TestScript_Assert_response_notModified = 3;
    TestScript_Assert_response_created = 4;
    TestScript_Assert_response_forbidden = 5;
    TestScript_Assert_response_methodNotAllowed = 6;
    TestScript_Assert_response_notFound = 7;
    TestScript_Assert_response_preconditionFailed = 8;
    TestScript_Assert_response_unprocessable = 9;
    TestScript_Assert_response_conflict = 10;
    TestScript_Assert_response_gone = 11;
}


/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Assert {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string label = 5;                                                 // The label would be used for tracking/logging purposes by test engines.
    Element labelExtensionElement = 6;                                // Extensions for label
    string description = 7;                                           // The description would be used by test engines for tracking and reporting purposes.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    TestScript_Assert_direction direction = 9;                        // The direction to use for the assertion.
    Element directionExtensionElement = 10;                           // Extensions for direction
    string compareToSourceId = 11;                                    // Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.
    Element compareToSourceIdExtensionElement = 12;                   // Extensions for compareToSourceId
    string compareToSourceExpression = 13;                            // The fluentpath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
    Element compareToSourceExpressionExtensionElement = 14;           // Extensions for compareToSourceExpression
    string compareToSourcePath = 15;                                  // XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
    Element compareToSourcePathExtensionElement = 16;                 // Extensions for compareToSourcePath
    TestScript_Assert_contentType contentType = 17;                   // The content-type or mime-type to use for RESTful operation in the 'Content-Type' header.
    Element contentTypeExtensionElement = 18;                         // Extensions for contentType
    string expression = 19;                                           // The fluentpath expression to be evaluated against the request or response message contents - HTTP headers and payload.
    Element expressionExtensionElement = 20;                          // Extensions for expression
    string headerField = 21;                                          // The HTTP header field name e.g. 'Location'.
    Element headerFieldExtensionElement = 22;                         // Extensions for headerField
    string minimumId = 23;                                            // The ID of a fixture.  Asserts that the response contains at a minimum the fixture specified by minimumId.
    Element minimumIdExtensionElement = 24;                           // Extensions for minimumId
    bool navigationLinks = 25;                                        // Whether or not the test execution performs validation on the bundle navigation links.
    Element navigationLinksExtensionElement = 26;                     // Extensions for navigationLinks
    TestScript_Assert_operator operator = 27;                         // The operator type defines the conditional behavior of the assert. If not defined, the default is equals.
    Element operatorExtensionElement = 28;                            // Extensions for operator
    string path = 29;                                                 // The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.
    Element pathExtensionElement = 30;                                // Extensions for path
    TestScript_Assert_requestMethod requestMethod = 31;               // The request method or HTTP operation code to compare against that used by the client system under test.
    Element requestMethodExtensionElement = 32;                       // Extensions for requestMethod
    string requestURL = 33;                                           // The value to use in a comparison against the request URL path string.
    Element requestURLExtensionElement = 34;                          // Extensions for requestURL
    string resource = 35;                                             // The type of the resource.  See http://build.fhir.org/resourcelist.html.
    Element resourceExtensionElement = 36;                            // Extensions for resource
    TestScript_Assert_response response = 37;                         // okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable.
    Element responseExtensionElement = 38;                            // Extensions for response
    string responseCode = 39;                                         // The value of the HTTP response code to be tested.
    Element responseCodeExtensionElement = 40;                        // Extensions for responseCode
    TestScript_Rule2 rule = 41;                                       // The TestScript.rule this assert will evaluate.
    TestScript_Ruleset1 ruleset = 42;                                 // The TestScript.ruleset this assert will evaluate.
    string sourceId = 43;                                             // Fixture to evaluate the XPath/JSONPath expression or the headerField  against.
    Element sourceIdExtensionElement = 44;                            // Extensions for sourceId
    string validateProfileId = 45;                                    // The ID of the Profile to validate against.
    Element validateProfileIdExtensionElement = 46;                   // Extensions for validateProfileId
    string value = 47;                                                // The value to compare to.
    Element valueExtensionElement = 48;                               // Extensions for value
    bool warningOnly = 49;                                            // Whether or not the test execution will produce a warning only on error for this assert.
    Element warningOnlyExtensionElement = 50;                         // Extensions for warningOnly
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Rule2 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string ruleId = 5;                                                // The TestScript.rule id value this assert will evaluate.
    Element ruleIdExtensionElement = 6;                               // Extensions for ruleId
    repeated TestScript_Param2 param = 7;                             // Each rule template can take one or more parameters for rule evaluation.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Param2 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Descriptive name for this parameter that matches the external assert rule parameter name.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string value = 7;                                                 // The value for the parameter that will be passed on to the external rule template.
    Element valueExtensionElement = 8;                                // Extensions for value
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Ruleset1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string rulesetId = 5;                                             // The TestScript.ruleset id value this assert will evaluate.
    Element rulesetIdExtensionElement = 6;                            // Extensions for rulesetId
    repeated TestScript_Rule3 rule = 7;                               // The referenced rule within the external ruleset template.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Rule3 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string ruleId = 5;                                                // Id of the referenced rule within the external ruleset template.
    Element ruleIdExtensionElement = 6;                               // Extensions for ruleId
    repeated TestScript_Param3 param = 7;                             // Each rule template can take one or more parameters for rule evaluation.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Param3 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // Descriptive name for this parameter that matches the external assert ruleset rule parameter name.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string value = 7;                                                 // The value for the parameter that will be passed on to the external ruleset rule template.
    Element valueExtensionElement = 8;                                // Extensions for value
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Test {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of this test used for tracking/logging purposes by test engines.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string description = 7;                                           // A short description of the test used by test engines for tracking and reporting purposes.
    Element descriptionExtensionElement = 8;                          // Extensions for description
    repeated TestScript_Action1 action = 9;                           // Action would contain either an operation or an assertion.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Action1 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestScript_Operation operation = 5;                               // An operation would involve a REST request to a server.
    TestScript_Assert assert = 6;                                     // Evaluates the results of previous operations to determine if the server under test behaves appropriately.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Teardown {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    repeated TestScript_Action2 action = 5;                           // The teardown action will only contain an operation.
}

/*
 * A structured set of tests against a FHIR server implementation to determine compliance against the FHIR specification.
 */
message TestScript_Action2 {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    TestScript_Operation operation = 5;                               // An operation would involve a REST request to a server.
}

enum ValueSet_status {
    ValueSet_status_draft = 0;
    ValueSet_status_active = 1;
    ValueSet_status_retired = 2;
    ValueSet_status_unknown = 3;
}


/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    string url = 12;                                                  // An absolute URI that is used to identify this value set when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this value set is (or will be) published. The URL SHOULD include the major version of the value set. For more information see [Technical and Business Versions](resource.html#versions).
    Element urlExtensionElement = 13;                                 // Extensions for url
    repeated Identifier identifier = 14;                              // A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.
    string version = 15;                                              // The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
    Element versionExtensionElement = 16;                             // Extensions for version
    string name = 17;                                                 // A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.
    Element nameExtensionElement = 18;                                // Extensions for name
    string title = 19;                                                // A short, descriptive, user-friendly title for the value set.
    Element titleExtensionElement = 20;                               // Extensions for title
    ValueSet_status status = 21;                                      // The status of this value set. Enables tracking the life-cycle of the content.
    Element statusExtensionElement = 22;                              // Extensions for status
    bool experimental = 23;                                           // A boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
    Element experimentalExtensionElement = 24;                        // Extensions for experimental
    string date = 25;                                                 // The date  (and optionally time) when the value set was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the value set changes. (e.g. the 'content logical definition').
    Element dateExtensionElement = 26;                                // Extensions for date
    string publisher = 27;                                            // The name of the individual or organization that published the value set.
    Element publisherExtensionElement = 28;                           // Extensions for publisher
    repeated ContactDetail contact = 29;                              // Contact details to assist a user in finding and communicating with the publisher.
    string description = 30;                                          // A free text natural language description of the value set from a consumer's perspective.
    Element descriptionExtensionElement = 31;                         // Extensions for description
    repeated UsageContext useContext = 32;                            // The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate value set instances.
    repeated CodeableConcept jurisdiction = 33;                       // A legal or geographic region in which the value set is intended to be used.
    bool immutable = 34;                                              // If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
    Element immutableExtensionElement = 35;                           // Extensions for immutable
    string purpose = 36;                                              // Explaination of why this value set is needed and why it has been designed as it has.
    Element purposeExtensionElement = 37;                             // Extensions for purpose
    string copyright = 38;                                            // A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.
    Element copyrightExtensionElement = 39;                           // Extensions for copyright
    bool extensible = 40;                                             // Whether this is intended to be used with an extensible binding or not.
    Element extensibleExtensionElement = 41;                          // Extensions for extensible
    ValueSet_Compose compose = 42;                                    // A set of criteria that define the content logical definition of the value set by including or excluding codes from outside this value set. This I also known as the "Content Logical Definition" (CLD).
    ValueSet_Expansion expansion = 43;                                // A value set can also be "expanded", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Compose {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string lockedDate = 5;                                            // If a locked date is defined, then the Content Logical Definition must be evaluated using the current version as of the locked date for referenced code system(s) and value set instances where ValueSet.compose.include.version is not defined.
    Element lockedDateExtensionElement = 6;                           // Extensions for lockedDate
    bool inactive = 7;                                                // Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable ExpansionProfile (but generally, inactive codes would be expected to be included).
    Element inactiveExtensionElement = 8;                             // Extensions for inactive
    repeated ValueSet_Include include = 9;                            // Include one or more codes from a code system or other value set(s).
    repeated ValueSet_Include exclude = 10;                           // Exclude one or more codes from the value set based on code system filters and/or other value sets.
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Include {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string system = 5;                                                // An absolute URI which is the code system from which the selected codes come from.
    Element systemExtensionElement = 6;                               // Extensions for system
    string version = 7;                                               // The version of the code system that the codes are selected from.
    Element versionExtensionElement = 8;                              // Extensions for version
    repeated ValueSet_Concept concept = 9;                            // Specifies a concept to be included or excluded.
    repeated ValueSet_Filter filter = 10;                             // Select concepts by specify a matching criteria based on the properties (including relationships) defined by the system. If multiple filters are specified, they SHALL all be true.
    repeated string valueSet = 11;                                    // Selects concepts found in this value set. This is an absolute URI that is a reference to ValueSet.url.
    repeated Element valueSetExtensionElement = 12;                   // Extensions for valueSet
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Concept {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string code = 5;                                                  // Specifies a code for the concept to be included or excluded.
    Element codeExtensionElement = 6;                                 // Extensions for code
    string display = 7;                                               // The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
    Element displayExtensionElement = 8;                              // Extensions for display
    repeated ValueSet_Designation designation = 9;                    // Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Designation {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string language = 5;                                              // The language this designation is defined for.
    Element languageExtensionElement = 6;                             // Extensions for language
    Coding use = 7;                                                   // A code that details how this designation would be used.
    string value = 8;                                                 // The text value for this designation.
    Element valueExtensionElement = 9;                                // Extensions for value
}

enum ValueSet_Filter_op {
    ValueSet_Filter_op_is_not_a = 0;
    ValueSet_Filter_op_regex = 1;
    ValueSet_Filter_op_IN = 2;
    ValueSet_Filter_op_descendent_of = 3;
    ValueSet_Filter_op_not_in = 4;
    ValueSet_Filter_op_exists = 5;
    ValueSet_Filter_op_generalizes = 6;
    ValueSet_Filter_op_Equals = 7;
    ValueSet_Filter_op_is_a = 8;
}


/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Filter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string property = 5;                                              // A code that identifies a property defined in the code system.
    Element propertyExtensionElement = 6;                             // Extensions for property
    ValueSet_Filter_op op = 7;                                        // The kind of operation to perform as a part of the filter criteria.
    Element opExtensionElement = 8;                                   // Extensions for op
    string value = 9;                                                 // The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.
    Element valueExtensionElement = 10;                               // Extensions for value
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Expansion {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string identifier = 5;                                            // An identifier that uniquely identifies this expansion of the valueset. Systems may re-use the same identifier as long as the expansion and the definition remain the same, but are not required to do so.
    Element identifierExtensionElement = 6;                           // Extensions for identifier
    string timestamp = 7;                                             // The time at which the expansion was produced by the expanding system.
    Element timestampExtensionElement = 8;                            // Extensions for timestamp
    int64 total = 9;                                                  // The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.
    Element totalExtensionElement = 10;                               // Extensions for total
    int64 offset = 11;                                                // If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL not be present.
    Element offsetExtensionElement = 12;                              // Extensions for offset
    repeated ValueSet_Parameter parameter = 13;                       // A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.
    repeated ValueSet_Contains contains = 14;                         // The codes that are contained in the value set expansion.
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Parameter {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string name = 5;                                                  // The name of the parameter.
    Element nameExtensionElement = 6;                                 // Extensions for name
    string valueString = 7;                                           // The value of the parameter.
    Element valueStringExtensionElement = 8;                          // Extensions for valueString
    bool valueBoolean = 9;                                            // The value of the parameter.
    Element valueBooleanExtensionElement = 10;                        // Extensions for valueBoolean
    int64 valueInteger = 11;                                          // The value of the parameter.
    Element valueIntegerExtensionElement = 12;                        // Extensions for valueInteger
    double valueDecimal = 13;                                         // The value of the parameter.
    Element valueDecimalExtensionElement = 14;                        // Extensions for valueDecimal
    string valueUri = 15;                                             // The value of the parameter.
    Element valueUriExtensionElement = 16;                            // Extensions for valueUri
    string valueCode = 17;                                            // The value of the parameter.
    Element valueCodeExtensionElement = 18;                           // Extensions for valueCode
}

/*
 * A value set specifies a set of codes drawn from one or more code systems.
 */
message ValueSet_Contains {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    string system = 5;                                                // An absolute URI which is the code system in which the code for this item in the expansion is defined.
    Element systemExtensionElement = 6;                               // Extensions for system
    bool abstract = 7;                                                // If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
    Element abstractExtensionElement = 8;                             // Extensions for abstract
    bool inactive = 9;                                                // If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data.
    Element inactiveExtensionElement = 10;                            // Extensions for inactive
    string version = 11;                                              // The version of this code system that defined this code and/or display. This should only be used with code systems that do not enforce concept permanence.
    Element versionExtensionElement = 12;                             // Extensions for version
    string code = 13;                                                 // The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.
    Element codeExtensionElement = 14;                                // Extensions for code
    string display = 15;                                              // The recommended display for this item in the expansion.
    Element displayExtensionElement = 16;                             // Extensions for display
    repeated ValueSet_Designation designation = 17;                   // Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.
    repeated ValueSet_Contains contains = 18;                         // Other codes and entries contained under this entry in the hierarchy.
}

/*
 * An authorization for the supply of glasses and/or contact lenses to a patient.
 */
message VisionPrescription {
    // begin DomainResource
    // begin Resource
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    Meta meta = 4;                                                    // The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource.
    string implicitRules = 5;                                         // A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content.
    Element implicitRulesExtensionElement = 6;                        // Extensions for implicitRules
    string language = 7;                                              // The base language in which the resource is written.
    Element languageExtensionElement = 8;                             // Extensions for language
    // end Resource

    Narrative text = 9;                                               // A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
    repeated ResourceList contained = 10;                             // These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.
    repeated Extension modifierExtension = 11;                        // May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end DomainResource

    repeated Identifier identifier = 12;                              // Business identifier which may be used by other parties to reference or identify the prescription.
    string status = 13;                                               // The status of the resource instance.
    Element statusExtensionElement = 14;                              // Extensions for status
    Reference patient = 15;                                           // A link to a resource representing the person to whom the vision products will be supplied.
    Reference encounter = 16;                                         // A link to a resource that identifies the particular occurrence of contact between patient and health care provider.
    string dateWritten = 17;                                          // The date (and perhaps time) when the prescription was written.
    Element dateWrittenExtensionElement = 18;                         // Extensions for dateWritten
    Reference prescriber = 19;                                        // The healthcare professional responsible for authorizing the prescription.
    CodeableConcept reasonCodeableConcept = 20;                       // Can be the reason or the indication for writing the prescription.
    Reference reasonReference = 21;                                   // Can be the reason or the indication for writing the prescription.
    repeated VisionPrescription_Dispense dispense = 22;               // Deals with details of the dispense part of the supply specification.
}

enum VisionPrescription_Dispense_eye {
    VisionPrescription_Dispense_eye_left = 0;
    VisionPrescription_Dispense_eye_right = 1;
}

enum VisionPrescription_Dispense_base {
    VisionPrescription_Dispense_base_IN = 0;
    VisionPrescription_Dispense_base_up = 1;
    VisionPrescription_Dispense_base_down = 2;
    VisionPrescription_Dispense_base_out = 3;
}


/*
 * An authorization for the supply of glasses and/or contact lenses to a patient.
 */
message VisionPrescription_Dispense {
    // begin BackboneElement
    // begin Element
    string id = 1;                                                    // unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
    Element idExtensionElement = 2;                                   // Extensions for id
    repeated Extension extension = 3;                                 // May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
    // end Element

    repeated Extension modifierExtension = 4;                         // May be used to represent additional information that is not part of the basic definition of the element, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.
    // end BackboneElement

    CodeableConcept product = 5;                                      // Identifies the type of vision correction product which is required for the patient.
    VisionPrescription_Dispense_eye eye = 6;                          // The eye for which the lens applies.
    Element eyeExtensionElement = 7;                                  // Extensions for eye
    double sphere = 8;                                                // Lens power measured in diopters (0.25 units).
    Element sphereExtensionElement = 9;                               // Extensions for sphere
    double cylinder = 10;                                             // Power adjustment for astigmatism measured in diopters (0.25 units).
    Element cylinderExtensionElement = 11;                            // Extensions for cylinder
    int64 axis = 12;                                                  // Adjustment for astigmatism measured in integer degrees.
    Element axisExtensionElement = 13;                                // Extensions for axis
    double prism = 14;                                                // Amount of prism to compensate for eye alignment in fractional units.
    Element prismExtensionElement = 15;                               // Extensions for prism
    VisionPrescription_Dispense_base base = 16;                       // The relative base, or reference lens edge, for the prism.
    Element baseExtensionElement = 17;                                // Extensions for base
    double add = 18;                                                  // Power adjustment for multifocal lenses measured in diopters (0.25 units).
    Element addExtensionElement = 19;                                 // Extensions for add
    double power = 20;                                                // Contact lens power measured in diopters (0.25 units).
    Element powerExtensionElement = 21;                               // Extensions for power
    double backCurve = 22;                                            // Back curvature measured in millimeters.
    Element backCurveExtensionElement = 23;                           // Extensions for backCurve
    double diameter = 24;                                             // Contact lens diameter measured in millimeters.
    Element diameterExtensionElement = 25;                            // Extensions for diameter
    Quantity duration = 26;                                           // The recommended maximum wear period for the lens.
    string color = 27;                                                // Special color or pattern.
    Element colorExtensionElement = 28;                               // Extensions for color
    string brand = 29;                                                // Brand recommendations or restrictions.
    Element brandExtensionElement = 30;                               // Extensions for brand
    repeated Annotation note = 31;                                    // Notes for special requirements such as coatings and lens materials.
}

/*
 * 
 */
message ResourceList {
    Account account = 1;
    ActivityDefinition activityDefinition = 2;
    AdverseEvent adverseEvent = 3;
    AllergyIntolerance allergyIntolerance = 4;
    Appointment appointment = 5;
    AppointmentResponse appointmentResponse = 6;
    AuditEvent auditEvent = 7;
    Basic basic = 8;
    Binary binary = 9;
    BodySite bodySite = 10;
    Bundle bundle = 11;
    CapabilityStatement capabilityStatement = 12;
    CarePlan carePlan = 13;
    CareTeam careTeam = 14;
    ChargeItem chargeItem = 15;
    Claim claim = 16;
    ClaimResponse claimResponse = 17;
    ClinicalImpression clinicalImpression = 18;
    CodeSystem codeSystem = 19;
    Communication communication = 20;
    CommunicationRequest communicationRequest = 21;
    CompartmentDefinition compartmentDefinition = 22;
    Composition composition = 23;
    ConceptMap conceptMap = 24;
    Condition condition = 25;
    Consent consent = 26;
    Contract contract = 27;
    Coverage coverage = 28;
    DataElement dataElement = 29;
    DetectedIssue detectedIssue = 30;
    Device device = 31;
    DeviceComponent deviceComponent = 32;
    DeviceMetric deviceMetric = 33;
    DeviceRequest deviceRequest = 34;
    DeviceUseStatement deviceUseStatement = 35;
    DiagnosticReport diagnosticReport = 36;
    DocumentManifest documentManifest = 37;
    DocumentReference documentReference = 38;
    DomainResource domainResource = 39;
    EligibilityRequest eligibilityRequest = 40;
    EligibilityResponse eligibilityResponse = 41;
    Encounter encounter = 42;
    Endpoint endpoint = 43;
    EnrollmentRequest enrollmentRequest = 44;
    EnrollmentResponse enrollmentResponse = 45;
    EpisodeOfCare episodeOfCare = 46;
    ExpansionProfile expansionProfile = 47;
    ExplanationOfBenefit explanationOfBenefit = 48;
    FamilyMemberHistory familyMemberHistory = 49;
    Flag flag = 50;
    Goal goal = 51;
    GraphDefinition graphDefinition = 52;
    Group group = 53;
    GuidanceResponse guidanceResponse = 54;
    HealthcareService healthcareService = 55;
    ImagingManifest imagingManifest = 56;
    ImagingStudy imagingStudy = 57;
    Immunization immunization = 58;
    ImmunizationRecommendation immunizationRecommendation = 59;
    ImplementationGuide implementationGuide = 60;
    Library library = 61;
    Linkage linkage = 62;
    List list = 63;
    Location location = 64;
    Measure measure = 65;
    MeasureReport measureReport = 66;
    Media media = 67;
    Medication medication = 68;
    MedicationAdministration medicationAdministration = 69;
    MedicationDispense medicationDispense = 70;
    MedicationRequest medicationRequest = 71;
    MedicationStatement medicationStatement = 72;
    MessageDefinition messageDefinition = 73;
    MessageHeader messageHeader = 74;
    NamingSystem namingSystem = 75;
    NutritionOrder nutritionOrder = 76;
    Observation observation = 77;
    OperationDefinition operationDefinition = 78;
    OperationOutcome operationOutcome = 79;
    Organization organization = 80;
    Parameters parameters = 81;
    Patient patient = 82;
    PaymentNotice paymentNotice = 83;
    PaymentReconciliation paymentReconciliation = 84;
    Person person = 85;
    PlanDefinition planDefinition = 86;
    Practitioner practitioner = 87;
    PractitionerRole practitionerRole = 88;
    Procedure procedure = 89;
    ProcedureRequest procedureRequest = 90;
    ProcessRequest processRequest = 91;
    ProcessResponse processResponse = 92;
    Provenance provenance = 93;
    Questionnaire questionnaire = 94;
    QuestionnaireResponse questionnaireResponse = 95;
    ReferralRequest referralRequest = 96;
    RelatedPerson relatedPerson = 97;
    RequestGroup requestGroup = 98;
    ResearchStudy researchStudy = 99;
    ResearchSubject researchSubject = 100;
    Resource resource = 101;
    RiskAssessment riskAssessment = 102;
    Schedule schedule = 103;
    SearchParameter searchParameter = 104;
    Sequence sequence = 105;
    ServiceDefinition serviceDefinition = 106;
    Slot slot = 107;
    Specimen specimen = 108;
    StructureDefinition structureDefinition = 109;
    StructureMap structureMap = 110;
    Subscription subscription = 111;
    Substance substance = 112;
    SupplyDelivery supplyDelivery = 113;
    SupplyRequest supplyRequest = 114;
    Task task = 115;
    TestReport testReport = 116;
    TestScript testScript = 117;
    ValueSet valueSet = 118;
    VisionPrescription visionPrescription = 119;
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy